@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,560 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.skillDenied = skillDenied;
4
+ exports.createSkillStore = createSkillStore;
5
+ exports.createSkillTurnContext = createSkillTurnContext;
6
+ const mama_core_1 = require("@jungjaehoon/mama-core");
7
+ const node_fs_1 = require("node:fs");
8
+ const node_crypto_1 = require("node:crypto");
9
+ const node_path_1 = require("node:path");
10
+ const js_yaml_1 = require("js-yaml");
11
+ const tools_paths_js_1 = require("./tools-paths.js");
12
+ const invalid_input_js_1 = require("../utils/invalid-input.js");
13
+ const file_delivery_js_1 = require("../api/file-delivery.js");
14
+ const NAME = /^[a-z0-9][a-z0-9._-]{0,63}$/;
15
+ const FILE_LIMIT = 128;
16
+ const FILE_BYTES = 2 * 1024 * 1024;
17
+ const TOTAL_BYTES = 8 * 1024 * 1024;
18
+ const FRONTMATTER_BYTES = 16 * 1024;
19
+ /** SKILL.md reaches the model whole through skill.read; supporting files stay paths. */
20
+ const SKILL_MD_BYTES = 64 * 1024;
21
+ /** Darwin refuses a symlink in any component; elsewhere only the last component is checked. */
22
+ const NO_FOLLOW = process.platform === 'darwin' ? file_delivery_js_1.O_NOFOLLOW_ANY : node_fs_1.constants.O_NOFOLLOW;
23
+ function skillDenied() {
24
+ return Object.assign(new Error('Skill is not readable in this session'), { name: 'denied' });
25
+ }
26
+ function validateName(name) {
27
+ if (!NAME.test(name) || name === '.' || name === '..')
28
+ throw (0, invalid_input_js_1.invalidInput)('Invalid skill name: use up to 64 lowercase letters, digits, dots, underscores or hyphens');
29
+ }
30
+ function missing(error) {
31
+ return error.code === 'ENOENT';
32
+ }
33
+ function entries(path, limit = FILE_LIMIT * 2) {
34
+ let directory;
35
+ try {
36
+ directory = (0, node_fs_1.opendirSync)(path, { bufferSize: 1 });
37
+ }
38
+ catch (error) {
39
+ if (missing(error))
40
+ return [];
41
+ throw error;
42
+ }
43
+ try {
44
+ const names = [];
45
+ for (let entry = directory.readSync(); entry !== null; entry = directory.readSync()) {
46
+ if (names.length >= limit)
47
+ throw (0, invalid_input_js_1.invalidInput)('Skill has too many file/directory entries');
48
+ names.push(entry.name);
49
+ }
50
+ return names.sort();
51
+ }
52
+ finally {
53
+ directory.closeSync();
54
+ }
55
+ }
56
+ function createOwnedDirectory(path) {
57
+ try {
58
+ (0, tools_paths_js_1.assertOwnedDirectory)(path);
59
+ }
60
+ catch (error) {
61
+ if (!missing(error))
62
+ throw error;
63
+ (0, node_fs_1.mkdirSync)(path, { mode: 0o755 });
64
+ (0, tools_paths_js_1.assertOwnedDirectory)(path);
65
+ }
66
+ }
67
+ function within(root, path) {
68
+ const local = (0, node_path_1.relative)(root, path);
69
+ return local === '' || (local !== '..' && !local.startsWith(`..${node_path_1.sep}`) && !(0, node_path_1.isAbsolute)(local));
70
+ }
71
+ function assertSourcePath(base, path) {
72
+ if (!within(base, (0, node_fs_1.realpathSync)(path)))
73
+ throw (0, invalid_input_js_1.invalidInput)('Skill path escapes its source folder');
74
+ for (let current = base;;) {
75
+ if ((0, node_fs_1.lstatSync)(current).isSymbolicLink())
76
+ throw (0, invalid_input_js_1.invalidInput)('Skill symlinks are refused');
77
+ if (current === path)
78
+ break;
79
+ current = (0, node_path_1.join)(current, (0, node_path_1.relative)(current, path).split(node_path_1.sep)[0]);
80
+ }
81
+ }
82
+ /** Never traverse an agent-supplied alias, including the skills parent itself. */
83
+ function personalFolder(workspace, name) {
84
+ validateName(name);
85
+ const base = (0, node_fs_1.realpathSync)(workspace);
86
+ const parent = (0, node_path_1.join)(base, 'skills');
87
+ if ((0, node_fs_1.lstatSync)(parent).isSymbolicLink())
88
+ throw (0, invalid_input_js_1.invalidInput)('Skill source skills folder must not be a symlink');
89
+ const folder = (0, node_path_1.join)(parent, name);
90
+ if ((0, node_fs_1.lstatSync)(folder).isSymbolicLink() || !within(base, (0, node_fs_1.realpathSync)(folder)))
91
+ throw (0, invalid_input_js_1.invalidInput)('Skill source must stay inside its workspace without symlinks');
92
+ return folder;
93
+ }
94
+ /** Bound a snapshot before copying. No symlinks, special files or outside-file aliases. */
95
+ function readFolder(folder, exact = false) {
96
+ const base = (0, node_fs_1.realpathSync)(folder);
97
+ // A personal folder is already resolved; any difference means it was swapped for an alias.
98
+ if (exact && base !== folder)
99
+ throw (0, invalid_input_js_1.invalidInput)('Skill source changed into an alias');
100
+ const files = [];
101
+ let total = 0;
102
+ let count = 0;
103
+ const walk = (path) => {
104
+ if (++count > FILE_LIMIT * 2)
105
+ throw (0, invalid_input_js_1.invalidInput)('Skill has too many file/directory entries');
106
+ const meta = (0, node_fs_1.lstatSync)(path);
107
+ assertSourcePath(base, path);
108
+ if (meta.isDirectory()) {
109
+ for (const name of entries(path, FILE_LIMIT * 2 - count))
110
+ walk((0, node_path_1.join)(path, name));
111
+ return;
112
+ }
113
+ if (!meta.isFile() || meta.nlink !== 1)
114
+ throw (0, invalid_input_js_1.invalidInput)('Skill files must be regular files without hard links');
115
+ if (files.length >= FILE_LIMIT || meta.size > FILE_BYTES || total + meta.size > TOTAL_BYTES)
116
+ throw (0, invalid_input_js_1.invalidInput)('Skill exceeds 128 files, 2 MiB per file or 8 MiB total');
117
+ if ((0, node_path_1.relative)(base, path) === 'SKILL.md' && meta.size > SKILL_MD_BYTES)
118
+ throw (0, invalid_input_js_1.invalidInput)('SKILL.md exceeds 64 KiB; keep long material in supporting files');
119
+ const fd = (0, node_fs_1.openSync)(path, node_fs_1.constants.O_RDONLY | NO_FOLLOW);
120
+ try {
121
+ const current = (0, node_fs_1.fstatSync)(fd);
122
+ if (current.dev !== meta.dev || current.ino !== meta.ino || current.size !== meta.size)
123
+ throw (0, invalid_input_js_1.invalidInput)('Skill file changed while being read');
124
+ const bytes = Buffer.alloc(meta.size);
125
+ // A bounded descriptor read cannot allocate an unbounded buffer if a file grows.
126
+ let read = 0;
127
+ while (read < bytes.length) {
128
+ const size = (0, node_fs_1.readSync)(fd, bytes, read, bytes.length - read, read);
129
+ if (size === 0)
130
+ break;
131
+ read += size;
132
+ }
133
+ const after = (0, node_fs_1.fstatSync)(fd);
134
+ assertSourcePath(base, path);
135
+ const named = (0, node_fs_1.lstatSync)(path);
136
+ if (read !== bytes.length ||
137
+ after.size !== meta.size ||
138
+ after.mtimeMs !== meta.mtimeMs ||
139
+ named.dev !== meta.dev ||
140
+ named.ino !== meta.ino ||
141
+ named.nlink !== 1)
142
+ throw (0, invalid_input_js_1.invalidInput)('Skill file changed while being read');
143
+ files.push({ path, relativePath: (0, node_path_1.relative)(base, path), bytes, mode: meta.mode & 0o111 });
144
+ total += bytes.length;
145
+ }
146
+ finally {
147
+ (0, node_fs_1.closeSync)(fd);
148
+ }
149
+ };
150
+ walk(base);
151
+ const text = files.find((file) => file.relativePath === 'SKILL.md')?.bytes.toString('utf8');
152
+ return { ...readMetadata(text), text: text, files };
153
+ }
154
+ function readMetadata(text) {
155
+ const frontmatter = text?.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/);
156
+ if (!frontmatter)
157
+ throw (0, invalid_input_js_1.invalidInput)('SKILL.md requires frontmatter name and description');
158
+ const metadata = (0, js_yaml_1.load)(frontmatter[1]);
159
+ if (!metadata ||
160
+ typeof metadata.name !== 'string' ||
161
+ typeof metadata.description !== 'string' ||
162
+ !metadata.description.trim())
163
+ throw (0, invalid_input_js_1.invalidInput)('SKILL.md requires frontmatter name and description');
164
+ validateName(metadata.name);
165
+ if (metadata.description.length > 2_000)
166
+ throw (0, invalid_input_js_1.invalidInput)('Skill description exceeds 2000 characters');
167
+ return { name: metadata.name, description: metadata.description.trim() };
168
+ }
169
+ /** Inventory reads file names/mtimes, and at most 16 KiB of SKILL.md frontmatter. */
170
+ function listFolder(folder, exact = false) {
171
+ const base = (0, node_fs_1.realpathSync)(folder);
172
+ if (exact && base !== folder)
173
+ throw (0, invalid_input_js_1.invalidInput)('Skill source changed into an alias');
174
+ const revision = (0, node_crypto_1.createHash)('sha256');
175
+ let count = 0;
176
+ let files = 0;
177
+ let total = 0;
178
+ const walk = (path) => {
179
+ if (++count > FILE_LIMIT * 2)
180
+ throw (0, invalid_input_js_1.invalidInput)('Skill has too many file/directory entries');
181
+ const meta = (0, node_fs_1.lstatSync)(path);
182
+ assertSourcePath(base, path);
183
+ revision.update(JSON.stringify([(0, node_path_1.relative)(base, path), meta.mtimeMs, meta.size]));
184
+ if (meta.isDirectory()) {
185
+ for (const name of entries(path, FILE_LIMIT * 2 - count))
186
+ walk((0, node_path_1.join)(path, name));
187
+ }
188
+ else if (!meta.isFile() || meta.nlink !== 1) {
189
+ throw (0, invalid_input_js_1.invalidInput)('Skill files must be regular files without hard links');
190
+ }
191
+ else {
192
+ if (++files > FILE_LIMIT || meta.size > FILE_BYTES || total + meta.size > TOTAL_BYTES)
193
+ throw (0, invalid_input_js_1.invalidInput)('Skill exceeds 128 files, 2 MiB per file or 8 MiB total');
194
+ if ((0, node_path_1.relative)(base, path) === 'SKILL.md' && meta.size > SKILL_MD_BYTES)
195
+ throw (0, invalid_input_js_1.invalidInput)('SKILL.md exceeds 64 KiB; keep long material in supporting files');
196
+ total += meta.size;
197
+ }
198
+ };
199
+ walk(base);
200
+ const path = (0, node_path_1.join)(base, 'SKILL.md');
201
+ const before = (0, node_fs_1.lstatSync)(path);
202
+ const fd = (0, node_fs_1.openSync)(path, node_fs_1.constants.O_RDONLY | NO_FOLLOW);
203
+ try {
204
+ const meta = (0, node_fs_1.fstatSync)(fd);
205
+ if (!meta.isFile() || meta.nlink !== 1 || meta.dev !== before.dev || meta.ino !== before.ino)
206
+ throw (0, invalid_input_js_1.invalidInput)('Skill file changed while being read');
207
+ const bytes = Buffer.alloc(Math.min(meta.size, FRONTMATTER_BYTES));
208
+ let offset = 0;
209
+ let text = '';
210
+ while (offset < bytes.length) {
211
+ const size = (0, node_fs_1.readSync)(fd, bytes, offset, Math.min(4096, bytes.length - offset), offset);
212
+ if (size === 0)
213
+ break;
214
+ offset += size;
215
+ text = bytes.subarray(0, offset).toString('utf8');
216
+ if (/^---\r?\n[\s\S]*?\r?\n---(?:\r?\n|$)/.test(text))
217
+ break;
218
+ }
219
+ const after = (0, node_fs_1.fstatSync)(fd);
220
+ const named = (0, node_fs_1.lstatSync)(path);
221
+ if (after.size !== meta.size ||
222
+ after.mtimeMs !== meta.mtimeMs ||
223
+ named.dev !== meta.dev ||
224
+ named.ino !== meta.ino)
225
+ throw (0, invalid_input_js_1.invalidInput)('Skill file changed while being read');
226
+ return { ...readMetadata(text), revision: revision.digest('hex') };
227
+ }
228
+ finally {
229
+ (0, node_fs_1.closeSync)(fd);
230
+ }
231
+ }
232
+ /** Published trees are sealed; never follow a link while making one removable. */
233
+ function removeVersion(path) {
234
+ const unseal = (path) => {
235
+ const meta = (0, node_fs_1.lstatSync)(path);
236
+ if (meta.isSymbolicLink())
237
+ return;
238
+ (0, node_fs_1.chmodSync)(path, meta.isDirectory() ? 0o755 : 0o644);
239
+ if (meta.isDirectory())
240
+ for (const name of entries(path))
241
+ unseal((0, node_path_1.join)(path, name));
242
+ };
243
+ unseal(path);
244
+ (0, node_fs_1.rmSync)(path, { recursive: true });
245
+ }
246
+ function createSkillStore(ports) {
247
+ const personalScopes = (id) => id === ports.commonPrincipalId ? [] : [{ kind: 'user', id }];
248
+ const workflowScopes = (id) => [
249
+ ...ports.commonScopes(),
250
+ ...personalScopes(id),
251
+ ];
252
+ const isCommon = (record) => record.scopes.some((scope) => ports.commonScopes().some((common) => common.kind === scope.kind && common.id === scope.id));
253
+ const workflows = async (id) => (await (0, mama_core_1.readMemoryRecordsInScopes)(ports.adapter, workflowScopes(id), {
254
+ kind: 'workflow',
255
+ status: 'active',
256
+ excludeAmendments: true,
257
+ })).filter((record) => !(0, mama_core_1.isErasedRecord)(record));
258
+ const fileEntry = (skill, scope, path) => ({
259
+ id: `file:${scope}:${skill.name}`,
260
+ name: skill.name,
261
+ description: skill.description,
262
+ kind: 'file',
263
+ scope,
264
+ path,
265
+ ...(skill.revision === undefined ? {} : { revision: skill.revision }),
266
+ });
267
+ const commonRoot = () => ports.paths?.toolsRoot ? (0, node_path_1.join)(ports.paths.toolsRoot, 'skills') : undefined;
268
+ /** The host alone creates these links; source skills never contain a link. */
269
+ const publishedFolder = (name) => {
270
+ validateName(name);
271
+ const root = commonRoot();
272
+ if (!root)
273
+ throw skillDenied();
274
+ (0, tools_paths_js_1.assertOwnedDirectory)(root);
275
+ const pointer = (0, node_path_1.join)(root, name);
276
+ const meta = (0, node_fs_1.lstatSync)(pointer);
277
+ if (!meta.isSymbolicLink() || meta.uid !== process.getuid?.())
278
+ throw (0, invalid_input_js_1.invalidInput)('Common skill must have a host-owned publication link');
279
+ const target = (0, node_fs_1.readlinkSync)(pointer);
280
+ if ((0, node_path_1.isAbsolute)(target) ||
281
+ !target.startsWith(`.versions/${name}-`) ||
282
+ target.split('/').length !== 2)
283
+ throw (0, invalid_input_js_1.invalidInput)('Common skill publication escapes its version folder');
284
+ const folder = (0, node_path_1.join)(root, target);
285
+ (0, tools_paths_js_1.assertOwnedDirectory)((0, node_path_1.join)(root, '.versions'));
286
+ (0, tools_paths_js_1.assertOwnedDirectory)(folder);
287
+ if (!within((0, node_fs_1.realpathSync)((0, node_path_1.join)(root, '.versions')), (0, node_fs_1.realpathSync)(folder)))
288
+ throw (0, invalid_input_js_1.invalidInput)('Common skill publication escapes its version folder');
289
+ return folder;
290
+ };
291
+ const list = async (id) => {
292
+ const skills = (await workflows(id)).map((record) => ({
293
+ id: record.id,
294
+ name: record.topic,
295
+ topic: record.topic,
296
+ description: record.summary,
297
+ applies_when: record.applies_when,
298
+ kind: 'workflow',
299
+ scope: isCommon(record) ? 'common' : 'personal',
300
+ }));
301
+ const invalid = (scope, name, path, error) => {
302
+ const message = error instanceof Error ? error.message : String(error);
303
+ skills.push({
304
+ id: `file:${scope}:${name}`,
305
+ name,
306
+ kind: 'file',
307
+ scope,
308
+ path,
309
+ description: `Invalid skill: ${message}`,
310
+ error: message,
311
+ });
312
+ if (scope === 'common')
313
+ console.error('[Skills] Common folder host error', path, message);
314
+ };
315
+ const listFiles = (scope, parent, folder) => {
316
+ let names;
317
+ try {
318
+ if ((0, node_fs_1.lstatSync)(parent).isSymbolicLink())
319
+ throw (0, invalid_input_js_1.invalidInput)('Skills folder must not be a symlink');
320
+ names = entries(parent);
321
+ if (scope === 'common')
322
+ (0, tools_paths_js_1.assertOwnedDirectory)(parent);
323
+ }
324
+ catch (error) {
325
+ if (!missing(error))
326
+ invalid(scope, 'skills', parent, error);
327
+ return;
328
+ }
329
+ for (const name of names) {
330
+ if (!NAME.test(name))
331
+ continue;
332
+ try {
333
+ const meta = (0, node_fs_1.lstatSync)((0, node_path_1.join)(parent, name));
334
+ if (!meta.isDirectory() && !meta.isSymbolicLink())
335
+ continue;
336
+ const skill = listFolder(folder(name), scope === 'personal');
337
+ if (skill.name !== name)
338
+ throw (0, invalid_input_js_1.invalidInput)('Skill frontmatter name must match its folder');
339
+ skills.push(fileEntry(skill, scope, (0, node_path_1.join)(parent, name)));
340
+ }
341
+ catch (error) {
342
+ invalid(scope, name, (0, node_path_1.join)(parent, name), error);
343
+ }
344
+ }
345
+ };
346
+ if (ports.paths && id !== ports.commonPrincipalId) {
347
+ try {
348
+ const workspace = ports.paths.workspace(id);
349
+ listFiles('personal', (0, node_path_1.join)(workspace, 'skills'), (name) => personalFolder(workspace, name));
350
+ }
351
+ catch (error) {
352
+ invalid('personal', 'skills', 'skills', error);
353
+ }
354
+ }
355
+ const root = commonRoot();
356
+ if (root)
357
+ listFiles('common', root, publishedFolder);
358
+ return skills.sort((a, b) => a.scope.localeCompare(b.scope) || a.name.localeCompare(b.name) || a.id.localeCompare(b.id));
359
+ };
360
+ const read = async (id, skillId) => {
361
+ if (skillId.startsWith('file:')) {
362
+ const match = /^file:(personal|common):([^:]+)$/.exec(skillId);
363
+ if (!match || !ports.paths)
364
+ throw skillDenied();
365
+ const scope = match[1];
366
+ const name = match[2];
367
+ if (scope === 'personal' && id === ports.commonPrincipalId)
368
+ throw skillDenied();
369
+ const folder = scope === 'personal'
370
+ ? personalFolder(ports.paths.workspace(id), name)
371
+ : publishedFolder(name);
372
+ const skill = readFolder(folder, scope === 'personal');
373
+ if (skill.name !== name)
374
+ throw (0, invalid_input_js_1.invalidInput)('Skill frontmatter name must match its folder');
375
+ return {
376
+ ...fileEntry(skill, scope, folder),
377
+ text: skill.text,
378
+ files: skill.files.map(({ path, relativePath, bytes }) => ({
379
+ path,
380
+ relativePath,
381
+ size: bytes.length,
382
+ })),
383
+ };
384
+ }
385
+ const record = (await workflows(id)).find((record) => record.id === skillId);
386
+ if (!record)
387
+ throw skillDenied();
388
+ return {
389
+ ...record,
390
+ name: record.topic,
391
+ description: record.summary,
392
+ scope: isCommon(record) ? 'common' : 'personal',
393
+ };
394
+ };
395
+ const installed = () => {
396
+ const root = ports.paths?.toolsRoot;
397
+ if (!root)
398
+ throw (0, invalid_input_js_1.invalidInput)('Common file skills require tools_root; run mama tools install on the host');
399
+ (0, tools_paths_js_1.assertToolsOwnership)(root);
400
+ try {
401
+ (0, tools_paths_js_1.assertOwnedDirectory)(root);
402
+ const marker = (0, node_path_1.join)(root, '.mama-document-toolkit');
403
+ const meta = (0, node_fs_1.lstatSync)(marker);
404
+ if (!meta.isFile() ||
405
+ meta.uid !== process.getuid?.() ||
406
+ (0, node_fs_1.readFileSync)(marker, 'utf8') !== 'mama-document-toolkit-v1\n')
407
+ throw (0, invalid_input_js_1.invalidInput)('Common file skills require a managed toolkit; run mama tools install on the host');
408
+ }
409
+ catch (error) {
410
+ if (missing(error))
411
+ throw (0, invalid_input_js_1.invalidInput)('Common file skills require tools_root; run mama tools install on the host');
412
+ throw error;
413
+ }
414
+ return root;
415
+ };
416
+ const publish = (name) => {
417
+ validateName(name);
418
+ const tools = installed();
419
+ const source = personalFolder(ports.paths.workspace(ports.commonPrincipalId), name);
420
+ const skill = readFolder(source, true);
421
+ if (skill.name !== name)
422
+ throw (0, invalid_input_js_1.invalidInput)('Skill frontmatter name must match its folder');
423
+ const root = (0, node_path_1.join)(tools, 'skills');
424
+ const versions = (0, node_path_1.join)(root, '.versions');
425
+ createOwnedDirectory(root);
426
+ createOwnedDirectory(versions);
427
+ const version = `${name}-${(0, node_crypto_1.randomUUID)()}`;
428
+ const target = (0, node_path_1.join)(versions, version);
429
+ const pointer = (0, node_path_1.join)(root, name);
430
+ const temp = (0, node_path_1.join)(root, `.publish-${(0, node_crypto_1.randomUUID)()}`);
431
+ let previous;
432
+ try {
433
+ previous = publishedFolder(name);
434
+ }
435
+ catch (error) {
436
+ if (!missing(error))
437
+ throw error;
438
+ }
439
+ (0, node_fs_1.mkdirSync)(target, { mode: 0o755 });
440
+ try {
441
+ for (const file of skill.files) {
442
+ const path = (0, node_path_1.join)(target, file.relativePath);
443
+ (0, node_fs_1.mkdirSync)((0, node_path_1.resolve)(path, '..'), { recursive: true, mode: 0o755 });
444
+ (0, node_fs_1.writeFileSync)(path, file.bytes, { flag: 'wx', mode: file.mode ? 0o555 : 0o444 });
445
+ }
446
+ const seal = (path) => {
447
+ for (const entry of entries(path)) {
448
+ const child = (0, node_path_1.join)(path, entry);
449
+ if ((0, node_fs_1.lstatSync)(child).isDirectory())
450
+ seal(child);
451
+ }
452
+ (0, node_fs_1.chmodSync)(path, 0o555);
453
+ };
454
+ seal(target);
455
+ (0, node_fs_1.symlinkSync)((0, node_path_1.join)('.versions', version), temp);
456
+ (0, node_fs_1.renameSync)(temp, pointer); // One atomic replacement; readers see one complete immutable version.
457
+ }
458
+ catch (error) {
459
+ (0, node_fs_1.rmSync)(temp, { force: true });
460
+ removeVersion(target);
461
+ throw error;
462
+ }
463
+ pruneVersions(name, new Set([target, ...(previous ? [previous] : [])]));
464
+ return { name, path: pointer, status: 'published' };
465
+ };
466
+ const pruneVersions = (name, keep) => {
467
+ const versions = (0, node_path_1.join)(commonRoot(), '.versions');
468
+ (0, tools_paths_js_1.assertOwnedDirectory)(versions);
469
+ const versionName = new RegExp(`^${name.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$`);
470
+ // The shared store holds versions of every common skill, so it is not capped like one skill:
471
+ // stream it and collect only this skill's versions (at most a few) before removing them.
472
+ const stale = [];
473
+ const directory = (0, node_fs_1.opendirSync)(versions);
474
+ try {
475
+ for (let entry = directory.readSync(); entry !== null; entry = directory.readSync()) {
476
+ const path = (0, node_path_1.join)(versions, entry.name);
477
+ if (versionName.test(entry.name) && !keep.has(path))
478
+ stale.push(path);
479
+ }
480
+ }
481
+ finally {
482
+ directory.closeSync();
483
+ }
484
+ for (const path of stale) {
485
+ (0, tools_paths_js_1.assertOwnedDirectory)(path);
486
+ removeVersion(path);
487
+ }
488
+ };
489
+ const unpublish = (name) => {
490
+ validateName(name);
491
+ installed();
492
+ publishedFolder(name);
493
+ (0, node_fs_1.rmSync)((0, node_path_1.join)(commonRoot(), name));
494
+ pruneVersions(name, new Set());
495
+ return { name, status: 'unpublished' };
496
+ };
497
+ return { list, read, workflows, workflowScopes, publish, unpublish };
498
+ }
499
+ /**
500
+ * Full inventory is remembered locally; only capped names/descriptions reach a turn. `sources`,
501
+ * a DM's readable-sources line, goes with each full inventory: a new or stateless session and the
502
+ * first turn of each session after the host starts.
503
+ */
504
+ function createSkillTurnContext(list, sources) {
505
+ const sessions = new Map();
506
+ return async (isNewSession, stateless = false, sessionKey = 'runtime') => {
507
+ const previous = sessions.get(sessionKey);
508
+ const skills = await list();
509
+ const current = new Map(skills.map((skill) => [
510
+ `${skill.scope}:${skill.id}`,
511
+ { name: skill.name, revision: skill.revision },
512
+ ]));
513
+ const oneLine = (text) => text
514
+ .replace(/[\r\n<>]/g, ' ')
515
+ .replace(/\s+/g, ' ')
516
+ .slice(0, 180);
517
+ let text;
518
+ if (isNewSession || stateless || previous === undefined) {
519
+ const lines = [];
520
+ let size = 0;
521
+ for (const skill of skills.slice(0, 24)) {
522
+ const line = `- ${oneLine(skill.name)} (${skill.kind}, ${skill.scope}; skill.read ${skill.id}): ${oneLine(skill.description)}`;
523
+ if (size + line.length > 3_600)
524
+ break;
525
+ lines.push(line);
526
+ size += line.length + 1;
527
+ }
528
+ text = [
529
+ ...(sources ? [sources()] : []),
530
+ '[skills]',
531
+ ...lines,
532
+ ...(skills.length > lines.length
533
+ ? [`${skills.length - lines.length} more; use skill.list.`]
534
+ : []),
535
+ skills.length
536
+ ? 'Read the steps with skill.read; choose relevance yourself.'
537
+ : 'No skills saved yet; use skill.list to check later.',
538
+ ].join('\n');
539
+ }
540
+ else {
541
+ const added = [...current]
542
+ .filter(([id]) => !previous.has(id))
543
+ .map(([, skill]) => oneLine(skill.name));
544
+ const removed = [...previous]
545
+ .filter(([id]) => !current.has(id))
546
+ .map(([, skill]) => oneLine(skill.name));
547
+ const updated = [...current]
548
+ .filter(([id, skill]) => previous.has(id) && previous.get(id).revision !== skill.revision)
549
+ .map(([, skill]) => oneLine(skill.name));
550
+ text =
551
+ added.length || removed.length || updated.length
552
+ ? `[skills changed] added: ${added.slice(0, 24).join(', ') || 'none'}; removed: ${removed.slice(0, 24).join(', ') || 'none'}; updated: ${updated.slice(0, 24).join(', ') || 'none'}; use skill.list and skill.read.${added.length + removed.length + updated.length > 24 ? ' More changes in skill.list.' : ''}`
553
+ : '';
554
+ }
555
+ if (!stateless)
556
+ sessions.set(sessionKey, current);
557
+ return text;
558
+ };
559
+ }
560
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/runtime/skills.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { type PersonalJobStore } from './personal-jobs.js';
2
+ import { type NoticeRef, type PersonalNoticeStore } from './personal-notices.js';
1
3
  import { createSerialTurnChain } from './principal-sessions.js';
2
4
  import type { JsonValue } from '@jungjaehoon/mama-core/knowledge';
3
5
  import type { MailboxRow, Stimulus } from '@jungjaehoon/mama-core/runtime/mailbox';
@@ -31,8 +33,11 @@ export interface ScheduledInput {
31
33
  export interface StimulusIntake {
32
34
  accept(stimulus: Stimulus): StimulusReceipt;
33
35
  isPending?(sourceMessageRef: string): boolean;
36
+ /** The member whose room session took this common input, if one did. */
37
+ handedOffTo?(sourceMessageRef: string): string | undefined;
34
38
  acceptOwnerMessage(input: OwnerMessageInput): StimulusReceipt;
35
39
  recordOwnerReply(input: OwnerReplyInput): void;
40
+ hasOwnerMessage?(sourceMessageRef: string): boolean;
36
41
  acceptSourceDelta(delta: SourceDelta): StimulusReceipt;
37
42
  acceptScheduled(input: ScheduledInput): StimulusReceipt;
38
43
  }
@@ -61,7 +66,13 @@ export interface RecordOrderPort {
61
66
  export interface StimulusDeliveryOptions {
62
67
  backend: OwnerRuntimeBackend;
63
68
  turnChain?: ReturnType<typeof createSerialTurnChain>;
69
+ personalJobs?: PersonalJobStore;
70
+ personalNotices?: PersonalNoticeStore;
71
+ /** Re-read each candidate under current access, on the recipient's turn chain only. */
72
+ readNoticeRef?: (ref: NoticeRef) => Promise<boolean>;
73
+ retirePersonalJobText?: (operationId: string) => void;
64
74
  member?: {
75
+ principalId: string;
65
76
  sessionKey: string;
66
77
  voice: TurnVoice;
67
78
  };
@@ -71,8 +82,17 @@ export interface StimulusDeliveryOptions {
71
82
  notifications: string;
72
83
  };
73
84
  timeZone: TimeZoneSetting;
85
+ /** Resolve chat principal roles from the registry. */
86
+ principalRoles?: (principalId: string) => readonly string[];
87
+ principalDisplayName?: (principalId: string) => string | undefined;
88
+ commonPrincipalId?: string;
89
+ /** Re-check a recorded common-message sender before building its turn. */
90
+ ownerMessageSenderActive?: (principalId: string) => boolean;
91
+ rerouteOwnerMessage?: (row: MailboxRow, senderPrincipalId: string) => Promise<boolean>;
74
92
  /** Top lessons for a turn's text, most relevant first. */
75
93
  lessons?: (text: string) => Promise<readonly TurnLesson[]>;
94
+ /** A session-start skill inventory; subsequent turns get only set changes. */
95
+ skills?: (isNewSession: boolean, stateless: boolean, sessionKey: string) => Promise<string>;
76
96
  recordOrders?: RecordOrderPort;
77
97
  readResult?: (row: MailboxRow) => NativeTurnResultRecord | null;
78
98
  onUncertain?: StimulusDelivery['onUncertain'];
@@ -101,7 +121,7 @@ export interface ReplayClockDelivery extends StimulusDelivery {
101
121
  getReplaySourceEndMs(): number | undefined;
102
122
  }
103
123
  export declare function sourceDeltaStimulusId(delta: SourceDelta): string;
104
- export declare function createStimulusIntake(runtime: Pick<RuntimeHandle, 'accept' | 'mailbox'>, principalId: string, chat: Pick<ChatSources, 'saveOwnerMessage' | 'saveReply'>): StimulusIntake;
124
+ export declare function createStimulusIntake(runtime: Pick<RuntimeHandle, 'accept' | 'mailbox'>, principalId: string, chat: Pick<ChatSources, 'saveOwnerMessage' | 'saveReply'> & Partial<Pick<ChatSources, 'hasOwnerMessage'>>, roomChannel?: string): StimulusIntake;
105
125
  /** Render the Jev material without shortening or hiding any source line. */
106
126
  export declare function renderWindowQueue(queue: WindowQueue): string;
107
127
  /** One bounded log line; preserve the original thrown error for runtime settlement. */