@jungjaehoon/mama-os 0.69.0 → 0.71.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 +47 -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-share-actions.d.ts +16 -0
- package/dist/api/member-share-actions.d.ts.map +1 -0
- package/dist/api/member-share-actions.js +211 -0
- package/dist/api/member-share-actions.js.map +1 -0
- 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.map +1 -1
- package/dist/cli/commands/daemon.js +17 -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 +2 -2
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +25 -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 +7 -6
- package/dist/runtime/action-surface.d.ts.map +1 -1
- package/dist/runtime/action-surface.js +48 -19
- 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 +9 -3
- package/dist/runtime/owner-runtime.d.ts.map +1 -1
- package/dist/runtime/owner-runtime.js +126 -23
- package/dist/runtime/owner-runtime.js.map +1 -1
- package/dist/runtime/principal-access.d.ts.map +1 -1
- package/dist/runtime/principal-access.js +2 -2
- package/dist/runtime/principal-access.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,53 @@ 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.71.0] - 2026-10-09
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- `member_root` and a session per principal: each active member gets its own intake, session key,
|
|
13
|
+
agent id, workspace, downloads, Claude config directory and Codex home under `member_root`, on
|
|
14
|
+
the one shared serial chain; boot serves active members; a member session starts from its own
|
|
15
|
+
chat and holds no owner policy; Codex tool calls use the turn's access (#455).
|
|
16
|
+
- The member native boundary: Claude Read and Edit rules and the Bash sandbox, and the member's
|
|
17
|
+
Codex permission profile, deny the owner's home, owner data paths and other members' directories;
|
|
18
|
+
each member gets a short Claude temp root of its own. Members sign in with the owner's logins in
|
|
19
|
+
their own homes (#456).
|
|
20
|
+
- `deliver.telegram.file` in the member role: the file comes from the caller's own
|
|
21
|
+
`workspace/files` and goes only to the one Telegram DM the registry resolves for it; a hard link
|
|
22
|
+
or a path through a symlink is refused (#458).
|
|
23
|
+
- Each Claude member session binds its own deny-all proxy; a member's refused connection is stored
|
|
24
|
+
and alerted as principal, host and time only, grouped per member and host, and the security
|
|
25
|
+
viewer shows it as `member_connect` (#461).
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Owner rules are recognised by the writing principal, not by a messenger chat ref (#454).
|
|
30
|
+
- In a member turn, `memory.save` with `replaces` and `memory.retire` refuse a target not bound to
|
|
31
|
+
the member's personal scope alone (#457).
|
|
32
|
+
- The owner's chat reads use its own channels (stored chat channels with rows bound to the owner)
|
|
33
|
+
instead of a connector-wide read; the stored-source reader, `source.recent` and
|
|
34
|
+
`schedule.upcoming` use one access rule instead of owner exceptions; the owner's checkpoint list,
|
|
35
|
+
session-start source inventory and viewer memory stats run under its access (#459).
|
|
36
|
+
- The owner's native session denies the product database (with `-wal` and `-shm`), the raw
|
|
37
|
+
stores, `member_root` and the member temp root, logical and physical paths, on both backends;
|
|
38
|
+
boot refuses `agent.codex_cwd` inside the connectors directory (#460).
|
|
39
|
+
- A member's shell starts stay in `tool_traces`; they no longer reach the owner's alerts (#461).
|
|
40
|
+
|
|
41
|
+
## [0.70.0] - 2026-10-08
|
|
42
|
+
|
|
43
|
+
### Added
|
|
44
|
+
|
|
45
|
+
- The owner's write scopes include every partition a member grant ever named, re-read on each use;
|
|
46
|
+
`defaultScopes` is `ownerMemoryScopes`, so unscoped owner writes are unchanged for the daemon,
|
|
47
|
+
whose extra `scopes` are that same set. A caller passing other extra `scopes` no longer binds
|
|
48
|
+
them to unscoped writes (#451).
|
|
49
|
+
- `memory.share` in the member role (#452).
|
|
50
|
+
|
|
51
|
+
### Changed
|
|
52
|
+
|
|
53
|
+
- A member grant is refused against the owner's default scopes (#451).
|
|
54
|
+
|
|
8
55
|
## [0.69.0] - 2026-10-08
|
|
9
56
|
|
|
10
57
|
### 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.71.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,16 @@
|
|
|
1
|
+
import { type ActionRegistration, type DatabaseInstance, type MemoryScopeRef } from '@jungjaehoon/mama-core';
|
|
2
|
+
interface MemberSharePorts {
|
|
3
|
+
adapter: DatabaseInstance;
|
|
4
|
+
ownerPrincipalId: string;
|
|
5
|
+
ownerDefaultScopes: readonly MemoryScopeRef[];
|
|
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;
|
|
14
|
+
export declare function memberShareActionRegistrations(ports: MemberSharePorts): ActionRegistration[];
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=member-share-actions.d.ts.map
|
|
@@ -0,0 +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;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"}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.guardMemberSharedRecords = guardMemberSharedRecords;
|
|
4
|
+
exports.memberShareActionRegistrations = memberShareActionRegistrations;
|
|
5
|
+
const mama_core_1 = require("@jungjaehoon/mama-core");
|
|
6
|
+
const owner_authority_js_1 = require("../runtime/owner-authority.js");
|
|
7
|
+
const invalid_input_js_1 = require("../utils/invalid-input.js");
|
|
8
|
+
function denied(message) {
|
|
9
|
+
const error = new Error(message);
|
|
10
|
+
error.name = 'denied';
|
|
11
|
+
return error;
|
|
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
|
+
}
|
|
43
|
+
function revisionText(record) {
|
|
44
|
+
return {
|
|
45
|
+
id: record.id,
|
|
46
|
+
createdAt: record.created_at,
|
|
47
|
+
summary: record.summary,
|
|
48
|
+
details: record.details,
|
|
49
|
+
...(record.applies_when === undefined ? {} : { appliesWhen: record.applies_when }),
|
|
50
|
+
...(record.steps === undefined ? {} : { steps: record.steps }),
|
|
51
|
+
...(record.evidence_checks === undefined ? {} : { evidenceChecks: record.evidence_checks }),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function memberShareActionRegistrations(ports) {
|
|
55
|
+
return [
|
|
56
|
+
{
|
|
57
|
+
contract: {
|
|
58
|
+
name: 'memory.share',
|
|
59
|
+
recallableWrite: true,
|
|
60
|
+
summary: 'Share a personal memory record and its whole revision history at sharing time with a granted project partition, only in your own message turn. A later private revision needs another share. The original stays private; returns the appended share record id.',
|
|
61
|
+
inputSchema: {
|
|
62
|
+
type: 'object',
|
|
63
|
+
additionalProperties: false,
|
|
64
|
+
required: ['memory_id', 'partition_id', 'reason'],
|
|
65
|
+
properties: {
|
|
66
|
+
memory_id: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
pattern: '\\S',
|
|
69
|
+
description: 'Record bound only to your personal user scope.',
|
|
70
|
+
},
|
|
71
|
+
partition_id: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
pattern: '\\S',
|
|
74
|
+
description: 'Project partition id from your active memory read grants.',
|
|
75
|
+
},
|
|
76
|
+
reason: {
|
|
77
|
+
type: 'string',
|
|
78
|
+
pattern: '\\S',
|
|
79
|
+
description: 'Why you consent to sharing this record and its history.',
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
examples: [
|
|
84
|
+
{
|
|
85
|
+
title: 'Share a personal review history',
|
|
86
|
+
input: {
|
|
87
|
+
memory_id: 'fixture-memory',
|
|
88
|
+
partition_id: 'fixture-partition',
|
|
89
|
+
reason: 'Share the review history with the project.',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
exec: async (input, context) => {
|
|
95
|
+
const { memory_id: memoryId, partition_id: partitionId, reason, } = input;
|
|
96
|
+
if (!context.operationId?.trim())
|
|
97
|
+
throw (0, invalid_input_js_1.invalidInput)('memory.share requires operationId');
|
|
98
|
+
const repository = (0, mama_core_1.createPrincipalRepository)(ports.adapter);
|
|
99
|
+
const principal = repository.findById(context.access.principalId);
|
|
100
|
+
if (principal?.kind !== 'member' ||
|
|
101
|
+
principal.status !== 'active' ||
|
|
102
|
+
principal.principalId === ports.ownerPrincipalId)
|
|
103
|
+
throw denied('memory.share requires an active member; the owner shares by binding work');
|
|
104
|
+
// The same host-stated principal, chat ref and live-turn predicate as owner chat consent.
|
|
105
|
+
if (!(0, owner_authority_js_1.ownerSpeaking)(context, principal.principalId))
|
|
106
|
+
throw denied('memory.share is available only in the member own message turn');
|
|
107
|
+
if (ports.ownerDefaultScopes.some((scope) => scope.kind === 'project' && scope.id === partitionId))
|
|
108
|
+
throw denied('The partition is an owner default scope');
|
|
109
|
+
if (!repository
|
|
110
|
+
.listActiveGrants(principal.principalId)
|
|
111
|
+
.some(({ scope }) => scope.kind === 'memory' &&
|
|
112
|
+
scope.scopeKind === 'project' &&
|
|
113
|
+
scope.scopeId === partitionId))
|
|
114
|
+
throw denied('The partition requires an active project memory read grant');
|
|
115
|
+
const readable = [...context.access.scopes, ...(context.access.readScopes ?? [])];
|
|
116
|
+
const record = await (0, mama_core_1.readMemoryRecordById)(ports.adapter, memoryId, readable);
|
|
117
|
+
if (!record ||
|
|
118
|
+
'state' in record ||
|
|
119
|
+
record.scopes.length !== 1 ||
|
|
120
|
+
record.scopes[0].kind !== 'user' ||
|
|
121
|
+
record.scopes[0].id !== principal.principalId)
|
|
122
|
+
throw denied('The record must be bound only to the member personal user scope');
|
|
123
|
+
// The caller's operation id itself, so operation.get recovers a lost response.
|
|
124
|
+
const commandId = context.operationId;
|
|
125
|
+
// Only the current revision is shared; an earlier or stale one would reach readers as live.
|
|
126
|
+
// A recorded operation goes on to core's replay, which answers it whatever came after.
|
|
127
|
+
const recorded = ports.adapter
|
|
128
|
+
.prepare('SELECT 1 FROM command_bindings WHERE command_id = ?')
|
|
129
|
+
.get(commandId) !== undefined;
|
|
130
|
+
if (!recorded && record.status !== 'active')
|
|
131
|
+
throw (0, invalid_input_js_1.invalidInput)('Share the current revision of the record, not a replaced or stale one');
|
|
132
|
+
// Enumerate ids only, including every replaces branch and legacy supersedes. Read all
|
|
133
|
+
// content through the existing scope-checked record read, never through this metadata query.
|
|
134
|
+
const earlier = ports.adapter
|
|
135
|
+
.prepare(`
|
|
136
|
+
WITH RECURSIVE revisions(id) AS (
|
|
137
|
+
SELECT ?
|
|
138
|
+
UNION
|
|
139
|
+
SELECT d.supersedes FROM decisions d JOIN revisions r ON r.id = d.id
|
|
140
|
+
WHERE d.supersedes IS NOT NULL
|
|
141
|
+
UNION
|
|
142
|
+
SELECT e.object_id FROM twin_edges e JOIN revisions r ON r.id = e.subject_id
|
|
143
|
+
WHERE e.subject_kind = 'memory' AND e.object_kind = 'memory' AND e.edge_type = 'supersedes'
|
|
144
|
+
) SELECT id FROM revisions WHERE id <> ?`)
|
|
145
|
+
.all(record.id, record.id);
|
|
146
|
+
// Which revision each one replaced, and why, so branches and reasons survive in the share.
|
|
147
|
+
const replaced = (id) => {
|
|
148
|
+
const rows = ports.adapter
|
|
149
|
+
.prepare(`
|
|
150
|
+
SELECT d.supersedes AS id, NULL AS reason FROM decisions d
|
|
151
|
+
WHERE d.id = ? AND d.supersedes IS NOT NULL
|
|
152
|
+
UNION
|
|
153
|
+
SELECT e.object_id AS id, e.reason_text AS reason FROM twin_edges e
|
|
154
|
+
WHERE e.subject_kind = 'memory' AND e.subject_id = ? AND e.object_kind = 'memory'
|
|
155
|
+
AND e.edge_type = 'supersedes'
|
|
156
|
+
ORDER BY id`)
|
|
157
|
+
.all(id, id);
|
|
158
|
+
// A replacement can be recorded both as the column and as an edge; keep one per id.
|
|
159
|
+
const byId = new Map();
|
|
160
|
+
for (const row of rows)
|
|
161
|
+
byId.set(row.id, byId.get(row.id) ?? row.reason);
|
|
162
|
+
return [...byId].map(([predecessor, reason]) => ({ id: predecessor, reason }));
|
|
163
|
+
};
|
|
164
|
+
const revisions = [];
|
|
165
|
+
for (const { id } of earlier) {
|
|
166
|
+
const revision = await (0, mama_core_1.readMemoryRecordById)(ports.adapter, id, readable);
|
|
167
|
+
if (!revision || 'state' in revision)
|
|
168
|
+
throw denied('The whole revision history must be readable by the member before sharing');
|
|
169
|
+
revisions.push({ ...revisionText(revision), replaces: replaced(revision.id) });
|
|
170
|
+
}
|
|
171
|
+
// Legacy records carry ISO text timestamps; numbers and text both order by time.
|
|
172
|
+
const time = (value) => typeof value === 'number' ? value : Date.parse(value);
|
|
173
|
+
revisions.sort((a, b) => time(a.createdAt) - time(b.createdAt) || a.id.localeCompare(b.id));
|
|
174
|
+
const scopes = [
|
|
175
|
+
{ kind: 'user', id: principal.principalId },
|
|
176
|
+
{ kind: 'project', id: partitionId },
|
|
177
|
+
];
|
|
178
|
+
// This authority exists only for the append below; the ordinary member access stays intact.
|
|
179
|
+
const shareAccess = {
|
|
180
|
+
principalId: principal.principalId,
|
|
181
|
+
agentId: context.access.agentId,
|
|
182
|
+
scopes,
|
|
183
|
+
defaultScopes: scopes,
|
|
184
|
+
actions: ['memory.share'],
|
|
185
|
+
};
|
|
186
|
+
return (0, mama_core_1.saveJudgmentRecord)(ports.adapter, {
|
|
187
|
+
topic: record.topic,
|
|
188
|
+
kind: 'fact',
|
|
189
|
+
summary: record.summary,
|
|
190
|
+
details: JSON.stringify({
|
|
191
|
+
memoryId: record.id,
|
|
192
|
+
partitionId,
|
|
193
|
+
reason,
|
|
194
|
+
current: { ...revisionText(record), replaces: replaced(record.id) },
|
|
195
|
+
revisions,
|
|
196
|
+
}),
|
|
197
|
+
scopes,
|
|
198
|
+
source: { package: 'mama-os', source_type: 'memory.share' },
|
|
199
|
+
links: [
|
|
200
|
+
{
|
|
201
|
+
relation: 'mentions',
|
|
202
|
+
target: { kind: 'memory', id: record.id },
|
|
203
|
+
attrs: { reason },
|
|
204
|
+
},
|
|
205
|
+
],
|
|
206
|
+
}, shareAccess, commandId, { ...context.session, toolName: 'memory.share' });
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=member-share-actions.js.map
|