@jungjaehoon/mama-os 0.73.0 → 0.74.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 (49) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +1 -1
  3. package/dist/api/file-delivery.d.ts +1 -0
  4. package/dist/api/file-delivery.d.ts.map +1 -1
  5. package/dist/api/file-delivery.js +3 -3
  6. package/dist/api/file-delivery.js.map +1 -1
  7. package/dist/api/member-export.d.ts +32 -0
  8. package/dist/api/member-export.d.ts.map +1 -0
  9. package/dist/api/member-export.js +232 -0
  10. package/dist/api/member-export.js.map +1 -0
  11. package/dist/api/member-lifecycle.d.ts +2 -0
  12. package/dist/api/member-lifecycle.d.ts.map +1 -1
  13. package/dist/api/member-lifecycle.js +19 -1
  14. package/dist/api/member-lifecycle.js.map +1 -1
  15. package/dist/api/member-records.d.ts +38 -0
  16. package/dist/api/member-records.d.ts.map +1 -0
  17. package/dist/api/member-records.js +379 -0
  18. package/dist/api/member-records.js.map +1 -0
  19. package/dist/cli/commands/daemon.d.ts +1 -0
  20. package/dist/cli/commands/daemon.d.ts.map +1 -1
  21. package/dist/cli/commands/daemon.js +10 -1
  22. package/dist/cli/commands/daemon.js.map +1 -1
  23. package/dist/gateways/telegram-message-ledger.d.ts +4 -0
  24. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
  25. package/dist/gateways/telegram-message-ledger.js +21 -0
  26. package/dist/gateways/telegram-message-ledger.js.map +1 -1
  27. package/dist/gateways/telegram.d.ts +7 -2
  28. package/dist/gateways/telegram.d.ts.map +1 -1
  29. package/dist/gateways/telegram.js +90 -48
  30. package/dist/gateways/telegram.js.map +1 -1
  31. package/dist/gateways/turn-contract.d.ts +5 -0
  32. package/dist/gateways/turn-contract.d.ts.map +1 -1
  33. package/dist/runtime/action-surface.d.ts +5 -2
  34. package/dist/runtime/action-surface.d.ts.map +1 -1
  35. package/dist/runtime/action-surface.js +11 -0
  36. package/dist/runtime/action-surface.js.map +1 -1
  37. package/dist/runtime/owner-runtime.d.ts +6 -0
  38. package/dist/runtime/owner-runtime.d.ts.map +1 -1
  39. package/dist/runtime/owner-runtime.js +91 -15
  40. package/dist/runtime/owner-runtime.js.map +1 -1
  41. package/dist/runtime/principal-sessions.d.ts +10 -4
  42. package/dist/runtime/principal-sessions.d.ts.map +1 -1
  43. package/dist/runtime/principal-sessions.js +44 -14
  44. package/dist/runtime/principal-sessions.js.map +1 -1
  45. package/dist/storage/source-archive.d.ts +3 -0
  46. package/dist/storage/source-archive.d.ts.map +1 -1
  47. package/dist/storage/source-archive.js +29 -0
  48. package/dist/storage/source-archive.js.map +1 -1
  49. package/package.json +5 -4
package/CHANGELOG.md CHANGED
@@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.74.0] - 2026-10-11
9
+
10
+ ### Added
11
+
12
+ - `records.export` and `records.erase` for members (own message turn only; no principal input;
13
+ owner, delta, scheduled, replay and subagent turns are denied). An export runs after its turn and
14
+ sends one zip to the member's registered DM (50 MiB): the member's core and chat records and the
15
+ files of its runtime, temp and retired trees, never credentials or host account files; links that
16
+ leave the member's trees are named and left out; one export per member at a time. `records.erase`
17
+ previews counts and issues a single-use token; a later member message confirms it. After that turn
18
+ settles the host retires the member, sends the export and, once Telegram accepts it and the files
19
+ are unchanged, deletes the member's trees, chat index, core records (B1), chat raw rows and DM
20
+ ledger entries, then serves the member again and records a plain receipt in its chat. Failed,
21
+ oversized or uncertain deliveries erase nothing (#471).
22
+ - Host receipts to a registered member DM (`TelegramGateway.sendMemberText`) (#471).
23
+ - Dependency `fflate` 0.8.3 for the export zip (#471).
24
+
25
+ ### Changed
26
+
27
+ - The owner's conversation record keeps each enrollment selection and its receipt (#468).
28
+ - `manage.member.list` returns `recentEnrollments` (#469) with owner-local times and the zone
29
+ named (#470).
30
+ - The shared turn chain can run host work next and hold its slot until an input settles; only an
31
+ erasure pauses claims while it runs (#471).
32
+
8
33
  ## [0.73.0] - 2026-10-10
9
34
 
10
35
  ### Added
package/README.md CHANGED
@@ -4,7 +4,7 @@ One owner agent on Claude or Codex watches connected work, keeps task revisions
4
4
  answers on Telegram, publishes reports and a board, and recalls corrections.
5
5
  [mama-core](../mama-core/README.md) supplies the shared engine.
6
6
 
7
- Current manifest: **0.73.0**. Install with `npm install -g @jungjaehoon/mama-os` (Node.js 22.13+)
7
+ Current manifest: **0.74.0**. Install with `npm install -g @jungjaehoon/mama-os` (Node.js 22.13+)
8
8
  and follow [owner setup](../../docs/start/owner-setup.md).
9
9
 
10
10
  ## Start and operate
@@ -1,4 +1,5 @@
1
1
  import type { JudgmentAccess } from '@jungjaehoon/mama-core';
2
+ export declare const O_NOFOLLOW_ANY = 536870912;
2
3
  export declare const OWNER_FILE_MAX_UPLOAD_BYTES: number;
3
4
  export declare const TELEGRAM_MAX_UPLOAD_BYTES: number;
4
5
  export declare const TELEGRAM_MAX_PHOTO_BYTES: number;
@@ -1 +1 @@
1
- {"version":3,"file":"file-delivery.d.ts","sourceRoot":"","sources":["../../src/api/file-delivery.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAM7D,eAAO,MAAM,2BAA2B,QAAmB,CAAC;AAC5D,eAAO,MAAM,yBAAyB,QAA8B,CAAC;AACrE,eAAO,MAAM,wBAAwB,QAAmB,CAAC;AACzD,eAAO,MAAM,yBAAyB,aAAsD,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,yBAAyB,GACjC,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACxC;AAED,mFAAmF;AACnF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;CAC9B;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0B5D;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,UAAQ,GACb,sBAAsB,CAIxB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,UAAQ,GACb,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CA2CzC;AAED,kGAAkG;AAClG,wBAAuB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAW3E;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAY1E"}
1
+ {"version":3,"file":"file-delivery.d.ts","sourceRoot":"","sources":["../../src/api/file-delivery.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAI7D,eAAO,MAAM,cAAc,YAAa,CAAC;AAEzC,eAAO,MAAM,2BAA2B,QAAmB,CAAC;AAC5D,eAAO,MAAM,yBAAyB,QAA8B,CAAC;AACrE,eAAO,MAAM,wBAAwB,QAAmB,CAAC;AACzD,eAAO,MAAM,yBAAyB,aAAsD,CAAC;AAE7F,MAAM,WAAW,uBAAuB;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CACN,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,yBAAyB,GACjC,OAAO,CAAC,0BAA0B,CAAC,CAAC;CACxC;AAED,mFAAmF;AACnF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,cAAc,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AACjE,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,GAAG,UAAU,CAAC;CAC9B;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA0B5D;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,UAAQ,GACb,sBAAsB,CAIxB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,MAAM,UAAQ,GACb,sBAAsB,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CA2CzC;AAED,kGAAkG;AAClG,wBAAuB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAW3E;AAED,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAY1E"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TELEGRAM_IMAGE_EXTENSIONS = exports.TELEGRAM_MAX_PHOTO_BYTES = exports.TELEGRAM_MAX_UPLOAD_BYTES = exports.OWNER_FILE_MAX_UPLOAD_BYTES = void 0;
3
+ exports.TELEGRAM_IMAGE_EXTENSIONS = exports.TELEGRAM_MAX_PHOTO_BYTES = exports.TELEGRAM_MAX_UPLOAD_BYTES = exports.OWNER_FILE_MAX_UPLOAD_BYTES = exports.O_NOFOLLOW_ANY = void 0;
4
4
  exports.openMemberWorkspaceFile = openMemberWorkspaceFile;
5
5
  exports.validateWorkspaceFile = validateWorkspaceFile;
6
6
  exports.openWorkspaceFile = openWorkspaceFile;
@@ -11,7 +11,7 @@ const node_crypto_1 = require("node:crypto");
11
11
  const node_path_1 = require("node:path");
12
12
  // macOS <sys/fcntl.h>: reject symlinks in every path component, the last included. Combined with
13
13
  // O_NOFOLLOW, open fails with EINVAL.
14
- const O_NOFOLLOW_ANY = 0x20000000;
14
+ exports.O_NOFOLLOW_ANY = 0x20000000;
15
15
  exports.OWNER_FILE_MAX_UPLOAD_BYTES = 50 * 1024 * 1024;
16
16
  exports.TELEGRAM_MAX_UPLOAD_BYTES = exports.OWNER_FILE_MAX_UPLOAD_BYTES;
17
17
  exports.TELEGRAM_MAX_PHOTO_BYTES = 10 * 1024 * 1024;
@@ -20,7 +20,7 @@ function openMemberWorkspaceFile(real) {
20
20
  let fd;
21
21
  if (process.platform === 'darwin') {
22
22
  try {
23
- fd = (0, node_fs_1.openSync)(real, node_fs_1.constants.O_RDONLY | O_NOFOLLOW_ANY);
23
+ fd = (0, node_fs_1.openSync)(real, node_fs_1.constants.O_RDONLY | exports.O_NOFOLLOW_ANY);
24
24
  }
25
25
  catch (error) {
26
26
  if (error.code === 'ELOOP') {
@@ -1 +1 @@
1
- {"version":3,"file":"file-delivery.js","sourceRoot":"","sources":["../../src/api/file-delivery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"file-delivery.js","sourceRoot":"","sources":["../../src/api/file-delivery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export declare function memberTrees(root: string, id: string): string[];
2
+ export interface MemberExportFile {
3
+ path: string;
4
+ name: string;
5
+ size: number;
6
+ dev: number;
7
+ ino: number;
8
+ mtimeMs: number;
9
+ nlink: number;
10
+ eligible: boolean;
11
+ privateManaged: boolean;
12
+ }
13
+ export declare function memberFileInventory(root: string, id: string): {
14
+ trees: string[];
15
+ allFiles: MemberExportFile[];
16
+ files: MemberExportFile[];
17
+ omittedFiles: string[];
18
+ links: Map<string, number>;
19
+ };
20
+ /** Include files left out of the ZIP: erasure removes those links and managed files too. */
21
+ export declare function memberInventorySnapshot(inventory: ReturnType<typeof memberFileInventory>, omittedFiles?: readonly string[]): string;
22
+ /** Build a bounded archive off the model turn. The caller owns delivery and final removal. */
23
+ export declare function buildMemberExport(root: string, id: string, core: unknown, product: unknown): Promise<{
24
+ path: string;
25
+ filesRoot: string;
26
+ size: number;
27
+ fileCount: number;
28
+ fileBytes: number;
29
+ omittedFiles: string[];
30
+ fileSnapshot: string;
31
+ }>;
32
+ //# sourceMappingURL=member-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-export.d.ts","sourceRoot":"","sources":["../../src/api/member-export.ts"],"names":[],"mappings":"AAgCA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB9D;AACD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;CACzB;AAKD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM;;;;;;EA+E3D;AAED,4FAA4F;AAC5F,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,EACjD,YAAY,GAAE,SAAS,MAAM,EAA2B,GACvD,MAAM,CAOR;AAMD,8FAA8F;AAC9F,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;;;;;;;;GAwGhG"}
@@ -0,0 +1,232 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.memberTrees = memberTrees;
4
+ exports.memberFileInventory = memberFileInventory;
5
+ exports.memberInventorySnapshot = memberInventorySnapshot;
6
+ exports.buildMemberExport = buildMemberExport;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = require("node:path");
10
+ const fflate_1 = require("fflate");
11
+ const member_paths_js_1 = require("../runtime/member-paths.js");
12
+ const backend_security_js_1 = require("../runtime/backend-security.js");
13
+ const file_delivery_js_1 = require("./file-delivery.js");
14
+ const archiveSuffix = '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}';
15
+ /** Installed Claude 2.1.293's history storage rewrites history.jsonl; installed Codex's
16
+ * codex_message_history (message-history/src/lib.rs) writes history.jsonl under CODEX_HOME.
17
+ * Config homes are assigned in native-session.ts. No account/config/credential file is admitted. */
18
+ const managedHistoryFiles = new Set([
19
+ 'claude-config/history.jsonl',
20
+ '.codex/history.jsonl',
21
+ 'runtime/client-journal.jsonl',
22
+ ]);
23
+ const managedRoots = new Set(['claude-config', '.codex', 'codex-runtime', 'runtime']);
24
+ function memberTrees(root, id) {
25
+ const temp = (0, member_paths_js_1.memberClaudeTmpDir)(id);
26
+ const escaped = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
27
+ const archives = (parent, identity) => (0, node_fs_1.existsSync)(parent)
28
+ ? (0, node_fs_1.readdirSync)(parent)
29
+ .filter((name) => new RegExp(`^\\.retired-${escaped(identity)}-${archiveSuffix}$`).test(name))
30
+ .map((name) => (0, node_path_1.join)(parent, name))
31
+ : [];
32
+ return [
33
+ (0, member_paths_js_1.memberPaths)(root, id).runtimeRoot,
34
+ temp,
35
+ ...archives(root, id),
36
+ ...archives((0, node_path_1.dirname)(temp), (0, node_path_1.basename)(temp)),
37
+ ]
38
+ .filter(node_fs_1.existsSync)
39
+ .map((path) => (0, node_path_1.join)((0, backend_security_js_1.physicalReadPath)((0, node_path_1.dirname)(path)), (0, node_path_1.basename)(path)));
40
+ }
41
+ // Every ZIP entry costs at least its local and central headers (30 + 46 bytes) and its name twice,
42
+ // so a tree whose entries alone pass the upload limit cannot be exported. Charging every walked
43
+ // entry that cost bounds the walk before it holds an unbounded inventory.
44
+ const ZIP_ENTRY_HEADER_BYTES = 30 + 46;
45
+ function memberFileInventory(root, id) {
46
+ const allFiles = [];
47
+ const symlinks = [];
48
+ let walked = 0;
49
+ const walk = (path, name, runtimeRoot) => {
50
+ walked += ZIP_ENTRY_HEADER_BYTES + 2 * Buffer.byteLength(name);
51
+ if (walked > file_delivery_js_1.OWNER_FILE_MAX_UPLOAD_BYTES)
52
+ throw new Error(`Member files hold too many entries for one export (over ${file_delivery_js_1.OWNER_FILE_MAX_UPLOAD_BYTES} bytes of ZIP headers alone)`);
53
+ const stat = (0, node_fs_1.lstatSync)(path);
54
+ if (stat.isSymbolicLink()) {
55
+ // Never followed; named so the member knows the export left it out.
56
+ symlinks.push(name);
57
+ return;
58
+ }
59
+ if (stat.isDirectory()) {
60
+ for (const entry of (0, node_fs_1.readdirSync)(path).sort())
61
+ walk((0, node_path_1.join)(path, entry), `${name}/${entry}`, runtimeRoot);
62
+ }
63
+ else if (stat.isFile()) {
64
+ const local = runtimeRoot === undefined ? undefined : (0, node_path_1.relative)(runtimeRoot, path);
65
+ let eligible = true;
66
+ let privateManaged = false;
67
+ if (local !== undefined) {
68
+ if (managedRoots.has(local.split('/')[0])) {
69
+ eligible =
70
+ managedHistoryFiles.has(local) ||
71
+ local.startsWith('claude-config/projects/') ||
72
+ local.startsWith('.codex/sessions/');
73
+ privateManaged = !eligible;
74
+ }
75
+ else if (local === 'workspace/.tmp' || local.startsWith('workspace/.tmp/'))
76
+ eligible = false;
77
+ else if (new RegExp(`^workspace/files/member-export-${archiveSuffix}\\.zip$`).test(local))
78
+ eligible = false;
79
+ }
80
+ allFiles.push({
81
+ path,
82
+ name,
83
+ size: stat.size,
84
+ dev: stat.dev,
85
+ ino: stat.ino,
86
+ mtimeMs: stat.mtimeMs,
87
+ nlink: stat.nlink,
88
+ eligible,
89
+ privateManaged,
90
+ });
91
+ }
92
+ // Never follow a link or try to open a socket/FIFO found by the walk.
93
+ };
94
+ const live = (0, member_paths_js_1.memberPaths)(root, id).runtimeRoot;
95
+ const trees = memberTrees(root, id);
96
+ for (const tree of trees)
97
+ walk(tree, `files/${(0, node_path_1.basename)(tree)}`, tree === live ? tree : (0, node_path_1.dirname)(tree) === root ? (0, node_path_1.join)(tree, 'runtime') : undefined);
98
+ const links = new Map();
99
+ for (const file of allFiles) {
100
+ const key = `${file.dev}:${file.ino}`;
101
+ links.set(key, (links.get(key) ?? 0) + 1);
102
+ }
103
+ // A workspace alias of an account/credential inode must obey the managed-directory deny.
104
+ const privateInodes = new Set(allFiles.filter((file) => file.privateManaged).map((file) => `${file.dev}:${file.ino}`));
105
+ const omittedFiles = [...symlinks];
106
+ const files = allFiles.filter((file) => {
107
+ if (!file.eligible)
108
+ return false;
109
+ if ((links.get(`${file.dev}:${file.ino}`) ?? 0) < file.nlink ||
110
+ privateInodes.has(`${file.dev}:${file.ino}`)) {
111
+ omittedFiles.push(file.name);
112
+ return false;
113
+ }
114
+ return true;
115
+ });
116
+ return { trees, allFiles, files, omittedFiles, links };
117
+ }
118
+ /** Include files left out of the ZIP: erasure removes those links and managed files too. */
119
+ function memberInventorySnapshot(inventory, omittedFiles = inventory.omittedFiles) {
120
+ return JSON.stringify({
121
+ files: inventory.allFiles
122
+ .map(({ path, dev, ino, size, mtimeMs, nlink }) => ({ path, dev, ino, size, mtimeMs, nlink }))
123
+ .sort((a, b) => a.path.localeCompare(b.path)),
124
+ omittedFiles: [...omittedFiles].sort(),
125
+ });
126
+ }
127
+ const oversized = (size) => new Error(`Member export is ${size} bytes; Telegram limit is ${file_delivery_js_1.OWNER_FILE_MAX_UPLOAD_BYTES} bytes (50 MiB)`);
128
+ /** Build a bounded archive off the model turn. The caller owns delivery and final removal. */
129
+ async function buildMemberExport(root, id, core, product) {
130
+ const inventory = memberFileInventory(root, id);
131
+ const json = [
132
+ ['core.json', (0, fflate_1.strToU8)(JSON.stringify(core))],
133
+ ['product.json', (0, fflate_1.strToU8)(JSON.stringify(product))],
134
+ ];
135
+ const predicted = inventory.files.reduce((n, file) => n + file.size, 0) +
136
+ json.reduce((n, [, bytes]) => n + bytes.length, 0);
137
+ if (predicted > file_delivery_js_1.OWNER_FILE_MAX_UPLOAD_BYTES)
138
+ throw oversized(predicted);
139
+ const filesRoot = (0, node_path_1.join)((0, member_paths_js_1.memberPaths)(root, id).workspaceDir, 'files');
140
+ if ((0, backend_security_js_1.physicalReadPath)(filesRoot) !== (0, node_path_1.resolve)(filesRoot))
141
+ throw new Error('Member export output directory must not be a symlink');
142
+ (0, node_fs_1.mkdirSync)(filesRoot, { recursive: true, mode: 0o700 });
143
+ const path = (0, node_path_1.join)(filesRoot, `member-export-${(0, node_crypto_1.randomUUID)()}.zip`);
144
+ // Refuse a link in any component at creation, not only in the file name: the directory was
145
+ // checked above, but a swapped ancestor would otherwise place the archive outside the member.
146
+ const output = (0, node_fs_1.openSync)(path, node_fs_1.constants.O_WRONLY |
147
+ node_fs_1.constants.O_CREAT |
148
+ node_fs_1.constants.O_EXCL |
149
+ (process.platform === 'darwin' ? file_delivery_js_1.O_NOFOLLOW_ANY : node_fs_1.constants.O_NOFOLLOW), 0o600);
150
+ if (process.platform === 'linux' && (0, node_fs_1.readlinkSync)(`/proc/self/fd/${output}`) !== path) {
151
+ (0, node_fs_1.closeSync)(output);
152
+ throw new Error('Member export output directory changed while the archive was created');
153
+ }
154
+ let size = 0, finished = false, fileCount = 0, fileBytes = 0;
155
+ const omittedFiles = [...inventory.omittedFiles];
156
+ const zip = new fflate_1.Zip((error, chunk, final) => {
157
+ if (error)
158
+ throw error;
159
+ if (size + chunk.length > file_delivery_js_1.OWNER_FILE_MAX_UPLOAD_BYTES)
160
+ throw oversized(size + chunk.length);
161
+ let offset = 0;
162
+ while (offset < chunk.length) {
163
+ const written = (0, node_fs_1.writeSync)(output, chunk, offset, chunk.length - offset);
164
+ if (written <= 0)
165
+ throw new Error('Member export write made no progress');
166
+ offset += written;
167
+ size += written;
168
+ }
169
+ finished = final;
170
+ });
171
+ try {
172
+ for (const [name, bytes] of json) {
173
+ const entry = new fflate_1.ZipDeflate(name, { level: 6 });
174
+ zip.add(entry);
175
+ entry.push(bytes, true);
176
+ }
177
+ const buffer = Buffer.alloc(64 * 1024);
178
+ for (const file of inventory.files) {
179
+ // Darwin rejects O_NOFOLLOW + O_NOFOLLOW_ANY together. ANY supplies the stronger deny,
180
+ // like file-delivery.ts; O_NONBLOCK prevents a raced-in FIFO from waiting for a writer.
181
+ const flags = node_fs_1.constants.O_RDONLY |
182
+ node_fs_1.constants.O_NONBLOCK |
183
+ (process.platform === 'darwin' ? file_delivery_js_1.O_NOFOLLOW_ANY : node_fs_1.constants.O_NOFOLLOW);
184
+ const input = (0, node_fs_1.openSync)(file.path, flags);
185
+ try {
186
+ if (process.platform === 'linux' && (0, node_fs_1.readlinkSync)(`/proc/self/fd/${input}`) !== file.path)
187
+ throw new Error(`Member export file path changed: ${file.name}`);
188
+ const stat = (0, node_fs_1.fstatSync)(input);
189
+ if (!stat.isFile() || stat.dev !== file.dev || stat.ino !== file.ino)
190
+ throw new Error(`Member export file changed: ${file.name}`);
191
+ if (stat.nlink > (inventory.links.get(`${file.dev}:${file.ino}`) ?? 0)) {
192
+ omittedFiles.push(file.name);
193
+ continue;
194
+ }
195
+ const entry = new fflate_1.ZipPassThrough(file.name);
196
+ zip.add(entry);
197
+ let count, bytes = 0;
198
+ while ((count = (0, node_fs_1.readSync)(input, buffer, 0, buffer.length, null)) > 0) {
199
+ entry.push(buffer.subarray(0, count));
200
+ bytes += count;
201
+ await new Promise((resume) => setImmediate(resume));
202
+ }
203
+ entry.push(new Uint8Array(), true);
204
+ fileCount++;
205
+ fileBytes += bytes;
206
+ }
207
+ finally {
208
+ (0, node_fs_1.closeSync)(input);
209
+ }
210
+ }
211
+ zip.end();
212
+ if (!finished)
213
+ throw new Error('Member export zip did not finish');
214
+ return {
215
+ path,
216
+ filesRoot,
217
+ size,
218
+ fileCount,
219
+ fileBytes,
220
+ omittedFiles,
221
+ fileSnapshot: memberInventorySnapshot(inventory, omittedFiles),
222
+ };
223
+ }
224
+ catch (error) {
225
+ (0, node_fs_1.rmSync)(path, { force: true });
226
+ throw error;
227
+ }
228
+ finally {
229
+ (0, node_fs_1.closeSync)(output);
230
+ }
231
+ }
232
+ //# sourceMappingURL=member-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-export.js","sourceRoot":"","sources":["../../src/api/member-export.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { type ActionRegistration, type JudgmentAccess } from '@jungjaehoon/mama-core';
2
2
  import type { DatabaseInstance } from '@jungjaehoon/mama-core/db-manager';
3
+ import type { TimeZoneSetting } from '../runtime/timezone.js';
3
4
  export declare const MEMBER_MANAGEMENT_ACTIONS: readonly ["manage.member.grant", "manage.member.revoke", "manage.member.suspend", "manage.member.resume", "manage.member.offboard", "manage.member.list"];
4
5
  export interface MemberLifecyclePorts {
5
6
  resetSession(principalId: string): Promise<void>;
@@ -13,6 +14,7 @@ export declare function memberLifecycleRegistrations(options: {
13
14
  ownerPrincipalId: string;
14
15
  ownerAccess(): JudgmentAccess;
15
16
  isOwnerMessageTurn(sourceMessageRef: string): boolean;
17
+ timeZone: TimeZoneSetting;
16
18
  ports?: MemberLifecyclePorts;
17
19
  }): ActionRegistration[];
18
20
  //# sourceMappingURL=member-lifecycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"member-lifecycle.d.ts","sourceRoot":"","sources":["../../src/api/member-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,eAAO,MAAM,yBAAyB,2JAO5B,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3D;AAED,8FAA8F;AAC9F,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,IAAI,cAAc,CAAC;IAC9B,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC;IACtD,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B,GAAG,kBAAkB,EAAE,CAyKvB"}
1
+ {"version":3,"file":"member-lifecycle.d.ts","sourceRoot":"","sources":["../../src/api/member-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,eAAO,MAAM,yBAAyB,2JAO5B,CAAC;AAEX,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CAC3D;AAED,8FAA8F;AAC9F,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACpD,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,IAAI,cAAc,CAAC;IAC9B,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC;IACtD,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,oBAAoB,CAAC;CAC9B,GAAG,kBAAkB,EAAE,CA6LvB"}
@@ -39,7 +39,7 @@ function memberLifecycleRegistrations(options) {
39
39
  suspend: 'Suspend an active member, end and unserve its session, and set its runtime directory aside under member_root and its temp directory aside under the member temp root. Keep grants and identity.',
40
40
  resume: 'Resume a suspended member with retained grants. Move any remaining runtime and temp directories aside and serve a fresh environment.',
41
41
  offboard: 'Permanently offboard an active or suspended member; revoke every grant atomically, end and unserve its session, move runtime/temp aside, and keep its identity binding.',
42
- list: 'List member principal ids, statuses and unrevoked grants, including grants retained during suspension. Never returns transport identities or record content.',
42
+ list: 'List member principal ids, statuses and unrevoked grants, including grants retained during suspension, and the latest enrollment receipts the owner received (created, exists or refused, with the reason). Receipts carry the owner-local time of each pick. Never returns transport identities or record content.',
43
43
  }[change] +
44
44
  ' Only the owner own message turn is allowed; delta, scheduled/report, replay, member and subagent turns are denied. Changes apply after the running member turn on the shared serial chain and cancel queued inputs with a host reason.',
45
45
  inputSchema: {
@@ -67,7 +67,25 @@ function memberLifecycleRegistrations(options) {
67
67
  }
68
68
  const repo = (0, mama_core_1.createPrincipalRepository)(options.adapter);
69
69
  if (change === 'list') {
70
+ const timeZone = options.timeZone.get();
71
+ // Each users_shared pick ends in a host receipt in the owner's conversation record; a
72
+ // refused or failed pick leaves no registry row, so the receipt is its only trace.
73
+ const enrollmentReceipts = options.adapter
74
+ .prepare(`SELECT m.source_timestamp_ms AS at, r.content AS receipt
75
+ FROM connector_event_index m
76
+ JOIN connector_event_index r ON r.source_connector = 'chat'
77
+ AND r.source_entity_id = m.source_entity_id || ':reply'
78
+ AND json_extract(r.metadata_json, '$.deliveryVerified') = 1
79
+ WHERE m.source_connector = 'chat' AND m.memory_scope_kind = 'user'
80
+ AND m.memory_scope_id = ?
81
+ AND json_extract(m.metadata_json, '$.input.enrollmentSelection') = 1
82
+ ORDER BY m.source_timestamp_ms DESC, m.rowid DESC LIMIT 5`)
83
+ .all(options.ownerPrincipalId);
70
84
  return {
85
+ recentEnrollments: enrollmentReceipts.map(({ at, receipt }) => ({
86
+ at: `${new Date(at).toLocaleString('ko-KR', { timeZone })} (${timeZone})`,
87
+ receipt,
88
+ })),
71
89
  members: repo.listMembers().map(({ principalId, status }) => ({
72
90
  principalId,
73
91
  status,
@@ -1 +1 @@
1
- {"version":3,"file":"member-lifecycle.js","sourceRoot":"","sources":["../../src/api/member-lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"member-lifecycle.js","sourceRoot":"","sources":["../../src/api/member-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { type ActionRegistration, type JudgmentAccess } from '@jungjaehoon/mama-core';
2
+ import type { DatabaseInstance } from '@jungjaehoon/mama-core/db-manager';
3
+ import type { Mailbox, MailboxRow } from '@jungjaehoon/mama-core/runtime/mailbox';
4
+ import type { RawStore } from '../storage/source-archive.js';
5
+ import type { OwnerMessageLedger } from '../gateways/telegram-message-ledger.js';
6
+ import type { createSerialTurnChain } from '../runtime/principal-sessions.js';
7
+ import type { TelegramFileSender } from './file-delivery.js';
8
+ export interface MemberRecordsTelegram extends TelegramFileSender {
9
+ sendMemberText(access: JudgmentAccess, text: string, operationId: string): Promise<boolean>;
10
+ }
11
+ export interface MemberRecordsPorts {
12
+ root: string;
13
+ rawStore: RawStore;
14
+ mailbox(): Mailbox;
15
+ ledger(): OwnerMessageLedger | undefined;
16
+ telegram(): MemberRecordsTelegram | undefined;
17
+ access(id: string): JudgmentAccess;
18
+ turnChain: ReturnType<typeof createSerialTurnChain>;
19
+ retire(id: string): Promise<void>;
20
+ serve(id: string): void;
21
+ isStopping(): boolean;
22
+ resumeQueued(): void;
23
+ recordExchange(id: string, kind: 'export' | 'erase', ref: string, text: string, deliveryVerified: boolean): void;
24
+ }
25
+ export declare function createMemberRecords(options: {
26
+ adapter: DatabaseInstance;
27
+ isMessageTurn(ref: string, principalId: string): boolean;
28
+ ports?: MemberRecordsPorts;
29
+ }): {
30
+ registrations: ActionRegistration[];
31
+ isBusy: () => boolean;
32
+ isBlocked: (id: string) => boolean;
33
+ onSettled: (row: MailboxRow) => void;
34
+ onDead: (row: MailboxRow, reason: string) => void;
35
+ onUncertain: (row: MailboxRow, reason: string) => void;
36
+ idle: () => Promise<void>;
37
+ };
38
+ //# sourceMappingURL=member-records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member-records.d.ts","sourceRoot":"","sources":["../../src/api/member-records.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAO7D,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7F;AACD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,IAAI,OAAO,CAAC;IACnB,MAAM,IAAI,kBAAkB,GAAG,SAAS,CAAC;IACzC,QAAQ,IAAI,qBAAqB,GAAG,SAAS,CAAC;IAC9C,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,CAAC;IACnC,SAAS,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IACpD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,UAAU,IAAI,OAAO,CAAC;IACtB,YAAY,IAAI,IAAI,CAAC;IACrB,cAAc,CACZ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,OAAO,GACxB,IAAI,CAAC;CACT;AA0ED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACzD,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B;;;oBAqUmB,MAAM;qBACL,UAAU;kBASb,UAAU,UAAU,MAAM;uBACrB,UAAU,UAAU,MAAM;;EAKhD"}