@jungjaehoon/mama-os 0.77.0 → 0.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +446 -0
- package/README.md +59 -30
- package/db/migrations/002-model-runs-parent-index.sql +11 -0
- package/db/migrations/003-upkeep-settled.sql +15 -0
- package/dist/api/google-read-actions.d.ts +30 -0
- package/dist/api/google-read-actions.d.ts.map +1 -0
- package/dist/api/google-read-actions.js +256 -0
- package/dist/api/google-read-actions.js.map +1 -0
- package/dist/api/record-actions.d.ts.map +1 -1
- package/dist/api/record-actions.js +23 -5
- package/dist/api/record-actions.js.map +1 -1
- package/dist/api/report-handler.d.ts +0 -6
- package/dist/api/report-handler.d.ts.map +1 -1
- package/dist/api/report-handler.js +0 -54
- package/dist/api/report-handler.js.map +1 -1
- package/dist/api/security-events.d.ts +1 -1
- package/dist/api/security-events.d.ts.map +1 -1
- package/dist/api/security-events.js +10 -1
- package/dist/api/security-events.js.map +1 -1
- package/dist/api/source-actions.d.ts +9 -0
- package/dist/api/source-actions.d.ts.map +1 -1
- package/dist/api/source-actions.js +49 -0
- package/dist/api/source-actions.js.map +1 -1
- package/dist/api/viewer-request-security.d.ts +14 -1
- package/dist/api/viewer-request-security.d.ts.map +1 -1
- package/dist/api/viewer-request-security.js +26 -3
- package/dist/api/viewer-request-security.js.map +1 -1
- package/dist/api/viewer-server.d.ts +8 -0
- package/dist/api/viewer-server.d.ts.map +1 -1
- package/dist/api/viewer-server.js +66 -0
- package/dist/api/viewer-server.js.map +1 -1
- package/dist/api/work-actions.d.ts +19 -2
- package/dist/api/work-actions.d.ts.map +1 -1
- package/dist/api/work-actions.js +42 -2
- package/dist/api/work-actions.js.map +1 -1
- package/dist/cli/commands/backfill.d.ts.map +1 -1
- package/dist/cli/commands/backfill.js +1 -0
- package/dist/cli/commands/backfill.js.map +1 -1
- package/dist/cli/commands/backup.d.ts +14 -0
- package/dist/cli/commands/backup.d.ts.map +1 -0
- package/dist/cli/commands/backup.js +174 -0
- package/dist/cli/commands/backup.js.map +1 -0
- package/dist/cli/commands/control.d.ts +44 -0
- package/dist/cli/commands/control.d.ts.map +1 -0
- package/dist/cli/commands/control.js +354 -0
- package/dist/cli/commands/control.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +60 -3
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +454 -78
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +13 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +216 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/init-questions.d.ts +98 -0
- package/dist/cli/commands/init-questions.d.ts.map +1 -0
- package/dist/cli/commands/init-questions.js +420 -0
- package/dist/cli/commands/init-questions.js.map +1 -0
- package/dist/cli/commands/init-section.d.ts +13 -0
- package/dist/cli/commands/init-section.d.ts.map +1 -0
- package/dist/cli/commands/init-section.js +375 -0
- package/dist/cli/commands/init-section.js.map +1 -0
- package/dist/cli/commands/init.d.ts +56 -2
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +562 -350
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/logs.d.ts +9 -0
- package/dist/cli/commands/logs.d.ts.map +1 -0
- package/dist/cli/commands/logs.js +109 -0
- package/dist/cli/commands/logs.js.map +1 -0
- package/dist/cli/commands/node-move.d.ts +20 -0
- package/dist/cli/commands/node-move.d.ts.map +1 -0
- package/dist/cli/commands/node-move.js +289 -0
- package/dist/cli/commands/node-move.js.map +1 -0
- package/dist/cli/commands/register-owner.d.ts +3 -0
- package/dist/cli/commands/register-owner.d.ts.map +1 -1
- package/dist/cli/commands/register-owner.js +14 -0
- package/dist/cli/commands/register-owner.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +16 -0
- package/dist/cli/commands/restore.d.ts.map +1 -0
- package/dist/cli/commands/restore.js +137 -0
- package/dist/cli/commands/restore.js.map +1 -0
- package/dist/cli/commands/service.d.ts +44 -0
- package/dist/cli/commands/service.d.ts.map +1 -0
- package/dist/cli/commands/service.js +306 -0
- package/dist/cli/commands/service.js.map +1 -0
- package/dist/cli/commands/tools.d.ts +1 -1
- package/dist/cli/commands/tools.d.ts.map +1 -1
- package/dist/cli/commands/tools.js +8 -3
- package/dist/cli/commands/tools.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts +7 -0
- package/dist/cli/commands/uninstall.d.ts.map +1 -0
- package/dist/cli/commands/uninstall.js +335 -0
- package/dist/cli/commands/uninstall.js.map +1 -0
- package/dist/cli/commands/update.d.ts +59 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +948 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.js +74 -23
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/launch-files.d.ts +119 -0
- package/dist/cli/launch-files.d.ts.map +1 -1
- package/dist/cli/launch-files.js +324 -15
- package/dist/cli/launch-files.js.map +1 -1
- package/dist/cli/prompt.d.ts +2 -1
- package/dist/cli/prompt.d.ts.map +1 -1
- package/dist/cli/prompt.js +5 -2
- package/dist/cli/prompt.js.map +1 -1
- package/dist/cli/runtime/backend-probe.d.ts +34 -0
- package/dist/cli/runtime/backend-probe.d.ts.map +1 -0
- package/dist/cli/runtime/backend-probe.js +83 -0
- package/dist/cli/runtime/backend-probe.js.map +1 -0
- package/dist/cli/runtime/backup.d.ts +130 -0
- package/dist/cli/runtime/backup.d.ts.map +1 -0
- package/dist/cli/runtime/backup.js +592 -0
- package/dist/cli/runtime/backup.js.map +1 -0
- package/dist/cli/runtime/daemon-control.d.ts +169 -0
- package/dist/cli/runtime/daemon-control.d.ts.map +1 -0
- package/dist/cli/runtime/daemon-control.js +441 -0
- package/dist/cli/runtime/daemon-control.js.map +1 -0
- package/dist/cli/runtime/default-roots.d.ts +27 -0
- package/dist/cli/runtime/default-roots.d.ts.map +1 -0
- package/dist/cli/runtime/default-roots.js +61 -0
- package/dist/cli/runtime/default-roots.js.map +1 -0
- package/dist/cli/runtime/diagnostics.d.ts +68 -0
- package/dist/cli/runtime/diagnostics.d.ts.map +1 -0
- package/dist/cli/runtime/diagnostics.js +1139 -0
- package/dist/cli/runtime/diagnostics.js.map +1 -0
- package/dist/cli/runtime/init-state.d.ts +20 -0
- package/dist/cli/runtime/init-state.d.ts.map +1 -0
- package/dist/cli/runtime/init-state.js +51 -0
- package/dist/cli/runtime/init-state.js.map +1 -0
- package/dist/cli/runtime/install-kind.d.ts +54 -0
- package/dist/cli/runtime/install-kind.d.ts.map +1 -0
- package/dist/cli/runtime/install-kind.js +164 -0
- package/dist/cli/runtime/install-kind.js.map +1 -0
- package/dist/cli/runtime/node-move-journal.d.ts +44 -0
- package/dist/cli/runtime/node-move-journal.d.ts.map +1 -0
- package/dist/cli/runtime/node-move-journal.js +48 -0
- package/dist/cli/runtime/node-move-journal.js.map +1 -0
- package/dist/cli/runtime/release-check.d.ts +94 -0
- package/dist/cli/runtime/release-check.d.ts.map +1 -0
- package/dist/cli/runtime/release-check.js +316 -0
- package/dist/cli/runtime/release-check.js.map +1 -0
- package/dist/cli/runtime/restore.d.ts +98 -0
- package/dist/cli/runtime/restore.d.ts.map +1 -0
- package/dist/cli/runtime/restore.js +756 -0
- package/dist/cli/runtime/restore.js.map +1 -0
- package/dist/cli/runtime/setup-page.d.ts +57 -0
- package/dist/cli/runtime/setup-page.d.ts.map +1 -0
- package/dist/cli/runtime/setup-page.js +266 -0
- package/dist/cli/runtime/setup-page.js.map +1 -0
- package/dist/cli/runtime/source-tools.d.ts +60 -0
- package/dist/cli/runtime/source-tools.d.ts.map +1 -0
- package/dist/cli/runtime/source-tools.js +170 -0
- package/dist/cli/runtime/source-tools.js.map +1 -0
- package/dist/cli/runtime/systemd-service.d.ts +13 -0
- package/dist/cli/runtime/systemd-service.d.ts.map +1 -0
- package/dist/cli/runtime/systemd-service.js +32 -0
- package/dist/cli/runtime/systemd-service.js.map +1 -0
- package/dist/cli/runtime/telegram-pairing.d.ts +73 -0
- package/dist/cli/runtime/telegram-pairing.d.ts.map +1 -0
- package/dist/cli/runtime/telegram-pairing.js +184 -0
- package/dist/cli/runtime/telegram-pairing.js.map +1 -0
- package/dist/cli/runtime/update-journal.d.ts +135 -0
- package/dist/cli/runtime/update-journal.d.ts.map +1 -0
- package/dist/cli/runtime/update-journal.js +144 -0
- package/dist/cli/runtime/update-journal.js.map +1 -0
- package/dist/cli/runtime/update-progress.d.ts +95 -0
- package/dist/cli/runtime/update-progress.d.ts.map +1 -0
- package/dist/cli/runtime/update-progress.js +154 -0
- package/dist/cli/runtime/update-progress.js.map +1 -0
- package/dist/cli/runtime/update-request.d.ts +58 -0
- package/dist/cli/runtime/update-request.d.ts.map +1 -0
- package/dist/cli/runtime/update-request.js +172 -0
- package/dist/cli/runtime/update-request.js.map +1 -0
- package/dist/connectors/calendar/index.d.ts +5 -1
- package/dist/connectors/calendar/index.d.ts.map +1 -1
- package/dist/connectors/calendar/index.js +19 -28
- package/dist/connectors/calendar/index.js.map +1 -1
- package/dist/connectors/chatwork/index.d.ts.map +1 -1
- package/dist/connectors/chatwork/index.js +7 -3
- package/dist/connectors/chatwork/index.js.map +1 -1
- package/dist/connectors/config-loader.d.ts +7 -1
- package/dist/connectors/config-loader.d.ts.map +1 -1
- package/dist/connectors/config-loader.js +11 -2
- package/dist/connectors/config-loader.js.map +1 -1
- package/dist/connectors/discord/index.d.ts.map +1 -1
- package/dist/connectors/discord/index.js +4 -3
- package/dist/connectors/discord/index.js.map +1 -1
- package/dist/connectors/drive/index.d.ts.map +1 -1
- package/dist/connectors/drive/index.js +15 -13
- package/dist/connectors/drive/index.js.map +1 -1
- package/dist/connectors/framework/gws-utils.d.ts +62 -0
- package/dist/connectors/framework/gws-utils.d.ts.map +1 -1
- package/dist/connectors/framework/gws-utils.js +133 -3
- package/dist/connectors/framework/gws-utils.js.map +1 -1
- package/dist/connectors/framework/polling-scheduler.d.ts.map +1 -1
- package/dist/connectors/framework/polling-scheduler.js +12 -11
- package/dist/connectors/framework/polling-scheduler.js.map +1 -1
- package/dist/connectors/framework/types.d.ts +24 -0
- package/dist/connectors/framework/types.d.ts.map +1 -1
- package/dist/connectors/framework/types.js +9 -0
- package/dist/connectors/framework/types.js.map +1 -1
- package/dist/connectors/gmail/index.d.ts.map +1 -1
- package/dist/connectors/gmail/index.js +14 -13
- package/dist/connectors/gmail/index.js.map +1 -1
- package/dist/connectors/imessage/index.d.ts.map +1 -1
- package/dist/connectors/imessage/index.js +2 -1
- package/dist/connectors/imessage/index.js.map +1 -1
- package/dist/connectors/index.d.ts +4 -4
- package/dist/connectors/index.d.ts.map +1 -1
- package/dist/connectors/index.js +4 -10
- package/dist/connectors/index.js.map +1 -1
- package/dist/connectors/notion/index.d.ts.map +1 -1
- package/dist/connectors/notion/index.js +5 -3
- package/dist/connectors/notion/index.js.map +1 -1
- package/dist/connectors/sheets/index.d.ts.map +1 -1
- package/dist/connectors/sheets/index.js +17 -12
- package/dist/connectors/sheets/index.js.map +1 -1
- package/dist/connectors/slack/index.d.ts.map +1 -1
- package/dist/connectors/slack/index.js +9 -3
- package/dist/connectors/slack/index.js.map +1 -1
- package/dist/connectors/telegram/index.d.ts.map +1 -1
- package/dist/connectors/telegram/index.js +4 -3
- package/dist/connectors/telegram/index.js.map +1 -1
- package/dist/connectors/trello/index.d.ts +1 -1
- package/dist/connectors/trello/index.d.ts.map +1 -1
- package/dist/connectors/trello/index.js +10 -5
- package/dist/connectors/trello/index.js.map +1 -1
- package/dist/gateways/discord.d.ts +6 -0
- package/dist/gateways/discord.d.ts.map +1 -1
- package/dist/gateways/discord.js +38 -27
- package/dist/gateways/discord.js.map +1 -1
- package/dist/gateways/slack.d.ts +6 -0
- package/dist/gateways/slack.d.ts.map +1 -1
- package/dist/gateways/slack.js +38 -27
- package/dist/gateways/slack.js.map +1 -1
- package/dist/gateways/telegram-commands.d.ts +124 -0
- package/dist/gateways/telegram-commands.d.ts.map +1 -0
- package/dist/gateways/telegram-commands.js +131 -0
- package/dist/gateways/telegram-commands.js.map +1 -0
- package/dist/gateways/telegram.d.ts +20 -0
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +138 -34
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/gateways/turn-contract.d.ts +11 -0
- package/dist/gateways/turn-contract.d.ts.map +1 -1
- package/dist/runtime/action-surface.d.ts +1 -1
- package/dist/runtime/action-surface.d.ts.map +1 -1
- package/dist/runtime/action-surface.js +10 -0
- package/dist/runtime/action-surface.js.map +1 -1
- package/dist/runtime/backend-security.d.ts +26 -2
- package/dist/runtime/backend-security.d.ts.map +1 -1
- package/dist/runtime/backend-security.js +63 -10
- package/dist/runtime/backend-security.js.map +1 -1
- package/dist/runtime/config.d.ts +3 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +4 -4
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/connectors.d.ts +21 -1
- package/dist/runtime/connectors.d.ts.map +1 -1
- package/dist/runtime/connectors.js +28 -17
- package/dist/runtime/connectors.js.map +1 -1
- package/dist/runtime/core-db.d.ts.map +1 -1
- package/dist/runtime/core-db.js +2 -0
- package/dist/runtime/core-db.js.map +1 -1
- package/dist/runtime/member-paths.d.ts +15 -7
- package/dist/runtime/member-paths.d.ts.map +1 -1
- package/dist/runtime/member-paths.js +64 -12
- package/dist/runtime/member-paths.js.map +1 -1
- package/dist/runtime/member-session.d.ts +4 -0
- package/dist/runtime/member-session.d.ts.map +1 -1
- package/dist/runtime/member-session.js +23 -2
- package/dist/runtime/member-session.js.map +1 -1
- package/dist/runtime/native-session.d.ts +2 -0
- package/dist/runtime/native-session.d.ts.map +1 -1
- package/dist/runtime/native-session.js +1 -0
- package/dist/runtime/native-session.js.map +1 -1
- package/dist/runtime/owner-runtime.d.ts +63 -1
- package/dist/runtime/owner-runtime.d.ts.map +1 -1
- package/dist/runtime/owner-runtime.js +180 -3
- package/dist/runtime/owner-runtime.js.map +1 -1
- package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
- package/dist/runtime/owner-system-prompt.js +6 -5
- package/dist/runtime/owner-system-prompt.js.map +1 -1
- package/dist/runtime/principal-access.d.ts +2 -0
- package/dist/runtime/principal-access.d.ts.map +1 -1
- package/dist/runtime/principal-access.js +7 -0
- package/dist/runtime/principal-access.js.map +1 -1
- package/dist/runtime/principal-sessions.d.ts.map +1 -1
- package/dist/runtime/principal-sessions.js +8 -1
- package/dist/runtime/principal-sessions.js.map +1 -1
- package/dist/runtime/record-orders.d.ts.map +1 -1
- package/dist/runtime/record-orders.js +3 -29
- package/dist/runtime/record-orders.js.map +1 -1
- package/dist/runtime/report-scheduler.d.ts +9 -2
- package/dist/runtime/report-scheduler.d.ts.map +1 -1
- package/dist/runtime/report-scheduler.js +37 -10
- package/dist/runtime/report-scheduler.js.map +1 -1
- package/dist/runtime/rotating-log.d.ts +44 -0
- package/dist/runtime/rotating-log.d.ts.map +1 -0
- package/dist/runtime/rotating-log.js +124 -0
- package/dist/runtime/rotating-log.js.map +1 -0
- package/dist/runtime/stimulus-delivery.d.ts +3 -0
- package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
- package/dist/runtime/stimulus-delivery.js +19 -3
- package/dist/runtime/stimulus-delivery.js.map +1 -1
- package/dist/runtime/tools-paths.d.ts +7 -0
- package/dist/runtime/tools-paths.d.ts.map +1 -1
- package/dist/runtime/tools-paths.js +11 -5
- package/dist/runtime/tools-paths.js.map +1 -1
- package/dist/runtime/upkeep-close.d.ts +17 -0
- package/dist/runtime/upkeep-close.d.ts.map +1 -0
- package/dist/runtime/upkeep-close.js +127 -0
- package/dist/runtime/upkeep-close.js.map +1 -0
- package/dist/runtime/upkeep-orders.d.ts +124 -0
- package/dist/runtime/upkeep-orders.d.ts.map +1 -0
- package/dist/runtime/upkeep-orders.js +310 -0
- package/dist/runtime/upkeep-orders.js.map +1 -0
- package/dist/runtime/upkeep-reconcile.d.ts +25 -0
- package/dist/runtime/upkeep-reconcile.d.ts.map +1 -0
- package/dist/runtime/upkeep-reconcile.js +231 -0
- package/dist/runtime/upkeep-reconcile.js.map +1 -0
- package/dist/runtime/upkeep-writeback.d.ts +22 -0
- package/dist/runtime/upkeep-writeback.d.ts.map +1 -0
- package/dist/runtime/upkeep-writeback.js +203 -0
- package/dist/runtime/upkeep-writeback.js.map +1 -0
- package/dist/tools/document-toolkit.d.ts +2 -0
- package/dist/tools/document-toolkit.d.ts.map +1 -1
- package/dist/tools/document-toolkit.js +2 -0
- package/dist/tools/document-toolkit.js.map +1 -1
- package/dist/utils/untrusted-content.d.ts.map +1 -1
- package/dist/utils/untrusted-content.js +8 -1
- package/dist/utils/untrusted-content.js.map +1 -1
- package/install/install.sh +457 -0
- package/install/node.json +9 -0
- package/package.json +5 -5
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultNpmRun = void 0;
|
|
4
|
+
exports.releaseCheckPath = releaseCheckPath;
|
|
5
|
+
exports.readReleaseCheck = readReleaseCheck;
|
|
6
|
+
exports.npmErrorCode = npmErrorCode;
|
|
7
|
+
exports.compareReleases = compareReleases;
|
|
8
|
+
exports.nodeSatisfies = nodeSatisfies;
|
|
9
|
+
exports.createReleaseCheck = createReleaseCheck;
|
|
10
|
+
exports.npmBesideNode = npmBesideNode;
|
|
11
|
+
exports.releaseReport = releaseReport;
|
|
12
|
+
const node_child_process_1 = require("node:child_process");
|
|
13
|
+
const node_fs_1 = require("node:fs");
|
|
14
|
+
const node_path_1 = require("node:path");
|
|
15
|
+
const node_util_1 = require("node:util");
|
|
16
|
+
const backend_security_js_1 = require("../../runtime/backend-security.js");
|
|
17
|
+
const launch_files_js_1 = require("../launch-files.js");
|
|
18
|
+
const install_kind_js_1 = require("./install-kind.js");
|
|
19
|
+
/** Under runtime/, which the agents' native reads deny with the rest of the credential paths. */
|
|
20
|
+
function releaseCheckPath(mamaRoot) {
|
|
21
|
+
return (0, node_path_1.join)(mamaRoot, 'runtime', 'release-check.json');
|
|
22
|
+
}
|
|
23
|
+
/** The file as the daemon wrote it, or null when no check has run yet. */
|
|
24
|
+
function readReleaseCheck(path) {
|
|
25
|
+
if (!(0, node_fs_1.existsSync)(path))
|
|
26
|
+
return null;
|
|
27
|
+
const value = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf8'));
|
|
28
|
+
const text = (name, nullable) => typeof value[name] === 'string' || (nullable && value[name] === null);
|
|
29
|
+
if (value === null ||
|
|
30
|
+
typeof value !== 'object' ||
|
|
31
|
+
!text('checkedAt', false) ||
|
|
32
|
+
Number.isNaN(Date.parse(value.checkedAt)) ||
|
|
33
|
+
!text('current', false) ||
|
|
34
|
+
!text('latest', true) ||
|
|
35
|
+
!text('error', true)) {
|
|
36
|
+
throw new Error(`${path} is not a release check the daemon wrote`);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
const NPM_TIMEOUT_MS = 60_000;
|
|
41
|
+
const defaultNpmRun = async (command, args, env, signal) => (await (0, node_util_1.promisify)(node_child_process_1.execFile)(command, args, {
|
|
42
|
+
env,
|
|
43
|
+
signal,
|
|
44
|
+
timeout: NPM_TIMEOUT_MS,
|
|
45
|
+
encoding: 'utf8',
|
|
46
|
+
})).stdout;
|
|
47
|
+
exports.defaultNpmRun = defaultNpmRun;
|
|
48
|
+
/**
|
|
49
|
+
* A failed npm call reduced to a code. npm's own (`npm error code E404`) comes first; then a
|
|
50
|
+
* spawn error's (ENOENT), a timeout, the exit status. Only a code's characters pass: PR 4 sends
|
|
51
|
+
* it to a chat a group reads, and stderr is npm's text.
|
|
52
|
+
*/
|
|
53
|
+
function npmErrorCode(error) {
|
|
54
|
+
const failure = (error ?? {});
|
|
55
|
+
const npm = /^npm (?:error|ERR!) code (\S+)/m.exec(String(failure.stderr ?? ''))?.[1];
|
|
56
|
+
const code = npm ??
|
|
57
|
+
(typeof failure.code === 'string'
|
|
58
|
+
? failure.code
|
|
59
|
+
: failure.killed === true
|
|
60
|
+
? 'ETIMEDOUT'
|
|
61
|
+
: typeof failure.code === 'number'
|
|
62
|
+
? `EXIT_${failure.code}`
|
|
63
|
+
: typeof failure.signal === 'string'
|
|
64
|
+
? failure.signal
|
|
65
|
+
: 'UNKNOWN');
|
|
66
|
+
return /^[A-Za-z0-9_]{1,64}$/.test(code) ? code : 'UNKNOWN';
|
|
67
|
+
}
|
|
68
|
+
const SEMVER = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/;
|
|
69
|
+
/**
|
|
70
|
+
* Two releases in semver precedence (semver.org, rule 11): major, minor, patch, then a version
|
|
71
|
+
* without a prerelease above one with it, then the prerelease's identifiers one by one (numbers
|
|
72
|
+
* numerically and below words, words in ASCII order, a longer list above its prefix). Build
|
|
73
|
+
* metadata does not count. A version that is not semver throws: there is no order to guess.
|
|
74
|
+
*/
|
|
75
|
+
function compareReleases(left, right) {
|
|
76
|
+
const parse = (version) => {
|
|
77
|
+
const match = SEMVER.exec(version);
|
|
78
|
+
if (!match)
|
|
79
|
+
throw new Error(`${version} is not a semver version`);
|
|
80
|
+
return {
|
|
81
|
+
core: [match[1], match[2], match[3]].map(Number),
|
|
82
|
+
pre: match[4] === undefined ? null : match[4].split('.'),
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
const a = parse(left);
|
|
86
|
+
const b = parse(right);
|
|
87
|
+
for (let index = 0; index < 3; index += 1) {
|
|
88
|
+
if (a.core[index] !== b.core[index])
|
|
89
|
+
return a.core[index] - b.core[index];
|
|
90
|
+
}
|
|
91
|
+
if (a.pre === null || b.pre === null)
|
|
92
|
+
return a.pre === b.pre ? 0 : a.pre === null ? 1 : -1;
|
|
93
|
+
for (let index = 0; index < Math.min(a.pre.length, b.pre.length); index += 1) {
|
|
94
|
+
const [x, y] = [a.pre[index], b.pre[index]];
|
|
95
|
+
if (x === y)
|
|
96
|
+
continue;
|
|
97
|
+
const [xNumber, yNumber] = [/^\d+$/.test(x), /^\d+$/.test(y)];
|
|
98
|
+
if (xNumber && yNumber)
|
|
99
|
+
return Number(x) - Number(y);
|
|
100
|
+
if (xNumber !== yNumber)
|
|
101
|
+
return xNumber ? -1 : 1;
|
|
102
|
+
return x < y ? -1 : 1;
|
|
103
|
+
}
|
|
104
|
+
return a.pre.length - b.pre.length;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Whether a Node version (no `v`) is inside a package's `engines.node` range: comparators
|
|
108
|
+
* (`>=`, `>`, `<=`, `<`, `=`, bare), `^` and `~` on full or partial versions, `*` and `x`, joined
|
|
109
|
+
* by spaces (all hold) and `||` (any holds). Any other form throws with the range, so a target
|
|
110
|
+
* whose range cannot be read is refused rather than passed.
|
|
111
|
+
*/
|
|
112
|
+
function nodeSatisfies(range, version) {
|
|
113
|
+
const cannot = () => {
|
|
114
|
+
throw new Error(`cannot read the engines range ${JSON.stringify(range)}`);
|
|
115
|
+
};
|
|
116
|
+
const at = (core) => core.join('.');
|
|
117
|
+
const compare = (op, core) => {
|
|
118
|
+
const order = compareReleases(version, at(core));
|
|
119
|
+
return op === '>='
|
|
120
|
+
? order >= 0
|
|
121
|
+
: op === '>'
|
|
122
|
+
? order > 0
|
|
123
|
+
: op === '<='
|
|
124
|
+
? order <= 0
|
|
125
|
+
: op === '<'
|
|
126
|
+
? order < 0
|
|
127
|
+
: order === 0;
|
|
128
|
+
};
|
|
129
|
+
/** Whether `version` meets one comparator. */
|
|
130
|
+
const holds = (token) => {
|
|
131
|
+
if (token === '*' || token === 'x' || token === 'X')
|
|
132
|
+
return true;
|
|
133
|
+
const match = /^(>=|<=|>|<|=|\^|~)?v?(\d+|[xX*])(?:\.(\d+|[xX*]))?(?:\.(\d+|[xX*]))?$/.exec(token);
|
|
134
|
+
if (!match)
|
|
135
|
+
return cannot();
|
|
136
|
+
const [, op = '', ...raw] = match;
|
|
137
|
+
const parts = raw.filter((part) => part !== undefined && !/^[xX*]$/.test(part)).map(Number);
|
|
138
|
+
// A wildcard is the end of the version: 22.x.5 is not a range.
|
|
139
|
+
const given = raw.findIndex((part) => part === undefined || /^[xX*]$/.test(part));
|
|
140
|
+
if (given !== -1 && raw.slice(given).some((part) => part !== undefined && /^\d+$/.test(part)))
|
|
141
|
+
return cannot();
|
|
142
|
+
const full = [...parts, 0, 0, 0].slice(0, 3);
|
|
143
|
+
const bump = (index) => full.map((part, at) => (at < index ? part : at === index ? part + 1 : 0));
|
|
144
|
+
if (op === '^') {
|
|
145
|
+
if (parts.length === 0)
|
|
146
|
+
return true;
|
|
147
|
+
// The first part given that is not 0 may not change; with none, the last part given.
|
|
148
|
+
const first = parts.findIndex((part) => part !== 0);
|
|
149
|
+
return compare('>=', full) && compare('<', bump(first === -1 ? parts.length - 1 : first));
|
|
150
|
+
}
|
|
151
|
+
if (op === '~') {
|
|
152
|
+
if (parts.length === 0)
|
|
153
|
+
return true;
|
|
154
|
+
return compare('>=', full) && compare('<', bump(parts.length === 1 ? 0 : 1));
|
|
155
|
+
}
|
|
156
|
+
if (parts.length === 3)
|
|
157
|
+
return compare(op === '' ? '=' : op, full);
|
|
158
|
+
// A partial version: bare and = mean any version under it; the others compare its bounds.
|
|
159
|
+
if (parts.length === 0)
|
|
160
|
+
return op === '' || op === '=' || op === '>=' || op === '<=';
|
|
161
|
+
const next = bump(parts.length - 1);
|
|
162
|
+
if (op === '' || op === '=')
|
|
163
|
+
return compare('>=', full) && compare('<', next);
|
|
164
|
+
if (op === '>=')
|
|
165
|
+
return compare('>=', full);
|
|
166
|
+
if (op === '<')
|
|
167
|
+
return compare('<', full);
|
|
168
|
+
if (op === '>')
|
|
169
|
+
return compare('>=', next);
|
|
170
|
+
return compare('<', next);
|
|
171
|
+
};
|
|
172
|
+
const alternatives = range.split('||').map((part) => part.trim());
|
|
173
|
+
if (alternatives.some((part) => part === ''))
|
|
174
|
+
return cannot();
|
|
175
|
+
// Every comparator is read, so a form this cannot read refuses even beside one that fails.
|
|
176
|
+
return alternatives
|
|
177
|
+
.map((part) => part
|
|
178
|
+
// `>= 22.13.0` is one comparator.
|
|
179
|
+
.replace(/(>=|<=|>|<|=|\^|~)\s+/g, '$1')
|
|
180
|
+
.split(/\s+/)
|
|
181
|
+
.map((token) => holds(token))
|
|
182
|
+
.every(Boolean))
|
|
183
|
+
.some(Boolean);
|
|
184
|
+
}
|
|
185
|
+
function day(at, timeZone) {
|
|
186
|
+
return new Intl.DateTimeFormat('en-CA', {
|
|
187
|
+
timeZone,
|
|
188
|
+
year: 'numeric',
|
|
189
|
+
month: '2-digit',
|
|
190
|
+
day: '2-digit',
|
|
191
|
+
}).format(at);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Once a day, ask the registry for MAMA OS's `latest` tag and write what it said. The day is the
|
|
195
|
+
* configured time zone's, read from the file, so a restart the same day makes no call; a daemon
|
|
196
|
+
* on a version other than the file's checks again, since the file then describes an older one.
|
|
197
|
+
* A failed check counts as the day's check: its code is shown until the next day's.
|
|
198
|
+
*/
|
|
199
|
+
function createReleaseCheck(options) {
|
|
200
|
+
const run = options.run ?? exports.defaultNpmRun;
|
|
201
|
+
const env = (0, backend_security_js_1.backendEnvironment)(options.env ?? process.env);
|
|
202
|
+
const prefix = options.packageKind.kind === 'npm' ? ['--prefix', options.packageKind.prefix] : [];
|
|
203
|
+
const stopping = new AbortController();
|
|
204
|
+
const timers = [];
|
|
205
|
+
const tick = async () => {
|
|
206
|
+
const now = options.now?.() ?? new Date();
|
|
207
|
+
const zone = options.timeZone.get();
|
|
208
|
+
const previous = readReleaseCheck(options.statePath);
|
|
209
|
+
if (previous !== null &&
|
|
210
|
+
previous.current === options.current &&
|
|
211
|
+
day(new Date(previous.checkedAt), zone) === day(now, zone)) {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
let latest = null;
|
|
215
|
+
let error = null;
|
|
216
|
+
try {
|
|
217
|
+
const registry = (await run(options.npmPath, ['config', 'get', 'registry', '--no-update-notifier', ...prefix], env, stopping.signal)).trim();
|
|
218
|
+
const answer = (await run(options.npmPath, [
|
|
219
|
+
'view',
|
|
220
|
+
install_kind_js_1.PACKAGE_NAME,
|
|
221
|
+
'dist-tags.latest',
|
|
222
|
+
'--registry',
|
|
223
|
+
registry,
|
|
224
|
+
// npm's own update notice asks the registry again and writes ~/.npm, TTY or not.
|
|
225
|
+
'--no-update-notifier',
|
|
226
|
+
...prefix,
|
|
227
|
+
], env, stopping.signal)).trim();
|
|
228
|
+
if (!/^\d+\.\d+\.\d+\S*$/.test(answer)) {
|
|
229
|
+
throw Object.assign(new Error('npm view printed no version'), { code: 'ENOVERSION' });
|
|
230
|
+
}
|
|
231
|
+
latest = answer;
|
|
232
|
+
}
|
|
233
|
+
catch (failure) {
|
|
234
|
+
// A stop cut the call off; that is not what the registry said.
|
|
235
|
+
if (stopping.signal.aborted)
|
|
236
|
+
return;
|
|
237
|
+
error = npmErrorCode(failure);
|
|
238
|
+
}
|
|
239
|
+
const state = {
|
|
240
|
+
checkedAt: now.toISOString(),
|
|
241
|
+
current: options.current,
|
|
242
|
+
latest,
|
|
243
|
+
error,
|
|
244
|
+
};
|
|
245
|
+
const staged = `${options.statePath}.${process.pid}.tmp`;
|
|
246
|
+
(0, node_fs_1.writeFileSync)(staged, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 });
|
|
247
|
+
(0, node_fs_1.renameSync)(staged, options.statePath);
|
|
248
|
+
options.log(error === null
|
|
249
|
+
? `release check: latest=${latest} running=${options.current}`
|
|
250
|
+
: `release check: failed code=${error} running=${options.current}`);
|
|
251
|
+
};
|
|
252
|
+
const tickReported = () => {
|
|
253
|
+
tick().catch(options.onError);
|
|
254
|
+
};
|
|
255
|
+
return {
|
|
256
|
+
tick,
|
|
257
|
+
start: () => {
|
|
258
|
+
const first = setTimeout(tickReported, options.firstTickDelayMs ?? 60_000);
|
|
259
|
+
// Hourly: the first tick of a new day checks again.
|
|
260
|
+
const every = setInterval(tickReported, 60 * 60_000);
|
|
261
|
+
first.unref();
|
|
262
|
+
every.unref();
|
|
263
|
+
timers.push(() => clearTimeout(first), () => clearInterval(every));
|
|
264
|
+
},
|
|
265
|
+
stop: () => {
|
|
266
|
+
for (const cancel of timers.splice(0))
|
|
267
|
+
cancel();
|
|
268
|
+
stopping.abort();
|
|
269
|
+
},
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* The npm beside the Node start.sh pins (stableNodePath): Homebrew's running Node is its Cellar
|
|
274
|
+
* folder, which `brew upgrade node` removes while the daemon runs; the opt link stays.
|
|
275
|
+
*/
|
|
276
|
+
function npmBesideNode(execPath = process.execPath, exists = node_fs_1.existsSync) {
|
|
277
|
+
return (0, node_path_1.join)((0, node_path_1.dirname)((0, launch_files_js_1.stableNodePath)(execPath, exists)), 'npm');
|
|
278
|
+
}
|
|
279
|
+
function localTime(iso) {
|
|
280
|
+
return new Date(Date.parse(iso)).toLocaleString('sv-SE');
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* What `mama status` and the doctor check `release` say, from the file alone; null when no check
|
|
284
|
+
* has run. A newer release names the update path of the kind the service runs.
|
|
285
|
+
*/
|
|
286
|
+
function releaseReport(mamaRoot, home) {
|
|
287
|
+
let state;
|
|
288
|
+
try {
|
|
289
|
+
state = readReleaseCheck(releaseCheckPath(mamaRoot));
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
return {
|
|
293
|
+
status: 'warn',
|
|
294
|
+
detail: 'the last release check cannot be read',
|
|
295
|
+
context: error instanceof Error ? error.message : String(error),
|
|
296
|
+
fix: 'remove runtime/release-check.json; the daemon checks again within the hour',
|
|
297
|
+
state: null,
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
if (state === null)
|
|
301
|
+
return null;
|
|
302
|
+
const at = localTime(state.checkedAt);
|
|
303
|
+
if (state.latest === null) {
|
|
304
|
+
return { status: 'warn', detail: `last check failed at ${at}: ${state.error}`, state };
|
|
305
|
+
}
|
|
306
|
+
if (compareReleases(state.latest, state.current) > 0) {
|
|
307
|
+
return {
|
|
308
|
+
status: 'warn',
|
|
309
|
+
detail: `newer release ${state.latest} (checked ${at}); the daemon runs ${state.current}`,
|
|
310
|
+
steps: (0, install_kind_js_1.updateSteps)((0, install_kind_js_1.installKind)(mamaRoot, home)),
|
|
311
|
+
state,
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
return { status: 'ok', detail: `${state.current} is current (checked ${at})`, state };
|
|
315
|
+
}
|
|
316
|
+
//# sourceMappingURL=release-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release-check.js","sourceRoot":"","sources":["../../../src/cli/runtime/release-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { W1Config } from '../../runtime/config.js';
|
|
2
|
+
import { type BackupEntry, type BackupManifest, type ConfiguredPath } from './backup.js';
|
|
3
|
+
/**
|
|
4
|
+
* Stored paths MAMA reads back to open a file: attachments in mailbox payloads (turn orders) and
|
|
5
|
+
* in the connector event index (deferred deliveries). The raw stores' content hash covers their
|
|
6
|
+
* metadata, so they, observation versions (evidence) and tool traces (history) keep the paths
|
|
7
|
+
* they recorded.
|
|
8
|
+
*/
|
|
9
|
+
export declare const PATH_COLUMNS: [string, string][];
|
|
10
|
+
export type TargetPaths = Record<string, string | null>;
|
|
11
|
+
/** Where an install keeps each configured path. */
|
|
12
|
+
export declare function targetPaths(config: W1Config, configPath: string, home: string): TargetPaths;
|
|
13
|
+
/** The archive reads its first entry as the manifest and checks it as untrusted. */
|
|
14
|
+
export declare function readManifest(archive: string): Promise<BackupManifest>;
|
|
15
|
+
/**
|
|
16
|
+
* Hold a manifest to what `mama backup` writes. Anyone who can write the backups folder can
|
|
17
|
+
* replace an archive, and an archive can come from elsewhere, so the rules are structural:
|
|
18
|
+
* known prefixes and safe relative paths, only the root names a backup keeps, nothing beneath a
|
|
19
|
+
* link (a backup never walks through one), credentials only in a backup that says it has them.
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateManifest(manifest: BackupManifest): void;
|
|
22
|
+
/**
|
|
23
|
+
* Extract the listed files and folders into a fresh folder and hold each to the manifest; links
|
|
24
|
+
* are made afterwards from the manifest itself (tar refuses absolute link targets, which a
|
|
25
|
+
* workspace can hold, and making them last means nothing is ever written through one).
|
|
26
|
+
*/
|
|
27
|
+
export declare function extractVerified(archive: string, manifest: BackupManifest, staging: string): Promise<void>;
|
|
28
|
+
/** Set every entry's recorded mode: files first, then folders from the deepest up. */
|
|
29
|
+
export declare function applyModes(staging: string, entries: readonly BackupEntry[]): void;
|
|
30
|
+
/**
|
|
31
|
+
* The backup's config with this install's places: every path key takes the value this install's
|
|
32
|
+
* config gives it, or is removed so this install's default applies. Comments do not survive.
|
|
33
|
+
*/
|
|
34
|
+
export declare function restoredConfigText(backupText: string, targetText: string): string;
|
|
35
|
+
/** Old folder roots (both recorded forms) and their new places, longest first. */
|
|
36
|
+
export declare function pathPairs(configured: Record<string, ConfiguredPath | null>, target: TargetPaths): [string, string][];
|
|
37
|
+
/** Replace, in one pass, each JSON string that starts with an old root by the new root. */
|
|
38
|
+
export declare function rewritePaths(text: string, pairs: readonly [string, string][]): string;
|
|
39
|
+
/**
|
|
40
|
+
* Rewrite stored attachment paths in a staged database. Update triggers on these tables would
|
|
41
|
+
* treat a changed row as a new event (connector_event_index renumbers its ingest sequence), so
|
|
42
|
+
* they are dropped and recreated from their own text around the update, in one transaction.
|
|
43
|
+
*/
|
|
44
|
+
export declare function rewriteDatabase(path: string, columns: readonly [string, string][], pairs: readonly [string, string][]): number;
|
|
45
|
+
/** Host jobs in flight hold absolute paths and inode snapshots that cannot survive a move. */
|
|
46
|
+
export declare function hostJobsInFlight(path: string): number;
|
|
47
|
+
/** Remove a tree whose folders may be sealed read-only, without following links. */
|
|
48
|
+
export declare function removeTree(path: string): void;
|
|
49
|
+
/** One path to replace: the staged copy goes where the destination is. */
|
|
50
|
+
export interface SwitchUnit {
|
|
51
|
+
readonly staged: string;
|
|
52
|
+
readonly destination: string;
|
|
53
|
+
/** Files that belong with the destination and move with it (a database's -wal). */
|
|
54
|
+
readonly companions?: string[];
|
|
55
|
+
}
|
|
56
|
+
type StepState = 'planned' | 'moving-aside' | 'switching' | 'switched' | 'rolled-back';
|
|
57
|
+
interface JournalStep {
|
|
58
|
+
destination: string;
|
|
59
|
+
sibling: string;
|
|
60
|
+
aside: string;
|
|
61
|
+
companionEnds: string[];
|
|
62
|
+
existed: boolean;
|
|
63
|
+
state: StepState;
|
|
64
|
+
}
|
|
65
|
+
export interface RestoreJournal {
|
|
66
|
+
readonly id: string;
|
|
67
|
+
committed: boolean;
|
|
68
|
+
readonly steps: JournalStep[];
|
|
69
|
+
}
|
|
70
|
+
export declare function journalPath(root: string): string;
|
|
71
|
+
/**
|
|
72
|
+
* Put every staged copy in place. For each unit the copy moves beside its destination, the
|
|
73
|
+
* destination goes aside, and the copy takes its name. The journal records each step before it
|
|
74
|
+
* happens; a failure, or a later `mama restore --rollback`, puts every destination back from what
|
|
75
|
+
* is on disk. Nothing set aside is deleted until the journal says the whole switch held.
|
|
76
|
+
*/
|
|
77
|
+
export declare function switchUnits(root: string, units: readonly SwitchUnit[], id: string, rename?: (from: string, to: string) => void): void;
|
|
78
|
+
/**
|
|
79
|
+
* Undo an uncommitted switch from what is on disk, then drop the journal. A committed switch
|
|
80
|
+
* held: its leftovers are cleared instead. Returns how many destinations were put back, or null
|
|
81
|
+
* when the switch had committed.
|
|
82
|
+
*/
|
|
83
|
+
export declare function rollBack(root: string, rename?: (from: string, to: string) => void): number | null;
|
|
84
|
+
/** After a committed switch: drop what went aside, then the journal. */
|
|
85
|
+
export declare function finishSwitch(root: string): void;
|
|
86
|
+
/** Each archive prefix's destination, from the restored install's configuration by key. */
|
|
87
|
+
export declare function destinationOf(prefix: string, target: TargetPaths): string;
|
|
88
|
+
/** The archive prefixes present, in the manifest's order. */
|
|
89
|
+
export declare function prefixesIn(manifest: BackupManifest): string[];
|
|
90
|
+
/** The workspace's folder name when the backup kept it inside the MAMA root. */
|
|
91
|
+
export declare function workspaceInRoot(manifest: BackupManifest): string | null;
|
|
92
|
+
/** The units a prefix switches: a folder's children one by one, never the folder itself. */
|
|
93
|
+
export declare function unitsFor(prefix: string, staging: string, destination: string, manifest: BackupManifest, workspace?: string): SwitchUnit[];
|
|
94
|
+
/** The owner's Codex threads belong to the state before the restore; they start over. */
|
|
95
|
+
export declare function clearOwnerThreads(root: string): number;
|
|
96
|
+
export declare function newRestoreId(): string;
|
|
97
|
+
export {};
|
|
98
|
+
//# sourceMappingURL=restore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore.d.ts","sourceRoot":"","sources":["../../../src/cli/runtime/restore.ts"],"names":[],"mappings":"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"}
|