harnery 0.36.0 → 0.37.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/commander.js +4 -0
- package/dist/commands/agents.d.ts.map +1 -1
- package/dist/commands/agents.js +87 -46
- package/dist/commands/artifacts.d.ts.map +1 -1
- package/dist/commands/artifacts.js +26 -1
- package/dist/commands/browse.d.ts.map +1 -1
- package/dist/commands/browse.js +11 -0
- package/dist/commands/diagnostics.d.ts +4 -0
- package/dist/commands/diagnostics.d.ts.map +1 -0
- package/dist/commands/diagnostics.js +229 -0
- package/dist/commands/files.d.ts +12 -0
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +54 -1
- package/dist/commands/governor.d.ts.map +1 -1
- package/dist/commands/governor.js +4 -0
- package/dist/commands/ledger-v3.d.ts.map +1 -1
- package/dist/commands/ledger-v3.js +71 -2
- package/dist/commands/qa-run.d.ts +4 -0
- package/dist/commands/qa-run.d.ts.map +1 -0
- package/dist/commands/qa-run.js +141 -0
- package/dist/commands/resources.d.ts +4 -0
- package/dist/commands/resources.d.ts.map +1 -0
- package/dist/commands/resources.js +29 -0
- package/dist/commands/supervisor.d.ts +4 -0
- package/dist/commands/supervisor.d.ts.map +1 -0
- package/dist/commands/supervisor.js +101 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +17 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +4 -0
- package/dist/core/agents/cli.js +7 -3
- package/dist/core/agents/health.d.ts +17 -0
- package/dist/core/agents/health.d.ts.map +1 -0
- package/dist/core/agents/health.js +109 -0
- package/dist/core/agents/mailbox.d.ts +92 -0
- package/dist/core/agents/mailbox.d.ts.map +1 -0
- package/dist/core/agents/mailbox.js +325 -0
- package/dist/core/agents/reconcile-coordination-v3.d.ts +44 -0
- package/dist/core/agents/reconcile-coordination-v3.d.ts.map +1 -0
- package/dist/core/agents/reconcile-coordination-v3.js +58 -0
- package/dist/core/agents/render/prompt-context.d.ts +5 -0
- package/dist/core/agents/render/prompt-context.d.ts.map +1 -1
- package/dist/core/agents/render/prompt-context.js +34 -13
- package/dist/core/agents/render/session-context.d.ts +8 -0
- package/dist/core/agents/render/session-context.d.ts.map +1 -1
- package/dist/core/agents/render/session-context.js +34 -3
- package/dist/core/agents/rules/commit-conflict.d.ts.map +1 -1
- package/dist/core/agents/rules/commit-conflict.js +50 -1
- package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
- package/dist/core/agents/rules/stop-hook.js +6 -10
- package/dist/core/agents/session-finalizer-v3.js +4 -1
- package/dist/core/artifacts/index.d.ts +26 -1
- package/dist/core/artifacts/index.d.ts.map +1 -1
- package/dist/core/artifacts/index.js +146 -6
- package/dist/core/config.d.ts +12 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +43 -0
- package/dist/core/diagnostics/advice.d.ts +9 -0
- package/dist/core/diagnostics/advice.d.ts.map +1 -0
- package/dist/core/diagnostics/advice.js +112 -0
- package/dist/core/diagnostics/bundle.d.ts +35 -0
- package/dist/core/diagnostics/bundle.d.ts.map +1 -0
- package/dist/core/diagnostics/bundle.js +874 -0
- package/dist/core/diagnostics/comparison.d.ts +5 -0
- package/dist/core/diagnostics/comparison.d.ts.map +1 -0
- package/dist/core/diagnostics/comparison.js +444 -0
- package/dist/core/diagnostics/contract.d.ts +245 -0
- package/dist/core/diagnostics/contract.d.ts.map +1 -0
- package/dist/core/diagnostics/contract.js +18 -0
- package/dist/core/diagnostics/identity.d.ts +3 -0
- package/dist/core/diagnostics/identity.d.ts.map +1 -0
- package/dist/core/diagnostics/identity.js +10 -0
- package/dist/core/diagnostics/index.d.ts +8 -0
- package/dist/core/diagnostics/index.d.ts.map +1 -0
- package/dist/core/diagnostics/index.js +7 -0
- package/dist/core/diagnostics/replay.d.ts +8 -0
- package/dist/core/diagnostics/replay.d.ts.map +1 -0
- package/dist/core/diagnostics/replay.js +213 -0
- package/dist/core/diagnostics/sanitize.d.ts +9 -0
- package/dist/core/diagnostics/sanitize.d.ts.map +1 -0
- package/dist/core/diagnostics/sanitize.js +84 -0
- package/dist/core/events/legacy-storage/compression.d.ts +13 -0
- package/dist/core/events/legacy-storage/compression.d.ts.map +1 -0
- package/dist/core/events/legacy-storage/compression.js +107 -0
- package/dist/core/events/legacy-storage/index.d.ts +1 -0
- package/dist/core/events/legacy-storage/index.d.ts.map +1 -1
- package/dist/core/events/legacy-storage/index.js +1 -0
- package/dist/core/events/v3/archive-retention.d.ts +33 -0
- package/dist/core/events/v3/archive-retention.d.ts.map +1 -0
- package/dist/core/events/v3/archive-retention.js +195 -0
- package/dist/core/events/v3/capabilities.d.ts +1 -1
- package/dist/core/events/v3/capabilities.d.ts.map +1 -1
- package/dist/core/events/v3/capabilities.js +1 -0
- package/dist/core/events/v3/index.d.ts +1 -0
- package/dist/core/events/v3/index.d.ts.map +1 -1
- package/dist/core/events/v3/index.js +1 -0
- package/dist/core/events/v3/live-routing.d.ts.map +1 -1
- package/dist/core/events/v3/live-routing.js +1 -0
- package/dist/core/events/v3/producers/hook-base.d.ts +1 -1
- package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
- package/dist/core/events/v3/producers/hook-base.js +13 -2
- package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
- package/dist/core/events/v3/producers/intake.js +1 -0
- package/dist/core/events/v3/producers/recorder.d.ts +16 -0
- package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
- package/dist/core/events/v3/producers/recorder.js +88 -1
- package/dist/core/hooks/adapter/output.d.ts +8 -0
- package/dist/core/hooks/adapter/output.d.ts.map +1 -1
- package/dist/core/hooks/adapter/output.js +11 -1
- package/dist/core/hooks/cli.js +183 -192
- package/dist/core/hooks/health.d.ts +59 -0
- package/dist/core/hooks/health.d.ts.map +1 -0
- package/dist/core/hooks/health.js +84 -0
- package/dist/core/resources/contract.d.ts +90 -0
- package/dist/core/resources/contract.d.ts.map +1 -0
- package/dist/core/resources/contract.js +2 -0
- package/dist/core/resources/index.d.ts +6 -0
- package/dist/core/resources/index.d.ts.map +1 -0
- package/dist/core/resources/index.js +5 -0
- package/dist/core/resources/sampler.d.ts +27 -0
- package/dist/core/resources/sampler.d.ts.map +1 -0
- package/dist/core/resources/sampler.js +357 -0
- package/dist/core/resources/service-status.d.ts +3 -0
- package/dist/core/resources/service-status.d.ts.map +1 -0
- package/dist/core/resources/service-status.js +48 -0
- package/dist/core/resources/service.d.ts +26 -0
- package/dist/core/resources/service.d.ts.map +1 -0
- package/dist/core/resources/service.js +292 -0
- package/dist/core/resources/storage.d.ts +13 -0
- package/dist/core/resources/storage.d.ts.map +1 -0
- package/dist/core/resources/storage.js +30 -0
- package/dist/core/storage/atomic-json.d.ts +3 -0
- package/dist/core/storage/atomic-json.d.ts.map +1 -0
- package/dist/core/storage/atomic-json.js +15 -0
- package/dist/core/storage/builtins.d.ts.map +1 -1
- package/dist/core/storage/builtins.js +45 -6
- package/dist/core/storage/logger.d.ts +2 -0
- package/dist/core/storage/logger.d.ts.map +1 -1
- package/dist/core/storage/logger.js +2 -0
- package/dist/core/storage/query.d.ts +14 -0
- package/dist/core/storage/query.d.ts.map +1 -1
- package/dist/core/storage/query.js +51 -0
- package/dist/core/supervisor/activity.d.ts +4 -0
- package/dist/core/supervisor/activity.d.ts.map +1 -0
- package/dist/core/supervisor/activity.js +141 -0
- package/dist/core/supervisor/contract.d.ts +268 -0
- package/dist/core/supervisor/contract.d.ts.map +1 -0
- package/dist/core/supervisor/contract.js +35 -0
- package/dist/core/supervisor/explanations.d.ts +4 -0
- package/dist/core/supervisor/explanations.d.ts.map +1 -0
- package/dist/core/supervisor/explanations.js +71 -0
- package/dist/core/supervisor/findings.d.ts +20 -0
- package/dist/core/supervisor/findings.d.ts.map +1 -0
- package/dist/core/supervisor/findings.js +399 -0
- package/dist/core/supervisor/history.d.ts +9 -0
- package/dist/core/supervisor/history.d.ts.map +1 -0
- package/dist/core/supervisor/history.js +46 -0
- package/dist/core/supervisor/hook-health-alerts.d.ts +14 -0
- package/dist/core/supervisor/hook-health-alerts.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health-alerts.js +70 -0
- package/dist/core/supervisor/hook-health-storage.d.ts +5 -0
- package/dist/core/supervisor/hook-health-storage.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health-storage.js +24 -0
- package/dist/core/supervisor/hook-health.d.ts +72 -0
- package/dist/core/supervisor/hook-health.d.ts.map +1 -0
- package/dist/core/supervisor/hook-health.js +203 -0
- package/dist/core/supervisor/hooks.d.ts +10 -0
- package/dist/core/supervisor/hooks.d.ts.map +1 -0
- package/dist/core/supervisor/hooks.js +28 -0
- package/dist/core/supervisor/index.d.ts +15 -0
- package/dist/core/supervisor/index.d.ts.map +1 -0
- package/dist/core/supervisor/index.js +14 -0
- package/dist/core/supervisor/log-feed.d.ts +9 -0
- package/dist/core/supervisor/log-feed.d.ts.map +1 -0
- package/dist/core/supervisor/log-feed.js +103 -0
- package/dist/core/supervisor/service.d.ts +29 -0
- package/dist/core/supervisor/service.d.ts.map +1 -0
- package/dist/core/supervisor/service.js +450 -0
- package/dist/core/supervisor/services.d.ts +11 -0
- package/dist/core/supervisor/services.d.ts.map +1 -0
- package/dist/core/supervisor/services.js +155 -0
- package/dist/core/supervisor/status.d.ts +3 -0
- package/dist/core/supervisor/status.d.ts.map +1 -0
- package/dist/core/supervisor/status.js +48 -0
- package/dist/core/supervisor/storage.d.ts +30 -0
- package/dist/core/supervisor/storage.d.ts.map +1 -0
- package/dist/core/supervisor/storage.js +73 -0
- package/dist/core/supervisor/timeline.d.ts +3 -0
- package/dist/core/supervisor/timeline.d.ts.map +1 -0
- package/dist/core/supervisor/timeline.js +87 -0
- package/dist/core/workflow/admission.d.ts +23 -0
- package/dist/core/workflow/admission.d.ts.map +1 -0
- package/dist/core/workflow/admission.js +136 -0
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +77 -2
- package/dist/core/workflow/index.d.ts +3 -2
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/index.js +2 -1
- package/dist/core/workflow/proof.d.ts +2 -1
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +39 -1
- package/dist/core/workflow/run-state.d.ts +3 -2
- package/dist/core/workflow/run-state.d.ts.map +1 -1
- package/dist/core/workflow/run-state.js +8 -1
- package/dist/core/workflow/types.d.ts +33 -1
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/dist/core/workflow/types.js +2 -1
- package/dist/lib/browser/client.d.ts +5 -0
- package/dist/lib/browser/client.d.ts.map +1 -1
- package/dist/lib/browser/client.js +1 -0
- package/dist/lib/browser/index.d.ts +2 -0
- package/dist/lib/browser/index.d.ts.map +1 -1
- package/dist/lib/browser/index.js +2 -0
- package/dist/lib/browser/qa-run-contracts.d.ts +173 -0
- package/dist/lib/browser/qa-run-contracts.d.ts.map +1 -0
- package/dist/lib/browser/qa-run-contracts.js +226 -0
- package/dist/lib/browser/qa-run.d.ts +51 -0
- package/dist/lib/browser/qa-run.d.ts.map +1 -0
- package/dist/lib/browser/qa-run.js +684 -0
- package/dist/lib/coord-root-id.d.ts +9 -0
- package/dist/lib/coord-root-id.d.ts.map +1 -0
- package/dist/lib/coord-root-id.js +17 -0
- package/dist/lib/instructions/apply.d.ts +3 -1
- package/dist/lib/instructions/apply.d.ts.map +1 -1
- package/dist/lib/instructions/apply.js +74 -3
- package/dist/lib/instructions/templates.d.ts.map +1 -1
- package/dist/lib/instructions/templates.js +6 -0
- package/package.json +12 -1
- package/src/commander.ts +26 -0
- package/src/commands/agents.ts +102 -49
- package/src/commands/artifacts.ts +40 -2
- package/src/commands/browse.ts +15 -0
- package/src/commands/diagnostics.ts +271 -0
- package/src/commands/files.ts +102 -2
- package/src/commands/governor.ts +8 -0
- package/src/commands/ledger-v3.ts +82 -0
- package/src/commands/qa-run.ts +184 -0
- package/src/commands/resources.ts +38 -0
- package/src/commands/supervisor.ts +141 -0
- package/src/commands/web.ts +19 -0
- package/src/commands/workflow.ts +8 -0
- package/src/core/agents/cli.ts +7 -3
- package/src/core/agents/health.ts +142 -0
- package/src/core/agents/mailbox.ts +373 -0
- package/src/core/agents/reconcile-coordination-v3.ts +77 -0
- package/src/core/agents/render/prompt-context.ts +42 -12
- package/src/core/agents/render/session-context.ts +37 -3
- package/src/core/agents/rules/commit-conflict.ts +58 -1
- package/src/core/agents/rules/stop-hook.ts +6 -12
- package/src/core/agents/session-finalizer-v3.ts +4 -1
- package/src/core/artifacts/index.ts +196 -10
- package/src/core/config.ts +111 -2
- package/src/core/diagnostics/advice.ts +147 -0
- package/src/core/diagnostics/bundle.ts +1142 -0
- package/src/core/diagnostics/comparison.ts +565 -0
- package/src/core/diagnostics/contract.ts +311 -0
- package/src/core/diagnostics/identity.ts +11 -0
- package/src/core/diagnostics/index.ts +7 -0
- package/src/core/diagnostics/replay.ts +314 -0
- package/src/core/diagnostics/sanitize.ts +97 -0
- package/src/core/events/legacy-storage/compression.ts +130 -0
- package/src/core/events/legacy-storage/index.ts +1 -0
- package/src/core/events/v3/archive-retention.ts +251 -0
- package/src/core/events/v3/capabilities.ts +2 -0
- package/src/core/events/v3/index.ts +9 -0
- package/src/core/events/v3/live-routing.ts +1 -0
- package/src/core/events/v3/producers/hook-base.ts +14 -2
- package/src/core/events/v3/producers/intake.ts +1 -0
- package/src/core/events/v3/producers/recorder.ts +110 -1
- package/src/core/hooks/adapter/output.ts +12 -1
- package/src/core/hooks/cli.ts +192 -215
- package/src/core/hooks/health.ts +146 -0
- package/src/core/resources/contract.ts +98 -0
- package/src/core/resources/index.ts +5 -0
- package/src/core/resources/sampler.ts +458 -0
- package/src/core/resources/service-status.ts +62 -0
- package/src/core/resources/service.ts +337 -0
- package/src/core/resources/storage.ts +44 -0
- package/src/core/storage/atomic-json.ts +15 -0
- package/src/core/storage/builtins.ts +62 -6
- package/src/core/storage/logger.ts +2 -0
- package/src/core/storage/query.ts +58 -0
- package/src/core/supervisor/activity.ts +193 -0
- package/src/core/supervisor/contract.ts +312 -0
- package/src/core/supervisor/explanations.ts +104 -0
- package/src/core/supervisor/findings.ts +788 -0
- package/src/core/supervisor/history.ts +61 -0
- package/src/core/supervisor/hook-health-alerts.ts +108 -0
- package/src/core/supervisor/hook-health-storage.ts +25 -0
- package/src/core/supervisor/hook-health.ts +301 -0
- package/src/core/supervisor/hooks.ts +35 -0
- package/src/core/supervisor/index.ts +14 -0
- package/src/core/supervisor/log-feed.ts +131 -0
- package/src/core/supervisor/service.ts +511 -0
- package/src/core/supervisor/services.ts +203 -0
- package/src/core/supervisor/status.ts +59 -0
- package/src/core/supervisor/storage.ts +126 -0
- package/src/core/supervisor/timeline.ts +133 -0
- package/src/core/workflow/admission.ts +215 -0
- package/src/core/workflow/engine.ts +93 -1
- package/src/core/workflow/index.ts +10 -0
- package/src/core/workflow/proof.ts +54 -1
- package/src/core/workflow/run-state.ts +13 -1
- package/src/core/workflow/types.ts +39 -1
- package/src/lib/browser/client.ts +6 -0
- package/src/lib/browser/index.ts +29 -0
- package/src/lib/browser/qa-run-contracts.ts +380 -0
- package/src/lib/browser/qa-run.ts +784 -0
- package/src/lib/coord-root-id.ts +23 -0
- package/src/lib/instructions/apply.ts +81 -2
- package/src/lib/instructions/templates.ts +6 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { hostname } from "node:os";
|
|
2
|
+
import { checkPidToken } from "../agents/state/proc-start.js";
|
|
3
|
+
import { RESOURCE_SERVICE_STATUS_SCHEMA_VERSION, } from "./contract.js";
|
|
4
|
+
import { readResourceServiceRecord, resourcePaths } from "./storage.js";
|
|
5
|
+
const STALE_HEARTBEAT_MS = 15_000;
|
|
6
|
+
export function readResourceServiceStatus(coordRoot, nowMs = Date.now()) {
|
|
7
|
+
const paths = resourcePaths(coordRoot);
|
|
8
|
+
const record = readResourceServiceRecord(coordRoot);
|
|
9
|
+
if (!validRecord(record)) {
|
|
10
|
+
return {
|
|
11
|
+
running: false,
|
|
12
|
+
stale: false,
|
|
13
|
+
status_path: paths.service,
|
|
14
|
+
snapshot_path: paths.snapshot,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const heartbeatAt = Date.parse(record.heartbeat_at);
|
|
18
|
+
const stale = !Number.isFinite(heartbeatAt) || nowMs - heartbeatAt > STALE_HEARTBEAT_MS;
|
|
19
|
+
const local = record.host === hostname();
|
|
20
|
+
const running = local &&
|
|
21
|
+
!stale &&
|
|
22
|
+
(record.state === "starting" || record.state === "running" || record.state === "stopping") &&
|
|
23
|
+
pidStillMatches(record.pid, record.start_token);
|
|
24
|
+
return {
|
|
25
|
+
running,
|
|
26
|
+
stale,
|
|
27
|
+
record,
|
|
28
|
+
status_path: paths.service,
|
|
29
|
+
snapshot_path: paths.snapshot,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function validRecord(value) {
|
|
33
|
+
return (value?.schema_version === RESOURCE_SERVICE_STATUS_SCHEMA_VERSION &&
|
|
34
|
+
Number.isInteger(value.pid) &&
|
|
35
|
+
value.pid > 0 &&
|
|
36
|
+
typeof value.host === "string" &&
|
|
37
|
+
typeof value.heartbeat_at === "string");
|
|
38
|
+
}
|
|
39
|
+
function pidStillMatches(pid, startToken) {
|
|
40
|
+
try {
|
|
41
|
+
process.kill(pid, 0);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (error.code !== "EPERM")
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return checkPidToken(pid, startToken) !== "mismatch";
|
|
48
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ResourceServiceStatus, type ResourceServiceStatusRecord } from "./contract.js";
|
|
2
|
+
import { sampleResources } from "./sampler.js";
|
|
3
|
+
export declare const RESOURCE_SERVICE_DEFAULT_INTERVAL_MS = 2000;
|
|
4
|
+
export interface RunResourceServiceInput {
|
|
5
|
+
coordRoot: string;
|
|
6
|
+
intervalMs?: number;
|
|
7
|
+
maxSamples?: number;
|
|
8
|
+
now?: () => Date;
|
|
9
|
+
sample?: typeof sampleResources;
|
|
10
|
+
wait?: (milliseconds: number) => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export type EnsureResourceServiceResult = {
|
|
13
|
+
state: "running" | "started";
|
|
14
|
+
status: ResourceServiceStatus;
|
|
15
|
+
} | {
|
|
16
|
+
state: "unsupported" | "unavailable";
|
|
17
|
+
status: ResourceServiceStatus;
|
|
18
|
+
error: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function spawnResourceService(coordRootRaw: string, options?: {
|
|
21
|
+
intervalMs?: number;
|
|
22
|
+
}): Promise<ResourceServiceStatus>;
|
|
23
|
+
export declare function ensureResourceServiceRunning(coordRoot: string): Promise<EnsureResourceServiceResult>;
|
|
24
|
+
export declare function requestResourceServiceStop(coordRootRaw: string): ResourceServiceStatus;
|
|
25
|
+
export declare function runResourceService(input: RunResourceServiceInput): Promise<ResourceServiceStatusRecord>;
|
|
26
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/core/resources/service.ts"],"names":[],"mappings":"AAgBA,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EACjC,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI/C,eAAO,MAAM,oCAAoC,OAAQ,CAAC;AAY1D,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,eAAe,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAChD;AAED,MAAM,MAAM,2BAA2B,GACnC;IAAE,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,GAC/D;IAAE,KAAK,EAAE,aAAa,GAAG,aAAa,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3F,wBAAsB,oBAAoB,CACxC,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAwChC;AAED,wBAAsB,4BAA4B,CAChD,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,2BAA2B,CAAC,CAoBtC;AAED,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,qBAAqB,CAiBtF;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAAC,2BAA2B,CAAC,CAwFtC"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, rmSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
4
|
+
import { hostname, platform } from "node:os";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import { checkPidToken, processStartToken } from "../agents/state/proc-start.js";
|
|
7
|
+
import { closeProcessLoggers, legacyLogFields, processLogger } from "../storage/logger.js";
|
|
8
|
+
import { RESOURCE_SERVICE_STATUS_SCHEMA_VERSION, } from "./contract.js";
|
|
9
|
+
import { sampleResources } from "./sampler.js";
|
|
10
|
+
import { readResourceServiceStatus } from "./service-status.js";
|
|
11
|
+
import { resourcePaths, writePrivateJsonAtomic } from "./storage.js";
|
|
12
|
+
export const RESOURCE_SERVICE_DEFAULT_INTERVAL_MS = 2_000;
|
|
13
|
+
const RESOURCE_SERVICE_MIN_INTERVAL_MS = 500;
|
|
14
|
+
const RESOURCE_SERVICE_MAX_INTERVAL_MS = 60_000;
|
|
15
|
+
export async function spawnResourceService(coordRootRaw, options = {}) {
|
|
16
|
+
const coordRoot = resolve(coordRootRaw);
|
|
17
|
+
const current = readResourceServiceStatus(coordRoot);
|
|
18
|
+
if (current.running) {
|
|
19
|
+
throw new Error(`resource observer is already running under pid ${current.record?.pid}`);
|
|
20
|
+
}
|
|
21
|
+
const intervalMs = normalizeInterval(options.intervalMs);
|
|
22
|
+
const paths = resourcePaths(coordRoot);
|
|
23
|
+
mkdirSync(paths.root, { recursive: true, mode: 0o700 });
|
|
24
|
+
rmSync(paths.stop, { force: true });
|
|
25
|
+
const harnBin = new URL("../../../bin/harn", import.meta.url).pathname;
|
|
26
|
+
if (!existsSync(harnBin))
|
|
27
|
+
throw new Error(`cannot find harn executable at ${harnBin}`);
|
|
28
|
+
let spawnError;
|
|
29
|
+
const child = spawn(harnBin, ["resources", "service", "daemon", "--root", coordRoot, "--interval-ms", String(intervalMs)], {
|
|
30
|
+
cwd: coordRoot,
|
|
31
|
+
detached: true,
|
|
32
|
+
stdio: ["ignore", "ignore", "ignore"],
|
|
33
|
+
env: {
|
|
34
|
+
...process.env,
|
|
35
|
+
HARNERY_COORD_ROOT_OVERRIDE: coordRoot,
|
|
36
|
+
HARNERY_OUTPUT_SESSION_TEE: "0",
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
child.once("error", (error) => {
|
|
40
|
+
spawnError = error;
|
|
41
|
+
});
|
|
42
|
+
child.unref();
|
|
43
|
+
const deadline = Date.now() + 5_000;
|
|
44
|
+
while (Date.now() < deadline) {
|
|
45
|
+
await delay(50);
|
|
46
|
+
if (spawnError)
|
|
47
|
+
throw spawnError;
|
|
48
|
+
const status = readResourceServiceStatus(coordRoot);
|
|
49
|
+
if (status.running && status.record?.pid === child.pid)
|
|
50
|
+
return status;
|
|
51
|
+
if (child.exitCode !== null)
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`resource observer failed to start; inspect ${paths.service}`);
|
|
55
|
+
}
|
|
56
|
+
export async function ensureResourceServiceRunning(coordRoot) {
|
|
57
|
+
const status = readResourceServiceStatus(coordRoot);
|
|
58
|
+
if (status.running)
|
|
59
|
+
return { state: "running", status };
|
|
60
|
+
if (platform() !== "linux") {
|
|
61
|
+
return {
|
|
62
|
+
state: "unsupported",
|
|
63
|
+
status,
|
|
64
|
+
error: `resource observer does not yet support ${platform()}`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const started = await spawnResourceService(coordRoot);
|
|
69
|
+
return { state: "started", status: started };
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return {
|
|
73
|
+
state: "unavailable",
|
|
74
|
+
status: readResourceServiceStatus(coordRoot),
|
|
75
|
+
error: error instanceof Error ? error.message : String(error),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export function requestResourceServiceStop(coordRootRaw) {
|
|
80
|
+
const coordRoot = resolve(coordRootRaw);
|
|
81
|
+
const paths = resourcePaths(coordRoot);
|
|
82
|
+
const status = readResourceServiceStatus(coordRoot);
|
|
83
|
+
mkdirSync(paths.root, { recursive: true, mode: 0o700 });
|
|
84
|
+
writePrivateJsonAtomic(paths.stop, {
|
|
85
|
+
requested_at: new Date().toISOString(),
|
|
86
|
+
requested_by_pid: process.pid,
|
|
87
|
+
});
|
|
88
|
+
if (status.running && status.record?.host === hostname()) {
|
|
89
|
+
try {
|
|
90
|
+
process.kill(status.record.pid, "SIGTERM");
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// The durable stop file handles a racing exit.
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return readResourceServiceStatus(coordRoot);
|
|
97
|
+
}
|
|
98
|
+
export async function runResourceService(input) {
|
|
99
|
+
const coordRoot = resolve(input.coordRoot);
|
|
100
|
+
const paths = resourcePaths(coordRoot);
|
|
101
|
+
const intervalMs = normalizeInterval(input.intervalMs);
|
|
102
|
+
const now = input.now ?? (() => new Date());
|
|
103
|
+
const sample = input.sample ?? sampleResources;
|
|
104
|
+
const wait = input.wait ?? delay;
|
|
105
|
+
const lease = acquireLease(coordRoot, now());
|
|
106
|
+
rmSync(paths.stop, { force: true });
|
|
107
|
+
const startedAt = now().toISOString();
|
|
108
|
+
const daemonStartToken = processStartToken(process.pid);
|
|
109
|
+
const status = {
|
|
110
|
+
schema_version: RESOURCE_SERVICE_STATUS_SCHEMA_VERSION,
|
|
111
|
+
pid: process.pid,
|
|
112
|
+
...(daemonStartToken ? { start_token: daemonStartToken } : {}),
|
|
113
|
+
host: hostname(),
|
|
114
|
+
nonce: lease.nonce,
|
|
115
|
+
state: "starting",
|
|
116
|
+
started_at: startedAt,
|
|
117
|
+
heartbeat_at: startedAt,
|
|
118
|
+
interval_ms: intervalMs,
|
|
119
|
+
sample_count: 0,
|
|
120
|
+
};
|
|
121
|
+
let stopping = false;
|
|
122
|
+
let previous;
|
|
123
|
+
const writeStatus = () => {
|
|
124
|
+
status.heartbeat_at = now().toISOString();
|
|
125
|
+
writePrivateJsonAtomic(paths.service, status);
|
|
126
|
+
};
|
|
127
|
+
const requestStop = () => {
|
|
128
|
+
stopping = true;
|
|
129
|
+
status.state = "stopping";
|
|
130
|
+
writeStatus();
|
|
131
|
+
};
|
|
132
|
+
process.on("SIGINT", requestStop);
|
|
133
|
+
process.on("SIGTERM", requestStop);
|
|
134
|
+
status.state = "running";
|
|
135
|
+
writeStatus();
|
|
136
|
+
log(coordRoot, "resource_observer.started", { pid: process.pid, interval_ms: intervalMs });
|
|
137
|
+
try {
|
|
138
|
+
while (!stopping && !existsSync(paths.stop)) {
|
|
139
|
+
const cycleStarted = Date.now();
|
|
140
|
+
try {
|
|
141
|
+
const result = sample(coordRoot, previous);
|
|
142
|
+
previous = result.state;
|
|
143
|
+
writePrivateJsonAtomic(paths.snapshot, result.snapshot);
|
|
144
|
+
status.sample_count += 1;
|
|
145
|
+
status.last_sample_at = result.snapshot.sampled_at;
|
|
146
|
+
status.last_error_code = undefined;
|
|
147
|
+
log(coordRoot, "resource_observer.sample", {
|
|
148
|
+
sample_count: status.sample_count,
|
|
149
|
+
cpu_percent: result.snapshot.machine.cpu_percent ?? -1,
|
|
150
|
+
memory_percent: result.snapshot.machine.memory_percent ?? -1,
|
|
151
|
+
visible_processes: result.snapshot.visible_process_count,
|
|
152
|
+
unattributed_processes: result.snapshot.unattributed_process_count,
|
|
153
|
+
duration_ms: result.snapshot.sample_duration_ms,
|
|
154
|
+
collector_cpu_ms: result.snapshot.collector_cpu_ms,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
status.last_error_code = resourceErrorCode(error);
|
|
159
|
+
status.state = "error";
|
|
160
|
+
log(coordRoot, "resource_observer.sample_error", { reason_code: status.last_error_code }, error);
|
|
161
|
+
}
|
|
162
|
+
if (status.state === "error")
|
|
163
|
+
status.state = "running";
|
|
164
|
+
writeStatus();
|
|
165
|
+
if (input.maxSamples !== undefined && status.sample_count >= input.maxSamples)
|
|
166
|
+
break;
|
|
167
|
+
const remaining = Math.max(0, intervalMs - (Date.now() - cycleStarted));
|
|
168
|
+
if (!stopping && !existsSync(paths.stop))
|
|
169
|
+
await wait(remaining);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
finally {
|
|
173
|
+
process.off("SIGINT", requestStop);
|
|
174
|
+
process.off("SIGTERM", requestStop);
|
|
175
|
+
status.state = "stopped";
|
|
176
|
+
status.stopped_at = now().toISOString();
|
|
177
|
+
writeStatus();
|
|
178
|
+
log(coordRoot, "resource_observer.stopped", { sample_count: status.sample_count });
|
|
179
|
+
try {
|
|
180
|
+
await closeProcessLoggers();
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
releaseLease(paths.lease, lease.nonce);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return status;
|
|
187
|
+
}
|
|
188
|
+
function acquireLease(coordRoot, now) {
|
|
189
|
+
const paths = resourcePaths(coordRoot);
|
|
190
|
+
mkdirSync(paths.root, { recursive: true, mode: 0o700 });
|
|
191
|
+
for (let attempt = 0; attempt < 2; attempt++) {
|
|
192
|
+
const daemonStartToken = processStartToken(process.pid);
|
|
193
|
+
const lease = {
|
|
194
|
+
pid: process.pid,
|
|
195
|
+
...(daemonStartToken ? { start_token: daemonStartToken } : {}),
|
|
196
|
+
host: hostname(),
|
|
197
|
+
nonce: randomUUID(),
|
|
198
|
+
created_at: now.toISOString(),
|
|
199
|
+
};
|
|
200
|
+
try {
|
|
201
|
+
const fd = openSync(paths.lease, "wx", 0o600);
|
|
202
|
+
try {
|
|
203
|
+
writeFileSync(fd, `${JSON.stringify(lease)}\n`, "utf8");
|
|
204
|
+
}
|
|
205
|
+
finally {
|
|
206
|
+
closeSync(fd);
|
|
207
|
+
}
|
|
208
|
+
return lease;
|
|
209
|
+
}
|
|
210
|
+
catch (error) {
|
|
211
|
+
if (error.code !== "EEXIST")
|
|
212
|
+
throw error;
|
|
213
|
+
const existing = readLease(paths.lease);
|
|
214
|
+
if (existing && leaseIsLive(existing)) {
|
|
215
|
+
throw new Error(`resource observer lease is held by pid ${existing.pid}`);
|
|
216
|
+
}
|
|
217
|
+
try {
|
|
218
|
+
unlinkSync(paths.lease);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// A concurrent starter may have replaced or removed the stale lease.
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
throw new Error("resource observer could not acquire its singleton lease");
|
|
226
|
+
}
|
|
227
|
+
function releaseLease(path, nonce) {
|
|
228
|
+
const current = readLease(path);
|
|
229
|
+
if (current?.nonce !== nonce)
|
|
230
|
+
return;
|
|
231
|
+
try {
|
|
232
|
+
unlinkSync(path);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// A missing lease is already released.
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
function readLease(path) {
|
|
239
|
+
try {
|
|
240
|
+
const value = JSON.parse(readFileSync(path, "utf8"));
|
|
241
|
+
return value && Number.isInteger(value.pid) && typeof value.nonce === "string"
|
|
242
|
+
? value
|
|
243
|
+
: undefined;
|
|
244
|
+
}
|
|
245
|
+
catch {
|
|
246
|
+
return undefined;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function leaseIsLive(lease) {
|
|
250
|
+
if (lease.host !== hostname())
|
|
251
|
+
return true;
|
|
252
|
+
try {
|
|
253
|
+
process.kill(lease.pid, 0);
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
if (error.code !== "EPERM")
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
return checkPidToken(lease.pid, lease.start_token) !== "mismatch";
|
|
260
|
+
}
|
|
261
|
+
function log(coordRoot, event, fields, error) {
|
|
262
|
+
try {
|
|
263
|
+
const logger = processLogger(coordRoot, "resource-observer");
|
|
264
|
+
if (error)
|
|
265
|
+
logger.error(event, legacyLogFields(fields), error);
|
|
266
|
+
else
|
|
267
|
+
logger.info(event, legacyLogFields(fields));
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
// Observability must never break the observer loop.
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
function resourceErrorCode(error) {
|
|
274
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
275
|
+
if (/procfs|\/proc\//i.test(message))
|
|
276
|
+
return "procfs_read_failed";
|
|
277
|
+
if (/permission|EACCES|EPERM/i.test(message))
|
|
278
|
+
return "permission_denied";
|
|
279
|
+
return "sample_failed";
|
|
280
|
+
}
|
|
281
|
+
function normalizeInterval(value) {
|
|
282
|
+
const interval = value ?? RESOURCE_SERVICE_DEFAULT_INTERVAL_MS;
|
|
283
|
+
if (!Number.isFinite(interval) ||
|
|
284
|
+
interval < RESOURCE_SERVICE_MIN_INTERVAL_MS ||
|
|
285
|
+
interval > RESOURCE_SERVICE_MAX_INTERVAL_MS) {
|
|
286
|
+
throw new Error(`resource observer interval must be ${RESOURCE_SERVICE_MIN_INTERVAL_MS}-${RESOURCE_SERVICE_MAX_INTERVAL_MS} ms`);
|
|
287
|
+
}
|
|
288
|
+
return Math.round(interval);
|
|
289
|
+
}
|
|
290
|
+
function delay(milliseconds) {
|
|
291
|
+
return new Promise((resolveDelay) => setTimeout(resolveDelay, milliseconds));
|
|
292
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ResourceServiceStatusRecord, ResourceSnapshot } from "./contract.js";
|
|
2
|
+
export { writePrivateJsonAtomic } from "../storage/atomic-json.js";
|
|
3
|
+
export interface ResourcePaths {
|
|
4
|
+
root: string;
|
|
5
|
+
service: string;
|
|
6
|
+
lease: string;
|
|
7
|
+
stop: string;
|
|
8
|
+
snapshot: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function resourcePaths(coordRootRaw: string): ResourcePaths;
|
|
11
|
+
export declare function readResourceSnapshot(coordRoot: string): ResourceSnapshot | undefined;
|
|
12
|
+
export declare function readResourceServiceRecord(coordRoot: string): ResourceServiceStatusRecord | undefined;
|
|
13
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/core/resources/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,CASjE;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAEpF;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,GAChB,2BAA2B,GAAG,SAAS,CAEzC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join, resolve } from "node:path";
|
|
3
|
+
export { writePrivateJsonAtomic } from "../storage/atomic-json.js";
|
|
4
|
+
export function resourcePaths(coordRootRaw) {
|
|
5
|
+
const root = join(resolve(coordRootRaw), ".harnery", "resources");
|
|
6
|
+
return {
|
|
7
|
+
root,
|
|
8
|
+
service: join(root, "service.json"),
|
|
9
|
+
lease: join(root, "service.lease.json"),
|
|
10
|
+
stop: join(root, "stop.json"),
|
|
11
|
+
snapshot: join(root, "snapshot.json"),
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function readResourceSnapshot(coordRoot) {
|
|
15
|
+
return readJson(resourcePaths(coordRoot).snapshot);
|
|
16
|
+
}
|
|
17
|
+
export function readResourceServiceRecord(coordRoot) {
|
|
18
|
+
return readJson(resourcePaths(coordRoot).service);
|
|
19
|
+
}
|
|
20
|
+
function readJson(path) {
|
|
21
|
+
if (!existsSync(path))
|
|
22
|
+
return undefined;
|
|
23
|
+
try {
|
|
24
|
+
const value = JSON.parse(readFileSync(path, "utf8"));
|
|
25
|
+
return value && typeof value === "object" ? value : undefined;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"atomic-json.d.ts","sourceRoot":"","sources":["../../../src/core/storage/atomic-json.ts"],"names":[],"mappings":"AAGA,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAUzE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { chmodSync, mkdirSync, renameSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
/** Write one private JSON projection without exposing a partial frame to readers. */
|
|
4
|
+
export function writePrivateJsonAtomic(path, value) {
|
|
5
|
+
mkdirSync(dirname(path), { recursive: true, mode: 0o700 });
|
|
6
|
+
const temporary = `${path}.tmp.${process.pid}.${Date.now()}`;
|
|
7
|
+
writeFileSync(temporary, `${JSON.stringify(value)}\n`, { encoding: "utf8", mode: 0o600 });
|
|
8
|
+
try {
|
|
9
|
+
chmodSync(temporary, 0o600);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
// Windows does not expose POSIX modes. The atomic write still applies.
|
|
13
|
+
}
|
|
14
|
+
renameSync(temporary, path);
|
|
15
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../../src/core/storage/builtins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,oBAAoB,EAKrB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../../src/core/storage/builtins.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAIV,oBAAoB,EAKrB,MAAM,eAAe,CAAC;AA0DvB,wBAAgB,sBAAsB,IAAI,SAAS,oBAAoB,EAAE,CAUxE"}
|
|
@@ -22,6 +22,8 @@ const LOG_PARTITIONS = [
|
|
|
22
22
|
"agent-operational",
|
|
23
23
|
"web-performance",
|
|
24
24
|
"semantic-service",
|
|
25
|
+
"resource-observer",
|
|
26
|
+
"supervisor",
|
|
25
27
|
"governor-service",
|
|
26
28
|
"presence-relay",
|
|
27
29
|
"tunnel-process",
|
|
@@ -44,8 +46,8 @@ const V3_ARCHIVE_PROVIDER = {
|
|
|
44
46
|
provider_id: "event-v3-archive-provider",
|
|
45
47
|
kind: "filesystem",
|
|
46
48
|
inventory: "filesystem",
|
|
47
|
-
maintenance: "
|
|
48
|
-
lifecycle_authority: "Event Ledger V3
|
|
49
|
+
maintenance: "delegated",
|
|
50
|
+
lifecycle_authority: "Event Ledger V3 closed-epoch retention policy",
|
|
49
51
|
partitions: ["canonical", "support"],
|
|
50
52
|
};
|
|
51
53
|
export function harneryStorageFamilies() {
|
|
@@ -64,7 +66,7 @@ function eventFamilies() {
|
|
|
64
66
|
family({
|
|
65
67
|
id: "event-v3-canonical-active",
|
|
66
68
|
owner: "Event Ledger V3 authority",
|
|
67
|
-
storage_class: "
|
|
69
|
+
storage_class: "durable-object-history",
|
|
68
70
|
roots: (context) => [
|
|
69
71
|
exact(context, ".harnery/ledgers/v3/active.ndjson", "file"),
|
|
70
72
|
exact(context, ".harnery/ledgers/v3/catalog.json", "file"),
|
|
@@ -95,14 +97,14 @@ function eventFamilies() {
|
|
|
95
97
|
format: "canonical-ndjson",
|
|
96
98
|
durability: "immutable",
|
|
97
99
|
writer_model: "object-owned",
|
|
98
|
-
policy:
|
|
100
|
+
policy: closedEpochPolicy("event-v3-archive-canonical-v2"),
|
|
99
101
|
consumers: ["Event Ledger V3 logical authority reader", "recovery verifier"],
|
|
100
102
|
provider: V3_ARCHIVE_PROVIDER,
|
|
101
103
|
}),
|
|
102
104
|
family({
|
|
103
105
|
id: "event-v3-support-active",
|
|
104
106
|
owner: "Event Ledger V3 producer recovery",
|
|
105
|
-
storage_class: "
|
|
107
|
+
storage_class: "durable-object-history",
|
|
106
108
|
roots: (context) => [
|
|
107
109
|
subtree(context, ".harnery/ledgers/v3/diagnostics", OWNER_PROTOCOL_LINKS),
|
|
108
110
|
subtree(context, ".harnery/ledgers/v3/diagnostic-summaries", OWNER_PROTOCOL_LINKS),
|
|
@@ -144,7 +146,7 @@ function eventFamilies() {
|
|
|
144
146
|
format: "files",
|
|
145
147
|
durability: "immutable",
|
|
146
148
|
writer_model: "object-owned",
|
|
147
|
-
policy:
|
|
149
|
+
policy: closedEpochPolicy("event-v3-archive-support-v2"),
|
|
148
150
|
consumers: ["Event Ledger V3 support reader", "recovery verifier", "agents health"],
|
|
149
151
|
provider: V3_ARCHIVE_PROVIDER,
|
|
150
152
|
}),
|
|
@@ -247,6 +249,8 @@ function logFamilies() {
|
|
|
247
249
|
operationalFamily("agent-operational-log", "agent coordination services", "agent-operational", 30, 128 * MIB),
|
|
248
250
|
withCurrentRoots(operationalFamily("web-performance-log", "dashboard server", "web-performance", 14, 64 * MIB), (context) => [pattern(context, ".harnery/logs", ["web-performance.jsonl*"])]),
|
|
249
251
|
withCurrentRoots(operationalFamily("semantic-service-log", "semantic service", "semantic-service", 30, 128 * MIB), (context) => [exact(context, ".harnery/semantic/v2/service.log", "file")]),
|
|
252
|
+
operationalFamily("resource-observer-log", "resource observer", "resource-observer", 14, 64 * MIB),
|
|
253
|
+
operationalFamily("supervisor-log", "local supervisor", "supervisor", 14, 64 * MIB),
|
|
250
254
|
withCurrentRoots(operationalFamily("governor-service-log", "governor service", "governor-service", 30, 128 * MIB), (context) => [
|
|
251
255
|
exact(context, ".harnery/governor-service/service.log", "file"),
|
|
252
256
|
exact(context, ".harnery/governor-service/events.jsonl", "file"),
|
|
@@ -357,6 +361,30 @@ function cacheFamilies() {
|
|
|
357
361
|
consumers: ["semantic service", "storage inventory", "storage health"],
|
|
358
362
|
provider: filesystemProvider("semantic-cache-provider", "canonical events and source documents"),
|
|
359
363
|
}),
|
|
364
|
+
family({
|
|
365
|
+
id: "resource-observer-cache",
|
|
366
|
+
owner: "resource observer",
|
|
367
|
+
storage_class: "repairable-cache",
|
|
368
|
+
roots: (context) => [subtree(context, ".harnery/resources")],
|
|
369
|
+
format: "json",
|
|
370
|
+
durability: "reconstructable",
|
|
371
|
+
writer_model: "object-owned",
|
|
372
|
+
policy: cachePolicy("resource-observer-cache-v1", "local process and machine samples"),
|
|
373
|
+
consumers: ["resource observer", "dashboard", "storage inventory", "storage health"],
|
|
374
|
+
provider: filesystemProvider("resource-observer-cache-provider", "local process and machine samples"),
|
|
375
|
+
}),
|
|
376
|
+
family({
|
|
377
|
+
id: "supervisor-cache",
|
|
378
|
+
owner: "local supervisor",
|
|
379
|
+
storage_class: "repairable-cache",
|
|
380
|
+
roots: (context) => [subtree(context, ".harnery/supervisor")],
|
|
381
|
+
format: "json",
|
|
382
|
+
durability: "reconstructable",
|
|
383
|
+
writer_model: "object-owned",
|
|
384
|
+
policy: cachePolicy("supervisor-cache-v1", "local resources, service health, log cursors, and finding projections"),
|
|
385
|
+
consumers: ["local supervisor", "dashboard", "storage inventory", "storage health"],
|
|
386
|
+
provider: filesystemProvider("supervisor-cache-provider", "bounded local diagnostic observations"),
|
|
387
|
+
}),
|
|
360
388
|
family({
|
|
361
389
|
id: "structured-log-metrics",
|
|
362
390
|
owner: "structured log provider",
|
|
@@ -582,6 +610,17 @@ function ownerHistoryPolicy(version) {
|
|
|
582
610
|
reason: "Durable history follows its owning product object's lifecycle.",
|
|
583
611
|
});
|
|
584
612
|
}
|
|
613
|
+
function closedEpochPolicy(version) {
|
|
614
|
+
return policy(version, "active", "private", "owner-content", {
|
|
615
|
+
status: "active",
|
|
616
|
+
mode: "delegated",
|
|
617
|
+
maxAge: bounded(7 * DAY_MS, "milliseconds"),
|
|
618
|
+
maxBytes: bounded(1024 * MIB, "bytes"),
|
|
619
|
+
maxFiles: unbounded("files", "complete epoch directories are the deletion unit"),
|
|
620
|
+
maxRecords: unbounded("records", "complete epoch directories are the deletion unit"),
|
|
621
|
+
reason: "The Event Ledger owner keeps the newest two complete epochs and revalidates each closed epoch before removal.",
|
|
622
|
+
});
|
|
623
|
+
}
|
|
585
624
|
function delegatedHistoryPolicy(version) {
|
|
586
625
|
const result = ownerHistoryPolicy(version);
|
|
587
626
|
result.retention.mode = "delegated";
|
|
@@ -72,6 +72,8 @@ declare const PROCESS_LOGGER_BINDINGS: {
|
|
|
72
72
|
readonly "agent-hook": "agent-hook-debug-log";
|
|
73
73
|
readonly "agent-coord": "agent-coord-debug-log";
|
|
74
74
|
readonly "semantic-service": "semantic-service-log";
|
|
75
|
+
readonly "resource-observer": "resource-observer-log";
|
|
76
|
+
readonly supervisor: "supervisor-log";
|
|
75
77
|
readonly "governor-service": "governor-service-log";
|
|
76
78
|
readonly "presence-relay": "presence-relay-log";
|
|
77
79
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/core/storage/logger.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/core/storage/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -388,6 +388,8 @@ const PROCESS_LOGGER_BINDINGS = {
|
|
|
388
388
|
"agent-hook": "agent-hook-debug-log",
|
|
389
389
|
"agent-coord": "agent-coord-debug-log",
|
|
390
390
|
"semantic-service": "semantic-service-log",
|
|
391
|
+
"resource-observer": "resource-observer-log",
|
|
392
|
+
supervisor: "supervisor-log",
|
|
391
393
|
"governor-service": "governor-service-log",
|
|
392
394
|
"presence-relay": "presence-relay-log",
|
|
393
395
|
};
|
|
@@ -23,8 +23,22 @@ export interface HarneryLogFollowCursor {
|
|
|
23
23
|
manifest_sequence: number;
|
|
24
24
|
active_offset: number;
|
|
25
25
|
}
|
|
26
|
+
export interface HarneryRecentActiveLogResult {
|
|
27
|
+
records: readonly HarneryLogRecordV1[];
|
|
28
|
+
bytes_examined: number;
|
|
29
|
+
truncated: boolean;
|
|
30
|
+
}
|
|
26
31
|
export declare function queryLogs(families: readonly HarneryRegisteredStorageFamily[], query: HarneryLogQuery): Promise<HarneryLogQueryResult>;
|
|
27
32
|
export declare function rotationFollowCursor(family: HarneryRegisteredStorageFamily): HarneryLogFollowCursor;
|
|
33
|
+
/**
|
|
34
|
+
* Read the newest complete records from one family's active segment without
|
|
35
|
+
* walking sealed history. Dashboard-style live views need a cheap bounded
|
|
36
|
+
* snapshot; the full `queryLogs` surface remains the historical query path.
|
|
37
|
+
*/
|
|
38
|
+
export declare function readRecentActiveLogs(family: HarneryRegisteredStorageFamily, options: {
|
|
39
|
+
max_records: number;
|
|
40
|
+
max_bytes: number;
|
|
41
|
+
}): HarneryRecentActiveLogResult;
|
|
28
42
|
export declare function readLogFollow(family: HarneryRegisteredStorageFamily, cursor: HarneryLogFollowCursor, maxBytes: number): Promise<{
|
|
29
43
|
records: readonly HarneryLogRecordV1[];
|
|
30
44
|
cursor: HarneryLogFollowCursor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/core/storage/query.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAMD,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,SAAS,8BAA8B,EAAE,EACnD,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,qBAAqB,CAAC,CA6ChC;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,8BAA8B,GACrC,sBAAsB,CASxB;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,8BAA8B,EACtC,MAAM,EAAE,sBAAsB,EAC9B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC,CAyED"}
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/core/storage/query.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAIrD,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,aAAa,CAAC,EAAE,eAAe,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC;IACrE,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB;AAMD,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,SAAS,8BAA8B,EAAE,EACnD,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,qBAAqB,CAAC,CA6ChC;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,8BAA8B,GACrC,sBAAsB,CASxB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,8BAA8B,EACtC,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAClD,4BAA4B,CA0C9B;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,8BAA8B,EACtC,MAAM,EAAE,sBAAsB,EAC9B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,OAAO,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACvC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC,CAyED"}
|