@jungjaehoon/mama-os 0.77.0 → 0.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/README.md +25 -10
  3. package/dist/api/security-events.d.ts.map +1 -1
  4. package/dist/api/security-events.js +10 -1
  5. package/dist/api/security-events.js.map +1 -1
  6. package/dist/api/viewer-server.d.ts +1 -0
  7. package/dist/api/viewer-server.d.ts.map +1 -1
  8. package/dist/api/viewer-server.js +34 -0
  9. package/dist/api/viewer-server.js.map +1 -1
  10. package/dist/api/work-actions.d.ts.map +1 -1
  11. package/dist/api/work-actions.js +27 -2
  12. package/dist/api/work-actions.js.map +1 -1
  13. package/dist/cli/commands/backfill.d.ts.map +1 -1
  14. package/dist/cli/commands/backfill.js +1 -0
  15. package/dist/cli/commands/backfill.js.map +1 -1
  16. package/dist/cli/commands/backup.d.ts +13 -0
  17. package/dist/cli/commands/backup.d.ts.map +1 -0
  18. package/dist/cli/commands/backup.js +137 -0
  19. package/dist/cli/commands/backup.js.map +1 -0
  20. package/dist/cli/commands/control.d.ts +26 -0
  21. package/dist/cli/commands/control.d.ts.map +1 -0
  22. package/dist/cli/commands/control.js +193 -0
  23. package/dist/cli/commands/control.js.map +1 -0
  24. package/dist/cli/commands/daemon.d.ts +49 -3
  25. package/dist/cli/commands/daemon.d.ts.map +1 -1
  26. package/dist/cli/commands/daemon.js +244 -74
  27. package/dist/cli/commands/daemon.js.map +1 -1
  28. package/dist/cli/commands/doctor.d.ts +13 -0
  29. package/dist/cli/commands/doctor.d.ts.map +1 -0
  30. package/dist/cli/commands/doctor.js +216 -0
  31. package/dist/cli/commands/doctor.js.map +1 -0
  32. package/dist/cli/commands/init.d.ts.map +1 -1
  33. package/dist/cli/commands/init.js +3 -2
  34. package/dist/cli/commands/init.js.map +1 -1
  35. package/dist/cli/commands/logs.d.ts +9 -0
  36. package/dist/cli/commands/logs.d.ts.map +1 -0
  37. package/dist/cli/commands/logs.js +109 -0
  38. package/dist/cli/commands/logs.js.map +1 -0
  39. package/dist/cli/commands/register-owner.d.ts.map +1 -1
  40. package/dist/cli/commands/register-owner.js +12 -0
  41. package/dist/cli/commands/register-owner.js.map +1 -1
  42. package/dist/cli/commands/restore.d.ts +14 -0
  43. package/dist/cli/commands/restore.d.ts.map +1 -0
  44. package/dist/cli/commands/restore.js +130 -0
  45. package/dist/cli/commands/restore.js.map +1 -0
  46. package/dist/cli/commands/service.d.ts +28 -0
  47. package/dist/cli/commands/service.d.ts.map +1 -0
  48. package/dist/cli/commands/service.js +278 -0
  49. package/dist/cli/commands/service.js.map +1 -0
  50. package/dist/cli/commands/uninstall.d.ts +7 -0
  51. package/dist/cli/commands/uninstall.d.ts.map +1 -0
  52. package/dist/cli/commands/uninstall.js +262 -0
  53. package/dist/cli/commands/uninstall.js.map +1 -0
  54. package/dist/cli/index.js +67 -20
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/cli/launch-files.d.ts +83 -0
  57. package/dist/cli/launch-files.d.ts.map +1 -1
  58. package/dist/cli/launch-files.js +231 -15
  59. package/dist/cli/launch-files.js.map +1 -1
  60. package/dist/cli/runtime/backend-probe.d.ts +34 -0
  61. package/dist/cli/runtime/backend-probe.d.ts.map +1 -0
  62. package/dist/cli/runtime/backend-probe.js +83 -0
  63. package/dist/cli/runtime/backend-probe.js.map +1 -0
  64. package/dist/cli/runtime/backup.d.ts +114 -0
  65. package/dist/cli/runtime/backup.d.ts.map +1 -0
  66. package/dist/cli/runtime/backup.js +564 -0
  67. package/dist/cli/runtime/backup.js.map +1 -0
  68. package/dist/cli/runtime/daemon-control.d.ts +84 -0
  69. package/dist/cli/runtime/daemon-control.d.ts.map +1 -0
  70. package/dist/cli/runtime/daemon-control.js +266 -0
  71. package/dist/cli/runtime/daemon-control.js.map +1 -0
  72. package/dist/cli/runtime/diagnostics.d.ts +43 -0
  73. package/dist/cli/runtime/diagnostics.d.ts.map +1 -0
  74. package/dist/cli/runtime/diagnostics.js +953 -0
  75. package/dist/cli/runtime/diagnostics.js.map +1 -0
  76. package/dist/cli/runtime/restore.d.ts +98 -0
  77. package/dist/cli/runtime/restore.d.ts.map +1 -0
  78. package/dist/cli/runtime/restore.js +756 -0
  79. package/dist/cli/runtime/restore.js.map +1 -0
  80. package/dist/cli/runtime/systemd-service.d.ts +13 -0
  81. package/dist/cli/runtime/systemd-service.d.ts.map +1 -0
  82. package/dist/cli/runtime/systemd-service.js +32 -0
  83. package/dist/cli/runtime/systemd-service.js.map +1 -0
  84. package/dist/connectors/chatwork/index.js +1 -1
  85. package/dist/connectors/chatwork/index.js.map +1 -1
  86. package/dist/connectors/config-loader.d.ts +2 -1
  87. package/dist/connectors/config-loader.d.ts.map +1 -1
  88. package/dist/connectors/config-loader.js +3 -2
  89. package/dist/connectors/config-loader.js.map +1 -1
  90. package/dist/connectors/framework/polling-scheduler.d.ts.map +1 -1
  91. package/dist/connectors/framework/polling-scheduler.js +12 -11
  92. package/dist/connectors/framework/polling-scheduler.js.map +1 -1
  93. package/dist/connectors/imessage/index.d.ts.map +1 -1
  94. package/dist/connectors/imessage/index.js +2 -1
  95. package/dist/connectors/imessage/index.js.map +1 -1
  96. package/dist/connectors/slack/index.js +1 -1
  97. package/dist/connectors/slack/index.js.map +1 -1
  98. package/dist/runtime/backend-security.d.ts +3 -0
  99. package/dist/runtime/backend-security.d.ts.map +1 -1
  100. package/dist/runtime/backend-security.js +13 -5
  101. package/dist/runtime/backend-security.js.map +1 -1
  102. package/dist/runtime/config.d.ts +3 -0
  103. package/dist/runtime/config.d.ts.map +1 -1
  104. package/dist/runtime/config.js +4 -4
  105. package/dist/runtime/config.js.map +1 -1
  106. package/dist/runtime/connectors.d.ts +21 -1
  107. package/dist/runtime/connectors.d.ts.map +1 -1
  108. package/dist/runtime/connectors.js +28 -17
  109. package/dist/runtime/connectors.js.map +1 -1
  110. package/dist/runtime/core-db.d.ts.map +1 -1
  111. package/dist/runtime/core-db.js +2 -0
  112. package/dist/runtime/core-db.js.map +1 -1
  113. package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
  114. package/dist/runtime/owner-system-prompt.js +7 -5
  115. package/dist/runtime/owner-system-prompt.js.map +1 -1
  116. package/dist/runtime/rotating-log.d.ts +44 -0
  117. package/dist/runtime/rotating-log.d.ts.map +1 -0
  118. package/dist/runtime/rotating-log.js +124 -0
  119. package/dist/runtime/rotating-log.js.map +1 -0
  120. package/dist/tools/document-toolkit.d.ts +2 -0
  121. package/dist/tools/document-toolkit.d.ts.map +1 -1
  122. package/dist/tools/document-toolkit.js +2 -0
  123. package/dist/tools/document-toolkit.js.map +1 -1
  124. package/package.json +4 -3
@@ -0,0 +1,130 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runRestore = runRestore;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_os_1 = require("node:os");
6
+ const node_path_1 = require("node:path");
7
+ const config_js_1 = require("../../runtime/config.js");
8
+ const prompt_js_1 = require("../prompt.js");
9
+ const daemon_control_js_1 = require("../runtime/daemon-control.js");
10
+ const restore_js_1 = require("../runtime/restore.js");
11
+ const USAGE = 'Usage: mama restore <archive> | mama restore --rollback';
12
+ /**
13
+ * `mama restore <archive>`: put a `mama backup` archive onto this stopped install. The restored
14
+ * config is the backup's settings with this install's places, and every part goes where that
15
+ * config puts it; the old roots in stored attachment paths are rewritten to the new ones. Each
16
+ * destination goes aside while its copy takes its place, under a journal that puts everything
17
+ * back if any step fails. Credentials and start.sh the archive does not hold stay as they are.
18
+ */
19
+ async function runRestore(args, options = {}) {
20
+ if (args.length !== 1)
21
+ throw new prompt_js_1.CliInputError(USAGE);
22
+ const home = options.home ?? (0, node_os_1.homedir)();
23
+ const configPath = options.configPath ?? (0, config_js_1.defaultConfigPath)(home);
24
+ const write = options.write ?? ((line) => console.log(line));
25
+ const root = (0, node_path_1.resolve)((0, node_path_1.dirname)(configPath));
26
+ const backups = (0, node_path_1.join)(root, 'backups');
27
+ // Nothing may run while files are switched under it.
28
+ const lock = (0, daemon_control_js_1.acquireInstallLock)((0, daemon_control_js_1.daemonControlPaths)(root), 'restore');
29
+ let staging = null;
30
+ let committed = false;
31
+ try {
32
+ // Rollback reads only the journal: mid-switch, config.yaml can be aside or the restored one.
33
+ if (args[0] === '--rollback') {
34
+ const undone = (0, restore_js_1.rollBack)(root);
35
+ if (undone === null)
36
+ (0, restore_js_1.clearOwnerThreads)(root);
37
+ write(undone === null
38
+ ? 'the interrupted restore had taken effect; what it set aside is cleared'
39
+ : undone > 0
40
+ ? `put back ${undone} path(s) from the interrupted restore`
41
+ : 'nothing to roll back');
42
+ return;
43
+ }
44
+ if ((0, node_fs_1.existsSync)((0, restore_js_1.journalPath)(root))) {
45
+ throw new prompt_js_1.CliInputError('An earlier restore was interrupted; mama restore --rollback resolves it first');
46
+ }
47
+ if (!(0, node_fs_1.existsSync)(configPath)) {
48
+ throw new prompt_js_1.CliInputError(`Restore needs an installed target: ${configPath} does not exist`);
49
+ }
50
+ const config = (0, config_js_1.loadConfig)({ home, path: configPath, onIgnored: () => { } });
51
+ const archive = (0, node_path_1.resolve)(args[0]);
52
+ if (!(0, node_fs_1.existsSync)(archive) || !(0, node_fs_1.statSync)(archive).isFile()) {
53
+ throw new prompt_js_1.CliInputError(`${archive} is not a file`);
54
+ }
55
+ (0, node_fs_1.mkdirSync)(backups, { recursive: true, mode: 0o700 });
56
+ // An interrupted run leaves its staging; holding the install, nothing else is using it.
57
+ for (const name of (0, node_fs_1.readdirSync)(backups)) {
58
+ if (name.startsWith('.restore-') && name !== '.restore-journal.json') {
59
+ (0, restore_js_1.removeTree)((0, node_path_1.join)(backups, name));
60
+ }
61
+ }
62
+ const manifest = await (0, restore_js_1.readManifest)(archive);
63
+ const id = (0, restore_js_1.newRestoreId)();
64
+ staging = (0, node_path_1.join)(backups, `.restore-${id}`);
65
+ await (0, restore_js_1.extractVerified)(archive, manifest, staging);
66
+ // The backup's settings with this install's places: files and config then agree.
67
+ const stagedConfig = (0, node_path_1.join)(staging, 'root', 'config.yaml');
68
+ const configFromBackup = (0, node_fs_1.existsSync)(stagedConfig);
69
+ let restored = config;
70
+ if (configFromBackup) {
71
+ (0, node_fs_1.writeFileSync)(stagedConfig, (0, restore_js_1.restoredConfigText)((0, node_fs_1.readFileSync)(stagedConfig, 'utf8'), (0, node_fs_1.readFileSync)(configPath, 'utf8')));
72
+ try {
73
+ restored = (0, config_js_1.loadConfig)({ home, path: stagedConfig, onIgnored: () => { } });
74
+ }
75
+ catch (error) {
76
+ throw new prompt_js_1.CliInputError(`The backup's config does not load with this install's places: ${error instanceof Error ? error.message : String(error)}`);
77
+ }
78
+ }
79
+ const target = (0, restore_js_1.targetPaths)(restored, configPath, home);
80
+ const prefixes = (0, restore_js_1.prefixesIn)(manifest);
81
+ for (const prefix of prefixes)
82
+ (0, restore_js_1.destinationOf)(prefix, target);
83
+ const stagedDatabase = (0, node_path_1.join)(staging, 'database');
84
+ let rows = 0;
85
+ if ((0, node_fs_1.existsSync)(stagedDatabase)) {
86
+ const jobs = (0, restore_js_1.hostJobsInFlight)(stagedDatabase);
87
+ if (jobs > 0) {
88
+ throw new prompt_js_1.CliInputError(`The backup holds ${jobs} host job(s) in progress (a person's export or erasure); their paths and file snapshots cannot move, so restore refuses this backup`);
89
+ }
90
+ rows = (0, restore_js_1.rewriteDatabase)(stagedDatabase, restore_js_1.PATH_COLUMNS, (0, restore_js_1.pathPairs)(manifest.configured, target));
91
+ }
92
+ (0, restore_js_1.applyModes)(staging, manifest.entries);
93
+ const units = prefixes.flatMap((prefix) => (0, restore_js_1.unitsFor)(prefix, staging, (0, restore_js_1.destinationOf)(prefix, target), manifest, target.workspace));
94
+ (0, restore_js_1.switchUnits)(root, units, id);
95
+ committed = true;
96
+ const threads = (0, restore_js_1.clearOwnerThreads)(root);
97
+ (0, restore_js_1.finishSwitch)(root);
98
+ write(`restored: ${archive}`);
99
+ write(` ${units.length} path(s) put in place; ${rows} stored attachment path(s) moved to this install's roots`);
100
+ write(` backup taken ${manifest.createdAt} by mama-os ${manifest.mama}; database schema version ${manifest.schemaVersion ?? 'none'}`);
101
+ if (configFromBackup) {
102
+ write(" config.yaml is the backup's settings with this install's paths (comments dropped)");
103
+ }
104
+ if (!manifest.includesSecrets && !(0, node_fs_1.existsSync)((0, node_path_1.join)(target.root, 'auth.env'))) {
105
+ write(' no auth.env: run mama secret set for each secret before starting');
106
+ }
107
+ else if (!manifest.includesSecrets) {
108
+ write(" this install's own credentials were kept (the backup held none)");
109
+ }
110
+ write(` start.sh was kept; mama service install writes it for this machine's paths; ${threads} Codex thread(s) cleared`);
111
+ write(' anything erased after this backup was taken is back');
112
+ write('Check it with mama doctor, then start it with mama service start.');
113
+ }
114
+ catch (error) {
115
+ if (error instanceof prompt_js_1.CliInputError)
116
+ throw error;
117
+ const reason = error instanceof Error ? error.message : String(error);
118
+ throw new prompt_js_1.CliInputError(committed
119
+ ? `The restore took effect, but finishing it failed: ${reason}; mama restore --rollback finishes it`
120
+ : (0, node_fs_1.existsSync)((0, restore_js_1.journalPath)(root))
121
+ ? `Restore failed and could not be fully put back: ${reason}; mama restore --rollback continues putting it back`
122
+ : `Restore failed and this install was put back as it was: ${reason}`);
123
+ }
124
+ finally {
125
+ if (staging)
126
+ (0, restore_js_1.removeTree)(staging);
127
+ lock.release();
128
+ }
129
+ }
130
+ //# sourceMappingURL=restore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restore.js","sourceRoot":"","sources":["../../../src/cli/commands/restore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type ServiceRun } from '../runtime/systemd-service.js';
2
+ export interface ServiceOptions {
3
+ home?: string;
4
+ configPath?: string;
5
+ platform?: NodeJS.Platform;
6
+ write?: (line: string) => void;
7
+ run?: ServiceRun;
8
+ nodePath?: string;
9
+ cliPath?: string;
10
+ findExecutable?: (name: string) => string | undefined;
11
+ now?: () => Date;
12
+ /** Where systemd keeps linger markers; tests point it elsewhere. */
13
+ lingerRoot?: string;
14
+ /** Which package-manager tool folders exist; tests name them, by default this machine's. */
15
+ toolDirectoryExists?: (path: string) => boolean;
16
+ }
17
+ /**
18
+ * Write start.sh and the service file from the current templates. It names every change to what
19
+ * the daemon runs, refuses to replace a start.sh that mama did not write unless asked, and
20
+ * restarts nothing: a running service takes the files at `mama service restart`.
21
+ */
22
+ /** The service file `mama service install` writes on this platform. */
23
+ export declare function serviceFile(options?: ServiceOptions): string;
24
+ export declare function installService(args: readonly string[], options?: ServiceOptions): Promise<number>;
25
+ export declare function startService(options?: ServiceOptions): Promise<number>;
26
+ export declare function uninstallService(options?: ServiceOptions): Promise<number>;
27
+ export declare function runService(args: readonly string[], options?: ServiceOptions): Promise<number>;
28
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"AAuBA,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,+BAA+B,CAAC;AAMvC,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IACtD,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4FAA4F;IAC5F,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACjD;AAiED;;;;GAIG;AACH,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,OAAO,GAAE,cAAmB,GAAG,MAAM,CAEhE;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAiIjB;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBhF;AAED,wBAAsB,gBAAgB,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BpF;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,MAAM,CAAC,CAiBjB"}
@@ -0,0 +1,278 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serviceFile = serviceFile;
4
+ exports.installService = installService;
5
+ exports.startService = startService;
6
+ exports.uninstallService = uninstallService;
7
+ exports.runService = runService;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_os_1 = require("node:os");
10
+ const node_path_1 = require("node:path");
11
+ const config_js_1 = require("../../runtime/config.js");
12
+ const prompt_js_1 = require("../prompt.js");
13
+ const launch_files_js_1 = require("../launch-files.js");
14
+ const systemd_service_js_1 = require("../runtime/systemd-service.js");
15
+ const control_js_1 = require("./control.js");
16
+ const daemon_js_1 = require("./daemon.js");
17
+ const LAUNCHD_LABEL = 'com.mama.server';
18
+ function managerFor(platform) {
19
+ if (platform === 'darwin')
20
+ return 'launchd';
21
+ if (platform === 'linux')
22
+ return 'systemd';
23
+ throw new prompt_js_1.CliInputError('mama service runs on macOS (launchd) and Linux (systemd)');
24
+ }
25
+ function servicePath(manager, home) {
26
+ return manager === 'launchd'
27
+ ? (0, node_path_1.join)(home, 'Library', 'LaunchAgents', `${LAUNCHD_LABEL}.plist`)
28
+ : (0, systemd_service_js_1.systemdUnitPath)(home);
29
+ }
30
+ /** Run a service-manager command and fail loud with its name and its own words. */
31
+ function check(run, command, args) {
32
+ const result = run(command, args);
33
+ if (result.error) {
34
+ throw new prompt_js_1.CliInputError(`${command} ${args.join(' ')} could not run: ${result.error.message}`);
35
+ }
36
+ if (result.status !== 0) {
37
+ const detail = `${result.stderr ?? ''}`.trim() || `exit ${String(result.status)}`;
38
+ throw new prompt_js_1.CliInputError(`${command} ${args.join(' ')} failed: ${detail}`);
39
+ }
40
+ return `${result.stdout ?? ''}`;
41
+ }
42
+ /**
43
+ * Write a file only when its content changes, always leaving the requested mode; a replaced file
44
+ * is kept under runtime/, which the agents' native reads deny.
45
+ */
46
+ function writeFile(path, content, mode, keepAs) {
47
+ const previous = (0, node_fs_1.existsSync)(path) ? (0, node_fs_1.readFileSync)(path, 'utf8') : null;
48
+ if (previous === content) {
49
+ (0, node_fs_1.chmodSync)(path, mode);
50
+ return 'unchanged';
51
+ }
52
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true });
53
+ if (previous !== null) {
54
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(keepAs), { recursive: true, mode: 0o700 });
55
+ (0, node_fs_1.writeFileSync)(keepAs, previous, { mode: 0o600, flag: 'wx' });
56
+ }
57
+ const staged = `${path}.${process.pid}.tmp`;
58
+ (0, node_fs_1.writeFileSync)(staged, content, { mode });
59
+ (0, node_fs_1.chmodSync)(staged, mode);
60
+ (0, node_fs_1.renameSync)(staged, path);
61
+ return previous === null ? 'created' : 'updated';
62
+ }
63
+ function serviceRunning(manager, home, run) {
64
+ if (manager === 'launchd')
65
+ return (0, daemon_js_1.launchdService)().pid !== null;
66
+ return (0, systemd_service_js_1.systemdUnitState)(home, run, 'linux') === 'active';
67
+ }
68
+ function unquote(value) {
69
+ return value.replace(/^['"]|['"]$/g, '');
70
+ }
71
+ /**
72
+ * Write start.sh and the service file from the current templates. It names every change to what
73
+ * the daemon runs, refuses to replace a start.sh that mama did not write unless asked, and
74
+ * restarts nothing: a running service takes the files at `mama service restart`.
75
+ */
76
+ /** The service file `mama service install` writes on this platform. */
77
+ function serviceFile(options = {}) {
78
+ return servicePath(managerFor(options.platform ?? process.platform), options.home ?? (0, node_os_1.homedir)());
79
+ }
80
+ async function installService(args, options = {}) {
81
+ const flags = new Set(args);
82
+ for (const flag of flags) {
83
+ if (flag !== '--enable-linger' && flag !== '--replace') {
84
+ throw new prompt_js_1.CliInputError('Usage: mama service install [--enable-linger] [--replace]');
85
+ }
86
+ }
87
+ const home = options.home ?? (0, node_os_1.homedir)();
88
+ const manager = managerFor(options.platform ?? process.platform);
89
+ const write = options.write ?? ((line) => console.log(line));
90
+ const run = options.run ?? systemd_service_js_1.defaultServiceRun;
91
+ const configPath = options.configPath ?? (0, config_js_1.defaultConfigPath)(home);
92
+ const config = (0, config_js_1.loadConfig)({ home, path: configPath });
93
+ const root = (0, node_path_1.dirname)(configPath);
94
+ const locate = options.findExecutable ?? launch_files_js_1.findExecutable;
95
+ const backend = locate(config.agent.backend);
96
+ if (!backend) {
97
+ throw new prompt_js_1.CliInputError(`${config.agent.backend} is not on this PATH; install it or add it to PATH, then run mama service install again`);
98
+ }
99
+ const gws = locate('gws');
100
+ const nodePath = options.nodePath ?? (0, launch_files_js_1.stableNodePath)(process.execPath);
101
+ const cliPath = options.cliPath ?? (0, node_path_1.join)(__dirname, '..', 'index.js');
102
+ const executablePaths = [backend, ...(gws ? [gws] : [])];
103
+ const startPath = (0, node_path_1.join)(root, 'start.sh');
104
+ const existing = (0, node_fs_1.existsSync)(startPath) ? (0, node_fs_1.readFileSync)(startPath, 'utf8') : null;
105
+ const reading = existing === null ? null : (0, launch_files_js_1.readStartScript)(existing, home);
106
+ const script = (0, launch_files_js_1.startScript)({
107
+ home,
108
+ nodePath,
109
+ cliPath,
110
+ executablePaths,
111
+ ...(options.toolDirectoryExists ? { exists: options.toolDirectoryExists } : {}),
112
+ viewer: {},
113
+ logLevel: config.logging.level,
114
+ carried: reading?.carried ?? [],
115
+ });
116
+ // Only a start.sh that is about to change is reported; a matching one needs no account.
117
+ if (reading !== null && existing !== script) {
118
+ const execLine = script.split('\n').find((line) => line.startsWith('exec '));
119
+ if (reading.exec !== execLine) {
120
+ write(`the daemon will run: ${nodePath} ${cliPath}`);
121
+ write(`it runs now: ${reading.exec ?? '(no exec line)'}`);
122
+ }
123
+ if (reading.carried.length > 0) {
124
+ const names = reading.carried.map((line) => line.replace(/^export\s+/, '').split('=')[0]);
125
+ write(`carried over: ${names.join(', ')}`);
126
+ }
127
+ const kept = (0, launch_files_js_1.startPathEntries)({
128
+ nodePath,
129
+ executablePaths,
130
+ ...(options.toolDirectoryExists ? { exists: options.toolDirectoryExists } : {}),
131
+ });
132
+ // $HOME in the old PATH is the same folder the new one names in full.
133
+ let oldPath = [];
134
+ try {
135
+ oldPath = reading.path === null ? [] : (0, launch_files_js_1.startPathValue)(reading.path, home);
136
+ }
137
+ catch {
138
+ // A broken quote is what --replace repairs; say so instead of refusing.
139
+ write('the old PATH cannot be read (its quoting is broken)');
140
+ }
141
+ const lost = oldPath.filter((entry) => !kept.includes(entry));
142
+ if (lost.length > 0)
143
+ write(`PATH no longer includes: ${lost.join(', ')}`);
144
+ if (reading.logLevel !== null &&
145
+ unquote(reading.logLevel).toUpperCase() !== config.logging.level.toUpperCase()) {
146
+ write(`MAMA_LOG_LEVEL now follows config.yaml's logging.level (${config.logging.level}); it was ${reading.logLevel}`);
147
+ }
148
+ for (const line of reading.notReproduced.slice(0, 20)) {
149
+ write(`not reproduced: ${line.slice(0, 120)}`);
150
+ }
151
+ if (reading.notReproduced.length > 20) {
152
+ write(`not reproduced: ${reading.notReproduced.length - 20} more lines`);
153
+ }
154
+ if (!reading.generated && !flags.has('--replace')) {
155
+ throw new prompt_js_1.CliInputError(`${startPath} was not written by mama; check the changes above, then run mama service install --replace`);
156
+ }
157
+ }
158
+ if (!gws)
159
+ write('gws is not on this PATH; Google sources need it');
160
+ const stamp = (options.now?.() ?? new Date()).toISOString().replace(/[:.]/g, '-');
161
+ const keep = (name) => (0, node_path_1.join)(root, 'runtime', `${name}.${stamp}.previous`);
162
+ const startResult = writeFile(startPath, script, 0o700, keep('start.sh'));
163
+ write(`start.sh ${startResult}${startResult === 'updated' ? `; the previous one is kept at ${keep('start.sh')}` : ''}`);
164
+ const path = servicePath(manager, home);
165
+ const content = manager === 'launchd' ? (0, launch_files_js_1.launchAgent)(home) : (0, launch_files_js_1.systemdUnit)();
166
+ const serviceResult = writeFile(path, content, manager === 'launchd' ? 0o600 : 0o644, keep(manager === 'launchd' ? 'launchagent.plist' : systemd_service_js_1.SYSTEMD_UNIT));
167
+ write(`${manager === 'launchd' ? 'LaunchAgent' : 'systemd user unit'} ${serviceResult}: ${path}`);
168
+ if (manager === 'systemd') {
169
+ check(run, 'systemctl', ['--user', 'daemon-reload']);
170
+ check(run, 'systemctl', ['--user', 'enable', systemd_service_js_1.SYSTEMD_UNIT]);
171
+ const user = (0, node_os_1.userInfo)().username;
172
+ // Linger is on exactly when systemd's marker file exists; reading it needs no session.
173
+ if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(options.lingerRoot ?? '/var/lib/systemd/linger', user))) {
174
+ if (flags.has('--enable-linger')) {
175
+ check(run, 'loginctl', ['enable-linger', user]);
176
+ write('linger enabled: the service runs after you log out');
177
+ }
178
+ else {
179
+ write('linger is off, so the service stops when you log out; run mama service install --enable-linger to keep it running');
180
+ }
181
+ }
182
+ }
183
+ const changed = startResult !== 'unchanged' || serviceResult !== 'unchanged';
184
+ if (serviceRunning(manager, home, run)) {
185
+ write(changed
186
+ ? 'the service is running; mama service restart applies the new files'
187
+ : 'the service is running');
188
+ }
189
+ else {
190
+ write('start it with: mama service start');
191
+ }
192
+ return 0;
193
+ }
194
+ async function startService(options = {}) {
195
+ const home = options.home ?? (0, node_os_1.homedir)();
196
+ const manager = managerFor(options.platform ?? process.platform);
197
+ const write = options.write ?? ((line) => console.log(line));
198
+ const run = options.run ?? systemd_service_js_1.defaultServiceRun;
199
+ const path = servicePath(manager, home);
200
+ if (!(0, node_fs_1.existsSync)(path))
201
+ throw new prompt_js_1.CliInputError('No service file yet: run mama service install');
202
+ if (manager === 'launchd') {
203
+ const service = (0, daemon_js_1.launchdService)();
204
+ if (service.pid !== null) {
205
+ write('already running');
206
+ return 0;
207
+ }
208
+ // A clean exit leaves the agent loaded with no process; it is started in place.
209
+ if (service.loaded) {
210
+ check(run, 'launchctl', ['kickstart', `gui/${process.getuid()}/${LAUNCHD_LABEL}`]);
211
+ }
212
+ else {
213
+ check(run, 'launchctl', ['bootstrap', `gui/${process.getuid()}`, path]);
214
+ }
215
+ }
216
+ else {
217
+ check(run, 'systemctl', ['--user', 'start', systemd_service_js_1.SYSTEMD_UNIT]);
218
+ }
219
+ write('started; mama status shows its boot');
220
+ return 0;
221
+ }
222
+ async function uninstallService(options = {}) {
223
+ const home = options.home ?? (0, node_os_1.homedir)();
224
+ const manager = managerFor(options.platform ?? process.platform);
225
+ const write = options.write ?? ((line) => console.log(line));
226
+ const run = options.run ?? systemd_service_js_1.defaultServiceRun;
227
+ const path = servicePath(manager, home);
228
+ if (manager === 'launchd') {
229
+ const loaded = (0, daemon_js_1.launchdService)().loaded;
230
+ if (!(0, node_fs_1.existsSync)(path) && !loaded) {
231
+ write('no LaunchAgent is installed');
232
+ return 0;
233
+ }
234
+ if (loaded) {
235
+ // mama stop unloads the agent and waits for its daemon to let go of the install.
236
+ const stopped = await (0, control_js_1.runStop)([], options);
237
+ if (stopped !== 0)
238
+ return stopped;
239
+ }
240
+ }
241
+ else {
242
+ if (!(0, node_fs_1.existsSync)(path)) {
243
+ write('no systemd user unit is installed');
244
+ return 0;
245
+ }
246
+ check(run, 'systemctl', ['--user', 'disable', '--now', systemd_service_js_1.SYSTEMD_UNIT]);
247
+ }
248
+ (0, node_fs_1.rmSync)(path, { force: true });
249
+ if (manager === 'systemd')
250
+ check(run, 'systemctl', ['--user', 'daemon-reload']);
251
+ write(`service removed: ${path} (start.sh and the data stay)`);
252
+ return 0;
253
+ }
254
+ async function runService(args, options = {}) {
255
+ const [command, ...rest] = args;
256
+ if (command === 'install')
257
+ return await installService(rest, options);
258
+ if (rest.length > 0)
259
+ throw new prompt_js_1.CliInputError(`Usage: mama service ${command ?? '<command>'}`);
260
+ if (command === 'start')
261
+ return await startService(options);
262
+ if (command === 'stop')
263
+ return await (0, control_js_1.runStop)([], options);
264
+ if (command === 'restart') {
265
+ const manager = managerFor(options.platform ?? process.platform);
266
+ if (!(0, node_fs_1.existsSync)(servicePath(manager, options.home ?? (0, node_os_1.homedir)()))) {
267
+ throw new prompt_js_1.CliInputError('No service file yet: run mama service install');
268
+ }
269
+ const stopped = await (0, control_js_1.runStop)([], options);
270
+ return stopped === 0 ? await startService(options) : stopped;
271
+ }
272
+ if (command === 'status')
273
+ return await (0, control_js_1.runStatus)([], options);
274
+ if (command === 'uninstall')
275
+ return await uninstallService(options);
276
+ throw new prompt_js_1.CliInputError('Usage: mama service install|start|stop|restart|status|uninstall');
277
+ }
278
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type PromptAdapter } from '../prompt.js';
2
+ import { type ServiceOptions } from './service.js';
3
+ export interface UninstallOptions extends ServiceOptions {
4
+ prompt?: PromptAdapter;
5
+ }
6
+ export declare function runUninstall(args: readonly string[], options?: UninstallOptions): Promise<number>;
7
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAmD,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGnG,OAAO,EAAiC,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAKlF,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAqKD,wBAAsB,YAAY,CAChC,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC,CA2EjB"}