@jungjaehoon/mama-os 0.70.0 → 0.72.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +46 -0
- package/README.md +1 -1
- package/dist/agent/claude-native-tool-policy.d.ts +2 -0
- package/dist/agent/claude-native-tool-policy.d.ts.map +1 -1
- package/dist/agent/claude-native-tool-policy.js +8 -0
- package/dist/agent/claude-native-tool-policy.js.map +1 -1
- package/dist/api/attachment-actions.d.ts +5 -1
- package/dist/api/attachment-actions.d.ts.map +1 -1
- package/dist/api/attachment-actions.js +19 -6
- package/dist/api/attachment-actions.js.map +1 -1
- package/dist/api/file-delivery.d.ts +14 -4
- package/dist/api/file-delivery.d.ts.map +1 -1
- package/dist/api/file-delivery.js +46 -5
- package/dist/api/file-delivery.js.map +1 -1
- package/dist/api/member-enrollment.d.ts +25 -0
- package/dist/api/member-enrollment.d.ts.map +1 -0
- package/dist/api/member-enrollment.js +117 -0
- package/dist/api/member-enrollment.js.map +1 -0
- package/dist/api/member-share-actions.d.ts +7 -0
- package/dist/api/member-share-actions.d.ts.map +1 -1
- package/dist/api/member-share-actions.js +31 -0
- package/dist/api/member-share-actions.js.map +1 -1
- package/dist/api/report-source-actions.d.ts +0 -1
- package/dist/api/report-source-actions.d.ts.map +1 -1
- package/dist/api/report-source-actions.js +13 -35
- package/dist/api/report-source-actions.js.map +1 -1
- package/dist/api/security-events.d.ts +7 -1
- package/dist/api/security-events.d.ts.map +1 -1
- package/dist/api/security-events.js +32 -0
- package/dist/api/security-events.js.map +1 -1
- package/dist/api/stored-source-reader.d.ts +0 -2
- package/dist/api/stored-source-reader.d.ts.map +1 -1
- package/dist/api/stored-source-reader.js +14 -14
- package/dist/api/stored-source-reader.js.map +1 -1
- package/dist/api/viewer-data.d.ts +3 -3
- package/dist/api/viewer-data.d.ts.map +1 -1
- package/dist/api/viewer-data.js +13 -7
- package/dist/api/viewer-data.js.map +1 -1
- package/dist/api/viewer-server.d.ts +1 -0
- package/dist/api/viewer-server.d.ts.map +1 -1
- package/dist/api/viewer-server.js +6 -1
- package/dist/api/viewer-server.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +1 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +31 -2
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/runtime/action-mcp-config.d.ts +4 -0
- package/dist/cli/runtime/action-mcp-config.d.ts.map +1 -1
- package/dist/cli/runtime/action-mcp-config.js +15 -4
- package/dist/cli/runtime/action-mcp-config.js.map +1 -1
- package/dist/cli/runtime/claude-caller-config.d.ts +1 -1
- package/dist/cli/runtime/claude-caller-config.d.ts.map +1 -1
- package/dist/cli/runtime/claude-caller-config.js +2 -2
- package/dist/cli/runtime/claude-caller-config.js.map +1 -1
- package/dist/connectors/framework/stored-index-read.d.ts +8 -2
- package/dist/connectors/framework/stored-index-read.d.ts.map +1 -1
- package/dist/connectors/framework/stored-index-read.js +32 -4
- package/dist/connectors/framework/stored-index-read.js.map +1 -1
- package/dist/gateways/telegram.d.ts +11 -2
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +131 -11
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/runtime/action-mcp-server.d.ts +1 -0
- package/dist/runtime/action-mcp-server.d.ts.map +1 -1
- package/dist/runtime/action-mcp-server.js +16 -5
- package/dist/runtime/action-mcp-server.js.map +1 -1
- package/dist/runtime/action-surface.d.ts +11 -7
- package/dist/runtime/action-surface.d.ts.map +1 -1
- package/dist/runtime/action-surface.js +39 -14
- package/dist/runtime/action-surface.js.map +1 -1
- package/dist/runtime/backend-security.d.ts +10 -0
- package/dist/runtime/backend-security.d.ts.map +1 -1
- package/dist/runtime/backend-security.js +86 -0
- package/dist/runtime/backend-security.js.map +1 -1
- package/dist/runtime/config.d.ts +1 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +10 -0
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/egress-proxy.d.ts +3 -0
- package/dist/runtime/egress-proxy.d.ts.map +1 -1
- package/dist/runtime/egress-proxy.js +5 -0
- package/dist/runtime/egress-proxy.js.map +1 -1
- package/dist/runtime/member-paths.d.ts +26 -0
- package/dist/runtime/member-paths.d.ts.map +1 -0
- package/dist/runtime/member-paths.js +99 -0
- package/dist/runtime/member-paths.js.map +1 -0
- package/dist/runtime/member-session.d.ts +38 -0
- package/dist/runtime/member-session.d.ts.map +1 -0
- package/dist/runtime/member-session.js +157 -0
- package/dist/runtime/member-session.js.map +1 -0
- package/dist/runtime/member-system-prompt.d.ts +4 -0
- package/dist/runtime/member-system-prompt.d.ts.map +1 -0
- package/dist/runtime/member-system-prompt.js +12 -0
- package/dist/runtime/member-system-prompt.js.map +1 -0
- package/dist/runtime/native-session.d.ts +20 -0
- package/dist/runtime/native-session.d.ts.map +1 -1
- package/dist/runtime/native-session.js +105 -29
- package/dist/runtime/native-session.js.map +1 -1
- package/dist/runtime/outbound-attempts.d.ts +6 -1
- package/dist/runtime/outbound-attempts.d.ts.map +1 -1
- package/dist/runtime/outbound-attempts.js +3 -1
- package/dist/runtime/outbound-attempts.js.map +1 -1
- package/dist/runtime/owner-authority.d.ts +10 -6
- package/dist/runtime/owner-authority.d.ts.map +1 -1
- package/dist/runtime/owner-authority.js +19 -7
- package/dist/runtime/owner-authority.js.map +1 -1
- package/dist/runtime/owner-runtime.d.ts +13 -3
- package/dist/runtime/owner-runtime.d.ts.map +1 -1
- package/dist/runtime/owner-runtime.js +142 -23
- package/dist/runtime/owner-runtime.js.map +1 -1
- package/dist/runtime/principal-sessions.d.ts +20 -0
- package/dist/runtime/principal-sessions.d.ts.map +1 -0
- package/dist/runtime/principal-sessions.js +100 -0
- package/dist/runtime/principal-sessions.js.map +1 -0
- package/dist/runtime/session-credential.d.ts +1 -0
- package/dist/runtime/session-credential.d.ts.map +1 -1
- package/dist/runtime/session-credential.js +4 -1
- package/dist/runtime/session-credential.js.map +1 -1
- package/dist/runtime/stimulus-delivery.d.ts +7 -1
- package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
- package/dist/runtime/stimulus-delivery.js +12 -13
- package/dist/runtime/stimulus-delivery.js.map +1 -1
- package/dist/runtime/turn-orders.d.ts +13 -3
- package/dist/runtime/turn-orders.d.ts.map +1 -1
- package/dist/runtime/turn-orders.js +24 -14
- package/dist/runtime/turn-orders.js.map +1 -1
- package/package.json +2 -2
- package/public/viewer/log-viewer.html +5 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,52 @@ 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.72.0] - 2026-10-10
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `manage.member.enroll` in the owner role: callable only in the owner's own message turn (delta,
|
|
13
|
+
scheduled, report, replay, member and subagent turns are denied); takes no person, chat or
|
|
14
|
+
grants; refuses without `member_root`. The Telegram gateway sends the owner's DM a one-time
|
|
15
|
+
`request_users` keyboard, matches the `users_shared` reply in memory, and the host completes the
|
|
16
|
+
enrollment on the serial turn chain: it refuses the owner's own id, ids in `owner_user_ids` and
|
|
17
|
+
inactive members, registers or moves the identity, clears a new member's directory and temp root,
|
|
18
|
+
validates access and paths before commit, serves the member, and sends the owner a receipt
|
|
19
|
+
without the Telegram id (#463).
|
|
20
|
+
|
|
21
|
+
## [0.71.0] - 2026-10-09
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- `member_root` and a session per principal: each active member gets its own intake, session key,
|
|
26
|
+
agent id, workspace, downloads, Claude config directory and Codex home under `member_root`, on
|
|
27
|
+
the one shared serial chain; boot serves active members; a member session starts from its own
|
|
28
|
+
chat and holds no owner policy; Codex tool calls use the turn's access (#455).
|
|
29
|
+
- The member native boundary: Claude Read and Edit rules and the Bash sandbox, and the member's
|
|
30
|
+
Codex permission profile, deny the owner's home, owner data paths and other members' directories;
|
|
31
|
+
each member gets a short Claude temp root of its own. Members sign in with the owner's logins in
|
|
32
|
+
their own homes (#456).
|
|
33
|
+
- `deliver.telegram.file` in the member role: the file comes from the caller's own
|
|
34
|
+
`workspace/files` and goes only to the one Telegram DM the registry resolves for it; a hard link
|
|
35
|
+
or a path through a symlink is refused (#458).
|
|
36
|
+
- Each Claude member session binds its own deny-all proxy; a member's refused connection is stored
|
|
37
|
+
and alerted as principal, host and time only, grouped per member and host, and the security
|
|
38
|
+
viewer shows it as `member_connect` (#461).
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Owner rules are recognised by the writing principal, not by a messenger chat ref (#454).
|
|
43
|
+
- In a member turn, `memory.save` with `replaces` and `memory.retire` refuse a target not bound to
|
|
44
|
+
the member's personal scope alone (#457).
|
|
45
|
+
- The owner's chat reads use its own channels (stored chat channels with rows bound to the owner)
|
|
46
|
+
instead of a connector-wide read; the stored-source reader, `source.recent` and
|
|
47
|
+
`schedule.upcoming` use one access rule instead of owner exceptions; the owner's checkpoint list,
|
|
48
|
+
session-start source inventory and viewer memory stats run under its access (#459).
|
|
49
|
+
- The owner's native session denies the product database (with `-wal` and `-shm`), the raw
|
|
50
|
+
stores, `member_root` and the member temp root, logical and physical paths, on both backends;
|
|
51
|
+
boot refuses `agent.codex_cwd` inside the connectors directory (#460).
|
|
52
|
+
- A member's shell starts stay in `tool_traces`; they no longer reach the owner's alerts (#461).
|
|
53
|
+
|
|
8
54
|
## [0.70.0] - 2026-10-08
|
|
9
55
|
|
|
10
56
|
### 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.
|
|
7
|
+
Current manifest: **0.72.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
|
|
@@ -8,6 +8,8 @@
|
|
|
8
8
|
export declare function claudeOwnerAllowedTools(workspaceDir: string): string[];
|
|
9
9
|
/** CLI deny rules also govern native children; project permission rules are ignored in -p. */
|
|
10
10
|
export declare function claudeOwnerDisallowedTools(paths: readonly string[], workspaceDir: string): string[];
|
|
11
|
+
/** Member boundary also covers NotebookEdit through Edit; retain owner rules unchanged. */
|
|
12
|
+
export declare function claudeMemberDisallowedTools(paths: readonly string[], workspaceDir: string): string[];
|
|
11
13
|
export interface ClaudeToolRole {
|
|
12
14
|
allowedTools?: readonly string[];
|
|
13
15
|
blockedTools?: readonly string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-native-tool-policy.d.ts","sourceRoot":"","sources":["../../src/agent/claude-native-tool-policy.ts"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAYtE;AAED,8FAA8F;AAC9F,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAQV;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AASD,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAe7F"}
|
|
1
|
+
{"version":3,"file":"claude-native-tool-policy.d.ts","sourceRoot":"","sources":["../../src/agent/claude-native-tool-policy.ts"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAYtE;AAED,8FAA8F;AAC9F,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAQV;AAED,2FAA2F;AAC3F,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,YAAY,EAAE,MAAM,GACnB,MAAM,EAAE,CAKV;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAClC;AASD,2EAA2E;AAC3E,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAe7F"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.claudeOwnerAllowedTools = claudeOwnerAllowedTools;
|
|
4
4
|
exports.claudeOwnerDisallowedTools = claudeOwnerDisallowedTools;
|
|
5
|
+
exports.claudeMemberDisallowedTools = claudeMemberDisallowedTools;
|
|
5
6
|
exports.projectClaudeNativeTools = projectClaudeNativeTools;
|
|
6
7
|
/**
|
|
7
8
|
* Role tool names that resolve to Claude CLI builtin tools. Catalog/MCP actions
|
|
@@ -62,6 +63,13 @@ function claudeOwnerDisallowedTools(paths, workspaceDir) {
|
|
|
62
63
|
]),
|
|
63
64
|
];
|
|
64
65
|
}
|
|
66
|
+
/** Member boundary also covers NotebookEdit through Edit; retain owner rules unchanged. */
|
|
67
|
+
function claudeMemberDisallowedTools(paths, workspaceDir) {
|
|
68
|
+
return [
|
|
69
|
+
...claudeOwnerDisallowedTools(paths, workspaceDir),
|
|
70
|
+
...paths.flatMap((path) => [`Edit(/${path})`, `Edit(/${path}/**)`]),
|
|
71
|
+
];
|
|
72
|
+
}
|
|
65
73
|
function isBlocked(cliName, blocked) {
|
|
66
74
|
if (blocked.has(cliName))
|
|
67
75
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-native-tool-policy.js","sourceRoot":"","sources":["../../src/agent/claude-native-tool-policy.ts"],"names":[],"mappings":";;AAsCA,0DAYC;AAGD,gEAWC;AAeD,4DAeC;
|
|
1
|
+
{"version":3,"file":"claude-native-tool-policy.js","sourceRoot":"","sources":["../../src/agent/claude-native-tool-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,10 +7,14 @@ export interface AttachmentActionPorts {
|
|
|
7
7
|
connectors?: () => ConnectorRegistry | null;
|
|
8
8
|
workspaceDir?: string;
|
|
9
9
|
downloadsDir?: string;
|
|
10
|
+
principalPaths?: (principalId: string) => {
|
|
11
|
+
workspaceDir: string;
|
|
12
|
+
downloadsDir: string;
|
|
13
|
+
};
|
|
10
14
|
telegram?: () => OwnerFileSender | null;
|
|
11
15
|
discord?: () => OwnerFileSender | null;
|
|
12
16
|
slack?: () => OwnerFileSender | null;
|
|
13
17
|
}
|
|
14
18
|
export declare function safeFileName(name: string): string;
|
|
15
|
-
export declare function createAttachmentActionRegistrations(ports
|
|
19
|
+
export declare function createAttachmentActionRegistrations(ports: AttachmentActionPorts, ownerPrincipalId: string): ActionRegistration[];
|
|
16
20
|
//# sourceMappingURL=attachment-actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-actions.d.ts","sourceRoot":"","sources":["../../src/api/attachment-actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,kBAAkB,EAGnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAQvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;CACtC;AAqKD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYjD;AAyBD,wBAAgB,mCAAmC,CACjD,KAAK,
|
|
1
|
+
{"version":3,"file":"attachment-actions.d.ts","sourceRoot":"","sources":["../../src/api/attachment-actions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,kBAAkB,EAGnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAC;AAQvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACzF,QAAQ,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;CACtC;AAqKD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYjD;AAyBD,wBAAgB,mCAAmC,CACjD,KAAK,EAAE,qBAAqB,EAC5B,gBAAgB,EAAE,MAAM,GACvB,kBAAkB,EAAE,CAqItB"}
|
|
@@ -174,7 +174,7 @@ function workspaceFilesRoot(ports) {
|
|
|
174
174
|
throw new Error('Attachment workspace directory is not configured');
|
|
175
175
|
return (0, node_path_1.join)(ports.workspaceDir, 'files');
|
|
176
176
|
}
|
|
177
|
-
function createAttachmentActionRegistrations(ports
|
|
177
|
+
function createAttachmentActionRegistrations(ports, ownerPrincipalId) {
|
|
178
178
|
return [
|
|
179
179
|
{
|
|
180
180
|
contract: {
|
|
@@ -226,9 +226,10 @@ function createAttachmentActionRegistrations(ports = {}) {
|
|
|
226
226
|
if (!descriptor) {
|
|
227
227
|
throw new Error(`File ${fileId} does not belong to observation ${observation.observationRef} room ${roomId}`);
|
|
228
228
|
}
|
|
229
|
-
|
|
229
|
+
const downloadsDir = ports.principalPaths?.(context.access.principalId).downloadsDir ?? ports.downloadsDir;
|
|
230
|
+
if (!downloadsDir?.trim())
|
|
230
231
|
throw new Error('Attachment downloads directory is not configured');
|
|
231
|
-
const targetDir = (0, node_path_1.join)(
|
|
232
|
+
const targetDir = (0, node_path_1.join)(downloadsDir, observation.source, safeFileName(roomId));
|
|
232
233
|
(0, node_fs_1.mkdirSync)(targetDir, { recursive: true, mode: 0o700 });
|
|
233
234
|
const targetPath = (0, node_path_1.join)(targetDir, `${safeFileName(fileId)}_${safeFileName(descriptor.name)}`);
|
|
234
235
|
const downloaded = await provider.downloadAttachment({
|
|
@@ -256,7 +257,7 @@ function createAttachmentActionRegistrations(ports = {}) {
|
|
|
256
257
|
.map((messenger) => ({
|
|
257
258
|
contract: {
|
|
258
259
|
name: `deliver.${messenger}.file`,
|
|
259
|
-
summary: `Send one regular file under the
|
|
260
|
+
summary: `Send one regular file under the caller's workspace files directory through ${messenger}; images and documents use the messenger upload API.`,
|
|
260
261
|
inputSchema: ownerFileSchema,
|
|
261
262
|
examples: [
|
|
262
263
|
{ title: 'Send a workspace result', input: { path: '/workspace/files/result.xlsx' } },
|
|
@@ -273,9 +274,21 @@ function createAttachmentActionRegistrations(ports = {}) {
|
|
|
273
274
|
const sender = ports[messenger]?.();
|
|
274
275
|
if (!sender)
|
|
275
276
|
throw new Error(`${messenger} file delivery port is not configured`);
|
|
276
|
-
const
|
|
277
|
+
const isMember = context.access.principalId !== ownerPrincipalId;
|
|
278
|
+
// A member without its own paths must never inherit the owner's file authority.
|
|
279
|
+
if (isMember && !ports.principalPaths)
|
|
280
|
+
throw new Error('Member file delivery requires principal paths');
|
|
281
|
+
const filesRoot = workspaceFilesRoot(ports.principalPaths
|
|
282
|
+
? { workspaceDir: ports.principalPaths(context.access.principalId).workspaceDir }
|
|
283
|
+
: ports);
|
|
284
|
+
const validated = (0, file_delivery_js_1.validateWorkspaceFile)(filesRoot, path, file_delivery_js_1.OWNER_FILE_MAX_UPLOAD_BYTES, isMember);
|
|
277
285
|
const caption = values.caption === undefined ? undefined : String(values.caption);
|
|
278
|
-
const result =
|
|
286
|
+
const result = isMember && messenger === 'telegram'
|
|
287
|
+
? await sender.sendFile(validated.path, caption, context.operationId, {
|
|
288
|
+
access: context.access,
|
|
289
|
+
filesRoot,
|
|
290
|
+
})
|
|
291
|
+
: await sender.sendFile(validated.path, caption, context.operationId);
|
|
279
292
|
return { path: validated.path, ...result };
|
|
280
293
|
},
|
|
281
294
|
})),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attachment-actions.js","sourceRoot":"","sources":["../../src/api/attachment-actions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attachment-actions.js","sourceRoot":"","sources":["../../src/api/attachment-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { JudgmentAccess } from '@jungjaehoon/mama-core';
|
|
1
2
|
export declare const OWNER_FILE_MAX_UPLOAD_BYTES: number;
|
|
2
3
|
export declare const TELEGRAM_MAX_UPLOAD_BYTES: number;
|
|
3
4
|
export declare const TELEGRAM_MAX_PHOTO_BYTES: number;
|
|
@@ -9,7 +10,12 @@ export interface OwnerFileDeliveryResult {
|
|
|
9
10
|
idempotent?: boolean;
|
|
10
11
|
}
|
|
11
12
|
export interface OwnerFileSender {
|
|
12
|
-
sendFile(path: string, caption: string | undefined, operationId: string): Promise<TelegramFileDeliveryResult>;
|
|
13
|
+
sendFile(path: string, caption: string | undefined, operationId: string, member?: MemberFileDeliveryContext): Promise<TelegramFileDeliveryResult>;
|
|
14
|
+
}
|
|
15
|
+
/** Telegram-only host authority, resolved per call; never part of action input. */
|
|
16
|
+
export interface MemberFileDeliveryContext {
|
|
17
|
+
access: JudgmentAccess;
|
|
18
|
+
filesRoot: string;
|
|
13
19
|
}
|
|
14
20
|
export type TelegramFileDeliveryResult = OwnerFileDeliveryResult;
|
|
15
21
|
export type TelegramFileSender = OwnerFileSender;
|
|
@@ -18,9 +24,13 @@ export interface ValidatedWorkspaceFile {
|
|
|
18
24
|
size: number;
|
|
19
25
|
sentAs: 'photo' | 'document';
|
|
20
26
|
}
|
|
21
|
-
export declare function
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
export declare function openMemberWorkspaceFile(real: string): number;
|
|
28
|
+
export declare function validateWorkspaceFile(filesRoot: string, inputPath: string, maxBytes: number, member?: boolean): ValidatedWorkspaceFile;
|
|
29
|
+
/**
|
|
30
|
+
* Keep this descriptor open through upload so a later path replacement cannot change its bytes.
|
|
31
|
+
* member: reject symlink components and hard links before uploading with the daemon's authority.
|
|
32
|
+
*/
|
|
33
|
+
export declare function openWorkspaceFile(filesRoot: string, inputPath: string, maxBytes: number, member?: boolean): ValidatedWorkspaceFile & {
|
|
24
34
|
fd: number;
|
|
25
35
|
};
|
|
26
36
|
/** Read the validated descriptor without reopening its mutable pathname. The caller closes it. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-delivery.d.ts","sourceRoot":"","sources":["../../src/api/file-delivery.ts"],"names":[],"mappings":"AAaA,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,
|
|
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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TELEGRAM_IMAGE_EXTENSIONS = exports.TELEGRAM_MAX_PHOTO_BYTES = exports.TELEGRAM_MAX_UPLOAD_BYTES = exports.OWNER_FILE_MAX_UPLOAD_BYTES = void 0;
|
|
4
|
+
exports.openMemberWorkspaceFile = openMemberWorkspaceFile;
|
|
4
5
|
exports.validateWorkspaceFile = validateWorkspaceFile;
|
|
5
6
|
exports.openWorkspaceFile = openWorkspaceFile;
|
|
6
7
|
exports.readWorkspaceFile = readWorkspaceFile;
|
|
@@ -8,17 +9,55 @@ exports.workspaceFileIdentity = workspaceFileIdentity;
|
|
|
8
9
|
const node_fs_1 = require("node:fs");
|
|
9
10
|
const node_crypto_1 = require("node:crypto");
|
|
10
11
|
const node_path_1 = require("node:path");
|
|
12
|
+
// macOS <sys/fcntl.h>: reject symlinks in every path component, the last included. Combined with
|
|
13
|
+
// O_NOFOLLOW, open fails with EINVAL.
|
|
14
|
+
const O_NOFOLLOW_ANY = 0x20000000;
|
|
11
15
|
exports.OWNER_FILE_MAX_UPLOAD_BYTES = 50 * 1024 * 1024;
|
|
12
16
|
exports.TELEGRAM_MAX_UPLOAD_BYTES = exports.OWNER_FILE_MAX_UPLOAD_BYTES;
|
|
13
17
|
exports.TELEGRAM_MAX_PHOTO_BYTES = 10 * 1024 * 1024;
|
|
14
18
|
exports.TELEGRAM_IMAGE_EXTENSIONS = new Set(['.png', '.jpg', '.jpeg', '.webp', '.gif']);
|
|
15
|
-
function
|
|
16
|
-
|
|
19
|
+
function openMemberWorkspaceFile(real) {
|
|
20
|
+
let fd;
|
|
21
|
+
if (process.platform === 'darwin') {
|
|
22
|
+
try {
|
|
23
|
+
fd = (0, node_fs_1.openSync)(real, node_fs_1.constants.O_RDONLY | O_NOFOLLOW_ANY);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
if (error.code === 'ELOOP') {
|
|
27
|
+
throw new Error('path must not pass through a symlink');
|
|
28
|
+
}
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else if (process.platform === 'linux') {
|
|
33
|
+
fd = (0, node_fs_1.openSync)(real, node_fs_1.constants.O_RDONLY | node_fs_1.constants.O_NOFOLLOW);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
throw new Error('member file delivery is not supported on this platform');
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
if (process.platform === 'linux' && (0, node_fs_1.readlinkSync)(`/proc/self/fd/${fd}`) !== real) {
|
|
40
|
+
throw new Error('path must not pass through a symlink');
|
|
41
|
+
}
|
|
42
|
+
if ((0, node_fs_1.fstatSync)(fd).nlink !== 1)
|
|
43
|
+
throw new Error('path must not be a hard link');
|
|
44
|
+
return fd;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
(0, node_fs_1.closeSync)(fd);
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function validateWorkspaceFile(filesRoot, inputPath, maxBytes, member = false) {
|
|
52
|
+
const { fd, ...validated } = openWorkspaceFile(filesRoot, inputPath, maxBytes, member);
|
|
17
53
|
(0, node_fs_1.closeSync)(fd);
|
|
18
54
|
return validated;
|
|
19
55
|
}
|
|
20
|
-
/**
|
|
21
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Keep this descriptor open through upload so a later path replacement cannot change its bytes.
|
|
58
|
+
* member: reject symlink components and hard links before uploading with the daemon's authority.
|
|
59
|
+
*/
|
|
60
|
+
function openWorkspaceFile(filesRoot, inputPath, maxBytes, member = false) {
|
|
22
61
|
const rootPath = (0, node_path_1.resolve)(filesRoot);
|
|
23
62
|
const rootMetadata = (0, node_fs_1.lstatSync)(rootPath);
|
|
24
63
|
if (!rootMetadata.isDirectory() || rootMetadata.isSymbolicLink()) {
|
|
@@ -37,7 +76,9 @@ function openWorkspaceFile(filesRoot, inputPath, maxBytes) {
|
|
|
37
76
|
if (real === root || !real.startsWith(`${root}${node_path_1.sep}`)) {
|
|
38
77
|
throw new Error('path must stay under the workspace files directory');
|
|
39
78
|
}
|
|
40
|
-
const fd =
|
|
79
|
+
const fd = member
|
|
80
|
+
? openMemberWorkspaceFile(real)
|
|
81
|
+
: (0, node_fs_1.openSync)(real, node_fs_1.constants.O_RDONLY | node_fs_1.constants.O_NOFOLLOW);
|
|
41
82
|
try {
|
|
42
83
|
const opened = (0, node_fs_1.fstatSync)(fd);
|
|
43
84
|
if (!opened.isFile())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-delivery.js","sourceRoot":"","sources":["../../src/api/file-delivery.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"file-delivery.js","sourceRoot":"","sources":["../../src/api/file-delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ActionDispatcher, type ActionRegistration, type JudgmentAccess } from '@jungjaehoon/mama-core';
|
|
2
|
+
import type { DatabaseInstance } from '@jungjaehoon/mama-core/db-manager';
|
|
3
|
+
/** Transport facts supplied by the gateway only, never by action arguments. */
|
|
4
|
+
export interface MemberSelection {
|
|
5
|
+
sourceMessageRef: string;
|
|
6
|
+
ownerUserId: string;
|
|
7
|
+
userId: string;
|
|
8
|
+
}
|
|
9
|
+
export interface MemberEnrollmentPorts {
|
|
10
|
+
memberRoot?: string;
|
|
11
|
+
ownerUserIds: readonly string[];
|
|
12
|
+
requestSelection(sourceMessageRef: string): Promise<void>;
|
|
13
|
+
serveMember?(principalId: string): void;
|
|
14
|
+
}
|
|
15
|
+
export declare function createMemberEnrollment(options: {
|
|
16
|
+
adapter: DatabaseInstance;
|
|
17
|
+
ownerPrincipalId: string;
|
|
18
|
+
isOwnerMessageTurn(sourceMessageRef: string): boolean;
|
|
19
|
+
ownerAccess(): JudgmentAccess;
|
|
20
|
+
ports?: MemberEnrollmentPorts;
|
|
21
|
+
}): {
|
|
22
|
+
registration: ActionRegistration;
|
|
23
|
+
complete: (selection: MemberSelection, dispatch: ActionDispatcher) => Promise<import("@jungjaehoon/mama-core").ActionResult>;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=member-enrollment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-enrollment.d.ts","sourceRoot":"","sources":["../../src/api/member-enrollment.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAK1E,+EAA+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,WAAW,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC;IACtD,WAAW,IAAI,cAAc,CAAC;IAC9B,KAAK,CAAC,EAAE,qBAAqB,CAAC;CAC/B;;0BAsH+B,eAAe,YAAY,gBAAgB;EAgB1E"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMemberEnrollment = createMemberEnrollment;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const node_fs_1 = require("node:fs");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const mama_core_1 = require("@jungjaehoon/mama-core");
|
|
8
|
+
const backend_security_js_1 = require("../runtime/backend-security.js");
|
|
9
|
+
const member_paths_js_1 = require("../runtime/member-paths.js");
|
|
10
|
+
const principal_access_js_1 = require("../runtime/principal-access.js");
|
|
11
|
+
function createMemberEnrollment(options) {
|
|
12
|
+
// A completion exists only while a host-issued dispatcher operation is executing.
|
|
13
|
+
const completions = new Map();
|
|
14
|
+
const registration = {
|
|
15
|
+
contract: {
|
|
16
|
+
name: 'manage.member.enroll',
|
|
17
|
+
summary: "Ask the owner to pick one member with a Telegram button in the owner's DM. Only an owner message turn may request enrollment; delta, scheduled, replay, member and subagent turns are denied. Requires member_root and a daemon restart after configuring it. The host registers the selected identity; this action accepts no person, chat or grants. Returns pending; enrollment grants no shared access and does not admit member messages.",
|
|
18
|
+
inputSchema: { type: 'object', additionalProperties: false, properties: {} },
|
|
19
|
+
examples: [{ title: 'Ask the owner to choose a member', input: {} }],
|
|
20
|
+
},
|
|
21
|
+
exec: async (_input, context) => {
|
|
22
|
+
const ref = context.session?.sourceMessageRef;
|
|
23
|
+
if (context.access.principalId !== options.ownerPrincipalId ||
|
|
24
|
+
context.session?.replaySourceEndMs !== undefined ||
|
|
25
|
+
!ref ||
|
|
26
|
+
!options.isOwnerMessageTurn(ref)) {
|
|
27
|
+
throw Object.assign(new Error('Enrollment is available only in an owner message turn'), {
|
|
28
|
+
name: 'denied',
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const ports = options.ports;
|
|
32
|
+
if (!ports)
|
|
33
|
+
throw Object.assign(new Error("Enrollment requires Telegram as the owner's messenger"), {
|
|
34
|
+
name: 'denied',
|
|
35
|
+
});
|
|
36
|
+
if (!ports.memberRoot)
|
|
37
|
+
throw Object.assign(new Error('Set member_root and restart the daemon before enrollment'), {
|
|
38
|
+
name: 'denied',
|
|
39
|
+
});
|
|
40
|
+
const selection = context.operationId ? completions.get(context.operationId) : undefined;
|
|
41
|
+
if (!selection) {
|
|
42
|
+
await ports.requestSelection(ref);
|
|
43
|
+
return { status: 'pending' };
|
|
44
|
+
}
|
|
45
|
+
const repo = (0, mama_core_1.createPrincipalRepository)(options.adapter);
|
|
46
|
+
const current = repo.resolveByExternal('telegram', 'private', selection.userId);
|
|
47
|
+
const receipt = (status, principalId, message) => ({
|
|
48
|
+
status,
|
|
49
|
+
principalId,
|
|
50
|
+
connector: 'telegram',
|
|
51
|
+
namespace: 'private',
|
|
52
|
+
...(message ? { message } : {}),
|
|
53
|
+
});
|
|
54
|
+
if (selection.userId === selection.ownerUserId)
|
|
55
|
+
return receipt('refused', options.ownerPrincipalId, "The owner's own identity cannot be enrolled");
|
|
56
|
+
if (ports.ownerUserIds.includes(selection.userId))
|
|
57
|
+
return receipt('refused', current?.principalId ?? null, 'Remove the selected identity from Telegram owner_user_ids and restart the daemon first');
|
|
58
|
+
if (current && current.status !== 'active')
|
|
59
|
+
return receipt('refused', current.principalId, `The selected principal is ${current.status}`);
|
|
60
|
+
if (current?.kind === 'member') {
|
|
61
|
+
ports.serveMember?.(current.principalId);
|
|
62
|
+
return receipt('exists', current.principalId);
|
|
63
|
+
}
|
|
64
|
+
if (current && current.principalId !== options.ownerPrincipalId)
|
|
65
|
+
return receipt('refused', current.principalId, 'The selected identity belongs to another owner');
|
|
66
|
+
const principalId = options.adapter.transaction(() => {
|
|
67
|
+
const identity = {
|
|
68
|
+
connector: 'telegram',
|
|
69
|
+
namespace: 'private',
|
|
70
|
+
externalId: selection.userId,
|
|
71
|
+
now: Date.now(),
|
|
72
|
+
};
|
|
73
|
+
const id = current
|
|
74
|
+
? repo.moveIdentityToMember({
|
|
75
|
+
...identity,
|
|
76
|
+
expectedPrincipalId: options.ownerPrincipalId,
|
|
77
|
+
})
|
|
78
|
+
: repo.registerMember(identity);
|
|
79
|
+
(0, principal_access_js_1.resolvePrincipalAccess)(id, {
|
|
80
|
+
adapter: options.adapter,
|
|
81
|
+
ownerAccess: options.ownerAccess(),
|
|
82
|
+
agentId: `member-agent:${id}`,
|
|
83
|
+
});
|
|
84
|
+
// Validate the old smoke paths before removing anything, including symlink containment.
|
|
85
|
+
const paths = (0, member_paths_js_1.ensureMemberPaths)(ports.memberRoot, id);
|
|
86
|
+
const temp = (0, member_paths_js_1.memberClaudeTmpDir)(id);
|
|
87
|
+
const expectedTemp = (0, node_path_1.join)((0, backend_security_js_1.physicalReadPath)((0, node_path_1.dirname)(backend_security_js_1.MEMBER_CLAUDE_TMP_PARENT)), (0, node_path_1.basename)(backend_security_js_1.MEMBER_CLAUDE_TMP_PARENT), (0, node_path_1.basename)(temp));
|
|
88
|
+
if ((0, backend_security_js_1.physicalReadPath)(temp) !== expectedTemp)
|
|
89
|
+
throw new Error('Member temp path must not be a symlink');
|
|
90
|
+
(0, node_fs_1.rmSync)(paths.runtimeRoot, { recursive: true, force: true });
|
|
91
|
+
(0, node_fs_1.rmSync)(temp, { recursive: true, force: true });
|
|
92
|
+
(0, member_paths_js_1.ensureMemberPaths)(ports.memberRoot, id);
|
|
93
|
+
(0, node_fs_1.mkdirSync)(temp, { recursive: true, mode: 0o700 });
|
|
94
|
+
return id;
|
|
95
|
+
});
|
|
96
|
+
ports.serveMember?.(principalId);
|
|
97
|
+
return receipt('created', principalId);
|
|
98
|
+
},
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
registration,
|
|
102
|
+
complete: async (selection, dispatch) => {
|
|
103
|
+
const operationId = `member-enrollment:${(0, node_crypto_1.randomUUID)()}`;
|
|
104
|
+
completions.set(operationId, selection);
|
|
105
|
+
try {
|
|
106
|
+
return await dispatch({ action: registration.contract.name, input: {}, operationId }, {
|
|
107
|
+
access: options.ownerAccess(),
|
|
108
|
+
session: { sourceMessageRef: selection.sourceMessageRef },
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
completions.delete(operationId);
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=member-enrollment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-enrollment.js","sourceRoot":"","sources":["../../src/api/member-enrollment.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,13 @@ interface MemberSharePorts {
|
|
|
4
4
|
ownerPrincipalId: string;
|
|
5
5
|
ownerDefaultScopes: readonly MemoryScopeRef[];
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* A member changes shared records only in a group room, where the team sees it (owner decision
|
|
9
|
+
* 2026-10-09). Until group-room turns exist (P10), a member turn replaces or retires only records
|
|
10
|
+
* bound to its own personal scope alone; sharing one stays allowed. A record with no binding is
|
|
11
|
+
* not the member's either. The owner is unchanged; a missing record is left to core.
|
|
12
|
+
*/
|
|
13
|
+
export declare function guardMemberSharedRecords(registration: ActionRegistration, adapter: DatabaseInstance, ownerPrincipalId: string): ActionRegistration;
|
|
7
14
|
export declare function memberShareActionRegistrations(ports: MemberSharePorts): ActionRegistration[];
|
|
8
15
|
export {};
|
|
9
16
|
//# sourceMappingURL=member-share-actions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-share-actions.d.ts","sourceRoot":"","sources":["../../src/api/member-share-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAGrB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAIhC,UAAU,gBAAgB;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,SAAS,cAAc,EAAE,CAAC;CAC/C;
|
|
1
|
+
{"version":3,"file":"member-share-actions.d.ts","sourceRoot":"","sources":["../../src/api/member-share-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAGrB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAIhC,UAAU,gBAAgB;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,SAAS,cAAc,EAAE,CAAC;CAC/C;AAQD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,kBAAkB,EAChC,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,EAAE,MAAM,GACvB,kBAAkB,CA+BpB;AAcD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,gBAAgB,GAAG,kBAAkB,EAAE,CAiM5F"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.guardMemberSharedRecords = guardMemberSharedRecords;
|
|
3
4
|
exports.memberShareActionRegistrations = memberShareActionRegistrations;
|
|
4
5
|
const mama_core_1 = require("@jungjaehoon/mama-core");
|
|
5
6
|
const owner_authority_js_1 = require("../runtime/owner-authority.js");
|
|
@@ -9,6 +10,36 @@ function denied(message) {
|
|
|
9
10
|
error.name = 'denied';
|
|
10
11
|
return error;
|
|
11
12
|
}
|
|
13
|
+
/**
|
|
14
|
+
* A member changes shared records only in a group room, where the team sees it (owner decision
|
|
15
|
+
* 2026-10-09). Until group-room turns exist (P10), a member turn replaces or retires only records
|
|
16
|
+
* bound to its own personal scope alone; sharing one stays allowed. A record with no binding is
|
|
17
|
+
* not the member's either. The owner is unchanged; a missing record is left to core.
|
|
18
|
+
*/
|
|
19
|
+
function guardMemberSharedRecords(registration, adapter, ownerPrincipalId) {
|
|
20
|
+
const action = registration.contract.name;
|
|
21
|
+
return {
|
|
22
|
+
...registration,
|
|
23
|
+
exec: async (input, context) => {
|
|
24
|
+
const principalId = context.access.principalId;
|
|
25
|
+
if (principalId !== ownerPrincipalId) {
|
|
26
|
+
for (const id of (0, owner_authority_js_1.amendedRecordIds)(action, input)) {
|
|
27
|
+
const bindings = adapter
|
|
28
|
+
.prepare(`SELECT s.kind, s.external_id FROM decisions d
|
|
29
|
+
LEFT JOIN memory_scope_bindings b ON b.memory_id = d.id
|
|
30
|
+
LEFT JOIN memory_scopes s ON s.id = b.scope_id
|
|
31
|
+
WHERE d.id = ?`)
|
|
32
|
+
.all(id);
|
|
33
|
+
if (bindings.length > 0 &&
|
|
34
|
+
!bindings.every((binding) => binding.kind === 'user' && binding.external_id === principalId))
|
|
35
|
+
throw denied(`${id} is not only yours: shared records change in the group room, not in this ` +
|
|
36
|
+
'chat. Save your own note instead, or raise it in the group room.');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return await registration.exec(input, context);
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
12
43
|
function revisionText(record) {
|
|
13
44
|
return {
|
|
14
45
|
id: record.id,
|