@jungjaehoon/mama-os 0.75.0 → 0.76.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 (237) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +1 -1
  3. package/dist/api/code-act-actions.d.ts +3 -1
  4. package/dist/api/code-act-actions.d.ts.map +1 -1
  5. package/dist/api/code-act-actions.js +16 -7
  6. package/dist/api/code-act-actions.js.map +1 -1
  7. package/dist/api/document-actions.d.ts +13 -0
  8. package/dist/api/document-actions.d.ts.map +1 -0
  9. package/dist/api/document-actions.js +55 -0
  10. package/dist/api/document-actions.js.map +1 -0
  11. package/dist/api/member-enrollment.d.ts +7 -3
  12. package/dist/api/member-enrollment.d.ts.map +1 -1
  13. package/dist/api/member-enrollment.js +64 -16
  14. package/dist/api/member-enrollment.js.map +1 -1
  15. package/dist/api/member-export.d.ts.map +1 -1
  16. package/dist/api/member-export.js +14 -6
  17. package/dist/api/member-export.js.map +1 -1
  18. package/dist/api/member-lifecycle.d.ts +23 -4
  19. package/dist/api/member-lifecycle.d.ts.map +1 -1
  20. package/dist/api/member-lifecycle.js +88 -21
  21. package/dist/api/member-lifecycle.js.map +1 -1
  22. package/dist/api/member-notice-actions.d.ts +18 -0
  23. package/dist/api/member-notice-actions.d.ts.map +1 -0
  24. package/dist/api/member-notice-actions.js +184 -0
  25. package/dist/api/member-notice-actions.js.map +1 -0
  26. package/dist/api/member-records.d.ts +17 -2
  27. package/dist/api/member-records.d.ts.map +1 -1
  28. package/dist/api/member-records.js +440 -82
  29. package/dist/api/member-records.js.map +1 -1
  30. package/dist/api/member-share-actions.d.ts +3 -3
  31. package/dist/api/member-share-actions.d.ts.map +1 -1
  32. package/dist/api/member-share-actions.js +47 -20
  33. package/dist/api/member-share-actions.js.map +1 -1
  34. package/dist/api/owner-policy-actions.d.ts +1 -0
  35. package/dist/api/owner-policy-actions.d.ts.map +1 -1
  36. package/dist/api/owner-policy-actions.js +8 -4
  37. package/dist/api/owner-policy-actions.js.map +1 -1
  38. package/dist/api/owner-timezone-actions.d.ts +3 -2
  39. package/dist/api/owner-timezone-actions.d.ts.map +1 -1
  40. package/dist/api/owner-timezone-actions.js +4 -6
  41. package/dist/api/owner-timezone-actions.js.map +1 -1
  42. package/dist/api/personal-job-actions.d.ts +6 -0
  43. package/dist/api/personal-job-actions.d.ts.map +1 -0
  44. package/dist/api/personal-job-actions.js +72 -0
  45. package/dist/api/personal-job-actions.js.map +1 -0
  46. package/dist/api/security-events.d.ts +6 -1
  47. package/dist/api/security-events.d.ts.map +1 -1
  48. package/dist/api/security-events.js +34 -15
  49. package/dist/api/security-events.js.map +1 -1
  50. package/dist/api/skill-actions.d.ts +5 -0
  51. package/dist/api/skill-actions.d.ts.map +1 -0
  52. package/dist/api/skill-actions.js +66 -0
  53. package/dist/api/skill-actions.js.map +1 -0
  54. package/dist/api/source-actions.d.ts.map +1 -1
  55. package/dist/api/source-actions.js +4 -2
  56. package/dist/api/source-actions.js.map +1 -1
  57. package/dist/api/stored-source-reader.d.ts.map +1 -1
  58. package/dist/api/stored-source-reader.js +9 -2
  59. package/dist/api/stored-source-reader.js.map +1 -1
  60. package/dist/api/trello-actions.d.ts.map +1 -1
  61. package/dist/api/trello-actions.js +8 -2
  62. package/dist/api/trello-actions.js.map +1 -1
  63. package/dist/api/work-actions.d.ts +12 -2
  64. package/dist/api/work-actions.d.ts.map +1 -1
  65. package/dist/api/work-actions.js +57 -10
  66. package/dist/api/work-actions.js.map +1 -1
  67. package/dist/cli/commands/daemon.d.ts +12 -2
  68. package/dist/cli/commands/daemon.d.ts.map +1 -1
  69. package/dist/cli/commands/daemon.js +76 -12
  70. package/dist/cli/commands/daemon.js.map +1 -1
  71. package/dist/cli/commands/init.d.ts +4 -0
  72. package/dist/cli/commands/init.d.ts.map +1 -1
  73. package/dist/cli/commands/init.js +23 -0
  74. package/dist/cli/commands/init.js.map +1 -1
  75. package/dist/cli/commands/tools.d.ts +12 -0
  76. package/dist/cli/commands/tools.d.ts.map +1 -0
  77. package/dist/cli/commands/tools.js +109 -0
  78. package/dist/cli/commands/tools.js.map +1 -0
  79. package/dist/cli/index.js +6 -1
  80. package/dist/cli/index.js.map +1 -1
  81. package/dist/connectors/framework/polling-scheduler.d.ts +6 -1
  82. package/dist/connectors/framework/polling-scheduler.d.ts.map +1 -1
  83. package/dist/connectors/framework/polling-scheduler.js +25 -3
  84. package/dist/connectors/framework/polling-scheduler.js.map +1 -1
  85. package/dist/connectors/framework/stored-index-read.d.ts +2 -2
  86. package/dist/connectors/framework/stored-index-read.d.ts.map +1 -1
  87. package/dist/connectors/framework/stored-index-read.js +10 -3
  88. package/dist/connectors/framework/stored-index-read.js.map +1 -1
  89. package/dist/gateways/base-gateway.d.ts +7 -0
  90. package/dist/gateways/base-gateway.d.ts.map +1 -1
  91. package/dist/gateways/base-gateway.js +24 -0
  92. package/dist/gateways/base-gateway.js.map +1 -1
  93. package/dist/gateways/discord.d.ts +4 -0
  94. package/dist/gateways/discord.d.ts.map +1 -1
  95. package/dist/gateways/discord.js +24 -6
  96. package/dist/gateways/discord.js.map +1 -1
  97. package/dist/gateways/slack.d.ts +3 -0
  98. package/dist/gateways/slack.d.ts.map +1 -1
  99. package/dist/gateways/slack.js +15 -2
  100. package/dist/gateways/slack.js.map +1 -1
  101. package/dist/gateways/telegram-errors.d.ts +3 -0
  102. package/dist/gateways/telegram-errors.d.ts.map +1 -1
  103. package/dist/gateways/telegram-errors.js +5 -0
  104. package/dist/gateways/telegram-errors.js.map +1 -1
  105. package/dist/gateways/telegram-message-ledger.d.ts +7 -0
  106. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
  107. package/dist/gateways/telegram-message-ledger.js +27 -2
  108. package/dist/gateways/telegram-message-ledger.js.map +1 -1
  109. package/dist/gateways/telegram.d.ts +24 -6
  110. package/dist/gateways/telegram.d.ts.map +1 -1
  111. package/dist/gateways/telegram.js +258 -44
  112. package/dist/gateways/telegram.js.map +1 -1
  113. package/dist/gateways/turn-contract.d.ts +6 -0
  114. package/dist/gateways/turn-contract.d.ts.map +1 -1
  115. package/dist/runtime/action-surface.d.ts +28 -3
  116. package/dist/runtime/action-surface.d.ts.map +1 -1
  117. package/dist/runtime/action-surface.js +310 -34
  118. package/dist/runtime/action-surface.js.map +1 -1
  119. package/dist/runtime/backend-security.d.ts +4 -0
  120. package/dist/runtime/backend-security.d.ts.map +1 -1
  121. package/dist/runtime/backend-security.js +8 -1
  122. package/dist/runtime/backend-security.js.map +1 -1
  123. package/dist/runtime/config.d.ts +1 -0
  124. package/dist/runtime/config.d.ts.map +1 -1
  125. package/dist/runtime/config.js +11 -0
  126. package/dist/runtime/config.js.map +1 -1
  127. package/dist/runtime/connectors.js +1 -1
  128. package/dist/runtime/connectors.js.map +1 -1
  129. package/dist/runtime/egress-proxy.d.ts +3 -3
  130. package/dist/runtime/egress-proxy.d.ts.map +1 -1
  131. package/dist/runtime/egress-proxy.js +16 -3
  132. package/dist/runtime/egress-proxy.js.map +1 -1
  133. package/dist/runtime/member-paths.d.ts +9 -1
  134. package/dist/runtime/member-paths.d.ts.map +1 -1
  135. package/dist/runtime/member-paths.js +67 -5
  136. package/dist/runtime/member-paths.js.map +1 -1
  137. package/dist/runtime/member-session.d.ts +21 -21
  138. package/dist/runtime/member-session.d.ts.map +1 -1
  139. package/dist/runtime/member-session.js +289 -34
  140. package/dist/runtime/member-session.js.map +1 -1
  141. package/dist/runtime/member-system-prompt.d.ts +1 -0
  142. package/dist/runtime/member-system-prompt.d.ts.map +1 -1
  143. package/dist/runtime/member-system-prompt.js +22 -4
  144. package/dist/runtime/member-system-prompt.js.map +1 -1
  145. package/dist/runtime/native-session.d.ts +6 -0
  146. package/dist/runtime/native-session.d.ts.map +1 -1
  147. package/dist/runtime/native-session.js +80 -13
  148. package/dist/runtime/native-session.js.map +1 -1
  149. package/dist/runtime/outbound-attempts.d.ts +5 -2
  150. package/dist/runtime/outbound-attempts.d.ts.map +1 -1
  151. package/dist/runtime/outbound-attempts.js +3 -2
  152. package/dist/runtime/outbound-attempts.js.map +1 -1
  153. package/dist/runtime/owner-authority.d.ts +14 -14
  154. package/dist/runtime/owner-authority.d.ts.map +1 -1
  155. package/dist/runtime/owner-authority.js +159 -7
  156. package/dist/runtime/owner-authority.js.map +1 -1
  157. package/dist/runtime/owner-runtime.d.ts +16 -5
  158. package/dist/runtime/owner-runtime.d.ts.map +1 -1
  159. package/dist/runtime/owner-runtime.js +426 -43
  160. package/dist/runtime/owner-runtime.js.map +1 -1
  161. package/dist/runtime/owner-system-prompt.d.ts +3 -1
  162. package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
  163. package/dist/runtime/owner-system-prompt.js +15 -5
  164. package/dist/runtime/owner-system-prompt.js.map +1 -1
  165. package/dist/runtime/personal-job-cron.d.ts +6 -0
  166. package/dist/runtime/personal-job-cron.d.ts.map +1 -0
  167. package/dist/runtime/personal-job-cron.js +154 -0
  168. package/dist/runtime/personal-job-cron.js.map +1 -0
  169. package/dist/runtime/personal-jobs.d.ts +107 -0
  170. package/dist/runtime/personal-jobs.d.ts.map +1 -0
  171. package/dist/runtime/personal-jobs.js +353 -0
  172. package/dist/runtime/personal-jobs.js.map +1 -0
  173. package/dist/runtime/personal-notices.d.ts +38 -0
  174. package/dist/runtime/personal-notices.d.ts.map +1 -0
  175. package/dist/runtime/personal-notices.js +137 -0
  176. package/dist/runtime/personal-notices.js.map +1 -0
  177. package/dist/runtime/personal-turns.d.ts +23 -0
  178. package/dist/runtime/personal-turns.d.ts.map +1 -0
  179. package/dist/runtime/personal-turns.js +51 -0
  180. package/dist/runtime/personal-turns.js.map +1 -0
  181. package/dist/runtime/principal-access.d.ts +8 -0
  182. package/dist/runtime/principal-access.d.ts.map +1 -1
  183. package/dist/runtime/principal-access.js +69 -2
  184. package/dist/runtime/principal-access.js.map +1 -1
  185. package/dist/runtime/principal-sessions.d.ts +16 -2
  186. package/dist/runtime/principal-sessions.d.ts.map +1 -1
  187. package/dist/runtime/principal-sessions.js +104 -21
  188. package/dist/runtime/principal-sessions.js.map +1 -1
  189. package/dist/runtime/skills.d.ts +86 -0
  190. package/dist/runtime/skills.d.ts.map +1 -0
  191. package/dist/runtime/skills.js +560 -0
  192. package/dist/runtime/skills.js.map +1 -0
  193. package/dist/runtime/stimulus-delivery.d.ts +21 -1
  194. package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
  195. package/dist/runtime/stimulus-delivery.js +185 -18
  196. package/dist/runtime/stimulus-delivery.js.map +1 -1
  197. package/dist/runtime/tools-paths.d.ts +9 -0
  198. package/dist/runtime/tools-paths.d.ts.map +1 -0
  199. package/dist/runtime/tools-paths.js +98 -0
  200. package/dist/runtime/tools-paths.js.map +1 -0
  201. package/dist/runtime/turn-orders.d.ts +22 -2
  202. package/dist/runtime/turn-orders.d.ts.map +1 -1
  203. package/dist/runtime/turn-orders.js +60 -6
  204. package/dist/runtime/turn-orders.js.map +1 -1
  205. package/dist/storage/chat-sources.d.ts +21 -0
  206. package/dist/storage/chat-sources.d.ts.map +1 -1
  207. package/dist/storage/chat-sources.js +65 -3
  208. package/dist/storage/chat-sources.js.map +1 -1
  209. package/dist/tools/command-runner.d.ts +12 -0
  210. package/dist/tools/command-runner.d.ts.map +1 -0
  211. package/dist/tools/command-runner.js +65 -0
  212. package/dist/tools/command-runner.js.map +1 -0
  213. package/dist/tools/document-render.d.ts +24 -0
  214. package/dist/tools/document-render.d.ts.map +1 -0
  215. package/dist/tools/document-render.js +208 -0
  216. package/dist/tools/document-render.js.map +1 -0
  217. package/dist/tools/document-toolkit.d.ts +15 -0
  218. package/dist/tools/document-toolkit.d.ts.map +1 -0
  219. package/dist/tools/document-toolkit.js +501 -0
  220. package/dist/tools/document-toolkit.js.map +1 -0
  221. package/dist/tools/office-render.d.ts +28 -0
  222. package/dist/tools/office-render.d.ts.map +1 -0
  223. package/dist/tools/office-render.js +98 -0
  224. package/dist/tools/office-render.js.map +1 -0
  225. package/dist/tools/toolkit-process.d.ts +9 -0
  226. package/dist/tools/toolkit-process.d.ts.map +1 -0
  227. package/dist/tools/toolkit-process.js +148 -0
  228. package/dist/tools/toolkit-process.js.map +1 -0
  229. package/dist/tools/toolkit-state.d.ts +22 -0
  230. package/dist/tools/toolkit-state.d.ts.map +1 -0
  231. package/dist/tools/toolkit-state.js +116 -0
  232. package/dist/tools/toolkit-state.js.map +1 -0
  233. package/package.json +3 -2
  234. package/toolkit/inspect-office-zip.py +16 -0
  235. package/toolkit/rasterize.py +29 -0
  236. package/toolkit/requirements.lock +664 -0
  237. package/toolkit/smoke.py +32 -0
@@ -0,0 +1,501 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readDocumentToolkit = void 0;
4
+ exports.installDocumentToolkit = installDocumentToolkit;
5
+ const node_crypto_1 = require("node:crypto");
6
+ const node_fs_1 = require("node:fs");
7
+ const node_os_1 = require("node:os");
8
+ const node_path_1 = require("node:path");
9
+ const launch_files_js_1 = require("../cli/launch-files.js");
10
+ const backend_security_js_1 = require("../runtime/backend-security.js");
11
+ const tools_paths_js_1 = require("../runtime/tools-paths.js");
12
+ const toolkit_process_js_1 = require("./toolkit-process.js");
13
+ const command_runner_js_1 = require("./command-runner.js");
14
+ const office_render_js_1 = require("./office-render.js");
15
+ const toolkit_state_js_1 = require("./toolkit-state.js");
16
+ var toolkit_state_js_2 = require("./toolkit-state.js");
17
+ Object.defineProperty(exports, "readDocumentToolkit", { enumerable: true, get: function () { return toolkit_state_js_2.readDocumentToolkit; } });
18
+ /** Recursive pruning requires both our generated name and our complete publication receipt. */
19
+ function isManagedVersion(path, name) {
20
+ if (!toolkit_state_js_1.TOOLKIT_VERSION_NAME.test(name))
21
+ return false;
22
+ try {
23
+ const manifestPath = (0, node_path_1.join)(path, 'manifest.json');
24
+ if (!(0, node_fs_1.lstatSync)(manifestPath).isFile())
25
+ return false;
26
+ const manifest = JSON.parse((0, node_fs_1.readFileSync)(manifestPath, 'utf8'));
27
+ if (!manifest || typeof manifest !== 'object' || Array.isArray(manifest))
28
+ return false;
29
+ const data = manifest;
30
+ return (data.version === 1 &&
31
+ typeof data.installedAt === 'string' &&
32
+ /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(data.installedAt) &&
33
+ Number.isFinite(Date.parse(data.installedAt)) &&
34
+ typeof data.pythonVersion === 'string' &&
35
+ /^\d+\.\d+\.\d+$/.test(data.pythonVersion) &&
36
+ typeof data.officeVersion === 'string' &&
37
+ data.officeVersion.trim().length > 0 &&
38
+ typeof data.platform === 'string' &&
39
+ [
40
+ 'aix',
41
+ 'android',
42
+ 'darwin',
43
+ 'freebsd',
44
+ 'haiku',
45
+ 'linux',
46
+ 'openbsd',
47
+ 'sunos',
48
+ 'win32',
49
+ 'cygwin',
50
+ 'netbsd',
51
+ ].includes(data.platform) &&
52
+ Array.isArray(data.requirements) &&
53
+ data.requirements.length > 0 &&
54
+ data.requirements.every((line) => typeof line === 'string') &&
55
+ typeof data.requirementsSha256 === 'string' &&
56
+ /^[0-9a-f]{64}$/.test(data.requirementsSha256) &&
57
+ typeof data.soffice === 'string' &&
58
+ (0, node_path_1.isAbsolute)(data.soffice) &&
59
+ Array.isArray(data.fonts) &&
60
+ data.fonts.length === 2 &&
61
+ data.fonts[0] === 'Noto Sans CJK' &&
62
+ data.fonts[1] === 'Noto Serif CJK');
63
+ }
64
+ catch {
65
+ // Missing, malformed or unreadable receipts never authorize deleting someone else's files.
66
+ return false;
67
+ }
68
+ }
69
+ const ROOT_MARKER = '.mama-document-toolkit';
70
+ const ROOT_RECEIPT = 'mama-document-toolkit-v1\n';
71
+ /** An unmarked root may retain only the publication layout written by the skill host. */
72
+ function isManagedSkills(root) {
73
+ const uid = process.getuid?.();
74
+ const ownedDirectory = (path) => {
75
+ const meta = (0, node_fs_1.lstatSync)(path);
76
+ return meta.isDirectory() && meta.uid === uid && (meta.mode & 0o022) === 0;
77
+ };
78
+ const versionName = /^([a-z0-9][a-z0-9._-]{0,63})-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
79
+ try {
80
+ const versions = (0, node_path_1.join)(root, '.versions');
81
+ if (!ownedDirectory(root) || !ownedDirectory(versions))
82
+ return false;
83
+ if (!(0, node_fs_1.readdirSync)(versions).every((name) => versionName.test(name) && ownedDirectory((0, node_path_1.join)(versions, name))))
84
+ return false;
85
+ return (0, node_fs_1.readdirSync)(root).every((name) => {
86
+ if (name === '.versions')
87
+ return true;
88
+ if (!/^[a-z0-9][a-z0-9._-]{0,63}$/.test(name))
89
+ return false;
90
+ const pointer = (0, node_path_1.join)(root, name);
91
+ const meta = (0, node_fs_1.lstatSync)(pointer);
92
+ if (!meta.isSymbolicLink() || meta.uid !== uid)
93
+ return false;
94
+ const target = (0, node_fs_1.readlinkSync)(pointer);
95
+ const parts = target.split('/');
96
+ return (parts.length === 2 &&
97
+ parts[0] === '.versions' &&
98
+ versionName.exec(parts[1])?.[1] === name &&
99
+ ownedDirectory((0, node_path_1.join)(root, target)));
100
+ });
101
+ }
102
+ catch (error) {
103
+ if (error.code === 'ENOENT')
104
+ return false;
105
+ throw error;
106
+ }
107
+ }
108
+ /** Adopt only the layout written by the earlier installer, before acquiring/deleting locks. */
109
+ function claimToolkitRoot(root) {
110
+ const entries = (0, node_fs_1.readdirSync)(root);
111
+ const marker = (0, node_path_1.join)(root, ROOT_MARKER);
112
+ if (entries.includes(ROOT_MARKER)) {
113
+ const meta = (0, node_fs_1.lstatSync)(marker);
114
+ if (!meta.isFile() ||
115
+ meta.uid !== process.getuid?.() ||
116
+ (0, node_fs_1.readFileSync)(marker, 'utf8') !== ROOT_RECEIPT)
117
+ throw new Error(`Invalid document toolkit root marker ${marker}; left untouched`);
118
+ return;
119
+ }
120
+ const managedLink = (path) => {
121
+ const target = (0, node_fs_1.readlinkSync)(path);
122
+ return ((0, node_path_1.basename)(target) === target &&
123
+ (0, node_fs_1.lstatSync)((0, node_path_1.join)(root, target)).isDirectory() &&
124
+ isManagedVersion((0, node_path_1.join)(root, target), target));
125
+ };
126
+ for (const name of entries) {
127
+ const path = (0, node_path_1.join)(root, name);
128
+ const meta = (0, node_fs_1.lstatSync)(path);
129
+ let managed = false;
130
+ if (['apps', 'fonts', '.leases'].includes(name))
131
+ managed = meta.isDirectory();
132
+ else if (name === 'skills')
133
+ managed = isManagedSkills(path);
134
+ else if (toolkit_state_js_1.TOOLKIT_VERSION_NAME.test(name))
135
+ managed = meta.isDirectory() && isManagedVersion(path, name);
136
+ else if (name === 'current' ||
137
+ /^\.current-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(name)) {
138
+ if (meta.isSymbolicLink()) {
139
+ try {
140
+ managed = managedLink(path);
141
+ }
142
+ catch (error) {
143
+ if (error.code !== 'ENOENT')
144
+ throw error;
145
+ }
146
+ }
147
+ }
148
+ else if (/^\.(install|state)-lock(?:\.[A-Za-z0-9]{6})?$/.test(name)) {
149
+ if (meta.isFile())
150
+ managed = name.endsWith('-lock') && /^[1-9]\d*$/.test((0, node_fs_1.readFileSync)(path, 'utf8').trim());
151
+ else if (meta.isDirectory())
152
+ managed = (0, node_fs_1.readdirSync)(path).every((owner) => {
153
+ const file = (0, node_path_1.join)(path, owner);
154
+ return (/^\d+-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/.test(owner) &&
155
+ (0, node_fs_1.lstatSync)(file).isFile() &&
156
+ (0, node_fs_1.readFileSync)(file, 'utf8').trim() === owner.split('-')[0]);
157
+ });
158
+ }
159
+ if (!managed)
160
+ throw new Error(`Refusing unmarked tools_root ${root}: ${path} is not installer-managed`);
161
+ }
162
+ (0, node_fs_1.writeFileSync)(marker, ROOT_RECEIPT, { flag: 'wx', mode: 0o644 });
163
+ }
164
+ /** Do not follow venv interpreter symlinks into the host Python while changing permissions. */
165
+ function permissions(path, readOnly) {
166
+ const meta = (0, node_fs_1.lstatSync)(path);
167
+ if (meta.isSymbolicLink())
168
+ return;
169
+ (0, node_fs_1.chmodSync)(path, meta.isDirectory()
170
+ ? readOnly
171
+ ? 0o555
172
+ : 0o755
173
+ : readOnly
174
+ ? meta.mode & 0o111
175
+ ? 0o555
176
+ : 0o444
177
+ : 0o644);
178
+ if (meta.isDirectory())
179
+ for (const name of (0, node_fs_1.readdirSync)(path))
180
+ permissions((0, node_path_1.join)(path, name), readOnly);
181
+ }
182
+ function removeVersion(path) {
183
+ permissions(path, false);
184
+ (0, node_fs_1.rmSync)(path, { recursive: true });
185
+ }
186
+ function fontFiles(directory, owned = true) {
187
+ let meta;
188
+ try {
189
+ meta = (0, node_fs_1.lstatSync)(directory);
190
+ }
191
+ catch (error) {
192
+ if (error.code === 'ENOENT')
193
+ return [];
194
+ throw error;
195
+ }
196
+ if (!meta.isDirectory())
197
+ throw new Error(`Font directory ${directory} must be a real directory, not a symlink`);
198
+ // The copy happens after this check; only an owned, non-shared directory keeps it true.
199
+ // System font directories belong to the OS, not to tools_root.
200
+ if (owned)
201
+ (0, tools_paths_js_1.assertOwnedDirectory)(directory);
202
+ return (0, node_fs_1.readdirSync)(directory).flatMap((name) => {
203
+ const path = (0, node_path_1.join)(directory, name);
204
+ const entry = (0, node_fs_1.lstatSync)(path);
205
+ if (entry.isDirectory())
206
+ return fontFiles(path, owned);
207
+ if (!/^Noto(?:Sans|Serif)CJK.*\.(otf|ttf|ttc)$/i.test(name))
208
+ return [];
209
+ if (entry.isSymbolicLink())
210
+ throw new Error(`Expected font ${path} must not be a symlink`);
211
+ if (!entry.isFile())
212
+ throw new Error(`Expected font ${path} must be a regular file`);
213
+ return [path];
214
+ });
215
+ }
216
+ function xml(value) {
217
+ return value
218
+ .replace(/&/g, '&')
219
+ .replace(/</g, '&lt;')
220
+ .replace(/>/g, '&gt;')
221
+ .replace(/"/g, '&quot;');
222
+ }
223
+ async function installOffice(root, version, platform, run, locate) {
224
+ if (platform !== 'darwin') {
225
+ const soffice = locate?.('soffice');
226
+ if (!soffice)
227
+ throw new Error('soffice is missing from PATH; install LibreOffice and Noto Sans/Serif CJK fonts on the host');
228
+ const fonts = [
229
+ ...fontFiles((0, node_path_1.join)(root, 'fonts')),
230
+ ...['/usr/share/fonts', '/usr/local/share/fonts'].flatMap((path) => fontFiles(path, false)),
231
+ ];
232
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)(version, 'fonts'));
233
+ for (const family of ['Sans', 'Serif']) {
234
+ const files = fonts.filter((path) => new RegExp(`Noto${family}CJK.*\\.(otf|ttf|ttc)$`, 'i').test((0, node_path_1.basename)(path)));
235
+ if (!files.length)
236
+ throw new Error(`Noto ${family} CJK fonts are missing from the host`);
237
+ for (const path of files)
238
+ (0, node_fs_1.cpSync)(path, (0, node_path_1.join)(version, 'fonts', (0, node_path_1.basename)(path)));
239
+ }
240
+ return soffice;
241
+ }
242
+ // Homebrew may report success for a cask installed in a different appdir/fontdir.
243
+ const installed = await run('brew', ['list', '--cask', '--versions'], { timeoutMs: 60_000 });
244
+ await run('brew', ['install', 'fontconfig'], { timeoutMs: 900_000 });
245
+ for (const cask of ['libreoffice', 'font-noto-sans-cjk', 'font-noto-serif-cjk']) {
246
+ const location = cask === 'libreoffice'
247
+ ? `--appdir=${(0, node_path_1.join)(root, 'apps')}`
248
+ : `--fontdir=${(0, node_path_1.join)(root, 'fonts')}`;
249
+ await run('brew', [
250
+ installed.stdout.split('\n').some((line) => line.startsWith(`${cask} `))
251
+ ? 'upgrade'
252
+ : 'install',
253
+ '--cask',
254
+ location,
255
+ cask,
256
+ ], {
257
+ timeoutMs: 900_000,
258
+ });
259
+ }
260
+ const app = (0, node_path_1.join)(root, 'apps', 'LibreOffice.app');
261
+ if (!(0, node_fs_1.existsSync)((0, node_path_1.join)(app, 'Contents', 'MacOS', 'soffice')))
262
+ throw new Error(`libreoffice cask is missing under ${(0, node_path_1.join)(root, 'apps')}; move/reinstall the cask there before ${toolkit_state_js_1.TOOLKIT_INSTALL_COMMAND}`);
263
+ const fonts = fontFiles((0, node_path_1.join)(root, 'fonts'));
264
+ for (const family of ['Sans', 'Serif']) {
265
+ if (!fonts.some((path) => new RegExp(`Noto${family}CJK.*\\.(otf|ttf|ttc)$`, 'i').test((0, node_path_1.basename)(path))))
266
+ throw new Error(`font-noto-${family.toLowerCase()}-cjk cask is missing under ${(0, node_path_1.join)(root, 'fonts')}; move/reinstall the cask there before ${toolkit_state_js_1.TOOLKIT_INSTALL_COMMAND}`);
267
+ }
268
+ // Brew upgrades mutable apps/fonts. A published version uses its own immutable snapshot,
269
+ // so an installation cannot remove resources from a render already running in the daemon.
270
+ // `cp -c` clones on APFS, so a snapshot costs no disk until brew changes the originals;
271
+ // Node's cpSync ignores COPYFILE_FICLONE for directories (measured: 815 MB vs 8 MB).
272
+ const snapshot = (0, node_path_1.join)(version, 'LibreOffice.app');
273
+ (0, tools_paths_js_1.assertOwnedDirectory)((0, node_path_1.join)(root, 'apps'));
274
+ await run('/bin/cp', ['-cRP', app, snapshot], { timeoutMs: 600_000 });
275
+ // The clone keeps brew's quarantine flag, and a headless first launch would wait on the
276
+ // Gatekeeper prompt. Assess the signature and notarization here, then clear the flag.
277
+ await run('/usr/sbin/spctl', ['--assess', '--type', 'execute', snapshot], { timeoutMs: 120_000 });
278
+ await run('/usr/bin/xattr', ['-dr', 'com.apple.quarantine', snapshot], { timeoutMs: 120_000 });
279
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)(version, 'fonts'));
280
+ for (const path of fonts)
281
+ await run('/bin/cp', ['-c', path, (0, node_path_1.join)(version, 'fonts', (0, node_path_1.basename)(path))], {
282
+ timeoutMs: 600_000,
283
+ });
284
+ return (0, node_path_1.join)(version, 'LibreOffice.app', 'Contents', 'MacOS', 'soffice');
285
+ }
286
+ /** Host-only, offline-testable provisioning. No daemon state, config rewrite or restart. */
287
+ async function installDocumentToolkit(options) {
288
+ const home = options.home ?? (0, node_os_1.homedir)();
289
+ const root = (0, tools_paths_js_1.validateToolsRoot)(options.toolsRoot, [
290
+ home,
291
+ (0, node_path_1.join)(home, '.mama'),
292
+ ...(options.memberRoot ? [options.memberRoot] : []),
293
+ ]);
294
+ const run = options.run ?? command_runner_js_1.runCommand;
295
+ const platform = options.platform ?? process.platform;
296
+ const locate = options.locate ?? launch_files_js_1.findExecutable;
297
+ (0, node_fs_1.mkdirSync)(root, { recursive: true, mode: 0o755 });
298
+ (0, tools_paths_js_1.assertToolsOwnership)(root);
299
+ (0, toolkit_state_js_1.toolkitLeaseDirectory)(root);
300
+ claimToolkitRoot(root);
301
+ // Reject existing font links before the host package manager can write through them.
302
+ fontFiles((0, node_path_1.join)(root, 'fonts'));
303
+ const lock = (0, node_path_1.join)(root, '.install-lock');
304
+ const releaseLock = (0, toolkit_process_js_1.tryToolkitLock)(lock);
305
+ if (!releaseLock)
306
+ throw new Error(`Document toolkit installation is already running at ${lock}; retry mama tools install after it finishes`);
307
+ const versionDir = (0, node_path_1.join)(root, `v-${Date.now()}-${(0, node_crypto_1.randomUUID)()}`);
308
+ let temp;
309
+ const link = (0, node_path_1.join)(root, `.current-${(0, node_crypto_1.randomUUID)()}`);
310
+ let switched = false;
311
+ const cleanup = () => {
312
+ try {
313
+ try {
314
+ (0, node_fs_1.rmSync)(link, { force: true });
315
+ if (!switched && (0, node_fs_1.existsSync)(versionDir))
316
+ removeVersion(versionDir);
317
+ }
318
+ finally {
319
+ if (temp)
320
+ (0, node_fs_1.rmSync)(temp, { recursive: true, force: true });
321
+ }
322
+ }
323
+ finally {
324
+ releaseLock();
325
+ }
326
+ };
327
+ const unregister = (0, toolkit_process_js_1.onToolkitSignal)(cleanup);
328
+ try {
329
+ temp = (0, node_fs_1.realpathSync)((0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'mama-tools-install-')));
330
+ const current = (0, node_path_1.join)(root, 'current');
331
+ const previous = (0, node_fs_1.existsSync)(current) ? (0, node_fs_1.realpathSync)(current) : undefined;
332
+ if (previous && (!previous.startsWith(`${root}/v-`) || !(0, node_fs_1.lstatSync)(current).isSymbolicLink()))
333
+ throw new Error('Document toolkit current must be a managed version link');
334
+ const python = locate('python3') ?? 'python3';
335
+ const checkVersion = await run(python, [
336
+ '-I',
337
+ '-c',
338
+ 'import sys; print(".".join(map(str, sys.version_info[:3]))); assert sys.version_info >= (3, 10), "python3 >= 3.10 required"',
339
+ ]);
340
+ const [major, minor] = checkVersion.stdout.trim().split('.').map(Number);
341
+ if (!(major > 3 || (major === 3 && minor >= 10)))
342
+ throw new Error('python3 >= 3.10 is required');
343
+ const base = await run(python, [
344
+ '-I',
345
+ '-c',
346
+ 'import os, sys; print(os.path.realpath(sys.base_prefix))',
347
+ ]);
348
+ const basePath = base.stdout.trim();
349
+ if (!(0, node_path_1.isAbsolute)(basePath))
350
+ throw new Error('Python sys.base_prefix must be absolute');
351
+ const offset = (0, node_path_1.relative)((0, node_fs_1.realpathSync)(home), basePath);
352
+ if (offset === '' || (offset !== '..' && !offset.startsWith(`..${node_path_1.sep}`) && !(0, node_path_1.isAbsolute)(offset)))
353
+ throw new Error('Python sys.base_prefix is under HOME; use a host Python outside HOME');
354
+ // The version directory IS the venv; bin/python3 must stay beside its pyvenv.cfg.
355
+ (0, node_fs_1.mkdirSync)(versionDir, { mode: 0o755 });
356
+ await run(python, ['-m', 'venv', versionDir], { timeoutMs: 120_000 });
357
+ (0, tools_paths_js_1.assertToolsOwnership)(root);
358
+ const versionPython = (0, node_path_1.join)(versionDir, 'bin', 'python3');
359
+ const requirements = (0, node_path_1.join)(toolkit_state_js_1.TOOLKIT_ASSETS, 'requirements.lock');
360
+ await run(versionPython, [
361
+ '-m',
362
+ 'pip',
363
+ 'install',
364
+ '--only-binary=:all:',
365
+ '--no-deps',
366
+ '--require-hashes',
367
+ '-r',
368
+ requirements,
369
+ ], { timeoutMs: 900_000 });
370
+ await run(versionPython, ['-m', 'pip', 'check']);
371
+ for (const name of (0, node_fs_1.readdirSync)((0, node_path_1.join)(versionDir, 'bin'))) {
372
+ if (/^pip/i.test(name) || /^activate(?:\.|$)/i.test(name))
373
+ (0, node_fs_1.rmSync)((0, node_path_1.join)(versionDir, 'bin', name));
374
+ }
375
+ const soffice = await installOffice(root, versionDir, platform, run, locate);
376
+ const fontconfig = (0, node_path_1.join)(versionDir, 'fonts.conf');
377
+ const fontDirs = [
378
+ (0, node_path_1.join)(versionDir, 'fonts'),
379
+ ...(platform === 'darwin'
380
+ ? ['/System/Library/Fonts', '/Library/Fonts']
381
+ : [(0, node_path_1.join)(root, 'fonts'), '/usr/share/fonts', '/usr/local/share/fonts']),
382
+ ];
383
+ (0, node_fs_1.writeFileSync)(fontconfig, `<?xml version="1.0"?>\n<!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">\n<fontconfig>${fontDirs.map((path) => `<dir>${xml(path)}</dir>`).join('')}<cachedir>${xml((0, node_path_1.join)(versionDir, 'font-cache'))}</cachedir></fontconfig>\n`);
384
+ const env = (0, office_render_js_1.renderEnvironment)(versionDir, fontconfig, temp);
385
+ (0, node_fs_1.mkdirSync)((0, node_path_1.join)(versionDir, 'font-cache'));
386
+ const fcCache = locate('fc-cache');
387
+ if (!fcCache)
388
+ throw new Error('fc-cache is missing from the host fontconfig installation');
389
+ await run(fcCache, ['-f'], { env });
390
+ const officeVersion = await run(soffice, ['--version'], { env });
391
+ await run('python3', [
392
+ '-I',
393
+ '-c',
394
+ 'import cffi, charset_normalizer, cryptography, et_xmlfile, lxml, openpyxl, pdfminer, pdfplumber, PIL, pycparser, pymupdf, pypdfium2, docx, pptx, reportlab, typing_extensions, xlsxwriter',
395
+ ], { env });
396
+ // Libraries remain installable elsewhere; rendering requires the macOS host sandbox.
397
+ if (platform === 'darwin') {
398
+ const stagedSmoke = (0, node_path_1.join)(temp, 'smoke.py');
399
+ (0, node_fs_1.cpSync)((0, node_path_1.join)(toolkit_state_js_1.TOOLKIT_ASSETS, 'smoke.py'), stagedSmoke);
400
+ const deniedReadPaths = [
401
+ home,
402
+ ...(0, backend_security_js_1.credentialReadPaths)((0, node_path_1.join)(home, '.mama')),
403
+ ...(options.memberRoot ? [options.memberRoot] : []),
404
+ ];
405
+ const pptx = (0, node_path_1.join)(temp, 'smoke.pptx');
406
+ const smokeCommand = (args) => (0, office_render_js_1.sandboxedCommand)({
407
+ command: versionPython,
408
+ args: ['-I', stagedSmoke, ...args],
409
+ temp: temp,
410
+ output: temp,
411
+ env,
412
+ deniedReadPaths,
413
+ platform,
414
+ timeoutMs: 30_000,
415
+ run,
416
+ });
417
+ await smokeCommand(['create', pptx]);
418
+ await (0, office_render_js_1.renderOffice)({
419
+ soffice,
420
+ input: pptx,
421
+ output: temp,
422
+ temp,
423
+ env,
424
+ deniedReadPaths,
425
+ platform,
426
+ timeoutMs: 30_000,
427
+ run,
428
+ });
429
+ await smokeCommand(['check', (0, node_path_1.join)(temp, 'smoke.pdf')]);
430
+ }
431
+ (0, node_fs_1.writeFileSync)((0, node_path_1.join)(versionDir, 'manifest.json'), JSON.stringify({
432
+ version: 1,
433
+ installedAt: new Date().toISOString(),
434
+ pythonVersion: checkVersion.stdout.trim(),
435
+ officeVersion: officeVersion.stdout.trim(),
436
+ platform,
437
+ requirements: (0, node_fs_1.readFileSync)(requirements, 'utf8').trim().split('\n'),
438
+ requirementsSha256: (0, node_crypto_1.createHash)('sha256').update((0, node_fs_1.readFileSync)(requirements)).digest('hex'),
439
+ soffice,
440
+ fonts: ['Noto Sans CJK', 'Noto Serif CJK'],
441
+ }, null, 2) + '\n');
442
+ permissions(versionDir, true);
443
+ await (0, toolkit_state_js_1.withToolkitState)(root, () => {
444
+ // A renderer's lease pins an old version until its subprocesses finish.
445
+ const directory = (0, toolkit_state_js_1.toolkitLeaseDirectory)(root);
446
+ const leases = directory
447
+ ? (0, node_fs_1.readdirSync)(directory).filter((name) => {
448
+ const path = (0, node_path_1.join)(directory, name);
449
+ let meta;
450
+ try {
451
+ meta = (0, node_fs_1.lstatSync)(path);
452
+ }
453
+ catch (error) {
454
+ if (error.code === 'ENOENT')
455
+ return false;
456
+ throw error;
457
+ }
458
+ if (!toolkit_state_js_1.TOOLKIT_LEASE_NAME.test(name) || !meta.isFile()) {
459
+ (options.write ?? console.log)(`Document toolkit: left ${path} untouched; it is not a regular renderer lease file.`);
460
+ return false;
461
+ }
462
+ if ((0, toolkit_process_js_1.liveToolkitLease)(path))
463
+ return true;
464
+ (0, node_fs_1.rmSync)(path, { force: true });
465
+ return false;
466
+ })
467
+ : [];
468
+ for (const entry of (0, node_fs_1.readdirSync)(root, { withFileTypes: true })) {
469
+ const path = (0, node_path_1.join)(root, entry.name);
470
+ if (entry.isDirectory() &&
471
+ entry.name.startsWith('v-') &&
472
+ path !== versionDir &&
473
+ path !== previous &&
474
+ !leases.some((lease) => lease.startsWith(`${entry.name}.`))) {
475
+ if (isManagedVersion(path, entry.name))
476
+ removeVersion(path);
477
+ else
478
+ (options.write ?? console.log)(`Document toolkit: left ${path} untouched; it is not a managed toolkit version.`);
479
+ }
480
+ }
481
+ // Publication is the last install operation: even pruning must succeed before switching.
482
+ (0, node_fs_1.symlinkSync)((0, node_path_1.basename)(versionDir), link);
483
+ (0, node_fs_1.renameSync)(link, current);
484
+ switched = true;
485
+ });
486
+ return { versionDir, python: versionPython, soffice, fontconfig };
487
+ }
488
+ catch (error) {
489
+ const detail = error instanceof Error ? error.message : 'installation failed';
490
+ throw new Error(`Document toolkit: ${detail}. Run ${toolkit_state_js_1.TOOLKIT_INSTALL_COMMAND} on the host to retry.`);
491
+ }
492
+ finally {
493
+ try {
494
+ cleanup();
495
+ }
496
+ finally {
497
+ unregister();
498
+ }
499
+ }
500
+ }
501
+ //# sourceMappingURL=document-toolkit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-toolkit.js","sourceRoot":"","sources":["../../src/tools/document-toolkit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type CommandRunner } from './command-runner.js';
2
+ export declare function requireOfficeSandbox(platform?: NodeJS.Platform): void;
3
+ /** Office needs an AF_UNIX bind in /tmp; that grants no outbound network. */
4
+ export declare function officeSandboxProfile(temp: string, output: string, deniedReadPaths: readonly string[]): string;
5
+ export declare function renderEnvironment(versionDir: string, fontconfig: string, temp: string): NodeJS.ProcessEnv;
6
+ export declare function sandboxedCommand(options: {
7
+ command: string;
8
+ args: string[];
9
+ temp: string;
10
+ output: string;
11
+ deniedReadPaths: readonly string[];
12
+ platform?: NodeJS.Platform;
13
+ env: NodeJS.ProcessEnv;
14
+ timeoutMs: number;
15
+ run?: CommandRunner;
16
+ }): ReturnType<CommandRunner>;
17
+ export declare function renderOffice(options: {
18
+ soffice: string;
19
+ input: string;
20
+ output: string;
21
+ temp: string;
22
+ env: NodeJS.ProcessEnv;
23
+ deniedReadPaths: readonly string[];
24
+ timeoutMs: number;
25
+ platform?: NodeJS.Platform;
26
+ run?: CommandRunner;
27
+ }): Promise<void>;
28
+ //# sourceMappingURL=office-render.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"office-render.d.ts","sourceRoot":"","sources":["../../src/tools/office-render.ts"],"names":[],"mappings":"AAIA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAErE,wBAAgB,oBAAoB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,IAAI,CAKvF;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,SAAS,MAAM,EAAE,GACjC,MAAM,CAsBR;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,MAAM,CAAC,UAAU,CAanB;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB,GAAG,UAAU,CAAC,aAAa,CAAC,CAa5B;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoChB"}