@fased/fased 0.1.60 → 0.1.62
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/CHANGELOG.md +22 -0
- 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/openai-codex-app-server.js +5 -5
- 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/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/lightweight/gateway-runtime-probe.js +2 -2
- 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/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/control-ui/assets/{app-CqF4Tc9n.js → app-DLil9VO1.js} +3 -3
- package/dist/control-ui/assets/{index-DYggPSfy.js → index-DdE_NIXo.js} +3 -3
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/version.json +1 -1
- 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 +3 -3
- 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/managed-runtime-bootstrap.js +6 -6
- 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/widearea-dns.js +3 -3
- package/dist/infra/wsl.js +2 -2
- 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-C2QXh5Ml.js → audio-preflight-Bwi2Oq03.js} +2 -2
- package/dist/plugin-sdk/channel-plugin-common.d.ts +2 -2
- package/dist/plugin-sdk/{chunk-items-3ZyiGiff.js → chunk-items-DzT4L4Ty.js} +1 -1
- package/dist/plugin-sdk/command-status.js +2 -2
- package/dist/plugin-sdk/{config-schema-C9tx1Lyz.js → config-schema-BrkmtFxB.js} +16 -16
- 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 +2 -2
- package/dist/plugin-sdk/json-store.js +6 -6
- package/dist/plugin-sdk/{monitor-Xgx6vGcg.js → monitor-M_ta2lMc.js} +4 -4
- package/dist/plugin-sdk/{monitor-XbunF2-r.js → monitor-wYVncM9w.js} +6 -6
- package/dist/plugin-sdk/{openresponses-http-BRUr0JLE.js → openresponses-http-B2GmeSt4.js} +2 -2
- package/dist/plugin-sdk/{pairing-message-C403mq4K.d.ts → pairing-message-B3bHYGaw.d.ts} +1 -1
- package/dist/plugin-sdk/provider-web-search-config-contract.d.ts +1 -1
- package/dist/plugin-sdk/{pw-ai-BzV0f18N.js → pw-ai-AFUqn-tQ.js} +1 -1
- package/dist/plugin-sdk/{runtime-dependency-Ch7J9a0d.js → runtime-dependency-DLDmB94f.js} +9 -9
- package/dist/plugin-sdk/sat-runtime.d.ts +2 -2
- package/dist/plugin-sdk/sat-runtime.js +2 -2
- package/dist/plugin-sdk/{slack-BzJfCWjq.js → slack-CxE1mfzj.js} +4 -4
- package/dist/plugin-sdk/slack.d.ts +4 -4
- package/dist/plugin-sdk/{sticker-cache-Dex-XpRj.js → sticker-cache-CGzGWu00.js} +2 -2
- package/dist/plugin-sdk/{telegram-actions-DoFTGX4z.js → telegram-actions-DaEcYQ8r.js} +3 -3
- package/dist/plugin-sdk/telegram.d.ts +4 -4
- package/dist/plugin-sdk/{tmp-fased-dir-Ouj58axY.d.ts → tmp-fased-dir-CS6zsYEE.d.ts} +1 -1
- package/dist/plugin-sdk/{types-B4hj6HgR.d.ts → types-DFAW-n1J.d.ts} +1 -1
- package/dist/plugin-sdk/{types-dWZFX1fk.d.ts → types-vcJrC_uv.d.ts} +2 -2
- package/dist/plugin-sdk/{web--wC3ZfVl.js → web-CInY-lCv.js} +2 -2
- 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 +11 -28
- package/dist/wizard/onboarding.wallet.js +132 -85
- 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 +12 -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 +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -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 +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +2 -1
- package/scripts/install-fased-signerd.sh +142 -0
|
@@ -2,7 +2,7 @@ import { resolveStateDir } from "../../config/paths.js";
|
|
|
2
2
|
import { formatErrorMessage } from "../errors.js";
|
|
3
3
|
import { generateSecureUuid } from "../secure-random.js";
|
|
4
4
|
import { formatOutboundTargetForLog, redactOutboundTargetInText } from "./format.js";
|
|
5
|
-
import
|
|
5
|
+
import syncFs from "node:fs";
|
|
6
6
|
import path from "node:path";
|
|
7
7
|
|
|
8
8
|
//#region src/infra/outbound/delivery-queue.ts
|
|
@@ -26,11 +26,11 @@ function resolveFailedDir(stateDir) {
|
|
|
26
26
|
/** Ensure the queue directory (and failed/ subdirectory) exist. */
|
|
27
27
|
async function ensureQueueDir(stateDir) {
|
|
28
28
|
const queueDir = resolveQueueDir(stateDir);
|
|
29
|
-
await
|
|
29
|
+
await syncFs.promises.mkdir(queueDir, {
|
|
30
30
|
recursive: true,
|
|
31
31
|
mode: 448
|
|
32
32
|
});
|
|
33
|
-
await
|
|
33
|
+
await syncFs.promises.mkdir(resolveFailedDir(stateDir), {
|
|
34
34
|
recursive: true,
|
|
35
35
|
mode: 448
|
|
36
36
|
});
|
|
@@ -57,18 +57,18 @@ async function enqueueDelivery(params, stateDir) {
|
|
|
57
57
|
const filePath = path.join(queueDir, `${id}.json`);
|
|
58
58
|
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
59
59
|
const json = JSON.stringify(entry, null, 2);
|
|
60
|
-
await
|
|
60
|
+
await syncFs.promises.writeFile(tmp, json, {
|
|
61
61
|
encoding: "utf-8",
|
|
62
62
|
mode: 384
|
|
63
63
|
});
|
|
64
|
-
await
|
|
64
|
+
await syncFs.promises.rename(tmp, filePath);
|
|
65
65
|
return id;
|
|
66
66
|
}
|
|
67
67
|
/** Remove a successfully delivered entry from the queue. */
|
|
68
68
|
async function ackDelivery(id, stateDir) {
|
|
69
69
|
const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
|
|
70
70
|
try {
|
|
71
|
-
await
|
|
71
|
+
await syncFs.promises.unlink(filePath);
|
|
72
72
|
} catch (err) {
|
|
73
73
|
const code = err && typeof err === "object" && "code" in err ? String(err.code) : null;
|
|
74
74
|
if (code !== "ENOENT") {
|
|
@@ -79,24 +79,24 @@ async function ackDelivery(id, stateDir) {
|
|
|
79
79
|
/** Update a queue entry after a failed delivery attempt. */
|
|
80
80
|
async function failDelivery(id, error, stateDir) {
|
|
81
81
|
const filePath = path.join(resolveQueueDir(stateDir), `${id}.json`);
|
|
82
|
-
const raw = await
|
|
82
|
+
const raw = await syncFs.promises.readFile(filePath, "utf-8");
|
|
83
83
|
const entry = JSON.parse(raw);
|
|
84
84
|
entry.retryCount += 1;
|
|
85
85
|
entry.lastAttemptAt = Date.now();
|
|
86
86
|
entry.lastError = error;
|
|
87
87
|
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
88
|
-
await
|
|
88
|
+
await syncFs.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
|
|
89
89
|
encoding: "utf-8",
|
|
90
90
|
mode: 384
|
|
91
91
|
});
|
|
92
|
-
await
|
|
92
|
+
await syncFs.promises.rename(tmp, filePath);
|
|
93
93
|
}
|
|
94
94
|
/** Load all pending delivery entries from the queue directory. */
|
|
95
95
|
async function loadPendingDeliveries(stateDir) {
|
|
96
96
|
const queueDir = resolveQueueDir(stateDir);
|
|
97
97
|
let files;
|
|
98
98
|
try {
|
|
99
|
-
files = await
|
|
99
|
+
files = await syncFs.promises.readdir(queueDir);
|
|
100
100
|
} catch (err) {
|
|
101
101
|
const code = err && typeof err === "object" && "code" in err ? String(err.code) : null;
|
|
102
102
|
if (code === "ENOENT") {
|
|
@@ -111,20 +111,20 @@ async function loadPendingDeliveries(stateDir) {
|
|
|
111
111
|
}
|
|
112
112
|
const filePath = path.join(queueDir, file);
|
|
113
113
|
try {
|
|
114
|
-
const stat = await
|
|
114
|
+
const stat = await syncFs.promises.stat(filePath);
|
|
115
115
|
if (!stat.isFile()) {
|
|
116
116
|
continue;
|
|
117
117
|
}
|
|
118
|
-
const raw = await
|
|
118
|
+
const raw = await syncFs.promises.readFile(filePath, "utf-8");
|
|
119
119
|
const parsed = JSON.parse(raw);
|
|
120
120
|
const { entry, migrated } = normalizeLegacyQueuedDeliveryEntry(parsed);
|
|
121
121
|
if (migrated) {
|
|
122
122
|
const tmp = `${filePath}.${process.pid}.tmp`;
|
|
123
|
-
await
|
|
123
|
+
await syncFs.promises.writeFile(tmp, JSON.stringify(entry, null, 2), {
|
|
124
124
|
encoding: "utf-8",
|
|
125
125
|
mode: 384
|
|
126
126
|
});
|
|
127
|
-
await
|
|
127
|
+
await syncFs.promises.rename(tmp, filePath);
|
|
128
128
|
}
|
|
129
129
|
entries.push(entry);
|
|
130
130
|
} catch {}
|
|
@@ -135,13 +135,13 @@ async function loadPendingDeliveries(stateDir) {
|
|
|
135
135
|
async function moveToFailed(id, stateDir) {
|
|
136
136
|
const queueDir = resolveQueueDir(stateDir);
|
|
137
137
|
const failedDir = resolveFailedDir(stateDir);
|
|
138
|
-
await
|
|
138
|
+
await syncFs.promises.mkdir(failedDir, {
|
|
139
139
|
recursive: true,
|
|
140
140
|
mode: 448
|
|
141
141
|
});
|
|
142
142
|
const src = path.join(queueDir, `${id}.json`);
|
|
143
143
|
const dest = path.join(failedDir, `${id}.json`);
|
|
144
|
-
await
|
|
144
|
+
await syncFs.promises.rename(src, dest);
|
|
145
145
|
}
|
|
146
146
|
/** Compute the backoff delay in ms for a given retry count. */
|
|
147
147
|
function computeBackoffMs(retryCount) {
|
package/dist/infra/path-env.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { isTruthyEnvValue } from "./env.js";
|
|
2
2
|
import { resolveBrewPathDirs } from "./brew.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
|
|
7
7
|
//#region src/infra/path-env.ts
|
|
8
8
|
function isExecutable(filePath) {
|
|
9
9
|
try {
|
|
10
|
-
|
|
10
|
+
syncFs.accessSync(filePath, syncFs.constants.X_OK);
|
|
11
11
|
return true;
|
|
12
12
|
} catch {
|
|
13
13
|
return false;
|
|
@@ -15,7 +15,7 @@ function isExecutable(filePath) {
|
|
|
15
15
|
}
|
|
16
16
|
function isDirectory(dirPath) {
|
|
17
17
|
try {
|
|
18
|
-
return
|
|
18
|
+
return syncFs.statSync(dirPath).isDirectory();
|
|
19
19
|
} catch {
|
|
20
20
|
return false;
|
|
21
21
|
}
|
package/dist/infra/ports-lsof.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import fs
|
|
1
|
+
import syncFs from "node:fs";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
3
|
|
|
4
4
|
//#region src/infra/ports-lsof.ts
|
|
5
5
|
const LSOF_CANDIDATES = process.platform === "darwin" ? ["/usr/sbin/lsof", "/usr/bin/lsof"] : ["/usr/bin/lsof", "/usr/sbin/lsof"];
|
|
6
6
|
async function canExecute(path) {
|
|
7
7
|
try {
|
|
8
|
-
await fs
|
|
8
|
+
await fs.access(path, syncFs.constants.X_OK);
|
|
9
9
|
return true;
|
|
10
10
|
} catch {
|
|
11
11
|
return false;
|
|
@@ -22,7 +22,7 @@ async function resolveLsofCommand() {
|
|
|
22
22
|
function resolveLsofCommandSync() {
|
|
23
23
|
for (const candidate of LSOF_CANDIDATES) {
|
|
24
24
|
try {
|
|
25
|
-
|
|
25
|
+
syncFs.accessSync(candidate, syncFs.constants.X_OK);
|
|
26
26
|
return candidate;
|
|
27
27
|
} catch {}
|
|
28
28
|
}
|
|
@@ -9,7 +9,7 @@ import { resolveAuthProfileOrder } from "../agents/auth-profiles/order.js";
|
|
|
9
9
|
import "../agents/auth-profiles.js";
|
|
10
10
|
import { getCustomProviderApiKey } from "../agents/model-auth.js";
|
|
11
11
|
import { normalizeProviderId } from "../agents/model-selection.js";
|
|
12
|
-
import
|
|
12
|
+
import syncFs from "node:fs";
|
|
13
13
|
import os from "node:os";
|
|
14
14
|
import path from "node:path";
|
|
15
15
|
|
|
@@ -43,10 +43,10 @@ function resolveZaiApiKey() {
|
|
|
43
43
|
}
|
|
44
44
|
try {
|
|
45
45
|
const authPath = path.join(resolveRequiredHomeDir(process.env, os.homedir), ".pi", "agent", "auth.json");
|
|
46
|
-
if (!
|
|
46
|
+
if (!syncFs.existsSync(authPath)) {
|
|
47
47
|
return undefined;
|
|
48
48
|
}
|
|
49
|
-
const data = JSON.parse(
|
|
49
|
+
const data = JSON.parse(syncFs.readFileSync(authPath, "utf-8"));
|
|
50
50
|
return data["z-ai"]?.access || data.zai?.access;
|
|
51
51
|
} catch {
|
|
52
52
|
return undefined;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sameFileIdentity as sameFileIdentity$1 } from "./file-identity.js";
|
|
2
|
-
import
|
|
2
|
+
import syncFs from "node:fs";
|
|
3
3
|
|
|
4
4
|
//#region src/infra/safe-open-sync.ts
|
|
5
5
|
function isExpectedPathError(error) {
|
|
@@ -10,7 +10,7 @@ function sameFileIdentity(left, right) {
|
|
|
10
10
|
return sameFileIdentity$1(left, right);
|
|
11
11
|
}
|
|
12
12
|
function openVerifiedFileSync(params) {
|
|
13
|
-
const ioFs = params.ioFs ??
|
|
13
|
+
const ioFs = params.ioFs ?? syncFs;
|
|
14
14
|
const openReadFlags = ioFs.constants.O_RDONLY | (typeof ioFs.constants.O_NOFOLLOW === "number" ? ioFs.constants.O_NOFOLLOW : 0);
|
|
15
15
|
let fd = null;
|
|
16
16
|
try {
|
|
@@ -4,7 +4,7 @@ import { stripInboundMetadata } from "../auto-reply/reply/strip-inbound-meta.js"
|
|
|
4
4
|
import { stripEnvelope, stripMessageIdHints } from "../shared/chat-envelope.js";
|
|
5
5
|
import { normalizeUsage } from "../agents/usage.js";
|
|
6
6
|
import { estimateUsageCost, resolveModelCostConfig } from "../utils/usage-format.js";
|
|
7
|
-
import
|
|
7
|
+
import syncFs from "node:fs";
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import readline from "node:readline";
|
|
10
10
|
|
|
@@ -145,7 +145,7 @@ const applyCostTotal = (totals, costTotal) => {
|
|
|
145
145
|
totals.totalCost += costTotal;
|
|
146
146
|
};
|
|
147
147
|
async function* readJsonlRecords(filePath) {
|
|
148
|
-
const fileStream =
|
|
148
|
+
const fileStream = syncFs.createReadStream(filePath, { encoding: "utf-8" });
|
|
149
149
|
const rl = readline.createInterface({
|
|
150
150
|
input: fileStream,
|
|
151
151
|
crlfDelay: Infinity
|
|
@@ -225,10 +225,10 @@ async function loadCostUsageSummary(params) {
|
|
|
225
225
|
const dailyMap = new Map();
|
|
226
226
|
const totals = emptyTotals();
|
|
227
227
|
const sessionsDir = resolveSessionTranscriptsDirForAgent(params?.agentId);
|
|
228
|
-
const entries = await
|
|
228
|
+
const entries = await syncFs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
|
|
229
229
|
const files = (await Promise.all(entries.filter((entry) => entry.isFile() && entry.name.endsWith(".jsonl")).map(async (entry) => {
|
|
230
230
|
const filePath = path.join(sessionsDir, entry.name);
|
|
231
|
-
const stats = await
|
|
231
|
+
const stats = await syncFs.promises.stat(filePath).catch(() => null);
|
|
232
232
|
if (!stats) {
|
|
233
233
|
return null;
|
|
234
234
|
}
|
|
@@ -279,14 +279,14 @@ async function loadCostUsageSummary(params) {
|
|
|
279
279
|
*/
|
|
280
280
|
async function discoverAllSessions(params) {
|
|
281
281
|
const sessionsDir = resolveSessionTranscriptsDirForAgent(params?.agentId);
|
|
282
|
-
const entries = await
|
|
282
|
+
const entries = await syncFs.promises.readdir(sessionsDir, { withFileTypes: true }).catch(() => []);
|
|
283
283
|
const discovered = [];
|
|
284
284
|
for (const entry of entries) {
|
|
285
285
|
if (!entry.isFile() || !entry.name.endsWith(".jsonl")) {
|
|
286
286
|
continue;
|
|
287
287
|
}
|
|
288
288
|
const filePath = path.join(sessionsDir, entry.name);
|
|
289
|
-
const stats = await
|
|
289
|
+
const stats = await syncFs.promises.stat(filePath).catch(() => null);
|
|
290
290
|
if (!stats) {
|
|
291
291
|
continue;
|
|
292
292
|
}
|
|
@@ -330,7 +330,7 @@ async function discoverAllSessions(params) {
|
|
|
330
330
|
}
|
|
331
331
|
async function loadSessionCostSummary(params) {
|
|
332
332
|
const sessionFile = params.sessionFile ?? (params.sessionId ? resolveSessionFilePath(params.sessionId, params.sessionEntry, { agentId: params.agentId }) : undefined);
|
|
333
|
-
if (!sessionFile || !
|
|
333
|
+
if (!sessionFile || !syncFs.existsSync(sessionFile)) {
|
|
334
334
|
return null;
|
|
335
335
|
}
|
|
336
336
|
const totals = emptyTotals();
|
|
@@ -547,7 +547,7 @@ async function loadSessionCostSummary(params) {
|
|
|
547
547
|
}
|
|
548
548
|
async function loadSessionUsageTimeSeries(params) {
|
|
549
549
|
const sessionFile = params.sessionFile ?? (params.sessionId ? resolveSessionFilePath(params.sessionId, params.sessionEntry, { agentId: params.agentId }) : undefined);
|
|
550
|
-
if (!sessionFile || !
|
|
550
|
+
if (!sessionFile || !syncFs.existsSync(sessionFile)) {
|
|
551
551
|
return null;
|
|
552
552
|
}
|
|
553
553
|
const points = [];
|
|
@@ -635,7 +635,7 @@ async function loadSessionUsageTimeSeries(params) {
|
|
|
635
635
|
}
|
|
636
636
|
async function loadSessionLogs(params) {
|
|
637
637
|
const sessionFile = params.sessionFile ?? (params.sessionId ? resolveSessionFilePath(params.sessionId, params.sessionEntry, { agentId: params.agentId }) : undefined);
|
|
638
|
-
if (!sessionFile || !
|
|
638
|
+
if (!sessionFile || !syncFs.existsSync(sessionFile)) {
|
|
639
639
|
return null;
|
|
640
640
|
}
|
|
641
641
|
const logs = [];
|
package/dist/infra/shell-env.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { sanitizeHostExecEnv } from "./host-env-security.js";
|
|
2
2
|
import { isTruthyEnvValue } from "./env.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
import os from "node:os";
|
|
5
5
|
import path from "node:path";
|
|
6
6
|
import { execFileSync } from "node:child_process";
|
|
@@ -34,7 +34,7 @@ function readEtcShells() {
|
|
|
34
34
|
return cachedEtcShells;
|
|
35
35
|
}
|
|
36
36
|
try {
|
|
37
|
-
const raw =
|
|
37
|
+
const raw = syncFs.readFileSync("/etc/shells", "utf8");
|
|
38
38
|
const entries = raw.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#") && path.isAbsolute(line));
|
|
39
39
|
cachedEtcShells = new Set(entries);
|
|
40
40
|
} catch {
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import
|
|
1
|
+
import syncFs 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 syncFs.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 syncFs.existsSync(dir) && syncFs.statSync(dir).isDirectory();
|
|
15
15
|
} catch {
|
|
16
16
|
return false;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
function ensureDir(dir) {
|
|
20
|
-
|
|
20
|
+
syncFs.mkdirSync(dir, { recursive: true });
|
|
21
21
|
}
|
|
22
22
|
function fileExists(p) {
|
|
23
23
|
try {
|
|
24
|
-
return
|
|
24
|
+
return syncFs.existsSync(p) && syncFs.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 = syncFs.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 syncFs 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
|
+
syncFs.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 = syncFs.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 syncFs.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 = syncFs.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 = syncFs.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 = syncFs.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 = syncFs.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 syncFs.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 ? syncFs.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 = syncFs.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
|
+
syncFs.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
|
+
syncFs.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
|
+
syncFs.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
|
+
syncFs.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
|
+
syncFs.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
|
+
syncFs.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
|
+
syncFs.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 (syncFs.existsSync(to)) {
|
|
727
727
|
continue;
|
|
728
728
|
}
|
|
729
729
|
try {
|
|
730
|
-
|
|
730
|
+
syncFs.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
|
+
syncFs.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
|
+
syncFs.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
|
+
syncFs.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 syncFs 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 = syncFs.constants.W_OK | syncFs.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 ?? syncFs.accessSync;
|
|
13
|
+
const chmodSync = options.chmodSync ?? syncFs.chmodSync;
|
|
14
|
+
const lstatSync = options.lstatSync ?? syncFs.lstatSync;
|
|
15
|
+
const mkdirSync = options.mkdirSync ?? syncFs.mkdirSync;
|
|
16
16
|
const warn = options.warn ?? ((message) => console.warn(message));
|
|
17
17
|
const getuid = options.getuid ?? (() => {
|
|
18
18
|
try {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CONFIG_DIR, ensureDir } from "../utils.js";
|
|
2
|
-
import
|
|
2
|
+
import syncFs 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 syncFs.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
|
+
syncFs.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
|
|
2
|
+
import fs 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
|
|
53
|
+
const release = await fs.readFile("/proc/sys/kernel/osrelease", "utf8");
|
|
54
54
|
wslCached = release.toLowerCase().includes("microsoft") || release.toLowerCase().includes("wsl");
|
|
55
55
|
} catch {
|
|
56
56
|
wslCached = false;
|
package/dist/line/accounts.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DEFAULT_ACCOUNT_ID, normalizeAccountId as normalizeAccountId$1 } from "../routing/account-id.js";
|
|
2
2
|
import { resolveAccountEntry } from "../routing/account-lookup.js";
|
|
3
|
-
import
|
|
3
|
+
import syncFs from "node:fs";
|
|
4
4
|
|
|
5
5
|
//#region src/line/accounts.ts
|
|
6
6
|
function readFileIfExists(filePath) {
|
|
@@ -8,7 +8,7 @@ function readFileIfExists(filePath) {
|
|
|
8
8
|
return undefined;
|
|
9
9
|
}
|
|
10
10
|
try {
|
|
11
|
-
return
|
|
11
|
+
return syncFs.readFileSync(filePath, "utf-8").trim();
|
|
12
12
|
} catch {
|
|
13
13
|
return undefined;
|
|
14
14
|
}
|
package/dist/line/download.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logVerbose } from "../globals.js";
|
|
2
2
|
import { buildRandomTempFilePath } from "../plugin-sdk/temp-path.js";
|
|
3
3
|
import { formatLineIdForLog } from "./logging.js";
|
|
4
|
-
import
|
|
4
|
+
import syncFs from "node:fs";
|
|
5
5
|
import { messagingApi } from "@line/bot-sdk";
|
|
6
6
|
|
|
7
7
|
//#region src/line/download.ts
|
|
@@ -24,7 +24,7 @@ async function downloadLineMedia(messageId, channelAccessToken, maxBytes = 10 *
|
|
|
24
24
|
prefix: "line-media",
|
|
25
25
|
extension: ext
|
|
26
26
|
});
|
|
27
|
-
await
|
|
27
|
+
await syncFs.promises.writeFile(filePath, buffer);
|
|
28
28
|
logVerbose(`line: downloaded media ${formatLineIdForLog(messageId)} to ${filePath} (${buffer.length} bytes)`);
|
|
29
29
|
return {
|
|
30
30
|
path: filePath,
|
package/dist/logging/config.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { resolveConfigPath } from "../config/paths.js";
|
|
2
|
-
import
|
|
2
|
+
import syncFs from "node:fs";
|
|
3
3
|
import JSON5 from "json5";
|
|
4
4
|
|
|
5
5
|
//#region src/logging/config.ts
|
|
6
6
|
function readLoggingConfig() {
|
|
7
7
|
const configPath = resolveConfigPath();
|
|
8
8
|
try {
|
|
9
|
-
if (!
|
|
9
|
+
if (!syncFs.existsSync(configPath)) {
|
|
10
10
|
return undefined;
|
|
11
11
|
}
|
|
12
|
-
const raw =
|
|
12
|
+
const raw = syncFs.readFileSync(configPath, "utf-8");
|
|
13
13
|
const parsed = JSON5.parse(raw);
|
|
14
14
|
const logging = parsed?.logging;
|
|
15
15
|
if (!logging || typeof logging !== "object" || Array.isArray(logging)) {
|