@fased/fased 0.1.42 → 0.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/acp/client.js +2 -2
- package/dist/acp/secret-file.js +2 -2
- package/dist/agents/agent-scope.js +2 -2
- package/dist/agents/apply-patch.js +8 -8
- package/dist/agents/auth-profiles/paths.js +2 -2
- package/dist/agents/auth-profiles/store.js +2 -2
- package/dist/agents/bash-tools.shared.js +2 -2
- package/dist/agents/cli-credentials.js +4 -4
- package/dist/agents/docs-path.js +3 -3
- package/dist/agents/embedded-pi-mcp.js +4 -4
- package/dist/agents/identity-avatar.js +3 -3
- package/dist/agents/identity-file.js +2 -2
- package/dist/agents/pi-embedded-subscribe.raw-stream.js +3 -3
- package/dist/agents/pi-extensions/compaction-safeguard.js +3 -3
- package/dist/agents/pi-model-discovery.js +6 -6
- package/dist/agents/pi-project-settings.js +3 -3
- package/dist/agents/sandbox/fs-bridge.js +2 -2
- package/dist/agents/session-dirs.js +4 -4
- package/dist/agents/session-write-lock.js +13 -13
- package/dist/agents/shell-utils.js +5 -5
- package/dist/agents/skills/bundled-dir.js +4 -4
- package/dist/agents/skills/local-loader.js +6 -6
- package/dist/agents/skills/plugin-skills.js +2 -2
- package/dist/agents/skills/workspace.js +13 -13
- package/dist/agents/skills-install-download.js +7 -7
- package/dist/agents/skills-install-plan.js +2 -2
- package/dist/agents/skills-install.js +2 -2
- package/dist/agents/skills-status.js +2 -2
- package/dist/agents/subagent-depth.js +2 -2
- package/dist/agents/system-prompt-params.js +2 -2
- package/dist/agents/workspace.js +22 -22
- package/dist/auto-reply/reply/agent-runner-execution.js +2 -2
- package/dist/auto-reply/reply/agent-runner.js +2 -2
- package/dist/auto-reply/reply/commands-export-session.js +7 -7
- package/dist/auto-reply/reply/post-compaction-audit.js +3 -3
- package/dist/auto-reply/reply/post-compaction-context.js +3 -3
- package/dist/auto-reply/reply/session.js +3 -3
- package/dist/auto-reply/skill-commands.js +3 -3
- package/dist/auto-reply/status.js +6 -6
- package/dist/brand.js +1 -1
- package/dist/browser/chrome.executables.js +3 -3
- package/dist/browser/chrome.js +3 -3
- package/dist/browser/chrome.profile-decoration.js +6 -6
- package/dist/browser/profiles-service.js +2 -2
- package/dist/browser/server-context.js +2 -2
- package/dist/browser/trash.js +4 -4
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/server.js +4 -4
- package/dist/capabilities/catalog.js +3 -3
- package/dist/channels/plugins/catalog.js +3 -3
- package/dist/cli/browser-cli-extension.js +6 -6
- package/dist/cli/command-format.js +2 -2
- package/dist/cli/cron-cli/register.cron-simple.js +2 -2
- package/dist/cli/daemon-cli/restart-health.js +49 -13
- package/dist/cli/dns-cli.js +9 -9
- package/dist/cli/gateway-cli/dev.js +5 -5
- package/dist/cli/gateway-cli/run.js +2 -2
- package/dist/cli/hooks-cli.js +5 -5
- package/dist/cli/memory-cli.js +7 -7
- package/dist/cli/nodes-media-utils.js +2 -2
- package/dist/cli/plugins-cli.js +2 -2
- package/dist/cli/secrets-cli.js +3 -3
- package/dist/cli/update-cli/shared.js +1 -29
- package/dist/cli/update-cli/update-command.js +12 -15
- package/dist/cli/windows-argv.js +2 -2
- package/dist/commands/dashboard-link.js +3 -3
- package/dist/commands/doctor-install.js +5 -5
- package/dist/commands/doctor-memory-search.js +2 -2
- package/dist/commands/doctor-platform-notes.js +2 -2
- package/dist/commands/doctor-sandbox.js +2 -2
- package/dist/commands/doctor-state-integrity.js +23 -23
- package/dist/commands/doctor-workspace.js +3 -3
- package/dist/commands/doctor.js +3 -3
- package/dist/commands/managed-up.js +2 -2
- package/dist/commands/onboard-auth.credentials.js +3 -3
- package/dist/commands/onboarding/plugin-install.js +2 -2
- package/dist/commands/sessions-cleanup.js +2 -2
- package/dist/commands/signal-install.js +6 -6
- package/dist/commands/status-all/channels.js +2 -2
- package/dist/commands/wallet.js +47 -47
- package/dist/config/cache-utils.js +2 -2
- package/dist/config/includes.js +5 -5
- package/dist/config/io.js +2 -2
- package/dist/config/paths.js +3 -3
- package/dist/config/sat-runtime-ids.js +3 -3
- package/dist/config/sessions/disk-budget.js +6 -6
- package/dist/config/sessions/paths.js +2 -2
- package/dist/config/sessions/store.js +17 -17
- package/dist/config/sessions/transcript.js +4 -4
- package/dist/config/talk.js +2 -2
- package/dist/cron/service/store.js +2 -2
- package/dist/cron/store.js +6 -6
- package/dist/daemon/systemd-system.js +5 -5
- package/dist/discord/monitor/thread-bindings.state.js +2 -2
- package/dist/extensions/sat-mining/src/sat-bond-layout.js +9 -9
- package/dist/gateway/control-ui-boot-check.js +6 -6
- package/dist/gateway/control-ui-login.js +7 -7
- package/dist/gateway/control-ui.js +9 -9
- package/dist/gateway/hooks-mapping.js +4 -4
- package/dist/gateway/server-discovery.js +2 -2
- package/dist/gateway/server-http.js +4 -4
- package/dist/gateway/server-methods/chat.js +6 -6
- package/dist/gateway/server-methods/sessions.js +6 -6
- package/dist/gateway/server-methods/usage.js +2 -2
- package/dist/gateway/server.impl.js +3 -3
- package/dist/gateway/session-compaction-checkpoints.js +4 -4
- package/dist/gateway/session-utils.fs.js +24 -24
- package/dist/gateway/session-utils.js +6 -6
- package/dist/hooks/bundled-dir.js +4 -4
- package/dist/hooks/gmail-setup-utils.js +6 -6
- package/dist/hooks/import-url.js +2 -2
- package/dist/hooks/loader.js +4 -4
- package/dist/hooks/workspace.js +7 -7
- package/dist/infra/archive.js +17 -17
- package/dist/infra/boundary-file-read.js +2 -2
- package/dist/infra/boundary-path.js +15 -15
- package/dist/infra/brew.js +2 -2
- package/dist/infra/control-ui-assets.js +14 -14
- package/dist/infra/device-auth-store.js +8 -8
- package/dist/infra/device-identity.js +8 -8
- package/dist/infra/dotenv.js +2 -2
- package/dist/infra/exec-approvals.js +8 -8
- package/dist/infra/exec-command-resolution.js +4 -4
- package/dist/infra/exec-safe-bin-trust.js +2 -2
- package/dist/infra/fased-root.js +5 -5
- package/dist/infra/fs-safe.js +14 -14
- package/dist/infra/gateway-lock.js +11 -11
- package/dist/infra/git-commit.js +5 -5
- package/dist/infra/git-root.js +4 -4
- package/dist/infra/hosted-runtime-artifact.js +3 -3
- package/dist/infra/is-main.js +2 -2
- package/dist/infra/json-file.js +7 -7
- package/dist/infra/outbound/delivery-queue.js +16 -16
- package/dist/infra/path-env.js +3 -3
- package/dist/infra/ports-lsof.js +4 -4
- package/dist/infra/provider-usage.auth.js +3 -3
- package/dist/infra/safe-open-sync.js +2 -2
- package/dist/infra/session-cost-usage.js +9 -9
- package/dist/infra/shell-env.js +2 -2
- package/dist/infra/state-migrations.fs.js +6 -6
- package/dist/infra/state-migrations.js +23 -23
- package/dist/infra/tmp-fased-dir.js +6 -6
- package/dist/infra/update-global.js +1 -0
- package/dist/infra/update-runner.js +111 -64
- package/dist/infra/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- package/dist/light-update-status.js +1 -1
- package/dist/line/accounts.js +2 -2
- package/dist/line/download.js +2 -2
- package/dist/logging/config.js +3 -3
- package/dist/logging/logger.js +7 -7
- package/dist/managed/federation.js +3 -3
- package/dist/managed/tunnel.js +3 -3
- package/dist/media/store.js +13 -13
- package/dist/media-understanding/runner.js +3 -3
- package/dist/memory/embeddings.js +2 -2
- package/dist/memory/internal.js +10 -10
- package/dist/memory/manager-sync-ops.js +7 -7
- package/dist/memory/repair-executor.js +17 -17
- package/dist/node-host/invoke-system-run-plan.js +8 -8
- package/dist/node-host/invoke.js +2 -2
- package/dist/node-host/runner.js +3 -3
- package/dist/pairing/pairing-store.js +3 -3
- package/dist/plugin-sdk/{audio-preflight-XJNZUuhw.js → audio-preflight-CzG6BjAn.js} +3 -3
- package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
- package/dist/plugin-sdk/{chunk-items-me0j1xjK.js → chunk-items-CxRDAM7m.js} +1 -1
- package/dist/plugin-sdk/command-status.js +3 -3
- package/dist/plugin-sdk/device-pair.d.ts +1 -1
- package/dist/plugin-sdk/discord.d.ts +4 -4
- package/dist/plugin-sdk/index.d.ts +20 -20
- package/dist/plugin-sdk/index.js +5 -4
- package/dist/plugin-sdk/json-store.js +6 -6
- package/dist/plugin-sdk/{monitor-C7si_bKw.js → monitor-B1PUtkd6.js} +5 -5
- package/dist/plugin-sdk/{monitor-DUyt6cCK.js → monitor-BrxWsb7H.js} +7 -7
- package/dist/plugin-sdk/{openresponses-http-sYsdEjGP.js → openresponses-http-DJ2lfMja.js} +3 -3
- package/dist/plugin-sdk/{pairing-message-C5m-8Evp.d.ts → pairing-message-DWXHX-jt.d.ts} +1 -1
- package/dist/plugin-sdk/{pi-embedded-runner-C6HkZJ5E.js → pi-embedded-runner-DMfkIj60.js} +12 -12
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
- package/dist/plugin-sdk/{pw-ai-BFHYmEIx.js → pw-ai-BgsJH_P8.js} +1 -1
- package/dist/plugin-sdk/{runtime-dependency-B5Fut2tT.js → runtime-dependency-pUwxUAJp.js} +9 -9
- package/dist/plugin-sdk/sat-runtime.d.ts +2 -2
- package/dist/plugin-sdk/sat-runtime.js +1 -1
- package/dist/plugin-sdk/{slack-CEoLScM7.js → slack-B6lIY1Jk.js} +5 -5
- package/dist/plugin-sdk/slack.d.ts +4 -4
- package/dist/plugin-sdk/{sticker-cache-PRfvBRnv.js → sticker-cache-D4Ljzv1P.js} +2 -2
- package/dist/plugin-sdk/{telegram-actions-D4PNLPEZ.js → telegram-actions-tOhBd6st.js} +4 -4
- package/dist/plugin-sdk/telegram.d.ts +4 -4
- package/dist/plugin-sdk/{tmp-fased-dir-B-AAdaCr.d.ts → tmp-fased-dir-Be1wBhVz.d.ts} +1 -1
- package/dist/plugin-sdk/{types-ZT0DGnls.d.ts → types-CJGVZX6j.d.ts} +2 -2
- package/dist/plugin-sdk/{types-56R2vXgt.d.ts → types-CXLEOrJX.d.ts} +1 -1
- package/dist/plugin-sdk/{wallet-status-D9UVH6k9.js → wallet-status-CdxTkLWz.js} +4 -4
- package/dist/plugin-sdk/{web-CSpyzE3P.js → web-CX12Rpz1.js} +3 -3
- package/dist/plugin-sdk/whatsapp.d.ts +13 -13
- package/dist/plugin-sdk/{zod-schema.providers-core-FaYR6KdD.d.ts → zod-schema.providers-core-BEbNizPe.d.ts} +78 -78
- package/dist/plugins/bundled-dir.js +3 -3
- package/dist/plugins/discovery.js +11 -11
- package/dist/plugins/loader.js +13 -13
- package/dist/plugins/manifest-registry.js +2 -2
- package/dist/plugins/manifest.js +4 -4
- package/dist/plugins/path-safety.js +3 -3
- package/dist/plugins/status-cache.js +9 -9
- package/dist/plugins/update.js +3 -3
- package/dist/plugins/web-search-install-catalog.js +3 -3
- package/dist/secrets/apply.js +16 -16
- package/dist/secrets/audit.js +11 -11
- package/dist/secrets/shared.js +9 -9
- package/dist/security/scan-paths.js +2 -2
- package/dist/shared/config-eval.js +2 -2
- package/dist/shared/pid-alive.js +2 -2
- package/dist/tasks/standing-orders.js +5 -5
- package/dist/tasks/task-flow-registry.js +5 -5
- package/dist/tasks/task-registry.js +5 -5
- package/dist/tasks/workflow-definitions.js +6 -6
- package/dist/telegram/token.js +5 -5
- package/dist/utils.js +5 -5
- package/dist/wallet/local-socket-signer-broker.js +16 -16
- package/dist/wallet/providers/embedded-keystore-adapter.js +5 -5
- package/dist/wallet/providers/local-socket-signer-adapter.js +2 -2
- package/dist/wallet/wallet-approval-auth.js +5 -5
- package/dist/wallet/wallet-audit-log.js +5 -5
- package/dist/wallet/wallet-custody.js +21 -21
- package/dist/wallet/wallet-inbound-events.js +5 -5
- package/dist/wallet/wallet-observability.js +5 -5
- package/dist/wallet/wallet-policy.js +9 -9
- package/dist/wallet/wallet-provider-registry.js +7 -7
- package/dist/wallet/wallet-runtime-config.js +3 -3
- package/dist/wallet/wallet-secrets-store.js +22 -22
- package/dist/wallet/wallet-send-approvals.js +5 -5
- package/dist/wallet/wallet-settlement-links.js +5 -5
- package/dist/web/accounts.js +3 -3
- package/dist/web/auth-store.js +18 -18
- package/dist/web/session.js +4 -4
- package/dist/wizard/host-security-capability.js +2 -2
- package/dist/wizard/onboarding.host-security.js +7 -7
- package/dist/wizard/onboarding.js +7 -7
- package/dist/wizard/onboarding.wallet.js +44 -44
- package/extensions/acpx/package.json +1 -1
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/fased-federation/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +2 -2
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/sat-mining/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/synology-chat/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from "node:fs";
|
|
2
2
|
import JSON5 from "json5";
|
|
3
3
|
|
|
4
4
|
//#region src/infra/state-migrations.fs.ts
|
|
5
5
|
function safeReadDir(dir) {
|
|
6
6
|
try {
|
|
7
|
-
return
|
|
7
|
+
return fs.readdirSync(dir, { withFileTypes: true });
|
|
8
8
|
} catch {
|
|
9
9
|
return [];
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
12
|
function existsDir(dir) {
|
|
13
13
|
try {
|
|
14
|
-
return
|
|
14
|
+
return fs.existsSync(dir) && fs.statSync(dir).isDirectory();
|
|
15
15
|
} catch {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
function ensureDir(dir) {
|
|
20
|
-
|
|
20
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
21
21
|
}
|
|
22
22
|
function fileExists(p) {
|
|
23
23
|
try {
|
|
24
|
-
return
|
|
24
|
+
return fs.existsSync(p) && fs.statSync(p).isFile();
|
|
25
25
|
} catch {
|
|
26
26
|
return false;
|
|
27
27
|
}
|
|
@@ -37,7 +37,7 @@ function isLegacyWhatsAppAuthFile(name) {
|
|
|
37
37
|
}
|
|
38
38
|
function readSessionStoreJson5(storePath) {
|
|
39
39
|
try {
|
|
40
|
-
const raw =
|
|
40
|
+
const raw = fs.readFileSync(storePath, "utf-8");
|
|
41
41
|
const parsed = JSON5.parse(raw);
|
|
42
42
|
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
43
43
|
return {
|
|
@@ -8,7 +8,7 @@ import { canonicalizeMainSessionAlias } from "../config/sessions/main-session.js
|
|
|
8
8
|
import { saveSessionStore } from "../config/sessions/store.js";
|
|
9
9
|
import "../config/sessions.js";
|
|
10
10
|
import { ensureDir, existsDir, fileExists, isLegacyWhatsAppAuthFile, readSessionStoreJson5, safeReadDir } from "./state-migrations.fs.js";
|
|
11
|
-
import
|
|
11
|
+
import fs from "node:fs";
|
|
12
12
|
import os from "node:os";
|
|
13
13
|
import path from "node:path";
|
|
14
14
|
|
|
@@ -241,7 +241,7 @@ function removeDirIfEmpty(dir) {
|
|
|
241
241
|
return;
|
|
242
242
|
}
|
|
243
243
|
try {
|
|
244
|
-
|
|
244
|
+
fs.rmdirSync(dir);
|
|
245
245
|
} catch {}
|
|
246
246
|
}
|
|
247
247
|
function resetAutoMigrateLegacyStateForTest() {
|
|
@@ -255,7 +255,7 @@ function resetAutoMigrateLegacyStateDirForTest() {
|
|
|
255
255
|
}
|
|
256
256
|
function resolveSymlinkTarget(linkPath) {
|
|
257
257
|
try {
|
|
258
|
-
const target =
|
|
258
|
+
const target = fs.readlinkSync(linkPath);
|
|
259
259
|
return path.resolve(path.dirname(linkPath), target);
|
|
260
260
|
} catch {
|
|
261
261
|
return null;
|
|
@@ -266,7 +266,7 @@ function formatStateDirMigration(legacyDir, targetDir) {
|
|
|
266
266
|
}
|
|
267
267
|
function isDirPath(filePath) {
|
|
268
268
|
try {
|
|
269
|
-
return
|
|
269
|
+
return fs.statSync(filePath).isDirectory();
|
|
270
270
|
} catch {
|
|
271
271
|
return false;
|
|
272
272
|
}
|
|
@@ -274,7 +274,7 @@ function isDirPath(filePath) {
|
|
|
274
274
|
function isLegacyTreeSymlinkMirror(currentDir, realTargetDir) {
|
|
275
275
|
let entries;
|
|
276
276
|
try {
|
|
277
|
-
entries =
|
|
277
|
+
entries = fs.readdirSync(currentDir, { withFileTypes: true });
|
|
278
278
|
} catch {
|
|
279
279
|
return false;
|
|
280
280
|
}
|
|
@@ -285,7 +285,7 @@ function isLegacyTreeSymlinkMirror(currentDir, realTargetDir) {
|
|
|
285
285
|
const entryPath = path.join(currentDir, entry.name);
|
|
286
286
|
let stat;
|
|
287
287
|
try {
|
|
288
|
-
stat =
|
|
288
|
+
stat = fs.lstatSync(entryPath);
|
|
289
289
|
} catch {
|
|
290
290
|
return false;
|
|
291
291
|
}
|
|
@@ -296,7 +296,7 @@ function isLegacyTreeSymlinkMirror(currentDir, realTargetDir) {
|
|
|
296
296
|
}
|
|
297
297
|
let resolvedRealTarget;
|
|
298
298
|
try {
|
|
299
|
-
resolvedRealTarget =
|
|
299
|
+
resolvedRealTarget = fs.realpathSync(resolvedTarget);
|
|
300
300
|
} catch {
|
|
301
301
|
return false;
|
|
302
302
|
}
|
|
@@ -318,7 +318,7 @@ function isLegacyTreeSymlinkMirror(currentDir, realTargetDir) {
|
|
|
318
318
|
function isLegacyDirSymlinkMirror(legacyDir, targetDir) {
|
|
319
319
|
let realTargetDir;
|
|
320
320
|
try {
|
|
321
|
-
realTargetDir =
|
|
321
|
+
realTargetDir = fs.realpathSync(targetDir);
|
|
322
322
|
} catch {
|
|
323
323
|
return false;
|
|
324
324
|
}
|
|
@@ -348,7 +348,7 @@ async function autoMigrateLegacyStateDir(params) {
|
|
|
348
348
|
const legacyDirs = resolveLegacyStateDirs(homedir);
|
|
349
349
|
let legacyDir = legacyDirs.find((dir) => {
|
|
350
350
|
try {
|
|
351
|
-
return
|
|
351
|
+
return fs.existsSync(dir);
|
|
352
352
|
} catch {
|
|
353
353
|
return false;
|
|
354
354
|
}
|
|
@@ -357,7 +357,7 @@ async function autoMigrateLegacyStateDir(params) {
|
|
|
357
357
|
const changes = [];
|
|
358
358
|
let legacyStat = null;
|
|
359
359
|
try {
|
|
360
|
-
legacyStat = legacyDir ?
|
|
360
|
+
legacyStat = legacyDir ? fs.lstatSync(legacyDir) : null;
|
|
361
361
|
} catch {
|
|
362
362
|
legacyStat = null;
|
|
363
363
|
}
|
|
@@ -401,7 +401,7 @@ async function autoMigrateLegacyStateDir(params) {
|
|
|
401
401
|
if (legacyDirs.some((dir) => path.resolve(dir) === path.resolve(legacyTarget))) {
|
|
402
402
|
legacyDir = legacyTarget;
|
|
403
403
|
try {
|
|
404
|
-
legacyStat =
|
|
404
|
+
legacyStat = fs.lstatSync(legacyDir);
|
|
405
405
|
} catch {
|
|
406
406
|
legacyStat = null;
|
|
407
407
|
}
|
|
@@ -464,7 +464,7 @@ async function autoMigrateLegacyStateDir(params) {
|
|
|
464
464
|
if (!legacyDir) {
|
|
465
465
|
throw new Error("Legacy state dir not found");
|
|
466
466
|
}
|
|
467
|
-
|
|
467
|
+
fs.renameSync(legacyDir, targetDir);
|
|
468
468
|
} catch (err) {
|
|
469
469
|
warnings.push(`Failed to move legacy state dir (${legacyDir ?? "unknown"} → ${targetDir}): ${String(err)}`);
|
|
470
470
|
return {
|
|
@@ -478,7 +478,7 @@ async function autoMigrateLegacyStateDir(params) {
|
|
|
478
478
|
if (!legacyDir) {
|
|
479
479
|
throw new Error("Legacy state dir not found");
|
|
480
480
|
}
|
|
481
|
-
|
|
481
|
+
fs.symlinkSync(targetDir, legacyDir, "dir");
|
|
482
482
|
changes.push(formatStateDirMigration(legacyDir, targetDir));
|
|
483
483
|
} catch (err) {
|
|
484
484
|
try {
|
|
@@ -486,7 +486,7 @@ async function autoMigrateLegacyStateDir(params) {
|
|
|
486
486
|
if (!legacyDir) {
|
|
487
487
|
throw new Error("Legacy state dir not found", { cause: err });
|
|
488
488
|
}
|
|
489
|
-
|
|
489
|
+
fs.symlinkSync(targetDir, legacyDir, "junction");
|
|
490
490
|
changes.push(formatStateDirMigration(legacyDir, targetDir));
|
|
491
491
|
} else {
|
|
492
492
|
throw err;
|
|
@@ -496,7 +496,7 @@ async function autoMigrateLegacyStateDir(params) {
|
|
|
496
496
|
if (!legacyDir) {
|
|
497
497
|
throw new Error("Legacy state dir not found", { cause: fallbackErr });
|
|
498
498
|
}
|
|
499
|
-
|
|
499
|
+
fs.renameSync(targetDir, legacyDir);
|
|
500
500
|
warnings.push(`State dir migration rolled back (failed to link legacy path): ${String(fallbackErr)}`);
|
|
501
501
|
return {
|
|
502
502
|
migrated: false,
|
|
@@ -682,7 +682,7 @@ async function migrateLegacySessions(detected, now) {
|
|
|
682
682
|
continue;
|
|
683
683
|
}
|
|
684
684
|
try {
|
|
685
|
-
|
|
685
|
+
fs.renameSync(from, to);
|
|
686
686
|
changes.push(`Moved ${entry.name} → agents/${detected.targetAgentId}/sessions`);
|
|
687
687
|
} catch (err) {
|
|
688
688
|
warnings.push(`Failed moving ${from}: ${String(err)}`);
|
|
@@ -691,7 +691,7 @@ async function migrateLegacySessions(detected, now) {
|
|
|
691
691
|
if (legacyParsed.ok) {
|
|
692
692
|
try {
|
|
693
693
|
if (fileExists(detected.sessions.legacyStorePath)) {
|
|
694
|
-
|
|
694
|
+
fs.rmSync(detected.sessions.legacyStorePath, { force: true });
|
|
695
695
|
}
|
|
696
696
|
} catch {}
|
|
697
697
|
}
|
|
@@ -700,7 +700,7 @@ async function migrateLegacySessions(detected, now) {
|
|
|
700
700
|
if (legacyLeft.length > 0) {
|
|
701
701
|
const backupDir = `${detected.sessions.legacyDir}.legacy-${now()}`;
|
|
702
702
|
try {
|
|
703
|
-
|
|
703
|
+
fs.renameSync(detected.sessions.legacyDir, backupDir);
|
|
704
704
|
warnings.push(`Left legacy sessions at ${backupDir}`);
|
|
705
705
|
} catch {}
|
|
706
706
|
}
|
|
@@ -723,11 +723,11 @@ async function migrateLegacyAgentDir(detected, now) {
|
|
|
723
723
|
for (const entry of entries) {
|
|
724
724
|
const from = path.join(detected.agentDir.legacyDir, entry.name);
|
|
725
725
|
const to = path.join(detected.agentDir.targetDir, entry.name);
|
|
726
|
-
if (
|
|
726
|
+
if (fs.existsSync(to)) {
|
|
727
727
|
continue;
|
|
728
728
|
}
|
|
729
729
|
try {
|
|
730
|
-
|
|
730
|
+
fs.renameSync(from, to);
|
|
731
731
|
changes.push(`Moved agent file ${entry.name} → agents/${detected.targetAgentId}/agent`);
|
|
732
732
|
} catch (err) {
|
|
733
733
|
warnings.push(`Failed moving ${from}: ${String(err)}`);
|
|
@@ -737,7 +737,7 @@ async function migrateLegacyAgentDir(detected, now) {
|
|
|
737
737
|
if (!emptyDirOrMissing(detected.agentDir.legacyDir)) {
|
|
738
738
|
const backupDir = path.join(detected.stateDir, "agents", detected.targetAgentId, `agent.legacy-${now()}`);
|
|
739
739
|
try {
|
|
740
|
-
|
|
740
|
+
fs.renameSync(detected.agentDir.legacyDir, backupDir);
|
|
741
741
|
warnings.push(`Left legacy agent dir at ${backupDir}`);
|
|
742
742
|
} catch (err) {
|
|
743
743
|
warnings.push(`Failed relocating legacy agent dir: ${String(err)}`);
|
|
@@ -775,7 +775,7 @@ async function migrateLegacyWhatsAppAuth(detected) {
|
|
|
775
775
|
continue;
|
|
776
776
|
}
|
|
777
777
|
try {
|
|
778
|
-
|
|
778
|
+
fs.renameSync(from, to);
|
|
779
779
|
changes.push(`Moved WhatsApp auth ${entry.name} → whatsapp/default`);
|
|
780
780
|
} catch (err) {
|
|
781
781
|
warnings.push(`Failed moving ${from}: ${String(err)}`);
|
|
@@ -799,7 +799,7 @@ async function migrateLegacyTelegramPairingAllowFrom(detected) {
|
|
|
799
799
|
const targetPath = detected.pairingAllowFrom.targetTelegramPath;
|
|
800
800
|
try {
|
|
801
801
|
ensureDir(path.dirname(targetPath));
|
|
802
|
-
|
|
802
|
+
fs.copyFileSync(legacyPath, targetPath);
|
|
803
803
|
changes.push(`Copied Telegram pairing allowFrom → ${targetPath}`);
|
|
804
804
|
} catch (err) {
|
|
805
805
|
warnings.push(`Failed migrating Telegram pairing allowFrom (${legacyPath}): ${String(err)}`);
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from "node:fs";
|
|
2
2
|
import os from "node:os";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
|
|
5
5
|
//#region src/infra/tmp-fased-dir.ts
|
|
6
6
|
const POSIX_FASED_TMP_DIR = "/tmp/fased";
|
|
7
|
-
const TMP_DIR_ACCESS_MODE =
|
|
7
|
+
const TMP_DIR_ACCESS_MODE = fs.constants.W_OK | fs.constants.X_OK;
|
|
8
8
|
function isNodeErrorWithCode(err, code) {
|
|
9
9
|
return typeof err === "object" && err !== null && "code" in err && err.code === code;
|
|
10
10
|
}
|
|
11
11
|
function resolvePreferredFasedAgentTmpDir(options = {}) {
|
|
12
|
-
const accessSync = options.accessSync ??
|
|
13
|
-
const chmodSync = options.chmodSync ??
|
|
14
|
-
const lstatSync = options.lstatSync ??
|
|
15
|
-
const mkdirSync = options.mkdirSync ??
|
|
12
|
+
const accessSync = options.accessSync ?? fs.accessSync;
|
|
13
|
+
const chmodSync = options.chmodSync ?? fs.chmodSync;
|
|
14
|
+
const lstatSync = options.lstatSync ?? fs.lstatSync;
|
|
15
|
+
const mkdirSync = options.mkdirSync ?? fs.mkdirSync;
|
|
16
16
|
const warn = options.warn ?? ((message) => console.warn(message));
|
|
17
17
|
const getuid = options.getuid ?? (() => {
|
|
18
18
|
try {
|
|
@@ -487,6 +487,7 @@ async function runHostedArtifactUpdate(params) {
|
|
|
487
487
|
kind: "updated",
|
|
488
488
|
steps,
|
|
489
489
|
afterVersion,
|
|
490
|
+
reason: "package artifact swap",
|
|
490
491
|
transaction: {
|
|
491
492
|
kind: "package-root-swap",
|
|
492
493
|
packageRoot: params.pkgRoot,
|
|
@@ -508,6 +509,96 @@ async function pathExists(pathname) {
|
|
|
508
509
|
return false;
|
|
509
510
|
}
|
|
510
511
|
}
|
|
512
|
+
async function seedHostedDependencyLayerFromCurrent(params) {
|
|
513
|
+
const currentMetadata = await readHostedRuntimeMetadata(params.pkgRoot);
|
|
514
|
+
if (currentMetadata?.dependencyHash !== params.dependencyHash) {
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
517
|
+
const currentModules = path.join(params.pkgRoot, "node_modules");
|
|
518
|
+
const dependencyModules = path.join(params.dependencyRoot, "node_modules");
|
|
519
|
+
let currentStat;
|
|
520
|
+
try {
|
|
521
|
+
currentStat = await fs.lstat(currentModules);
|
|
522
|
+
} catch {
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
if (currentStat.isSymbolicLink()) {
|
|
526
|
+
try {
|
|
527
|
+
const currentModulesReal = await fs.realpath(currentModules);
|
|
528
|
+
if (currentModulesReal === await fs.realpath(dependencyModules).catch(() => "")) {
|
|
529
|
+
return true;
|
|
530
|
+
}
|
|
531
|
+
const legacyDependencyRoot = path.dirname(currentModulesReal);
|
|
532
|
+
const legacyDependencyParent = path.dirname(legacyDependencyRoot);
|
|
533
|
+
const recognizedLegacyLayer = path.basename(currentModulesReal) === "node_modules" && path.basename(legacyDependencyRoot) === params.dependencyHash && path.basename(legacyDependencyParent) === ".fased-dependencies";
|
|
534
|
+
if (!recognizedLegacyLayer) {
|
|
535
|
+
return false;
|
|
536
|
+
}
|
|
537
|
+
const nextLink = path.join(params.pkgRoot, `.node_modules-link-${process.pid}-${Date.now()}`);
|
|
538
|
+
const previousLink = path.join(params.pkgRoot, `.node_modules-previous-${process.pid}-${Date.now()}`);
|
|
539
|
+
let layerMoved = false;
|
|
540
|
+
let linkReplaced = false;
|
|
541
|
+
await fs.mkdir(path.dirname(params.dependencyRoot), { recursive: true });
|
|
542
|
+
try {
|
|
543
|
+
await fs.symlink(dependencyModules, nextLink, "dir");
|
|
544
|
+
await fs.rename(legacyDependencyRoot, params.dependencyRoot);
|
|
545
|
+
layerMoved = true;
|
|
546
|
+
await fs.rename(currentModules, previousLink);
|
|
547
|
+
await fs.rename(nextLink, currentModules);
|
|
548
|
+
linkReplaced = true;
|
|
549
|
+
await safeRemove(previousLink);
|
|
550
|
+
return true;
|
|
551
|
+
} catch (error) {
|
|
552
|
+
if (linkReplaced) {
|
|
553
|
+
await safeRemove(currentModules);
|
|
554
|
+
}
|
|
555
|
+
if (await pathExists(previousLink)) {
|
|
556
|
+
await fs.rename(previousLink, currentModules).catch(() => undefined);
|
|
557
|
+
}
|
|
558
|
+
if (layerMoved) {
|
|
559
|
+
await fs.rename(params.dependencyRoot, legacyDependencyRoot).catch(() => undefined);
|
|
560
|
+
}
|
|
561
|
+
await safeRemove(nextLink);
|
|
562
|
+
throw error;
|
|
563
|
+
}
|
|
564
|
+
} catch {
|
|
565
|
+
return false;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
if (!currentStat.isDirectory()) {
|
|
569
|
+
return false;
|
|
570
|
+
}
|
|
571
|
+
const dependencyParent = path.dirname(params.dependencyRoot);
|
|
572
|
+
const stagingRoot = `${params.dependencyRoot}.staging-${process.pid}-${Date.now()}`;
|
|
573
|
+
const linkPath = path.join(params.pkgRoot, `.node_modules-link-${process.pid}-${Date.now()}`);
|
|
574
|
+
let modulesMoved = false;
|
|
575
|
+
let layerActivated = false;
|
|
576
|
+
await fs.mkdir(dependencyParent, { recursive: true });
|
|
577
|
+
if (await pathExists(params.dependencyRoot)) {
|
|
578
|
+
await safeRemove(params.dependencyRoot);
|
|
579
|
+
}
|
|
580
|
+
try {
|
|
581
|
+
await fs.symlink(dependencyModules, linkPath, "dir");
|
|
582
|
+
await fs.mkdir(stagingRoot, { recursive: true });
|
|
583
|
+
await fs.rename(currentModules, path.join(stagingRoot, "node_modules"));
|
|
584
|
+
modulesMoved = true;
|
|
585
|
+
await fs.rename(stagingRoot, params.dependencyRoot);
|
|
586
|
+
layerActivated = true;
|
|
587
|
+
await fs.rename(linkPath, currentModules);
|
|
588
|
+
return true;
|
|
589
|
+
} catch (error) {
|
|
590
|
+
await safeRemove(linkPath);
|
|
591
|
+
if (!await pathExists(currentModules)) {
|
|
592
|
+
const rollbackSource = path.join(layerActivated ? params.dependencyRoot : stagingRoot, "node_modules");
|
|
593
|
+
if (modulesMoved && await pathExists(rollbackSource)) {
|
|
594
|
+
await fs.rename(rollbackSource, currentModules).catch(() => undefined);
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
throw error;
|
|
598
|
+
} finally {
|
|
599
|
+
await safeRemove(stagingRoot);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
511
602
|
async function runHostedLayeredArtifactUpdate(params) {
|
|
512
603
|
const packageParent = path.dirname(params.pkgRoot);
|
|
513
604
|
const tempRoot = await fs.mkdtemp(path.join(packageParent, ".fased-layered-update-"));
|
|
@@ -601,9 +692,19 @@ async function runHostedLayeredArtifactUpdate(params) {
|
|
|
601
692
|
reason: "hosted app dependency metadata missing"
|
|
602
693
|
};
|
|
603
694
|
}
|
|
604
|
-
const dependencyParent = path.join(
|
|
695
|
+
const dependencyParent = path.join(params.dependencyCacheRoot, "hosted-dependencies");
|
|
605
696
|
const dependencyRoot = path.join(dependencyParent, metadata.dependencyHash);
|
|
606
697
|
const dependencyModules = path.join(dependencyRoot, "node_modules");
|
|
698
|
+
if (!await pathExists(dependencyModules)) {
|
|
699
|
+
const currentMetadata = await readHostedRuntimeMetadata(params.pkgRoot);
|
|
700
|
+
if (currentMetadata?.dependencyHash === metadata.dependencyHash) {
|
|
701
|
+
await record("hosted dependency seed", `reuse current dependency layer ${metadata.dependencyHash.slice(0, 12)}`, async () => await seedHostedDependencyLayerFromCurrent({
|
|
702
|
+
pkgRoot: params.pkgRoot,
|
|
703
|
+
dependencyRoot,
|
|
704
|
+
dependencyHash: metadata.dependencyHash
|
|
705
|
+
}));
|
|
706
|
+
}
|
|
707
|
+
}
|
|
607
708
|
if (!await pathExists(dependencyModules)) {
|
|
608
709
|
const dependencyDescriptor = resolveHostedRuntimeDependencyArtifact({
|
|
609
710
|
version: params.expectedVersion,
|
|
@@ -664,33 +765,7 @@ async function runHostedLayeredArtifactUpdate(params) {
|
|
|
664
765
|
afterVersion: await readPackageVersion(params.pkgRoot)
|
|
665
766
|
};
|
|
666
767
|
}
|
|
667
|
-
|
|
668
|
-
const smokeStateDir = path.join(smokeHome, ".fased");
|
|
669
|
-
await fs.mkdir(smokeStateDir, { recursive: true });
|
|
670
|
-
const smokeArgv = [
|
|
671
|
-
process.execPath,
|
|
672
|
-
path.join(artifactRoot, "fased.mjs"),
|
|
673
|
-
"plugins",
|
|
674
|
-
"doctor"
|
|
675
|
-
];
|
|
676
|
-
const smokeResult = await record("hosted layered verify", smokeArgv.join(" "), async () => await params.runCommand(smokeArgv, {
|
|
677
|
-
cwd: artifactRoot,
|
|
678
|
-
timeoutMs: params.timeoutMs,
|
|
679
|
-
env: {
|
|
680
|
-
...process.env,
|
|
681
|
-
HOME: smokeHome,
|
|
682
|
-
FASED_STATE_DIR: smokeStateDir,
|
|
683
|
-
FASED_CONFIG_PATH: path.join(smokeStateDir, "fased.json")
|
|
684
|
-
}
|
|
685
|
-
}));
|
|
686
|
-
if (smokeResult.code !== 0) {
|
|
687
|
-
return {
|
|
688
|
-
kind: "error",
|
|
689
|
-
steps,
|
|
690
|
-
reason: "layered hosted runtime verification failed",
|
|
691
|
-
afterVersion: await readPackageVersion(params.pkgRoot)
|
|
692
|
-
};
|
|
693
|
-
}
|
|
768
|
+
await record("hosted layered verify", `verify checksummed v${params.expectedVersion} runtime shape`, async () => undefined);
|
|
694
769
|
await record("hosted app swap", `replace ${params.pkgRoot}`, async () => {
|
|
695
770
|
const swapped = await swapPackageRoot({
|
|
696
771
|
pkgRoot: params.pkgRoot,
|
|
@@ -706,6 +781,7 @@ async function runHostedLayeredArtifactUpdate(params) {
|
|
|
706
781
|
kind: "updated",
|
|
707
782
|
steps,
|
|
708
783
|
afterVersion: await readPackageVersion(params.pkgRoot),
|
|
784
|
+
reason: "verified layered hosted runtime",
|
|
709
785
|
transaction: {
|
|
710
786
|
kind: "package-root-swap",
|
|
711
787
|
packageRoot: params.pkgRoot,
|
|
@@ -828,49 +904,18 @@ async function runHostedReleaseArtifactUpdate(params) {
|
|
|
828
904
|
const artifactRoot = path.join(extractDir, "package");
|
|
829
905
|
const artifactVersion = await readPackageVersion(artifactRoot);
|
|
830
906
|
const runtimeShapeReady = compareSemverStrings(artifactVersion, params.expectedVersion) === 0 && await pathExists(path.join(artifactRoot, "fased.mjs")) && await pathExists(path.join(artifactRoot, "node_modules"));
|
|
831
|
-
const
|
|
832
|
-
const smokeStateDir = path.join(smokeHome, ".fased");
|
|
833
|
-
const smokeArgv = [
|
|
834
|
-
process.execPath,
|
|
835
|
-
path.join(artifactRoot, "fased.mjs"),
|
|
836
|
-
"plugins",
|
|
837
|
-
"doctor"
|
|
838
|
-
];
|
|
839
|
-
const verifyCommand = smokeArgv.join(" ");
|
|
907
|
+
const verifyCommand = `verify checksummed v${params.expectedVersion} runtime shape`;
|
|
840
908
|
const verifyInfo = startProgress("hosted artifact verify", verifyCommand, artifactRoot);
|
|
841
909
|
const verifyStarted = Date.now();
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
if (runtimeShapeReady) {
|
|
845
|
-
try {
|
|
846
|
-
await fs.mkdir(smokeHome, { recursive: true });
|
|
847
|
-
smokeResult = await params.runCommand(smokeArgv, {
|
|
848
|
-
cwd: artifactRoot,
|
|
849
|
-
timeoutMs: params.timeoutMs,
|
|
850
|
-
env: {
|
|
851
|
-
...process.env,
|
|
852
|
-
HOME: smokeHome,
|
|
853
|
-
FASED_STATE_DIR: smokeStateDir,
|
|
854
|
-
FASED_CONFIG_PATH: path.join(smokeStateDir, "fased.json")
|
|
855
|
-
}
|
|
856
|
-
});
|
|
857
|
-
} catch (error) {
|
|
858
|
-
smokeError = String(error);
|
|
859
|
-
}
|
|
860
|
-
}
|
|
861
|
-
const runtimeReady = runtimeShapeReady && smokeResult?.code === 0;
|
|
862
|
-
const verifyFailure = !runtimeShapeReady ? `expected complete v${params.expectedVersion}, found ${artifactVersion ?? "unknown"}` : trimLogTail([
|
|
863
|
-
smokeResult?.stderr,
|
|
864
|
-
smokeResult?.stdout,
|
|
865
|
-
smokeError
|
|
866
|
-
].filter((value) => Boolean(value?.trim())).join("\n"), MAX_LOG_CHARS) || "hosted runtime CLI and plugin check failed";
|
|
910
|
+
const runtimeReady = runtimeShapeReady;
|
|
911
|
+
const verifyFailure = !runtimeShapeReady ? `expected complete v${params.expectedVersion}, found ${artifactVersion ?? "unknown"}` : "hosted runtime shape verification failed";
|
|
867
912
|
completeProgress(verifyInfo, {
|
|
868
913
|
name: "hosted artifact verify",
|
|
869
914
|
command: verifyCommand,
|
|
870
915
|
cwd: artifactRoot,
|
|
871
916
|
durationMs: Date.now() - verifyStarted,
|
|
872
917
|
exitCode: runtimeReady ? 0 : 1,
|
|
873
|
-
...runtimeReady ? { stdoutTail: `v${params.expectedVersion}
|
|
918
|
+
...runtimeReady ? { stdoutTail: `checksummed v${params.expectedVersion} runtime shape passed` } : { stderrTail: verifyFailure }
|
|
874
919
|
});
|
|
875
920
|
if (!runtimeReady) {
|
|
876
921
|
return {
|
|
@@ -917,6 +962,7 @@ async function runHostedReleaseArtifactUpdate(params) {
|
|
|
917
962
|
kind: "updated",
|
|
918
963
|
steps,
|
|
919
964
|
afterVersion: await readPackageVersion(params.pkgRoot),
|
|
965
|
+
reason: "verified self-contained hosted runtime",
|
|
920
966
|
transaction: {
|
|
921
967
|
kind: "package-root-swap",
|
|
922
968
|
packageRoot: params.pkgRoot,
|
|
@@ -1624,6 +1670,7 @@ async function runGatewayUpdate(opts = {}) {
|
|
|
1624
1670
|
fetchImpl: releaseFetch,
|
|
1625
1671
|
baseUrl: opts.hostedReleaseBaseUrl ?? process.env.FASED_HOSTED_ARTIFACT_BASE_URL,
|
|
1626
1672
|
pkgRoot,
|
|
1673
|
+
dependencyCacheRoot: hostedTarget.cacheRoot,
|
|
1627
1674
|
expectedVersion,
|
|
1628
1675
|
runCommand,
|
|
1629
1676
|
timeoutMs,
|
|
@@ -1636,7 +1683,7 @@ async function runGatewayUpdate(opts = {}) {
|
|
|
1636
1683
|
mode: globalManager,
|
|
1637
1684
|
strategy: {
|
|
1638
1685
|
kind: "hosted-artifact",
|
|
1639
|
-
reason:
|
|
1686
|
+
reason: releaseResult.reason
|
|
1640
1687
|
},
|
|
1641
1688
|
root: pkgRoot,
|
|
1642
1689
|
before: { version: beforeVersion },
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CONFIG_DIR, ensureDir } from "../utils.js";
|
|
2
|
-
import
|
|
2
|
+
import fs from "node:fs";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import path from "node:path";
|
|
5
5
|
|
|
@@ -126,7 +126,7 @@ async function writeWideAreaGatewayZone(opts) {
|
|
|
126
126
|
await ensureDir(path.dirname(zonePath));
|
|
127
127
|
const existing = (() => {
|
|
128
128
|
try {
|
|
129
|
-
return
|
|
129
|
+
return fs.readFileSync(zonePath, "utf-8");
|
|
130
130
|
} catch {
|
|
131
131
|
return null;
|
|
132
132
|
}
|
|
@@ -149,7 +149,7 @@ async function writeWideAreaGatewayZone(opts) {
|
|
|
149
149
|
...opts,
|
|
150
150
|
serial
|
|
151
151
|
});
|
|
152
|
-
|
|
152
|
+
fs.writeFileSync(zonePath, next, "utf-8");
|
|
153
153
|
return {
|
|
154
154
|
zonePath,
|
|
155
155
|
changed: true
|
package/dist/infra/wsl.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
|
-
import fs from "node:fs/promises";
|
|
2
|
+
import fs$1 from "node:fs/promises";
|
|
3
3
|
|
|
4
4
|
//#region src/infra/wsl.ts
|
|
5
5
|
let wslCached = null;
|
|
@@ -50,7 +50,7 @@ async function isWSL() {
|
|
|
50
50
|
return wslCached;
|
|
51
51
|
}
|
|
52
52
|
try {
|
|
53
|
-
const release = await fs.readFile("/proc/sys/kernel/osrelease", "utf8");
|
|
53
|
+
const release = await fs$1.readFile("/proc/sys/kernel/osrelease", "utf8");
|
|
54
54
|
wslCached = release.toLowerCase().includes("microsoft") || release.toLowerCase().includes("wsl");
|
|
55
55
|
} catch {
|
|
56
56
|
wslCached = false;
|