@mono-agent/agent-app 0.19.0 → 0.20.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/README.md +304 -32
- package/dist/acp-bridge.d.ts.map +1 -1
- package/dist/acp-bridge.js +113 -54
- package/dist/acp-bridge.js.map +1 -1
- package/dist/acp-session-store.d.ts +12 -0
- package/dist/acp-session-store.d.ts.map +1 -0
- package/dist/acp-session-store.js +74 -0
- package/dist/acp-session-store.js.map +1 -0
- package/dist/agent-artifact-paths.d.ts +8 -0
- package/dist/agent-artifact-paths.d.ts.map +1 -0
- package/dist/agent-artifact-paths.js +11 -0
- package/dist/agent-artifact-paths.js.map +1 -0
- package/dist/agent-root-coordinator.d.ts +101 -0
- package/dist/agent-root-coordinator.d.ts.map +1 -0
- package/dist/agent-root-coordinator.js +470 -0
- package/dist/agent-root-coordinator.js.map +1 -0
- package/dist/app-controller-channels.d.ts +11 -1
- package/dist/app-controller-channels.d.ts.map +1 -1
- package/dist/app-controller-channels.js +145 -20
- package/dist/app-controller-channels.js.map +1 -1
- package/dist/app-controller-continuation.d.ts +2 -0
- package/dist/app-controller-continuation.d.ts.map +1 -1
- package/dist/app-controller-continuation.js.map +1 -1
- package/dist/app-controller-lifecycle.d.ts +5 -0
- package/dist/app-controller-lifecycle.d.ts.map +1 -1
- package/dist/app-controller-lifecycle.js +24 -5
- package/dist/app-controller-lifecycle.js.map +1 -1
- package/dist/app-controller-maintenance.d.ts +2 -0
- package/dist/app-controller-maintenance.d.ts.map +1 -1
- package/dist/app-controller-maintenance.js +32 -2
- package/dist/app-controller-maintenance.js.map +1 -1
- package/dist/app-controller-process-jobs.d.ts +46 -0
- package/dist/app-controller-process-jobs.d.ts.map +1 -0
- package/dist/app-controller-process-jobs.js +281 -0
- package/dist/app-controller-process-jobs.js.map +1 -0
- package/dist/app-controller-responder.d.ts +15 -0
- package/dist/app-controller-responder.d.ts.map +1 -1
- package/dist/app-controller-responder.js +146 -12
- package/dist/app-controller-responder.js.map +1 -1
- package/dist/app-controller-traceability.d.ts +6 -0
- package/dist/app-controller-traceability.d.ts.map +1 -1
- package/dist/app-controller-traceability.js +10 -0
- package/dist/app-controller-traceability.js.map +1 -1
- package/dist/app-controller-utils.d.ts +8 -0
- package/dist/app-controller-utils.d.ts.map +1 -1
- package/dist/app-controller-utils.js +24 -1
- package/dist/app-controller-utils.js.map +1 -1
- package/dist/app-controller.d.ts +40 -1
- package/dist/app-controller.d.ts.map +1 -1
- package/dist/app-controller.js +124 -39
- package/dist/app-controller.js.map +1 -1
- package/dist/background-log-maintenance.d.ts +85 -2
- package/dist/background-log-maintenance.d.ts.map +1 -1
- package/dist/background-log-maintenance.js +407 -136
- package/dist/background-log-maintenance.js.map +1 -1
- package/dist/background-runtime.d.ts.map +1 -1
- package/dist/background-runtime.js +22 -41
- package/dist/background-runtime.js.map +1 -1
- package/dist/background.d.ts +18 -26
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +83 -138
- package/dist/background.js.map +1 -1
- package/dist/channel-drivers/cron.d.ts +12 -1
- package/dist/channel-drivers/cron.d.ts.map +1 -1
- package/dist/channel-drivers/cron.js +121 -18
- package/dist/channel-drivers/cron.js.map +1 -1
- package/dist/channel-drivers/native-notify.d.ts +3 -0
- package/dist/channel-drivers/native-notify.d.ts.map +1 -1
- package/dist/channel-drivers/native-notify.js +2 -1
- package/dist/channel-drivers/native-notify.js.map +1 -1
- package/dist/channel-drivers/slack.d.ts.map +1 -1
- package/dist/channel-drivers/slack.js +41 -4
- package/dist/channel-drivers/slack.js.map +1 -1
- package/dist/channel-drivers/telegram.d.ts.map +1 -1
- package/dist/channel-drivers/telegram.js +46 -3
- package/dist/channel-drivers/telegram.js.map +1 -1
- package/dist/channel-drivers/tui.d.ts +13 -2
- package/dist/channel-drivers/tui.d.ts.map +1 -1
- package/dist/channel-drivers/tui.js +112 -3
- package/dist/channel-drivers/tui.js.map +1 -1
- package/dist/channels.d.ts +1 -1
- package/dist/channels.d.ts.map +1 -1
- package/dist/channels.js +4 -2
- package/dist/channels.js.map +1 -1
- package/dist/cli-args.d.ts +15 -1
- package/dist/cli-args.d.ts.map +1 -1
- package/dist/cli-args.js +82 -12
- package/dist/cli-args.js.map +1 -1
- package/dist/cli-background-command.d.ts +9 -2
- package/dist/cli-background-command.d.ts.map +1 -1
- package/dist/cli-background-command.js +174 -66
- package/dist/cli-background-command.js.map +1 -1
- package/dist/cli-commands.d.ts.map +1 -1
- package/dist/cli-commands.js +50 -12
- package/dist/cli-commands.js.map +1 -1
- package/dist/cli-help.d.ts.map +1 -1
- package/dist/cli-help.js +21 -1
- package/dist/cli-help.js.map +1 -1
- package/dist/config-reference.d.ts.map +1 -1
- package/dist/config-reference.js +99 -2
- package/dist/config-reference.js.map +1 -1
- package/dist/configured-agent.d.ts +44 -3
- package/dist/configured-agent.d.ts.map +1 -1
- package/dist/configured-agent.js +805 -156
- package/dist/configured-agent.js.map +1 -1
- package/dist/conversation-state-roots.d.ts +59 -0
- package/dist/conversation-state-roots.d.ts.map +1 -0
- package/dist/conversation-state-roots.js +248 -0
- package/dist/conversation-state-roots.js.map +1 -0
- package/dist/cron-control-store.d.ts +91 -0
- package/dist/cron-control-store.d.ts.map +1 -0
- package/dist/cron-control-store.js +1251 -0
- package/dist/cron-control-store.js.map +1 -0
- package/dist/cron-operator-service.d.ts +54 -0
- package/dist/cron-operator-service.d.ts.map +1 -0
- package/dist/cron-operator-service.js +352 -0
- package/dist/cron-operator-service.js.map +1 -0
- package/dist/doctor-session-history.d.ts +9 -0
- package/dist/doctor-session-history.d.ts.map +1 -0
- package/dist/doctor-session-history.js +313 -0
- package/dist/doctor-session-history.js.map +1 -0
- package/dist/doctor.d.ts +2 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +320 -9
- package/dist/doctor.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interaction-bridge.d.ts +1 -0
- package/dist/interaction-bridge.d.ts.map +1 -1
- package/dist/interaction-bridge.js +54 -6
- package/dist/interaction-bridge.js.map +1 -1
- package/dist/jobs-command.d.ts +17 -0
- package/dist/jobs-command.d.ts.map +1 -0
- package/dist/jobs-command.js +207 -0
- package/dist/jobs-command.js.map +1 -0
- package/dist/launchd-lifecycle-lock.d.ts +36 -0
- package/dist/launchd-lifecycle-lock.d.ts.map +1 -0
- package/dist/launchd-lifecycle-lock.js +124 -0
- package/dist/launchd-lifecycle-lock.js.map +1 -0
- package/dist/launchd-log-monitor-status.d.ts +7 -0
- package/dist/launchd-log-monitor-status.d.ts.map +1 -0
- package/dist/launchd-log-monitor-status.js +224 -0
- package/dist/launchd-log-monitor-status.js.map +1 -0
- package/dist/launchd-logs.d.ts +9 -1
- package/dist/launchd-logs.d.ts.map +1 -1
- package/dist/launchd-logs.js +69 -16
- package/dist/launchd-logs.js.map +1 -1
- package/dist/launchd-maintenance-command.d.ts +10 -0
- package/dist/launchd-maintenance-command.d.ts.map +1 -0
- package/dist/launchd-maintenance-command.js +2 -0
- package/dist/launchd-maintenance-command.js.map +1 -0
- package/dist/launchd-maintenance-entry.d.ts +30 -0
- package/dist/launchd-maintenance-entry.d.ts.map +1 -0
- package/dist/launchd-maintenance-entry.js +206 -0
- package/dist/launchd-maintenance-entry.js.map +1 -0
- package/dist/launchd-maintenance-gate.d.ts +28 -0
- package/dist/launchd-maintenance-gate.d.ts.map +1 -0
- package/dist/launchd-maintenance-gate.js +80 -0
- package/dist/launchd-maintenance-gate.js.map +1 -0
- package/dist/launchd-private-files.d.ts +3 -0
- package/dist/launchd-private-files.d.ts.map +1 -0
- package/dist/launchd-private-files.js +58 -0
- package/dist/launchd-private-files.js.map +1 -0
- package/dist/launchd.d.ts +56 -2
- package/dist/launchd.d.ts.map +1 -1
- package/dist/launchd.js +210 -5
- package/dist/launchd.js.map +1 -1
- package/dist/local-configuration.d.ts.map +1 -1
- package/dist/local-configuration.js +33 -7
- package/dist/local-configuration.js.map +1 -1
- package/dist/managed-launchd-maintenance-environment.d.ts +3 -0
- package/dist/managed-launchd-maintenance-environment.d.ts.map +1 -0
- package/dist/managed-launchd-maintenance-environment.js +12 -0
- package/dist/managed-launchd-maintenance-environment.js.map +1 -0
- package/dist/managed-runtime-launch-proof.d.ts +11 -0
- package/dist/managed-runtime-launch-proof.d.ts.map +1 -0
- package/dist/managed-runtime-launch-proof.js +59 -0
- package/dist/managed-runtime-launch-proof.js.map +1 -0
- package/dist/managed-runtime-maintenance-entry.d.ts +10 -0
- package/dist/managed-runtime-maintenance-entry.d.ts.map +1 -0
- package/dist/managed-runtime-maintenance-entry.js +244 -0
- package/dist/managed-runtime-maintenance-entry.js.map +1 -0
- package/dist/managed-web-logs.d.ts +29 -11
- package/dist/managed-web-logs.d.ts.map +1 -1
- package/dist/managed-web-logs.js +244 -121
- package/dist/managed-web-logs.js.map +1 -1
- package/dist/managed-web-maintenance-environment.d.ts +6 -0
- package/dist/managed-web-maintenance-environment.d.ts.map +1 -0
- package/dist/managed-web-maintenance-environment.js +19 -0
- package/dist/managed-web-maintenance-environment.js.map +1 -0
- package/dist/mcp-apps.d.ts +37 -0
- package/dist/mcp-apps.d.ts.map +1 -0
- package/dist/mcp-apps.js +1753 -0
- package/dist/mcp-apps.js.map +1 -0
- package/dist/memory-command.d.ts +12 -0
- package/dist/memory-command.d.ts.map +1 -1
- package/dist/memory-command.js +510 -1
- package/dist/memory-command.js.map +1 -1
- package/dist/modules/known-tools.d.ts +1 -1
- package/dist/modules/known-tools.d.ts.map +1 -1
- package/dist/modules/known-tools.js +2 -0
- package/dist/modules/known-tools.js.map +1 -1
- package/dist/posted-reply-history.d.ts.map +1 -1
- package/dist/posted-reply-history.js +12 -0
- package/dist/posted-reply-history.js.map +1 -1
- package/dist/proactive-notify.d.ts +4 -1
- package/dist/proactive-notify.d.ts.map +1 -1
- package/dist/proactive-notify.js +43 -5
- package/dist/proactive-notify.js.map +1 -1
- package/dist/process-jobs-config.d.ts +82 -0
- package/dist/process-jobs-config.d.ts.map +1 -0
- package/dist/process-jobs-config.js +423 -0
- package/dist/process-jobs-config.js.map +1 -0
- package/dist/process-jobs-context.d.ts +24 -0
- package/dist/process-jobs-context.d.ts.map +1 -0
- package/dist/process-jobs-context.js +135 -0
- package/dist/process-jobs-context.js.map +1 -0
- package/dist/process-jobs-root-registry.d.ts +115 -0
- package/dist/process-jobs-root-registry.d.ts.map +1 -0
- package/dist/process-jobs-root-registry.js +978 -0
- package/dist/process-jobs-root-registry.js.map +1 -0
- package/dist/process-jobs-runtime.d.ts +35 -0
- package/dist/process-jobs-runtime.d.ts.map +1 -0
- package/dist/process-jobs-runtime.js +177 -0
- package/dist/process-jobs-runtime.js.map +1 -0
- package/dist/process-jobs-service.d.ts +70 -0
- package/dist/process-jobs-service.d.ts.map +1 -0
- package/dist/process-jobs-service.js +1989 -0
- package/dist/process-jobs-service.js.map +1 -0
- package/dist/process-jobs-store.d.ts +151 -0
- package/dist/process-jobs-store.d.ts.map +1 -0
- package/dist/process-jobs-store.js +1290 -0
- package/dist/process-jobs-store.js.map +1 -0
- package/dist/reply-artifacts.d.ts +65 -0
- package/dist/reply-artifacts.d.ts.map +1 -0
- package/dist/reply-artifacts.js +1147 -0
- package/dist/reply-artifacts.js.map +1 -0
- package/dist/reply-part-budget.d.ts +16 -0
- package/dist/reply-part-budget.d.ts.map +1 -0
- package/dist/reply-part-budget.js +57 -0
- package/dist/reply-part-budget.js.map +1 -0
- package/dist/request-model-override.d.ts +19 -0
- package/dist/request-model-override.d.ts.map +1 -1
- package/dist/request-model-override.js +54 -1
- package/dist/request-model-override.js.map +1 -1
- package/dist/request-scoped-mcp.d.ts +31 -0
- package/dist/request-scoped-mcp.d.ts.map +1 -0
- package/dist/request-scoped-mcp.js +197 -0
- package/dist/request-scoped-mcp.js.map +1 -0
- package/dist/run-history.d.ts.map +1 -1
- package/dist/run-history.js +50 -254
- package/dist/run-history.js.map +1 -1
- package/dist/runtime-option-extensions.d.ts +21 -0
- package/dist/runtime-option-extensions.d.ts.map +1 -1
- package/dist/runtime-option-extensions.js +53 -0
- package/dist/runtime-option-extensions.js.map +1 -1
- package/dist/secure-file-replace.d.ts +3 -0
- package/dist/secure-file-replace.d.ts.map +1 -1
- package/dist/secure-file-replace.js +31 -7
- package/dist/secure-file-replace.js.map +1 -1
- package/dist/session-history.d.ts +146 -0
- package/dist/session-history.d.ts.map +1 -0
- package/dist/session-history.js +347 -0
- package/dist/session-history.js.map +1 -0
- package/dist/sessions.d.ts +45 -2
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +849 -30
- package/dist/sessions.js.map +1 -1
- package/dist/web-command.d.ts +12 -11
- package/dist/web-command.d.ts.map +1 -1
- package/dist/web-command.js +554 -80
- package/dist/web-command.js.map +1 -1
- package/dist/web-log-maintenance-command.d.ts +7 -0
- package/dist/web-log-maintenance-command.d.ts.map +1 -0
- package/dist/web-log-maintenance-command.js +21 -0
- package/dist/web-log-maintenance-command.js.map +1 -0
- package/dist/web-log-maintenance-status.d.ts +26 -0
- package/dist/web-log-maintenance-status.d.ts.map +1 -0
- package/dist/web-log-maintenance-status.js +171 -0
- package/dist/web-log-maintenance-status.js.map +1 -0
- package/dist/web-log-maintenance.d.ts +32 -0
- package/dist/web-log-maintenance.d.ts.map +1 -0
- package/dist/web-log-maintenance.js +163 -0
- package/dist/web-log-maintenance.js.map +1 -0
- package/dist/web-maintenance-paths.d.ts +12 -0
- package/dist/web-maintenance-paths.d.ts.map +1 -0
- package/dist/web-maintenance-paths.js +24 -0
- package/dist/web-maintenance-paths.js.map +1 -0
- package/dist/wizard/prompts.d.ts.map +1 -1
- package/dist/wizard/prompts.js +1 -0
- package/dist/wizard/prompts.js.map +1 -1
- package/dist/wizard/run.js +1 -1
- package/dist/wizard/run.js.map +1 -1
- package/package.json +15 -15
- package/schema/mono-agent.config.schema.json +102 -1
- package/skills/mono-agent-composer/references/config-blueprint.md +26 -2
- package/skills/mono-agent-composer/references/discovery-questions.md +2 -2
- package/skills/mono-agent-composer/references/feature-coverage.md +6 -4
- package/skills/mono-agent-composer/references/package-map.md +19 -3
- package/skills/mono-agent-composer/references/playbooks.md +3 -3
- package/skills/mono-agent-composer/references/validation.md +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs-command.js","sourceRoot":"","sources":["../src/jobs-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { LaunchdPaths } from "./launchd.js";
|
|
2
|
+
import type { ProcessIncarnation, SameProcessIncarnation } from "./process-incarnation.js";
|
|
3
|
+
export interface BackgroundLifecycleTarget {
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly paths: LaunchdPaths;
|
|
6
|
+
}
|
|
7
|
+
export interface BackgroundLockAcquireOptions {
|
|
8
|
+
readonly waitTimeoutMs?: number;
|
|
9
|
+
readonly pollIntervalMs?: number;
|
|
10
|
+
/** Main LaunchAgent identity recorded when a synthetic shared lock is held. */
|
|
11
|
+
readonly ownerLabel?: string;
|
|
12
|
+
readonly purpose?: "lifecycle" | "shared-launchd-logs";
|
|
13
|
+
}
|
|
14
|
+
export interface FilesystemLifecycleLockOptions extends BackgroundLockAcquireOptions {
|
|
15
|
+
readonly pid?: number;
|
|
16
|
+
readonly now?: () => number;
|
|
17
|
+
/** Permanent compatibility for owner records predating process-incarnation identity. */
|
|
18
|
+
readonly isProcessAlive?: (pid: number) => boolean;
|
|
19
|
+
readonly processIncarnation?: ProcessIncarnation;
|
|
20
|
+
readonly isSameProcessIncarnation?: SameProcessIncarnation;
|
|
21
|
+
readonly ownerlessGraceMs?: number;
|
|
22
|
+
readonly randomToken?: () => string;
|
|
23
|
+
/** Deterministic seam immediately after the final identity check. */
|
|
24
|
+
readonly beforeStaleLockRename?: () => Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export interface LifecycleLockDependencies {
|
|
27
|
+
readonly acquireLifecycleLock: (target: BackgroundLifecycleTarget, options?: BackgroundLockAcquireOptions) => Promise<(() => Promise<void>) | undefined>;
|
|
28
|
+
}
|
|
29
|
+
export declare const SHARED_LAUNCHD_LOG_LOCK_WAIT_MS = 18000;
|
|
30
|
+
export declare const SHARED_LAUNCHD_LOG_LOCK_POLL_MS = 400;
|
|
31
|
+
/** One per-account lock key for every mutation of the shared launchd log chain. */
|
|
32
|
+
export declare function sharedLaunchdLogLockTarget(target: BackgroundLifecycleTarget): BackgroundLifecycleTarget;
|
|
33
|
+
export declare function acquireSharedLaunchdLogLock(target: BackgroundLifecycleTarget, deps: LifecycleLockDependencies, mode: "automatic" | "interactive"): Promise<(() => Promise<void>) | undefined>;
|
|
34
|
+
/** Canonical owner-private implementation for per-agent and synthetic shared locks. */
|
|
35
|
+
export declare function acquireFilesystemLifecycleLock(target: BackgroundLifecycleTarget, options?: FilesystemLifecycleLockOptions): Promise<(() => Promise<void>) | undefined>;
|
|
36
|
+
//# sourceMappingURL=launchd-lifecycle-lock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchd-lifecycle-lock.d.ts","sourceRoot":"","sources":["../src/launchd-lifecycle-lock.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAIjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE3F,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,qBAAqB,CAAC;CACxD;AAED,MAAM,WAAW,8BAA+B,SAAQ,4BAA4B;IAClF,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACjD,QAAQ,CAAC,wBAAwB,CAAC,EAAE,sBAAsB,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,MAAM,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,oBAAoB,EAAE,CAC7B,MAAM,EAAE,yBAAyB,EACjC,OAAO,CAAC,EAAE,4BAA4B,KACnC,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;CACjD;AAED,eAAO,MAAM,+BAA+B,QAAS,CAAC;AACtD,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD,mFAAmF;AACnF,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,yBAAyB,GAChC,yBAAyB,CAG3B;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,yBAAyB,EACjC,IAAI,EAAE,yBAAyB,EAC/B,IAAI,EAAE,WAAW,GAAG,aAAa,GAChC,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAO5C;AAED,uFAAuF;AACvF,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,yBAAyB,EACjC,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC,CAiE5C"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { deriveLaunchdMaintenanceLabel } from "./launchd.js";
|
|
5
|
+
import { ensureOwnerPrivateLaunchdDirectory } from "./launchd-private-files.js";
|
|
6
|
+
import { acquireOwnerPrivateLock, validateOwnerPrivateLockInputs } from "./owner-private-lock.js";
|
|
7
|
+
import { processIncarnationFromJson } from "./process-incarnation.js";
|
|
8
|
+
export const SHARED_LAUNCHD_LOG_LOCK_WAIT_MS = 18_000;
|
|
9
|
+
export const SHARED_LAUNCHD_LOG_LOCK_POLL_MS = 400;
|
|
10
|
+
/** One per-account lock key for every mutation of the shared launchd log chain. */
|
|
11
|
+
export function sharedLaunchdLogLockTarget(target) {
|
|
12
|
+
const digest = createHash("sha256").update(resolve(target.paths.logDir)).digest("hex").slice(0, 24);
|
|
13
|
+
return { label: `launchd-log-shared-${digest}`, paths: target.paths };
|
|
14
|
+
}
|
|
15
|
+
export async function acquireSharedLaunchdLogLock(target, deps, mode) {
|
|
16
|
+
return await deps.acquireLifecycleLock(sharedLaunchdLogLockTarget(target), {
|
|
17
|
+
purpose: "shared-launchd-logs",
|
|
18
|
+
ownerLabel: target.label,
|
|
19
|
+
waitTimeoutMs: mode === "interactive" ? SHARED_LAUNCHD_LOG_LOCK_WAIT_MS : 0,
|
|
20
|
+
pollIntervalMs: SHARED_LAUNCHD_LOG_LOCK_POLL_MS,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/** Canonical owner-private implementation for per-agent and synthetic shared locks. */
|
|
24
|
+
export async function acquireFilesystemLifecycleLock(target, options = {}) {
|
|
25
|
+
const pid = options.pid ?? process.pid;
|
|
26
|
+
const now = options.now ?? (() => Date.now());
|
|
27
|
+
const isProcessAlive = options.isProcessAlive ?? processIsAlive;
|
|
28
|
+
const ownerlessGraceMs = options.ownerlessGraceMs ?? 5 * 60_000;
|
|
29
|
+
const randomToken = options.randomToken ?? randomUUID;
|
|
30
|
+
const shared = options.purpose === "shared-launchd-logs";
|
|
31
|
+
const displayName = shared ? "Shared launchd-log mutation lock" : "Lifecycle lock";
|
|
32
|
+
validateOwnerPrivateLockInputs(displayName, pid, ownerlessGraceMs);
|
|
33
|
+
const managedRoot = dirname(target.paths.logDir);
|
|
34
|
+
const locksDir = resolve(managedRoot, "locks");
|
|
35
|
+
for (const path of [managedRoot, locksDir])
|
|
36
|
+
await ensureOwnerPrivateLaunchdDirectory(path);
|
|
37
|
+
const lockDir = resolve(locksDir, `${target.label}.lock`);
|
|
38
|
+
const held = await acquireOwnerPrivateLock({
|
|
39
|
+
path: lockDir,
|
|
40
|
+
label: displayName,
|
|
41
|
+
schemaTag: shared
|
|
42
|
+
? "mono-agent.shared-launchd-log-lock.v1"
|
|
43
|
+
: "mono-agent.filesystem-lifecycle-lock.v1",
|
|
44
|
+
ownerlessGraceMs,
|
|
45
|
+
...(options.waitTimeoutMs === undefined || options.waitTimeoutMs === 0
|
|
46
|
+
? { maxAcquireAttempts: 4 }
|
|
47
|
+
: {}),
|
|
48
|
+
waitTimeoutMs: options.waitTimeoutMs ?? 0,
|
|
49
|
+
pollIntervalMs: options.pollIntervalMs ?? SHARED_LAUNCHD_LOG_LOCK_POLL_MS,
|
|
50
|
+
pid,
|
|
51
|
+
now,
|
|
52
|
+
randomToken,
|
|
53
|
+
...(options.processIncarnation === undefined ? {} : { processIncarnation: options.processIncarnation }),
|
|
54
|
+
...(options.isSameProcessIncarnation === undefined
|
|
55
|
+
? {}
|
|
56
|
+
: { isSameProcessIncarnation: options.isSameProcessIncarnation }),
|
|
57
|
+
...(shared
|
|
58
|
+
? {
|
|
59
|
+
ownerFields: () => ({ label: options.ownerLabel }),
|
|
60
|
+
validateOwnerFields: (record) => typeof record.label === "string" && isCanonicalMainLaunchdLabel(record.label),
|
|
61
|
+
}
|
|
62
|
+
: {}),
|
|
63
|
+
parseLegacyOwner: (record) => {
|
|
64
|
+
if (typeof record.pid !== "number" || !Number.isSafeInteger(record.pid) || record.pid <= 0)
|
|
65
|
+
return undefined;
|
|
66
|
+
const incarnation = processIncarnationFromJson(record.incarnation);
|
|
67
|
+
return { pid: record.pid, ...(incarnation === undefined ? {} : { incarnation }) };
|
|
68
|
+
},
|
|
69
|
+
// Shared ownership has never accepted legacy records; retain that fail-closed floor.
|
|
70
|
+
allowCurrentUserLegacyOwnerMode: !shared,
|
|
71
|
+
isLegacyProcessAlive: isProcessAlive,
|
|
72
|
+
invalidOwner: shared ? "error" : "ownerless",
|
|
73
|
+
livenessError: () => "assume-live",
|
|
74
|
+
...(options.beforeStaleLockRename === undefined
|
|
75
|
+
? {}
|
|
76
|
+
: { beforeStaleRename: options.beforeStaleLockRename }),
|
|
77
|
+
staleRace: "return",
|
|
78
|
+
...(shared && (options.waitTimeoutMs ?? 0) > 0
|
|
79
|
+
? { timeoutError: (observed) => sharedLaunchdLogLockTimeoutError(observed) }
|
|
80
|
+
: {}),
|
|
81
|
+
stalePath: ({ now: staleAt, pid: stalePid, token }) => resolve(locksDir, `${target.label}.stale-${staleAt}-${stalePid}-${token}`),
|
|
82
|
+
releasedPath: ({ now: releasedAt, pid: ownerPid, token }) => resolve(locksDir, `${target.label}.released-${releasedAt}-${ownerPid}-${token}`),
|
|
83
|
+
abandonedPath: ({ now: abandonedAt, pid: ownerPid, token }) => resolve(locksDir, `${target.label}.abandoned-${abandonedAt}-${ownerPid}-${token}`),
|
|
84
|
+
});
|
|
85
|
+
return held === undefined ? undefined : () => held.release();
|
|
86
|
+
}
|
|
87
|
+
function isCanonicalMainLaunchdLabel(value) {
|
|
88
|
+
try {
|
|
89
|
+
deriveLaunchdMaintenanceLabel(value);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function sharedLaunchdLogLockTimeoutError(observed) {
|
|
97
|
+
if (observed.kind !== "owned" || observed.owner === undefined) {
|
|
98
|
+
return new Error(`Timed out after ${SHARED_LAUNCHD_LOG_LOCK_WAIT_MS}ms waiting for an owner record to finish publishing.`);
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
const record = JSON.parse(observed.owner.content);
|
|
102
|
+
const pid = typeof record.pid === "number" ? String(record.pid) : "unknown";
|
|
103
|
+
const label = typeof record.label === "string" ? record.label : "unknown";
|
|
104
|
+
const acquiredAt = typeof record.createdAt === "string" ? record.createdAt : "unknown";
|
|
105
|
+
const incarnation = record.incarnation === undefined ? "unknown" : JSON.stringify(record.incarnation);
|
|
106
|
+
return new Error(`Timed out after ${SHARED_LAUNCHD_LOG_LOCK_WAIT_MS}ms; holder pid=${pid} label=${label} acquiredAt=${acquiredAt} incarnation=${incarnation}.`);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return new Error(`Timed out after ${SHARED_LAUNCHD_LOG_LOCK_WAIT_MS}ms; the owner record could not be described safely.`);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function processIsAlive(pid) {
|
|
113
|
+
try {
|
|
114
|
+
process.kill(pid, 0);
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return isErrno(error, "EPERM");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function isErrno(error, code) {
|
|
122
|
+
return error?.code === code;
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=launchd-lifecycle-lock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchd-lifecycle-lock.js","sourceRoot":"","sources":["../src/launchd-lifecycle-lock.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ManagedLaunchdLogMonitorStatus } from "./background-log-maintenance.js";
|
|
2
|
+
import type { BackgroundLifecycleTarget } from "./background.js";
|
|
3
|
+
import type { LaunchdPaths } from "./launchd.js";
|
|
4
|
+
export declare function writeLaunchdLogMonitorStatus(target: BackgroundLifecycleTarget, status: ManagedLaunchdLogMonitorStatus): Promise<void>;
|
|
5
|
+
export declare function readLaunchdLogMonitorStatus(mainLabel: string, paths: Pick<LaunchdPaths, "logDir">): Promise<ManagedLaunchdLogMonitorStatus | undefined>;
|
|
6
|
+
export declare function removeLaunchdLogMonitorStatus(target: BackgroundLifecycleTarget): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=launchd-log-monitor-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchd-log-monitor-status.d.ts","sourceRoot":"","sources":["../src/launchd-log-monitor-status.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAmBjD,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,yBAAyB,EACjC,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED,wBAAsB,2BAA2B,CAC/C,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GAClC,OAAO,CAAC,8BAA8B,GAAG,SAAS,CAAC,CAqCrD;AAiBD,wBAAsB,6BAA6B,CAAC,MAAM,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBpG"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { constants as fsConstants } from "node:fs";
|
|
3
|
+
import { lstat, mkdir, open, rm } from "node:fs/promises";
|
|
4
|
+
import { dirname, resolve } from "node:path";
|
|
5
|
+
import process from "node:process";
|
|
6
|
+
import { deriveLaunchdMaintenanceLabel } from "./launchd.js";
|
|
7
|
+
import { secureFileReplace } from "./secure-file-replace.js";
|
|
8
|
+
const STATUS_MAX_BYTES = 1024;
|
|
9
|
+
const STATUS_DIRECTORY = "launchd-log-monitor";
|
|
10
|
+
const STATUS_TEMPORARY_SUFFIX = ".next";
|
|
11
|
+
const OUTCOMES = new Set([
|
|
12
|
+
"idle",
|
|
13
|
+
"shared-only",
|
|
14
|
+
"pending-artifact",
|
|
15
|
+
"cooldown",
|
|
16
|
+
"stopped",
|
|
17
|
+
"helper-unloaded",
|
|
18
|
+
"helper-running",
|
|
19
|
+
"requested",
|
|
20
|
+
"request-failed",
|
|
21
|
+
"inspection-failed",
|
|
22
|
+
]);
|
|
23
|
+
export async function writeLaunchdLogMonitorStatus(target, status) {
|
|
24
|
+
validateStatus(status);
|
|
25
|
+
const paths = statusPaths(target.label, target.paths);
|
|
26
|
+
await assertSafeStatusRoot(paths.root);
|
|
27
|
+
await ensurePrivateDirectory(paths.directory);
|
|
28
|
+
const contents = `${JSON.stringify(status)}\n`;
|
|
29
|
+
if (Buffer.byteLength(contents) > STATUS_MAX_BYTES) {
|
|
30
|
+
throw new Error("Launchd log monitor status exceeds its fixed size bound.");
|
|
31
|
+
}
|
|
32
|
+
let expected;
|
|
33
|
+
try {
|
|
34
|
+
expected = await lstat(paths.file);
|
|
35
|
+
assertPrivateFile(expected, paths.file);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
if (error.code !== "ENOENT")
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
await secureFileReplace({
|
|
42
|
+
path: paths.file,
|
|
43
|
+
temporaryPath: paths.temporary,
|
|
44
|
+
contents,
|
|
45
|
+
mode: 0o600,
|
|
46
|
+
target: {
|
|
47
|
+
expected: expected === undefined
|
|
48
|
+
? { kind: "missing" }
|
|
49
|
+
: {
|
|
50
|
+
kind: "present",
|
|
51
|
+
validate: async (candidate) => {
|
|
52
|
+
try {
|
|
53
|
+
const current = await lstat(candidate);
|
|
54
|
+
assertPrivateFile(current, candidate);
|
|
55
|
+
return sameFile(current, expected);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
invalidError: () => new Error("Launchd log monitor status changed before replacement."),
|
|
62
|
+
},
|
|
63
|
+
recovery: "restore-previous",
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
export async function readLaunchdLogMonitorStatus(mainLabel, paths) {
|
|
68
|
+
const status = statusPaths(mainLabel, paths);
|
|
69
|
+
await assertSafeStatusRoot(status.root);
|
|
70
|
+
try {
|
|
71
|
+
assertPrivateDirectory(await lstat(status.directory));
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error.code === "ENOENT")
|
|
75
|
+
return undefined;
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
let initial;
|
|
79
|
+
try {
|
|
80
|
+
initial = await lstat(status.file);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error.code === "ENOENT")
|
|
84
|
+
return undefined;
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
assertPrivateFile(initial, status.file);
|
|
88
|
+
if (initial.size < 1 || initial.size > STATUS_MAX_BYTES) {
|
|
89
|
+
throw new Error("Launchd log monitor status violates its fixed size bound.");
|
|
90
|
+
}
|
|
91
|
+
const handle = await open(status.file, fsConstants.O_RDONLY | fsConstants.O_NOFOLLOW | fsConstants.O_NONBLOCK);
|
|
92
|
+
try {
|
|
93
|
+
const opened = await handle.stat();
|
|
94
|
+
assertPrivateFile(opened, status.file);
|
|
95
|
+
if (!sameFile(initial, opened))
|
|
96
|
+
throw new Error("Launchd log monitor status changed while opened.");
|
|
97
|
+
const contents = await handle.readFile();
|
|
98
|
+
const after = await handle.stat();
|
|
99
|
+
const current = await lstat(status.file);
|
|
100
|
+
if (!sameFile(opened, after) || !sameFile(after, current) || contents.length !== after.size) {
|
|
101
|
+
throw new Error("Launchd log monitor status changed while read.");
|
|
102
|
+
}
|
|
103
|
+
const parsed = JSON.parse(contents.toString("utf8"));
|
|
104
|
+
validateStatus(parsed);
|
|
105
|
+
return parsed;
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
await handle.close();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Inspect but never create or chmod the shared ~/.mono-agent root. An owned
|
|
113
|
+
* read-only/traversable root such as 0755 can still contain a private 0700
|
|
114
|
+
* status directory while scheduled maintenance owns any root permission repair.
|
|
115
|
+
*/
|
|
116
|
+
async function assertSafeStatusRoot(path) {
|
|
117
|
+
const details = await lstat(path);
|
|
118
|
+
const uid = process.getuid?.();
|
|
119
|
+
if (!details.isDirectory() || details.isSymbolicLink()
|
|
120
|
+
|| (uid !== undefined && details.uid !== uid)
|
|
121
|
+
|| (details.mode & 0o022) !== 0) {
|
|
122
|
+
throw new Error("Launchd log monitor status root is unavailable or unsafe.");
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
export async function removeLaunchdLogMonitorStatus(target) {
|
|
126
|
+
const paths = statusPaths(target.label, target.paths);
|
|
127
|
+
try {
|
|
128
|
+
await assertSafeStatusRoot(paths.root);
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (error.code === "ENOENT")
|
|
132
|
+
return;
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
135
|
+
try {
|
|
136
|
+
assertPrivateDirectory(await lstat(paths.directory));
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error.code === "ENOENT")
|
|
140
|
+
return;
|
|
141
|
+
throw error;
|
|
142
|
+
}
|
|
143
|
+
for (const path of [paths.temporary, paths.file]) {
|
|
144
|
+
try {
|
|
145
|
+
assertPrivateFile(await lstat(path), path);
|
|
146
|
+
await rm(path);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
if (error.code !== "ENOENT")
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function statusPaths(mainLabel, paths) {
|
|
155
|
+
deriveLaunchdMaintenanceLabel(mainLabel);
|
|
156
|
+
const root = resolve(dirname(paths.logDir));
|
|
157
|
+
const directory = resolve(root, STATUS_DIRECTORY);
|
|
158
|
+
const key = createHash("sha256").update(mainLabel).digest("hex").slice(0, 24);
|
|
159
|
+
const file = resolve(directory, `${key}.json`);
|
|
160
|
+
return { root, directory, file, temporary: `${file}${STATUS_TEMPORARY_SUFFIX}` };
|
|
161
|
+
}
|
|
162
|
+
async function ensurePrivateDirectory(path) {
|
|
163
|
+
try {
|
|
164
|
+
await mkdir(path, { mode: 0o700 });
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
if (error.code !== "EEXIST")
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
170
|
+
const details = await lstat(path);
|
|
171
|
+
assertPrivateDirectory(details);
|
|
172
|
+
}
|
|
173
|
+
function assertPrivateDirectory(details) {
|
|
174
|
+
const uid = process.getuid?.();
|
|
175
|
+
if (!details.isDirectory() || details.isSymbolicLink()
|
|
176
|
+
|| (uid !== undefined && details.uid !== uid)
|
|
177
|
+
|| (details.mode & 0o777) !== 0o700) {
|
|
178
|
+
throw new Error("Launchd log monitor status directory must be a real owner-private directory.");
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function assertPrivateFile(details, path) {
|
|
182
|
+
const uid = process.getuid?.();
|
|
183
|
+
if (!details.isFile() || details.isSymbolicLink() || details.nlink !== 1
|
|
184
|
+
|| (uid !== undefined && details.uid !== uid)
|
|
185
|
+
|| (details.mode & 0o777) !== 0o600) {
|
|
186
|
+
throw new Error(`Launchd log monitor status ${path} must be one owner-private regular file.`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
function sameFile(left, right) {
|
|
190
|
+
return left.dev === right.dev
|
|
191
|
+
&& left.ino === right.ino
|
|
192
|
+
&& left.uid === right.uid
|
|
193
|
+
&& left.nlink === right.nlink
|
|
194
|
+
&& left.mode === right.mode
|
|
195
|
+
&& left.size === right.size
|
|
196
|
+
&& left.mtimeMs === right.mtimeMs
|
|
197
|
+
&& left.ctimeMs === right.ctimeMs;
|
|
198
|
+
}
|
|
199
|
+
function validateStatus(value) {
|
|
200
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
201
|
+
throw new Error("Launchd log monitor status must be an object.");
|
|
202
|
+
}
|
|
203
|
+
const record = value;
|
|
204
|
+
if (Object.keys(record).sort().join(",")
|
|
205
|
+
!== "cooldownDeadline,lastInspectionAt,lastOutcome,version,wakeCount") {
|
|
206
|
+
throw new Error("Launchd log monitor status has unexpected fields.");
|
|
207
|
+
}
|
|
208
|
+
if (record.version !== 1
|
|
209
|
+
|| typeof record.lastInspectionAt !== "string"
|
|
210
|
+
|| !validDate(record.lastInspectionAt)
|
|
211
|
+
|| typeof record.wakeCount !== "number"
|
|
212
|
+
|| !Number.isSafeInteger(record.wakeCount)
|
|
213
|
+
|| record.wakeCount < 0
|
|
214
|
+
|| typeof record.lastOutcome !== "string"
|
|
215
|
+
|| !OUTCOMES.has(record.lastOutcome)
|
|
216
|
+
|| typeof record.cooldownDeadline !== "string"
|
|
217
|
+
|| !validDate(record.cooldownDeadline)) {
|
|
218
|
+
throw new Error("Launchd log monitor status is malformed.");
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
function validDate(value) {
|
|
222
|
+
return Number.isFinite(Date.parse(value)) && new Date(value).toISOString() === value;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=launchd-log-monitor-status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"launchd-log-monitor-status.js","sourceRoot":"","sources":["../src/launchd-log-monitor-status.ts"],"names":[],"mappings":"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"}
|
package/dist/launchd-logs.d.ts
CHANGED
|
@@ -3,12 +3,14 @@ import { type FileHandle } from "node:fs/promises";
|
|
|
3
3
|
import type { LaunchdPaths } from "./launchd.js";
|
|
4
4
|
export declare const LAUNCHD_LOG_MAX_BYTES: number;
|
|
5
5
|
export declare const LAUNCHD_LOG_ROTATION_COUNT = 3;
|
|
6
|
-
export declare const
|
|
6
|
+
export declare const LAUNCHD_LOG_MONITOR_INTERVAL_SECONDS: number;
|
|
7
7
|
export interface LaunchdLogPolicy {
|
|
8
8
|
readonly maxBytes: number;
|
|
9
9
|
readonly rotationCount: number;
|
|
10
10
|
}
|
|
11
11
|
export declare const DEFAULT_LAUNCHD_LOG_POLICY: LaunchdLogPolicy;
|
|
12
|
+
/** Source-audited callers which may repair the shared directory chain. */
|
|
13
|
+
export declare const SHARED_LAUNCHD_LOG_MUTATION_CALLERS: readonly ["beginLaunchdLogMaintenanceIntent", "replaceMaintenanceIntentPhase", "clearLaunchdLogMaintenanceIntent", "rotateStoppedLaunchdLogs"];
|
|
12
14
|
export type LaunchdLogFileState = "missing" | "ok" | "repairable" | "unsafe" | "unreadable";
|
|
13
15
|
export interface LaunchdLogFileInspection {
|
|
14
16
|
readonly generation: number;
|
|
@@ -32,10 +34,16 @@ export interface LaunchdLogInspection {
|
|
|
32
34
|
readonly canMaintain: boolean;
|
|
33
35
|
/** Oversized files or repairable owner-only permissions require a maintenance pass. */
|
|
34
36
|
readonly needsMaintenance: boolean;
|
|
37
|
+
/** Safe per-agent file reasons which alone may wake this agent's helper. */
|
|
38
|
+
readonly perAgentFileReasons: readonly string[];
|
|
39
|
+
/** Shared directory repair is owned by scheduled maintenance, never a worker wake. */
|
|
40
|
+
readonly sharedDirectoryNeedsMaintenance: boolean;
|
|
35
41
|
/** A durable journal proves a stopped-writer rotation began and must resume. */
|
|
36
42
|
readonly pendingTransaction: boolean;
|
|
37
43
|
/** A lifecycle marker exists; its authenticated phase decides whether rotation or restore recovery is safe. */
|
|
38
44
|
readonly pendingMaintenance: boolean;
|
|
45
|
+
/** Incomplete next/stage artifacts are helper recovery state, never a worker wake. */
|
|
46
|
+
readonly pendingPreparation: boolean;
|
|
39
47
|
readonly issues: readonly string[];
|
|
40
48
|
}
|
|
41
49
|
export interface LaunchdLogMaintenanceIntent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launchd-logs.d.ts","sourceRoot":"","sources":["../src/launchd-logs.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,KAAK,UAAU,EAAqC,MAAM,kBAAkB,CAAC;AAKtF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,eAAO,MAAM,qBAAqB,QAAkB,CAAC;AACrD,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"launchd-logs.d.ts","sourceRoot":"","sources":["../src/launchd-logs.ts"],"names":[],"mappings":"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"}
|