@cortexkit/aft-bridge 0.57.1 → 0.58.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.
Files changed (108) hide show
  1. package/dist/bash-hints.d.ts +22 -3
  2. package/dist/bash-hints.d.ts.map +1 -1
  3. package/dist/bash-hints.js +28 -9
  4. package/dist/bash-hints.js.map +1 -1
  5. package/dist/bash-host-fallback.js +1 -1
  6. package/dist/bash-host-fallback.js.map +1 -1
  7. package/dist/binary-identity.d.ts +109 -0
  8. package/dist/binary-identity.d.ts.map +1 -0
  9. package/dist/binary-identity.js +295 -0
  10. package/dist/binary-identity.js.map +1 -0
  11. package/dist/bridge.d.ts +10 -1
  12. package/dist/bridge.d.ts.map +1 -1
  13. package/dist/bridge.js +50 -14
  14. package/dist/bridge.js.map +1 -1
  15. package/dist/child-process.d.ts +37 -0
  16. package/dist/child-process.d.ts.map +1 -0
  17. package/dist/child-process.js +62 -0
  18. package/dist/child-process.js.map +1 -0
  19. package/dist/coerce.d.ts +2 -0
  20. package/dist/coerce.d.ts.map +1 -1
  21. package/dist/coerce.js +29 -0
  22. package/dist/coerce.js.map +1 -1
  23. package/dist/config-error.d.ts +71 -0
  24. package/dist/config-error.d.ts.map +1 -0
  25. package/dist/config-error.js +112 -0
  26. package/dist/config-error.js.map +1 -0
  27. package/dist/downloader.d.ts +4 -2
  28. package/dist/downloader.d.ts.map +1 -1
  29. package/dist/downloader.js +41 -20
  30. package/dist/downloader.js.map +1 -1
  31. package/dist/durable-log.d.ts +7 -0
  32. package/dist/durable-log.d.ts.map +1 -1
  33. package/dist/durable-log.js +47 -4
  34. package/dist/durable-log.js.map +1 -1
  35. package/dist/error-contract.d.ts +19 -0
  36. package/dist/error-contract.d.ts.map +1 -1
  37. package/dist/error-contract.js +24 -0
  38. package/dist/error-contract.js.map +1 -1
  39. package/dist/feature-config.d.ts +192 -0
  40. package/dist/feature-config.d.ts.map +1 -0
  41. package/dist/feature-config.js +657 -0
  42. package/dist/feature-config.js.map +1 -0
  43. package/dist/index.d.ts +17 -7
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +17 -6
  46. package/dist/index.js.map +1 -1
  47. package/dist/message-detach.d.ts +25 -0
  48. package/dist/message-detach.d.ts.map +1 -0
  49. package/dist/message-detach.js +34 -0
  50. package/dist/message-detach.js.map +1 -0
  51. package/dist/migration-notices.d.ts +29 -0
  52. package/dist/migration-notices.d.ts.map +1 -0
  53. package/dist/migration-notices.js +114 -0
  54. package/dist/migration-notices.js.map +1 -0
  55. package/dist/migration.d.ts +1 -1
  56. package/dist/migration.d.ts.map +1 -1
  57. package/dist/migration.js +1 -1
  58. package/dist/migration.js.map +1 -1
  59. package/dist/npm-resolver.d.ts +1 -1
  60. package/dist/npm-resolver.d.ts.map +1 -1
  61. package/dist/npm-resolver.js +1 -1
  62. package/dist/npm-resolver.js.map +1 -1
  63. package/dist/onnx-probe.d.ts +44 -0
  64. package/dist/onnx-probe.d.ts.map +1 -0
  65. package/dist/onnx-probe.js +167 -0
  66. package/dist/onnx-probe.js.map +1 -0
  67. package/dist/onnx-runtime.d.ts +19 -4
  68. package/dist/onnx-runtime.d.ts.map +1 -1
  69. package/dist/onnx-runtime.js +146 -34
  70. package/dist/onnx-runtime.js.map +1 -1
  71. package/dist/path-lookup.d.ts +22 -0
  72. package/dist/path-lookup.d.ts.map +1 -0
  73. package/dist/path-lookup.js +51 -0
  74. package/dist/path-lookup.js.map +1 -0
  75. package/dist/resolver.d.ts +47 -21
  76. package/dist/resolver.d.ts.map +1 -1
  77. package/dist/resolver.js +254 -159
  78. package/dist/resolver.js.map +1 -1
  79. package/dist/revivable-transport.d.ts.map +1 -1
  80. package/dist/revivable-transport.js +12 -0
  81. package/dist/revivable-transport.js.map +1 -1
  82. package/dist/semantic-status.d.ts +10 -1
  83. package/dist/semantic-status.d.ts.map +1 -1
  84. package/dist/semantic-status.js +50 -2
  85. package/dist/semantic-status.js.map +1 -1
  86. package/dist/storage-paths.d.ts +9 -0
  87. package/dist/storage-paths.d.ts.map +1 -1
  88. package/dist/storage-paths.js +18 -1
  89. package/dist/storage-paths.js.map +1 -1
  90. package/dist/subc-transport.d.ts +60 -1
  91. package/dist/subc-transport.d.ts.map +1 -1
  92. package/dist/subc-transport.js +382 -69
  93. package/dist/subc-transport.js.map +1 -1
  94. package/dist/tar-executable.js +1 -1
  95. package/dist/tar-executable.js.map +1 -1
  96. package/dist/transport-factory.d.ts +14 -2
  97. package/dist/transport-factory.d.ts.map +1 -1
  98. package/dist/transport-factory.js +24 -16
  99. package/dist/transport-factory.js.map +1 -1
  100. package/dist/version-probe.d.ts +33 -0
  101. package/dist/version-probe.d.ts.map +1 -0
  102. package/dist/version-probe.js +108 -0
  103. package/dist/version-probe.js.map +1 -0
  104. package/package.json +2 -2
  105. package/dist/bash-timeout.d.ts +0 -19
  106. package/dist/bash-timeout.d.ts.map +0 -1
  107. package/dist/bash-timeout.js +0 -26
  108. package/dist/bash-timeout.js.map +0 -1
@@ -0,0 +1,71 @@
1
+ /**
2
+ * The "config error" state shared by every plugin host.
3
+ *
4
+ * When AFT's configuration cannot be used (a rejected retired key, a config
5
+ * file that does not parse, a subc connection file that does not exist, ...)
6
+ * the plugins used to throw during initialization. Hosts react to that by not
7
+ * loading the plugin at all and recording the reason only in their own log
8
+ * file, so neither the user nor the model learns that AFT is missing.
9
+ *
10
+ * Instead, a plugin in this state still loads and registers AFT's tool
11
+ * surface, but every tool call fails with the configuration error and its fix.
12
+ * Nothing runs in AFT's place: no bridge is spawned, no binary is resolved and
13
+ * no host tool is substituted, so the failure stays visible.
14
+ */
15
+ import type { BridgeToolCallRuntime } from "./pool.js";
16
+ import type { AftProjectTransport, AftTransportPool, ToolCallArguments, ToolCallOptions, ToolCallResult } from "./transport.js";
17
+ /**
18
+ * Appended to every config error. The plugins read their configuration once,
19
+ * at startup, so fixing the file does not take effect until the host restarts.
20
+ */
21
+ export declare const CONFIG_ERROR_RESTART_NOTE = "AFT reads its config only at startup, so restart the host after fixing it.";
22
+ /** The full text a config-error tool call fails with: the error, its fix, and the restart note. */
23
+ export declare function formatConfigErrorMessage(detail: string): string;
24
+ /**
25
+ * Where a configured `subc.connection_file` points: `~` and relative paths are
26
+ * resolved against the home directory, never the project, because the file is
27
+ * a per-machine daemon endpoint. Shared by the transport factory and `doctor`.
28
+ */
29
+ export declare function resolveSubcConnectionFilePath(raw: string, home?: string): string;
30
+ /** The error for a configured subc connection file that does not exist, with its fix. */
31
+ export declare function formatSubcConnectionMissingMessage(raw: string, resolved: string): string;
32
+ /**
33
+ * Every configuration condition that puts a plugin in the config error state,
34
+ * named the same way by the plugins and by `doctor`.
35
+ */
36
+ export type ConfigErrorCode = "config_parse_error" | "config_rejected" | "subc_connection_missing";
37
+ /** Error text for a config file that does not parse, as the plugins and `doctor` report it. */
38
+ export declare function formatConfigParseErrorMessage(configPath: string, errorMessage: string): string;
39
+ /** One-line form for a status bar or sidebar row. */
40
+ export declare function formatConfigErrorStatusLine(message: string): string;
41
+ /**
42
+ * The status payload a plugin's status endpoint returns in the config error
43
+ * state. `status` is not `not_initialized`, so status clients render it rather
44
+ * than treating it as a placeholder and looking for another server.
45
+ */
46
+ export declare function configErrorStatusSnapshot(message: string): Record<string, unknown>;
47
+ /** Thrown by every tool call and every bridge request made in the config error state. */
48
+ export declare class AftConfigError extends Error {
49
+ constructor(message: string);
50
+ }
51
+ /**
52
+ * A transport pool that never starts anything. Requests that would need a
53
+ * bridge fail with the config error; lookups of live bridges report none, and
54
+ * lifecycle calls do nothing, so host hooks that probe the pool stay quiet.
55
+ */
56
+ export declare class ConfigErrorTransportPool implements AftTransportPool {
57
+ readonly message: string;
58
+ constructor(message: string);
59
+ private fail;
60
+ getBridge(_projectRoot: string): AftProjectTransport;
61
+ getActiveBridgeForRoot(_projectRoot: string): AftProjectTransport | null;
62
+ activeBridges(): AftProjectTransport[];
63
+ toolCall(_projectRoot: string, _runtime: BridgeToolCallRuntime, _name: string, _rawArgs?: ToolCallArguments, _options?: ToolCallOptions): Promise<ToolCallResult>;
64
+ setConfigureOverride(_key: string, _value: unknown): void;
65
+ reconfigure(_projectRoot: string, _overrides: Record<string, unknown>): Promise<void>;
66
+ replaceBinary(_path: string): Promise<string>;
67
+ isShutdown(): boolean;
68
+ shutdown(_reason?: string): Promise<void>;
69
+ closeSession(_projectRoot: string, _session: string): Promise<void>;
70
+ }
71
+ //# sourceMappingURL=config-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-error.d.ts","sourceRoot":"","sources":["../src/config-error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,cAAc,EACf,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,yBAAyB,+EACwC,CAAC;AAE/E,mGAAmG;AACnG,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAI/D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,MAAM,CAK3F;AAED,yFAAyF;AACzF,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMxF;AAED;;;GAGG;AACH,MAAM,MAAM,eAAe,GAAG,oBAAoB,GAAG,iBAAiB,GAAG,yBAAyB,CAAC;AAEnG,+FAA+F;AAC/F,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAK9F;AAED,qDAAqD;AACrD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAOlF;AAED,yFAAyF;AACzF,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED;;;;GAIG;AACH,qBAAa,wBAAyB,YAAW,gBAAgB;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;IAEpC,OAAO,CAAC,IAAI;IAIZ,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB;IAIpD,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAIxE,aAAa,IAAI,mBAAmB,EAAE;IAIhC,QAAQ,CACZ,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,qBAAqB,EAC/B,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,QAAQ,CAAC,EAAE,eAAe,GACzB,OAAO,CAAC,cAAc,CAAC;IAI1B,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAEnD,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAErF,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD,UAAU,IAAI,OAAO;IAIf,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzC,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAC1E"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * The "config error" state shared by every plugin host.
3
+ *
4
+ * When AFT's configuration cannot be used (a rejected retired key, a config
5
+ * file that does not parse, a subc connection file that does not exist, ...)
6
+ * the plugins used to throw during initialization. Hosts react to that by not
7
+ * loading the plugin at all and recording the reason only in their own log
8
+ * file, so neither the user nor the model learns that AFT is missing.
9
+ *
10
+ * Instead, a plugin in this state still loads and registers AFT's tool
11
+ * surface, but every tool call fails with the configuration error and its fix.
12
+ * Nothing runs in AFT's place: no bridge is spawned, no binary is resolved and
13
+ * no host tool is substituted, so the failure stays visible.
14
+ */
15
+ import { homedir } from "node:os";
16
+ import { isAbsolute, join } from "node:path";
17
+ /**
18
+ * Appended to every config error. The plugins read their configuration once,
19
+ * at startup, so fixing the file does not take effect until the host restarts.
20
+ */
21
+ export const CONFIG_ERROR_RESTART_NOTE = "AFT reads its config only at startup, so restart the host after fixing it.";
22
+ /** The full text a config-error tool call fails with: the error, its fix, and the restart note. */
23
+ export function formatConfigErrorMessage(detail) {
24
+ const trimmed = detail.trim();
25
+ const sentence = /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
26
+ return `${sentence} ${CONFIG_ERROR_RESTART_NOTE}`;
27
+ }
28
+ /**
29
+ * Where a configured `subc.connection_file` points: `~` and relative paths are
30
+ * resolved against the home directory, never the project, because the file is
31
+ * a per-machine daemon endpoint. Shared by the transport factory and `doctor`.
32
+ */
33
+ export function resolveSubcConnectionFilePath(raw, home = homedir()) {
34
+ const trimmed = raw.trim();
35
+ if (trimmed.startsWith("~"))
36
+ return join(home, trimmed.slice(1).replace(/^[/\\]/, ""));
37
+ if (isAbsolute(trimmed))
38
+ return trimmed;
39
+ return join(home, trimmed);
40
+ }
41
+ /** The error for a configured subc connection file that does not exist, with its fix. */
42
+ export function formatSubcConnectionMissingMessage(raw, resolved) {
43
+ return (`subc.connection_file is set to "${raw.trim()}" (resolved: ${resolved}) but no subc ` +
44
+ `connection file exists there. Start the Subconscious daemon, correct the path, ` +
45
+ `or remove subc.connection_file from your user config to use the standalone bridge.`);
46
+ }
47
+ /** Error text for a config file that does not parse, as the plugins and `doctor` report it. */
48
+ export function formatConfigParseErrorMessage(configPath, errorMessage) {
49
+ return (`AFT config at ${configPath} failed to parse: ${errorMessage}. ` +
50
+ "Fix the JSONC syntax in that file, or run `npx @cortexkit/aft doctor`.");
51
+ }
52
+ /** One-line form for a status bar or sidebar row. */
53
+ export function formatConfigErrorStatusLine(message) {
54
+ return `AFT config error: ${message.replace(/\s+/g, " ").trim()}`;
55
+ }
56
+ /**
57
+ * The status payload a plugin's status endpoint returns in the config error
58
+ * state. `status` is not `not_initialized`, so status clients render it rather
59
+ * than treating it as a placeholder and looking for another server.
60
+ */
61
+ export function configErrorStatusSnapshot(message) {
62
+ return {
63
+ success: true,
64
+ status: "config_error",
65
+ config_error: message,
66
+ message: formatConfigErrorStatusLine(message),
67
+ };
68
+ }
69
+ /** Thrown by every tool call and every bridge request made in the config error state. */
70
+ export class AftConfigError extends Error {
71
+ constructor(message) {
72
+ super(message);
73
+ this.name = "AftConfigError";
74
+ }
75
+ }
76
+ /**
77
+ * A transport pool that never starts anything. Requests that would need a
78
+ * bridge fail with the config error; lookups of live bridges report none, and
79
+ * lifecycle calls do nothing, so host hooks that probe the pool stay quiet.
80
+ */
81
+ export class ConfigErrorTransportPool {
82
+ message;
83
+ constructor(message) {
84
+ this.message = message;
85
+ }
86
+ fail() {
87
+ throw new AftConfigError(this.message);
88
+ }
89
+ getBridge(_projectRoot) {
90
+ return this.fail();
91
+ }
92
+ getActiveBridgeForRoot(_projectRoot) {
93
+ return null;
94
+ }
95
+ activeBridges() {
96
+ return [];
97
+ }
98
+ async toolCall(_projectRoot, _runtime, _name, _rawArgs, _options) {
99
+ return this.fail();
100
+ }
101
+ setConfigureOverride(_key, _value) { }
102
+ async reconfigure(_projectRoot, _overrides) { }
103
+ async replaceBinary(_path) {
104
+ return this.fail();
105
+ }
106
+ isShutdown() {
107
+ return false;
108
+ }
109
+ async shutdown(_reason) { }
110
+ async closeSession(_projectRoot, _session) { }
111
+ }
112
+ //# sourceMappingURL=config-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-error.js","sourceRoot":"","sources":["../src/config-error.ts"],"names":[],"mappings":"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"}
@@ -15,8 +15,10 @@
15
15
  * `--version`. Returns the bare version (e.g. `"0.22.1"`) without the
16
16
  * leading `v` or the `aft` prefix, or `null` if the invocation fails.
17
17
  *
18
- * Shared by the downloader and resolver so both cache hot-paths validate the
19
- * binary itself instead of trusting directory names.
18
+ * BLOCKING: the calling thread waits in `posix_spawn` until the child is
19
+ * loaded, which for a cold binary under memory pressure has taken close to a
20
+ * minute. Only command-line tools may call this. Plugin hosts must use the
21
+ * identity sidecar (`isTrustedCachedBinary`) or `readBinaryVersionOffThread`.
20
22
  */
21
23
  export declare function readBinaryVersion(binaryPath: string): string | null;
22
24
  /** Keep getCacheDir as an alias for getAftBinaryCacheDir so existing callers using the older name continue to work. */
@@ -1 +1 @@
1
- {"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqCH;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsBnE;AAgBD,uHAAuH;AACvH,OAAO,EAAE,oBAAoB,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEvE,4CAA4C;AAC5C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;sFAGsF;AACtF,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInE;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA2N7E;AAUD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiC3E;AAED,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AA8FF,iBAAe,mBAAmB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,MAAM,IAAI,CAAC,CA+CrB;AAwCD,eAAO,MAAM,QAAQ;;CAEpB,CAAC"}
1
+ {"version":3,"file":"downloader.d.ts","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA4CH;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAgBnE;AA4BD,uHAAuH;AACvH,OAAO,EAAE,oBAAoB,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEvE,4CAA4C;AAC5C,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;sFAGsF;AACtF,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAInE;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwO7E;AAUD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiC3E;AAED,KAAK,kBAAkB,GAAG;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AA8FF,iBAAe,mBAAmB,CAChC,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,kBAAuB,GAC9B,OAAO,CAAC,MAAM,IAAI,CAAC,CA+CrB;AAwCD,eAAO,MAAM,QAAQ;;CAEpB,CAAC"}
@@ -10,7 +10,6 @@
10
10
  *
11
11
  * Cache dir respects XDG_CACHE_HOME on Linux/macOS and LOCALAPPDATA on Windows.
12
12
  */
13
- import { spawnSync } from "node:child_process";
14
13
  import { createHash, randomUUID } from "node:crypto";
15
14
  import { chmodSync, closeSync, copyFileSync, createWriteStream, existsSync, mkdirSync, openSync, readdirSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, writeSync, } from "node:fs";
16
15
  import { hostname } from "node:os";
@@ -18,8 +17,11 @@ import { join } from "node:path";
18
17
  import { Readable } from "node:stream";
19
18
  import { pipeline } from "node:stream/promises";
20
19
  import { error, log, warn } from "./active-logger.js";
20
+ import { isTrustedCachedBinary, recordBinaryIdentity, removeBinaryIdentitySidecar, writeBinaryIdentitySidecar, } from "./binary-identity.js";
21
21
  import { getAftBinaryCacheDir } from "./cache-paths.js";
22
+ import { spawnSync } from "./child-process.js";
22
23
  import { PLATFORM_ARCH_MAP, PLATFORM_ASSET_MAP } from "./platform.js";
24
+ import { parseAftVersionOutput, readBinaryVersionOffThread } from "./version-probe.js";
23
25
  const REPO = "cortexkit/aft";
24
26
  const DOWNLOAD_TIMEOUT_MS = 300_000;
25
27
  const LATEST_TAG_TIMEOUT_MS = 30_000;
@@ -33,8 +35,10 @@ const DOWNLOAD_LOCK_TIMEOUT_MS = DOWNLOAD_LOCK_STALE_MS + 30_000;
33
35
  * `--version`. Returns the bare version (e.g. `"0.22.1"`) without the
34
36
  * leading `v` or the `aft` prefix, or `null` if the invocation fails.
35
37
  *
36
- * Shared by the downloader and resolver so both cache hot-paths validate the
37
- * binary itself instead of trusting directory names.
38
+ * BLOCKING: the calling thread waits in `posix_spawn` until the child is
39
+ * loaded, which for a cold binary under memory pressure has taken close to a
40
+ * minute. Only command-line tools may call this. Plugin hosts must use the
41
+ * identity sidecar (`isTrustedCachedBinary`) or `readBinaryVersionOffThread`.
38
42
  */
39
43
  export function readBinaryVersion(binaryPath) {
40
44
  try {
@@ -43,19 +47,12 @@ export function readBinaryVersion(binaryPath) {
43
47
  stdio: ["pipe", "pipe", "pipe"],
44
48
  // macOS assesses an executable once per inode, and a just-downloaded
45
49
  // binary is always a new one. That first exec has been measured at
46
- // seconds — occasionally far worse under memory pressure — so a
47
- // five-second cap would report a perfectly good binary as unreadable
48
- // and trigger a needless re-download. Later execs of the same inode
49
- // return in milliseconds, so this budget is only ever paid once.
50
+ // seconds — far worse under memory pressure — so a five-second cap
51
+ // would report a perfectly good binary as unreadable and trigger a
52
+ // needless re-download.
50
53
  timeout: 60_000,
51
54
  });
52
- const stdoutVersion = result.stdout?.trim();
53
- const stderrVersion = result.stderr?.trim();
54
- const rawVersion = stdoutVersion || stderrVersion;
55
- if (!rawVersion)
56
- return null;
57
- // `aft --version` outputs "aft 0.9.0" — extract just the version number
58
- return rawVersion.replace(/^aft\s+/, "");
55
+ return parseAftVersionOutput(result.stdout ?? "", result.stderr ?? "");
59
56
  }
60
57
  catch {
61
58
  return null;
@@ -64,11 +61,23 @@ export function readBinaryVersion(binaryPath) {
64
61
  function expectedVersionFromTag(tag) {
65
62
  return tag.startsWith("v") ? tag.slice(1) : tag;
66
63
  }
67
- function isExpectedCachedBinary(binaryPath, tag) {
64
+ /**
65
+ * Decide whether the cached binary at `binaryPath` is the release `tag`
66
+ * without executing it on the calling thread. A matching identity sidecar is
67
+ * enough. An entry without one (written before sidecars existed) or whose
68
+ * sidecar no longer matches the file is asked for its version on a worker
69
+ * thread; when that confirms the version, a fresh sidecar is recorded in the
70
+ * background so later lookups are stat-only.
71
+ */
72
+ async function isExpectedCachedBinary(binaryPath, tag) {
68
73
  const expected = expectedVersionFromTag(tag);
69
- const actual = readBinaryVersion(binaryPath);
70
- if (actual === expected)
74
+ if (isTrustedCachedBinary(binaryPath, expected))
71
75
  return true;
76
+ const actual = await readBinaryVersionOffThread(binaryPath);
77
+ if (actual === expected) {
78
+ void recordBinaryIdentity(binaryPath, expected);
79
+ return true;
80
+ }
72
81
  warn(`Cached binary at ${binaryPath} reports ${actual ?? "no version"}, expected ${expected}; refreshing cache entry`);
73
82
  return false;
74
83
  }
@@ -127,7 +136,7 @@ export async function downloadBinary(version) {
127
136
  // Already cached for this version. Probe the binary itself before trusting
128
137
  // the cache directory name; stale hot-swap entries can otherwise shadow a
129
138
  // freshly requested compatible version forever.
130
- if (existsSync(binaryPath) && isExpectedCachedBinary(binaryPath, tag)) {
139
+ if (existsSync(binaryPath) && (await isExpectedCachedBinary(binaryPath, tag))) {
131
140
  return binaryPath;
132
141
  }
133
142
  const downloadUrl = `https://github.com/${REPO}/releases/download/${tag}/${assetName}`;
@@ -183,7 +192,7 @@ export async function downloadBinary(version) {
183
192
  // Another process may have completed the same version while we waited.
184
193
  // Re-probe here too because a stale owner might have left a mismatched
185
194
  // binary in the versioned directory before this process acquired the lock.
186
- if (existsSync(binaryPath) && isExpectedCachedBinary(binaryPath, tag)) {
195
+ if (existsSync(binaryPath) && (await isExpectedCachedBinary(binaryPath, tag))) {
187
196
  return binaryPath;
188
197
  }
189
198
  // Download binary and checksum file in parallel
@@ -247,6 +256,9 @@ export async function downloadBinary(version) {
247
256
  "The binary may have been tampered with.");
248
257
  }
249
258
  log(`Checksum verified (SHA-256: ${actualHash.slice(0, 16)}...)`);
259
+ // Drop the old entry's sidecar first so no reader pairs it with the new
260
+ // bytes; the stat check would reject that pairing anyway.
261
+ removeBinaryIdentitySidecar(binaryPath);
250
262
  // Atomic rename (POSIX) or copy (Windows — renameSync fails with EEXIST
251
263
  // when target exists). On Windows, copyFileSync overwrites the target;
252
264
  // if it fails the original binary at binaryPath is preserved.
@@ -257,6 +269,15 @@ export async function downloadBinary(version) {
257
269
  chmodSync(tmpPath, 0o755);
258
270
  renameSync(tmpPath, binaryPath);
259
271
  }
272
+ // The bytes matched the release checksum for `tag`, so the version is
273
+ // known without running the binary. Recorded only once the binary is in
274
+ // its final place, so the sidecar describes that exact file.
275
+ try {
276
+ writeBinaryIdentitySidecar(binaryPath, tag, actualHash);
277
+ }
278
+ catch (err) {
279
+ warn(`Could not record identity for ${binaryPath}: ${err instanceof Error ? err.message : String(err)}`);
280
+ }
260
281
  // Binary was replaced successfully. Clean up the temp file best-effort;
261
282
  // a cleanup failure should NOT propagate as a download failure.
262
283
  try {
@@ -321,7 +342,7 @@ export async function ensureBinary(version) {
321
342
  // Do NOT fall back to legacy flat cache — it may contain a different version,
322
343
  // causing an infinite spawn-check-replace loop.
323
344
  const versionCached = getCachedBinaryPath(tag);
324
- if (versionCached && isExpectedCachedBinary(versionCached, tag)) {
345
+ if (versionCached && (await isExpectedCachedBinary(versionCached, tag))) {
325
346
  log(`Found cached binary for ${tag}: ${versionCached}`);
326
347
  return versionCached;
327
348
  }
@@ -1 +1 @@
1
- {"version":3,"file":"downloader.js","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"downloader.js","sourceRoot":"","sources":["../src/downloader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EACL,SAAS,EACT,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,QAAQ,EACR,UAAU,EACV,SAAS,GACV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,2BAA2B,EAC3B,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAEvF,MAAM,IAAI,GAAG,eAAe,CAAC;AAC7B,MAAM,mBAAmB,GAAG,OAAO,CAAC;AACpC,MAAM,qBAAqB,GAAG,MAAM,CAAC;AACrC,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC7C,MAAM,sBAAsB,GAAG,EAAE,GAAG,MAAM,CAAC;AAC3C,2EAA2E;AAC3E,0EAA0E;AAC1E,MAAM,wBAAwB,GAAG,sBAAsB,GAAG,MAAM,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC,WAAW,CAAC,EAAE;YAClD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,qEAAqE;YACrE,mEAAmE;YACnE,mEAAmE;YACnE,mEAAmE;YACnE,wBAAwB;YACxB,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QACH,OAAO,qBAAqB,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAClD,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,sBAAsB,CAAC,UAAkB,EAAE,GAAW;IACnE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7D,MAAM,MAAM,GAAG,MAAM,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,KAAK,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CACF,oBAAoB,UAAU,YAAY,MAAM,IAAI,YAAY,cAAc,QAAQ,0BAA0B,CACjH,CAAC;IACF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uHAAuH;AACvH,OAAO,EAAE,oBAAoB,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEvE,4CAA4C;AAC5C,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1D,CAAC;AAED;;;sFAGsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;IAC1E,OAAO,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAgB;IACnD,kEAAkE;IAClE,qEAAqE;IACrE,uEAAuE;IACvE,iEAAiE;IACjE,mCAAmC;IACnC,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAC1D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAE5E,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,KAAK,CAAC,yBAAyB,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kCAAkC;IAClC,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,cAAc,EAAE,CAAC,CAAC;IACnD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,2EAA2E;IAC3E,yEAAyE;IACzE,sEAAsE;IACtE,yCAAyC;IACzC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;IAE3D,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC5D,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAEvD,2EAA2E;IAC3E,0EAA0E;IAC1E,gDAAgD;IAChD,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,sBAAsB,IAAI,sBAAsB,GAAG,IAAI,SAAS,EAAE,CAAC;IACvF,MAAM,WAAW,GAAG,sBAAsB,IAAI,sBAAsB,GAAG,mBAAmB,CAAC;IAE3F,GAAG,CAAC,2BAA2B,GAAG,SAAS,WAAW,KAAK,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;IAC3D,IAAI,WAAW,GAAwB,IAAI,CAAC;IAC5C,IAAI,gBAAgB,GAA2B,IAAI,CAAC;IACpD,IAAI,kBAAkB,GAA2B,IAAI,CAAC;IACtD,IAAI,aAAa,GAAyC,IAAI,CAAC;IAC/D,IAAI,eAAe,GAAyC,IAAI,CAAC;IACjE,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACxG,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,OAAO,CAAC;gBAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;YACzE,4EAA4E;QAC9E,CAAC;IACH,CAAC,CAAC;IACF,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,MAAM,0BAA0B,GAAG,GAAG,EAAE;QACtC,IAAI,WAAW;YAAE,OAAO;QACxB,WAAW,GAAG,IAAI,CAAC;QACnB,gBAAgB,EAAE,KAAK,EAAE,CAAC;QAC1B,kBAAkB,EAAE,KAAK,EAAE,CAAC;QAC5B,sBAAsB,EAAE,CAAC;QACzB,WAAW,EAAE,EAAE,CAAC;QAChB,WAAW,GAAG,IAAI,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,0BAA0B,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACpC,2EAA2E;QAC3E,uEAAuE;QACvE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,0BAA0B,EAAE,CAAC;IAEtD,6EAA6E;IAC7E,wEAAwE;IACxE,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAEjC,IAAI,CAAC;QACH,8EAA8E;QAC9E,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACnC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,WAAW,GAAG,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAClD,uBAAuB,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;QAEvD,uEAAuE;QACvE,uEAAuE;QACvE,2EAA2E;QAC3E,IAAI,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,sBAAsB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;YAC9E,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,gDAAgD;QAChD,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC3C,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;QAChD,MAAM,wBAAwB,GAAG,kBAAkB,CAAC;QACpD,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAC;QACtF,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC1F,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC3D,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,sBAAsB,CAAC,MAAM,EAAE,CAAC;YACjF,KAAK,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,CAAC;SACpF,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CACb,QAAQ,cAAc,CAAC,MAAM,KAAK,cAAc,CAAC,UAAU,KAAK,WAAW,GAAG,CAC/E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,yBAAyB,SAAS,cAAc,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,kBAAkB,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,kBAAkB,UAAU,gBAAgB,kBAAkB,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;YACzB,IAAI,CACF,+DAA+D,GAAG,IAAI;gBACpE,+CAA+C,CAClD,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAC;QACnD,YAAY,CAAC,eAAe,CAAC,CAAC;QAC9B,eAAe,GAAG,IAAI,CAAC;QACvB,MAAM,YAAY,GAAG,qBAAqB,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,IAAI,CACF,yEAAyE,SAAS,IAAI;gBACpF,+CAA+C,CAClD,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,eAAe,CAAyB;YACxD,SAAS,CAAC,KAAK,EAAE,UAAU;gBACzB,YAAY,IAAI,KAAK,CAAC,UAAU,CAAC;gBACjC,IAAI,YAAY,GAAG,kBAAkB,EAAE,CAAC;oBACtC,UAAU,CAAC,KAAK,CACd,IAAI,KAAK,CACP,qBAAqB,kBAAkB,wEAAwE,CAChH,CACF,CAAC;oBACF,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACvD,oFAAoF;QACpF,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAc,CAAC,CAAC;QACpD,MAAM,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5F,YAAY,CAAC,aAAa,CAAC,CAAC;QAC5B,aAAa,GAAG,IAAI,CAAC;QAErB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,yBAAyB,SAAS,cAAc,YAAY,SAAS,UAAU,IAAI;gBACjF,yCAAyC,CAC5C,CAAC;QACJ,CAAC;QACD,GAAG,CAAC,+BAA+B,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAElE,wEAAwE;QACxE,0DAA0D;QAC1D,2BAA2B,CAAC,UAAU,CAAC,CAAC;QACxC,wEAAwE;QACxE,uEAAuE;QACvE,8DAA8D;QAC9D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,YAAY,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1B,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAClC,CAAC;QACD,sEAAsE;QACtE,wEAAwE;QACxE,6DAA6D;QAC7D,IAAI,CAAC;YACH,0BAA0B,CAAC,UAAU,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CACF,iCAAiC,UAAU,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACnG,CAAC;QACJ,CAAC;QAED,wEAAwE;QACxE,gEAAgE;QAChE,IAAI,CAAC;YACH,IAAI,UAAU,CAAC,OAAO,CAAC;gBAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,8CAA8C,OAAO,gCAAgC,CAAC,CAAC;QAC9F,CAAC;QAED,GAAG,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;QAE/C,sBAAsB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAChC,IAAI,aAAa,EAAE,CAAC;YAClB,gBAAgB,EAAE,KAAK,EAAE,CAAC;YAC1B,YAAY,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,eAAe,EAAE,CAAC;YACpB,kBAAkB,EAAE,KAAK,EAAE,CAAC;YAC5B,YAAY,CAAC,eAAe,CAAC,CAAC;QAChC,CAAC;QACD,WAAW,EAAE,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED,kFAAkF;AAClF,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAkC,CAAC;AAEvE,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC;AAC3D,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAgB;IACjD,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,IAAI,GAAG,CAAC,KAAK,IAAI,EAAE;QACvB,IAAI,OAAO,EAAE,CAAC;YACZ,sEAAsE;YACtE,mEAAmE;YACnE,kEAAkE;YAClE,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YAErC,wEAAwE;YACxE,8EAA8E;YAC9E,gDAAgD;YAChD,MAAM,aAAa,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC/C,IAAI,aAAa,IAAI,CAAC,MAAM,sBAAsB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBACxE,GAAG,CAAC,2BAA2B,GAAG,KAAK,aAAa,EAAE,CAAC,CAAC;gBACxD,OAAO,aAAa,CAAC;YACvB,CAAC;YACD,GAAG,CAAC,wBAAwB,GAAG,kBAAkB,CAAC,CAAC;YACnD,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,0CAA0C;QAC1C,GAAG,CAAC,+CAA+C,CAAC,CAAC;QACrD,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC,CAAC,EAAE,CAAC;IACL,oBAAoB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC;QACH,OAAO,MAAM,IAAI,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;YAAE,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAaD,SAAS,uBAAuB;IAC9B,OAAO,IAAI,CAAC,SAAS,CAAC;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,QAAQ,EAAE;QACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,KAAK,EAAE,UAAU,EAAE;KACpB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAClD,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAiC,CAAC;YAC3E,OAAO;gBACL,GAAG,EAAE,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;gBACjF,QAAQ,EAAE,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI;aACpF,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;QACxE,QAAQ,EAAE,IAAI;KACf,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,GAAW;IACjC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wEAAwE;QACxE,mEAAmE;QACnE,OAAQ,GAA6B,CAAC,IAAI,KAAK,OAAO,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,KAAwB,EACxB,KAAa,EACb,OAAe;IAEf,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO;QAAE,OAAO,IAAI,CAAC;IAC3C,yEAAyE;IACzE,8EAA8E;IAC9E,OAAO,CACL,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1D,KAAK,CAAC,GAAG,KAAK,IAAI;QAClB,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,aAAqB;IAClE,IAAI,CAAC;QACH,2EAA2E;QAC3E,yEAAyE;QACzE,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,aAAa;YAAE,OAAO,KAAK,CAAC;QACpE,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,iBAAyB,EAAE,UAAkB;IAC5E,MAAM,UAAU,GAAG,GAAG,UAAU,GAAG,CAAC;IACpC,IAAI,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,iBAAiB,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5E,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1F,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YACtD,oEAAoE;YACpE,qDAAqD;YACrD,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,sBAAsB;gBAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;IAC3E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,QAAgB,EAChB,SAA6B,EAAE;IAE/B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,wBAAwB,CAAC;IAC/D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,sBAAsB,CAAC;IACzD,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,GAAG,CAAC;IACpD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,uBAAuB,EAAE,CAAC;YACxC,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC;YACD,OAAO,GAAG,EAAE;gBACV,IAAI,CAAC;oBACH,IAAI,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;wBAC9C,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;oBACpC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,iEAAiE;gBACnE,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;YACjD,IAAI,IAAI,KAAK,QAAQ;gBAAE,MAAM,GAAG,CAAC;YAEjC,IAAI,aAAqB,CAAC;YAC1B,IAAI,KAAa,CAAC;YAClB,IAAI,CAAC;gBACH,aAAa,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChD,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;YAClD,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,IAAK,OAAiC,CAAC,IAAI,KAAK,QAAQ;oBAAE,SAAS;gBACnE,MAAM,OAAO,CAAC;YAChB,CAAC;YAED,IAAI,yBAAyB,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC;gBACrF,IAAI,mBAAmB,CAAC,QAAQ,EAAE,aAAa,CAAC;oBAAE,SAAS;YAC7D,CAAC;YAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,wCAAwC,QAAQ,EAAE,CAAC,CAAC;YACtE,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,YAAoB,EAAE,SAAiB;IACpE,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,wCAAwC;QACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACvD,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,oDAAoD;AACpD,KAAK,UAAU,cAAc;IAC3B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,IAAI,kBAAkB,EAAE;YACnF,OAAO,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE;YACrD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QAC9B,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA0B,CAAC;QAC9D,OAAO,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,mBAAmB;CACpB,CAAC"}
@@ -2,6 +2,13 @@
2
2
  export declare const DEFAULT_LOG_BYTES: number;
3
3
  /** Retention hygiene keeps one backup generation and no numbered chain. */
4
4
  export declare const DEFAULT_LOG_GENERATIONS = 1;
5
+ /**
6
+ * Log lines can quote paths, commands and server output, so the log directory
7
+ * is owner-only and log files are owner read/write, matching the Rust daemon's
8
+ * logs in the same directory. POSIX only: Windows ignores these modes.
9
+ */
10
+ export declare const LOG_DIR_MODE = 448;
11
+ export declare const LOG_FILE_MODE = 384;
5
12
  import { resolveAftLogPath, resolveAftStorageRoot } from "./storage-paths.js";
6
13
  export { resolveAftLogPath, resolveAftStorageRoot };
7
14
  export interface RotatingLogOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"durable-log.d.ts","sourceRoot":"","sources":["../src/durable-log.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAClD,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;IAM1D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmB1B,qEAAqE;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,KAAK;YAmBL,MAAM;CAarB"}
1
+ {"version":3,"file":"durable-log.d.ts","sourceRoot":"","sources":["../src/durable-log.ts"],"names":[],"mappings":"AAGA,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,QAAmB,CAAC;AAClD,2EAA2E;AAC3E,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC;;;;GAIG;AACH,eAAO,MAAM,YAAY,MAAQ,CAAC;AAClC,eAAO,MAAM,aAAa,MAAQ,CAAC;AAEnC,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;AAEpD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB;IAM1D,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAmB1B,qEAAqE;IAC/D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,KAAK;YAgCL,MAAM;CAarB"}
@@ -1,9 +1,16 @@
1
- import { appendFile, mkdir, rename, rm, stat } from "node:fs/promises";
1
+ import { appendFile, chmod, mkdir, rename, rm, stat } from "node:fs/promises";
2
2
  import { dirname } from "node:path";
3
3
  /** Maximum size of the active plugin log before its single backup rotates in. */
4
4
  export const DEFAULT_LOG_BYTES = 32 * 1024 * 1024;
5
5
  /** Retention hygiene keeps one backup generation and no numbered chain. */
6
6
  export const DEFAULT_LOG_GENERATIONS = 1;
7
+ /**
8
+ * Log lines can quote paths, commands and server output, so the log directory
9
+ * is owner-only and log files are owner read/write, matching the Rust daemon's
10
+ * logs in the same directory. POSIX only: Windows ignores these modes.
11
+ */
12
+ export const LOG_DIR_MODE = 0o700;
13
+ export const LOG_FILE_MODE = 0o600;
7
14
  import { resolveAftLogPath, resolveAftStorageRoot } from "./storage-paths.js";
8
15
  export { resolveAftLogPath, resolveAftStorageRoot };
9
16
  /**
@@ -48,8 +55,23 @@ export class RotatingLogSink {
48
55
  await this.queue;
49
56
  }
50
57
  async write(data) {
51
- await mkdir(dirname(this.path), { recursive: true });
58
+ const dir = dirname(this.path);
59
+ await mkdir(dirname(dir), { recursive: true });
60
+ try {
61
+ await mkdir(dir, { mode: LOG_DIR_MODE });
62
+ }
63
+ catch (error) {
64
+ if (!hasCode(error, "EEXIST"))
65
+ throw error;
66
+ }
52
67
  if (this.estimatedBytes === null) {
68
+ // First write from this sink: tighten a directory and files left over
69
+ // from before logs were private. Later files are created owner-only.
70
+ await tightenIfOwned(dir, LOG_DIR_MODE);
71
+ await tightenIfOwned(this.path, LOG_FILE_MODE);
72
+ for (let generation = 1; generation <= this.generations; generation += 1) {
73
+ await tightenIfOwned(`${this.path}.${generation}`, LOG_FILE_MODE);
74
+ }
53
75
  try {
54
76
  this.estimatedBytes = (await stat(this.path)).size;
55
77
  }
@@ -63,7 +85,7 @@ export class RotatingLogSink {
63
85
  if (this.estimatedBytes > 0 && this.estimatedBytes + bytes > this.maxBytes) {
64
86
  await this.rotate();
65
87
  }
66
- await appendFile(this.path, data, "utf8");
88
+ await appendFile(this.path, data, { encoding: "utf8", mode: LOG_FILE_MODE });
67
89
  this.estimatedBytes = (this.estimatedBytes ?? 0) + bytes;
68
90
  }
69
91
  async rotate() {
@@ -81,7 +103,28 @@ export class RotatingLogSink {
81
103
  }
82
104
  }
83
105
  function isMissing(error) {
84
- return typeof error === "object" && error !== null && "code" in error && error.code === "ENOENT";
106
+ return hasCode(error, "ENOENT");
107
+ }
108
+ function hasCode(error, code) {
109
+ return typeof error === "object" && error !== null && "code" in error && error.code === code;
110
+ }
111
+ /**
112
+ * Drop group/other permission bits when the current user owns `path`. Best
113
+ * effort: a missing path, another owner, or a failed chmod leaves it as is
114
+ * rather than disabling the log.
115
+ */
116
+ async function tightenIfOwned(path, mode) {
117
+ if (process.platform === "win32" || typeof process.getuid !== "function")
118
+ return;
119
+ try {
120
+ const info = await stat(path);
121
+ if (info.uid !== process.getuid() || (info.mode & 0o777 & ~mode) === 0)
122
+ return;
123
+ await chmod(path, mode);
124
+ }
125
+ catch {
126
+ // Best effort; see above.
127
+ }
85
128
  }
86
129
  async function removeIfPresent(path) {
87
130
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"durable-log.js","sourceRoot":"","sources":["../src/durable-log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"durable-log.js","sourceRoot":"","sources":["../src/durable-log.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,25 @@ export declare const BRIDGE_TRANSPORT_UNKNOWN_OUTCOME_DISPOSITION = "The standal
47
47
  * therefore sufficient here and no message prose participates in the match.
48
48
  */
49
49
  export declare function isRouteOpenReloadWindowError(error: unknown): boolean;
50
+ /**
51
+ * True for the daemon's refusal of a data-plane request on an ALREADY-BOUND
52
+ * route while the module behind it drains for a reload.
53
+ *
54
+ * Wire shape: an ERROR frame on the route's own channel with code
55
+ * `module_reloading` and message `module endpoint for route channel <N> is
56
+ * reloading`; the raw `SubcClient.request` path rejects it as a plain
57
+ * `SubcError(message, "module_reloading")`. The daemon's router emits it when
58
+ * the route's request-credit acquisition fails because the module endpoint is
59
+ * draining, i.e. BEFORE the frame is spliced to the module, so the request
60
+ * provably never reached AFT and resending it on a fresh route cannot execute
61
+ * it twice.
62
+ *
63
+ * Deliberately limited to `module_reloading`: the other route.open reload codes
64
+ * are never emitted on the data plane, and anything outcome-unknown (a GOODBYE
65
+ * or a socket drop after the request was written) carries different codes or a
66
+ * `SubcCallError` kind other than `not_sent`.
67
+ */
68
+ export declare function isRouteRequestReloadRefusal(error: unknown): boolean;
50
69
  export type BashHostFallbackCause = "module down" | "bind timed out" | "route closed before dispatch" | "transport down";
51
70
  /**
52
71
  * Classify failures that prove bash never reached AFT, including daemon replies
@@ -1 +1 @@
1
- {"version":3,"file":"error-contract.d.ts","sourceRoot":"","sources":["../src/error-contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,SAAiB,KAAK,EAAE,iBAAiB,CAAC;gBAE9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAO7E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,YAAY,CAQd;AAED,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,gLACwI,CAAC;AAEhL;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,wMAC2J,CAAC;AAExM,qFAAqF;AACrF,eAAO,MAAM,4CAA4C,iNACuJ,CAAC;AA2BjN;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIpE;AAmBD,MAAM,MAAM,qBAAqB,GAC7B,aAAa,GACb,gBAAgB,GAChB,8BAA8B,GAC9B,gBAAgB,CAAC;AAcrB;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAqB/F;AAED,6DAA6D;AAC7D,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEvE;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CA4BvE"}
1
+ {"version":3,"file":"error-contract.d.ts","sourceRoot":"","sources":["../src/error-contract.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAqBH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,SAAiB,KAAK,EAAE,iBAAiB,CAAC;gBAE9B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAO7E;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,YAAY,CAQd;AAED,mFAAmF;AACnF,eAAO,MAAM,0BAA0B,gLACwI,CAAC;AAEhL;;;;;;;;GAQG;AACH,eAAO,MAAM,+BAA+B,wMAC2J,CAAC;AAExM,qFAAqF;AACrF,eAAO,MAAM,4CAA4C,iNACuJ,CAAC;AA2BjN;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIpE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKnE;AAmBD,MAAM,MAAM,qBAAqB,GAC7B,aAAa,GACb,gBAAgB,GAChB,8BAA8B,GAC9B,gBAAgB,CAAC;AAcrB;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,GAAG,SAAS,CAqB/F;AAED,6DAA6D;AAC7D,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAEvE;AAMD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CA4BvE"}
@@ -86,6 +86,30 @@ export function isRouteOpenReloadWindowError(error) {
86
86
  const code = error.code;
87
87
  return code === "module_reloading" || code === "module_warming" || code === "target_unavailable";
88
88
  }
89
+ /**
90
+ * True for the daemon's refusal of a data-plane request on an ALREADY-BOUND
91
+ * route while the module behind it drains for a reload.
92
+ *
93
+ * Wire shape: an ERROR frame on the route's own channel with code
94
+ * `module_reloading` and message `module endpoint for route channel <N> is
95
+ * reloading`; the raw `SubcClient.request` path rejects it as a plain
96
+ * `SubcError(message, "module_reloading")`. The daemon's router emits it when
97
+ * the route's request-credit acquisition fails because the module endpoint is
98
+ * draining, i.e. BEFORE the frame is spliced to the module, so the request
99
+ * provably never reached AFT and resending it on a fresh route cannot execute
100
+ * it twice.
101
+ *
102
+ * Deliberately limited to `module_reloading`: the other route.open reload codes
103
+ * are never emitted on the data plane, and anything outcome-unknown (a GOODBYE
104
+ * or a socket drop after the request was written) carries different codes or a
105
+ * `SubcCallError` kind other than `not_sent`.
106
+ */
107
+ export function isRouteRequestReloadRefusal(error) {
108
+ if (error instanceof SubcCallError) {
109
+ return error.kind === "not_sent" && error.code === "module_reloading";
110
+ }
111
+ return error instanceof SubcError && error.code === "module_reloading";
112
+ }
89
113
  function hasEngineResponse(error) {
90
114
  const response = error.response;
91
115
  if (response !== null && typeof response === "object")