@jungjaehoon/mama-os 0.75.0 → 0.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +1 -1
- package/dist/api/code-act-actions.d.ts +3 -1
- package/dist/api/code-act-actions.d.ts.map +1 -1
- package/dist/api/code-act-actions.js +16 -7
- package/dist/api/code-act-actions.js.map +1 -1
- package/dist/api/document-actions.d.ts +13 -0
- package/dist/api/document-actions.d.ts.map +1 -0
- package/dist/api/document-actions.js +55 -0
- package/dist/api/document-actions.js.map +1 -0
- package/dist/api/member-enrollment.d.ts +7 -3
- package/dist/api/member-enrollment.d.ts.map +1 -1
- package/dist/api/member-enrollment.js +64 -16
- package/dist/api/member-enrollment.js.map +1 -1
- package/dist/api/member-export.d.ts.map +1 -1
- package/dist/api/member-export.js +14 -6
- package/dist/api/member-export.js.map +1 -1
- package/dist/api/member-lifecycle.d.ts +23 -4
- package/dist/api/member-lifecycle.d.ts.map +1 -1
- package/dist/api/member-lifecycle.js +88 -21
- package/dist/api/member-lifecycle.js.map +1 -1
- package/dist/api/member-notice-actions.d.ts +18 -0
- package/dist/api/member-notice-actions.d.ts.map +1 -0
- package/dist/api/member-notice-actions.js +184 -0
- package/dist/api/member-notice-actions.js.map +1 -0
- package/dist/api/member-records.d.ts +17 -2
- package/dist/api/member-records.d.ts.map +1 -1
- package/dist/api/member-records.js +440 -82
- package/dist/api/member-records.js.map +1 -1
- package/dist/api/member-share-actions.d.ts +3 -3
- package/dist/api/member-share-actions.d.ts.map +1 -1
- package/dist/api/member-share-actions.js +47 -20
- package/dist/api/member-share-actions.js.map +1 -1
- package/dist/api/owner-policy-actions.d.ts +1 -0
- package/dist/api/owner-policy-actions.d.ts.map +1 -1
- package/dist/api/owner-policy-actions.js +8 -4
- package/dist/api/owner-policy-actions.js.map +1 -1
- package/dist/api/owner-timezone-actions.d.ts +3 -2
- package/dist/api/owner-timezone-actions.d.ts.map +1 -1
- package/dist/api/owner-timezone-actions.js +4 -6
- package/dist/api/owner-timezone-actions.js.map +1 -1
- package/dist/api/personal-job-actions.d.ts +6 -0
- package/dist/api/personal-job-actions.d.ts.map +1 -0
- package/dist/api/personal-job-actions.js +72 -0
- package/dist/api/personal-job-actions.js.map +1 -0
- package/dist/api/security-events.d.ts +6 -1
- package/dist/api/security-events.d.ts.map +1 -1
- package/dist/api/security-events.js +34 -15
- package/dist/api/security-events.js.map +1 -1
- package/dist/api/skill-actions.d.ts +5 -0
- package/dist/api/skill-actions.d.ts.map +1 -0
- package/dist/api/skill-actions.js +66 -0
- package/dist/api/skill-actions.js.map +1 -0
- package/dist/api/source-actions.d.ts.map +1 -1
- package/dist/api/source-actions.js +4 -2
- package/dist/api/source-actions.js.map +1 -1
- package/dist/api/stored-source-reader.d.ts.map +1 -1
- package/dist/api/stored-source-reader.js +9 -2
- package/dist/api/stored-source-reader.js.map +1 -1
- package/dist/api/trello-actions.d.ts.map +1 -1
- package/dist/api/trello-actions.js +8 -2
- package/dist/api/trello-actions.js.map +1 -1
- package/dist/api/work-actions.d.ts +12 -2
- package/dist/api/work-actions.d.ts.map +1 -1
- package/dist/api/work-actions.js +57 -10
- package/dist/api/work-actions.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +12 -2
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +76 -12
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +23 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/tools.d.ts +12 -0
- package/dist/cli/commands/tools.d.ts.map +1 -0
- package/dist/cli/commands/tools.js +109 -0
- package/dist/cli/commands/tools.js.map +1 -0
- package/dist/cli/index.js +6 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/connectors/framework/polling-scheduler.d.ts +6 -1
- package/dist/connectors/framework/polling-scheduler.d.ts.map +1 -1
- package/dist/connectors/framework/polling-scheduler.js +25 -3
- package/dist/connectors/framework/polling-scheduler.js.map +1 -1
- package/dist/connectors/framework/stored-index-read.d.ts +2 -2
- package/dist/connectors/framework/stored-index-read.d.ts.map +1 -1
- package/dist/connectors/framework/stored-index-read.js +10 -3
- package/dist/connectors/framework/stored-index-read.js.map +1 -1
- package/dist/gateways/base-gateway.d.ts +7 -0
- package/dist/gateways/base-gateway.d.ts.map +1 -1
- package/dist/gateways/base-gateway.js +24 -0
- package/dist/gateways/base-gateway.js.map +1 -1
- package/dist/gateways/discord.d.ts +4 -0
- package/dist/gateways/discord.d.ts.map +1 -1
- package/dist/gateways/discord.js +24 -6
- package/dist/gateways/discord.js.map +1 -1
- package/dist/gateways/slack.d.ts +3 -0
- package/dist/gateways/slack.d.ts.map +1 -1
- package/dist/gateways/slack.js +15 -2
- package/dist/gateways/slack.js.map +1 -1
- package/dist/gateways/telegram-errors.d.ts +3 -0
- package/dist/gateways/telegram-errors.d.ts.map +1 -1
- package/dist/gateways/telegram-errors.js +5 -0
- package/dist/gateways/telegram-errors.js.map +1 -1
- package/dist/gateways/telegram-message-ledger.d.ts +7 -0
- package/dist/gateways/telegram-message-ledger.d.ts.map +1 -1
- package/dist/gateways/telegram-message-ledger.js +27 -2
- package/dist/gateways/telegram-message-ledger.js.map +1 -1
- package/dist/gateways/telegram.d.ts +24 -6
- package/dist/gateways/telegram.d.ts.map +1 -1
- package/dist/gateways/telegram.js +258 -44
- package/dist/gateways/telegram.js.map +1 -1
- package/dist/gateways/turn-contract.d.ts +6 -0
- package/dist/gateways/turn-contract.d.ts.map +1 -1
- package/dist/runtime/action-surface.d.ts +28 -3
- package/dist/runtime/action-surface.d.ts.map +1 -1
- package/dist/runtime/action-surface.js +310 -34
- package/dist/runtime/action-surface.js.map +1 -1
- package/dist/runtime/backend-security.d.ts +4 -0
- package/dist/runtime/backend-security.d.ts.map +1 -1
- package/dist/runtime/backend-security.js +8 -1
- 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 +11 -0
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/connectors.js +1 -1
- package/dist/runtime/connectors.js.map +1 -1
- package/dist/runtime/egress-proxy.d.ts +3 -3
- package/dist/runtime/egress-proxy.d.ts.map +1 -1
- package/dist/runtime/egress-proxy.js +16 -3
- package/dist/runtime/egress-proxy.js.map +1 -1
- package/dist/runtime/member-paths.d.ts +9 -1
- package/dist/runtime/member-paths.d.ts.map +1 -1
- package/dist/runtime/member-paths.js +67 -5
- package/dist/runtime/member-paths.js.map +1 -1
- package/dist/runtime/member-session.d.ts +21 -21
- package/dist/runtime/member-session.d.ts.map +1 -1
- package/dist/runtime/member-session.js +289 -34
- package/dist/runtime/member-session.js.map +1 -1
- package/dist/runtime/member-system-prompt.d.ts +1 -0
- package/dist/runtime/member-system-prompt.d.ts.map +1 -1
- package/dist/runtime/member-system-prompt.js +22 -4
- package/dist/runtime/member-system-prompt.js.map +1 -1
- package/dist/runtime/native-session.d.ts +6 -0
- package/dist/runtime/native-session.d.ts.map +1 -1
- package/dist/runtime/native-session.js +80 -13
- package/dist/runtime/native-session.js.map +1 -1
- package/dist/runtime/outbound-attempts.d.ts +5 -2
- package/dist/runtime/outbound-attempts.d.ts.map +1 -1
- package/dist/runtime/outbound-attempts.js +3 -2
- package/dist/runtime/outbound-attempts.js.map +1 -1
- package/dist/runtime/owner-authority.d.ts +14 -14
- package/dist/runtime/owner-authority.d.ts.map +1 -1
- package/dist/runtime/owner-authority.js +159 -7
- package/dist/runtime/owner-authority.js.map +1 -1
- package/dist/runtime/owner-runtime.d.ts +16 -5
- package/dist/runtime/owner-runtime.d.ts.map +1 -1
- package/dist/runtime/owner-runtime.js +426 -43
- package/dist/runtime/owner-runtime.js.map +1 -1
- package/dist/runtime/owner-system-prompt.d.ts +3 -1
- package/dist/runtime/owner-system-prompt.d.ts.map +1 -1
- package/dist/runtime/owner-system-prompt.js +15 -5
- package/dist/runtime/owner-system-prompt.js.map +1 -1
- package/dist/runtime/personal-job-cron.d.ts +6 -0
- package/dist/runtime/personal-job-cron.d.ts.map +1 -0
- package/dist/runtime/personal-job-cron.js +154 -0
- package/dist/runtime/personal-job-cron.js.map +1 -0
- package/dist/runtime/personal-jobs.d.ts +107 -0
- package/dist/runtime/personal-jobs.d.ts.map +1 -0
- package/dist/runtime/personal-jobs.js +353 -0
- package/dist/runtime/personal-jobs.js.map +1 -0
- package/dist/runtime/personal-notices.d.ts +38 -0
- package/dist/runtime/personal-notices.d.ts.map +1 -0
- package/dist/runtime/personal-notices.js +137 -0
- package/dist/runtime/personal-notices.js.map +1 -0
- package/dist/runtime/personal-turns.d.ts +23 -0
- package/dist/runtime/personal-turns.d.ts.map +1 -0
- package/dist/runtime/personal-turns.js +51 -0
- package/dist/runtime/personal-turns.js.map +1 -0
- package/dist/runtime/principal-access.d.ts +8 -0
- package/dist/runtime/principal-access.d.ts.map +1 -1
- package/dist/runtime/principal-access.js +69 -2
- package/dist/runtime/principal-access.js.map +1 -1
- package/dist/runtime/principal-sessions.d.ts +16 -2
- package/dist/runtime/principal-sessions.d.ts.map +1 -1
- package/dist/runtime/principal-sessions.js +104 -21
- package/dist/runtime/principal-sessions.js.map +1 -1
- package/dist/runtime/skills.d.ts +86 -0
- package/dist/runtime/skills.d.ts.map +1 -0
- package/dist/runtime/skills.js +560 -0
- package/dist/runtime/skills.js.map +1 -0
- package/dist/runtime/stimulus-delivery.d.ts +21 -1
- package/dist/runtime/stimulus-delivery.d.ts.map +1 -1
- package/dist/runtime/stimulus-delivery.js +185 -18
- package/dist/runtime/stimulus-delivery.js.map +1 -1
- package/dist/runtime/tools-paths.d.ts +9 -0
- package/dist/runtime/tools-paths.d.ts.map +1 -0
- package/dist/runtime/tools-paths.js +98 -0
- package/dist/runtime/tools-paths.js.map +1 -0
- package/dist/runtime/turn-orders.d.ts +22 -2
- package/dist/runtime/turn-orders.d.ts.map +1 -1
- package/dist/runtime/turn-orders.js +60 -6
- package/dist/runtime/turn-orders.js.map +1 -1
- package/dist/storage/chat-sources.d.ts +21 -0
- package/dist/storage/chat-sources.d.ts.map +1 -1
- package/dist/storage/chat-sources.js +65 -3
- package/dist/storage/chat-sources.js.map +1 -1
- package/dist/tools/command-runner.d.ts +12 -0
- package/dist/tools/command-runner.d.ts.map +1 -0
- package/dist/tools/command-runner.js +65 -0
- package/dist/tools/command-runner.js.map +1 -0
- package/dist/tools/document-render.d.ts +24 -0
- package/dist/tools/document-render.d.ts.map +1 -0
- package/dist/tools/document-render.js +208 -0
- package/dist/tools/document-render.js.map +1 -0
- package/dist/tools/document-toolkit.d.ts +15 -0
- package/dist/tools/document-toolkit.d.ts.map +1 -0
- package/dist/tools/document-toolkit.js +501 -0
- package/dist/tools/document-toolkit.js.map +1 -0
- package/dist/tools/office-render.d.ts +28 -0
- package/dist/tools/office-render.d.ts.map +1 -0
- package/dist/tools/office-render.js +98 -0
- package/dist/tools/office-render.js.map +1 -0
- package/dist/tools/toolkit-process.d.ts +9 -0
- package/dist/tools/toolkit-process.d.ts.map +1 -0
- package/dist/tools/toolkit-process.js +148 -0
- package/dist/tools/toolkit-process.js.map +1 -0
- package/dist/tools/toolkit-state.d.ts +22 -0
- package/dist/tools/toolkit-state.d.ts.map +1 -0
- package/dist/tools/toolkit-state.js +116 -0
- package/dist/tools/toolkit-state.js.map +1 -0
- package/package.json +3 -2
- package/toolkit/inspect-office-zip.py +16 -0
- package/toolkit/rasterize.py +29 -0
- package/toolkit/requirements.lock +664 -0
- package/toolkit/smoke.py +32 -0
|
@@ -1,20 +1,39 @@
|
|
|
1
|
-
import { type ActionRegistration, type JudgmentAccess } from '@jungjaehoon/mama-core';
|
|
1
|
+
import { type ActionRegistration, type ActionContext, type JudgmentAccess } from '@jungjaehoon/mama-core';
|
|
2
2
|
import type { DatabaseInstance } from '@jungjaehoon/mama-core/db-manager';
|
|
3
3
|
import type { TimeZoneSetting } from '../runtime/timezone.js';
|
|
4
|
-
|
|
4
|
+
import type { Mailbox } from '@jungjaehoon/mama-core/runtime/mailbox';
|
|
5
|
+
import type { createSerialTurnChain } from '../runtime/principal-sessions.js';
|
|
6
|
+
/**
|
|
7
|
+
* A display name reaches other sessions' turn headers as host text, so it carries letters, digits,
|
|
8
|
+
* spaces and name punctuation only: no ':' '/' '@' or other characters that could make it read as
|
|
9
|
+
* an instruction or an address (Codex security review on #479).
|
|
10
|
+
*/
|
|
11
|
+
export declare function memberNameAllowed(name: string): boolean;
|
|
12
|
+
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", "manage.member.name"];
|
|
13
|
+
export type MemberManagementContext = ActionContext & {
|
|
14
|
+
memberManagementQueued?: boolean;
|
|
15
|
+
/** Authenticated at enqueue; status and role are rechecked when the host job executes. */
|
|
16
|
+
memberManagementCaller?: string;
|
|
17
|
+
};
|
|
5
18
|
export interface MemberLifecyclePorts {
|
|
19
|
+
mailbox(): Mailbox;
|
|
20
|
+
resumeQueued(): void;
|
|
21
|
+
isStopping(): boolean;
|
|
22
|
+
isServed(principalId: string): boolean;
|
|
23
|
+
turnChain(principalId: string): ReturnType<typeof createSerialTurnChain>;
|
|
6
24
|
resetSession(principalId: string): Promise<void>;
|
|
7
25
|
retire(principalId: string): Promise<void>;
|
|
8
26
|
resume(principalId: string): Promise<void>;
|
|
9
27
|
cancelQueued(principalId: string, reason: string): number;
|
|
10
28
|
}
|
|
11
|
-
/**
|
|
29
|
+
/** The surface queues all changes on the target chain, then uses the member directory lane. */
|
|
12
30
|
export declare function memberLifecycleRegistrations(options: {
|
|
13
31
|
adapter: DatabaseInstance;
|
|
14
32
|
ownerPrincipalId: string;
|
|
15
33
|
ownerAccess(): JudgmentAccess;
|
|
16
|
-
isOwnerMessageTurn(sourceMessageRef: string): boolean;
|
|
34
|
+
isOwnerMessageTurn(sourceMessageRef: string, principalId: string): boolean;
|
|
17
35
|
timeZone: TimeZoneSetting;
|
|
18
36
|
ports?: MemberLifecyclePorts;
|
|
37
|
+
scheduleChange(name: string, input: unknown, context: MemberManagementContext): Promise<unknown>;
|
|
19
38
|
}): ActionRegistration[];
|
|
20
39
|
//# 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,
|
|
1
|
+
{"version":3,"file":"member-lifecycle.d.ts","sourceRoot":"","sources":["../../src/api/member-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAElB,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,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAE9E;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,eAAO,MAAM,yBAAyB,iLAQ5B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAAG,aAAa,GAAG;IACpD,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,0FAA0F;IAC1F,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,oBAAoB;IACnC,OAAO,IAAI,OAAO,CAAC;IACnB,YAAY,IAAI,IAAI,CAAC;IACrB,UAAU,IAAI,OAAO,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IACzE,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,+FAA+F;AAC/F,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,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3E,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,oBAAoB,CAAC;IAC7B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClG,GAAG,kBAAkB,EAAE,CAuPvB"}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MEMBER_MANAGEMENT_ACTIONS = void 0;
|
|
4
|
+
exports.memberNameAllowed = memberNameAllowed;
|
|
4
5
|
exports.memberLifecycleRegistrations = memberLifecycleRegistrations;
|
|
5
6
|
const mama_core_1 = require("@jungjaehoon/mama-core");
|
|
6
7
|
const principal_access_js_1 = require("../runtime/principal-access.js");
|
|
7
8
|
const owner_authority_js_1 = require("../runtime/owner-authority.js");
|
|
9
|
+
/**
|
|
10
|
+
* A display name reaches other sessions' turn headers as host text, so it carries letters, digits,
|
|
11
|
+
* spaces and name punctuation only: no ':' '/' '@' or other characters that could make it read as
|
|
12
|
+
* an instruction or an address (Codex security review on #479).
|
|
13
|
+
*/
|
|
14
|
+
function memberNameAllowed(name) {
|
|
15
|
+
return /^[\p{L}\p{M}\p{N} .'\-·]+$/u.test(name.trim());
|
|
16
|
+
}
|
|
8
17
|
exports.MEMBER_MANAGEMENT_ACTIONS = [
|
|
9
18
|
'manage.member.grant',
|
|
10
19
|
'manage.member.revoke',
|
|
@@ -12,8 +21,9 @@ exports.MEMBER_MANAGEMENT_ACTIONS = [
|
|
|
12
21
|
'manage.member.resume',
|
|
13
22
|
'manage.member.offboard',
|
|
14
23
|
'manage.member.list',
|
|
24
|
+
'manage.member.name',
|
|
15
25
|
];
|
|
16
|
-
/**
|
|
26
|
+
/** The surface queues all changes on the target chain, then uses the member directory lane. */
|
|
17
27
|
function memberLifecycleRegistrations(options) {
|
|
18
28
|
let principals;
|
|
19
29
|
const properties = {
|
|
@@ -22,6 +32,11 @@ function memberLifecycleRegistrations(options) {
|
|
|
22
32
|
pattern: '\\S',
|
|
23
33
|
description: 'Registry member principal id, never a transport identity.',
|
|
24
34
|
},
|
|
35
|
+
name: {
|
|
36
|
+
type: 'string',
|
|
37
|
+
pattern: '\\S',
|
|
38
|
+
description: 'Owner supplied member display name: 1 to 120 characters after trimming. Telegram names are not used.',
|
|
39
|
+
},
|
|
25
40
|
scopeKind: { type: 'string', enum: ['project'] },
|
|
26
41
|
scopeId: {
|
|
27
42
|
type: 'string',
|
|
@@ -41,36 +56,53 @@ function memberLifecycleRegistrations(options) {
|
|
|
41
56
|
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.',
|
|
42
57
|
resume: 'Resume a suspended member with retained grants. Move any remaining runtime and temp directories aside and serve a fresh environment.',
|
|
43
58
|
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.',
|
|
44
|
-
list: 'List member principal ids, statuses and unrevoked grants, including grants retained during suspension, and the latest enrollment receipts the
|
|
59
|
+
list: 'List member display names when set, principal ids, registry roles (including owner), statuses and unrevoked grants, including grants retained during suspension, and the latest enrollment receipts from the common record (created, exists or refused, with the reason), in either room. Receipts carry the owner-local time of each pick. Never returns transport identities or record content.',
|
|
60
|
+
name: "Set a member display name: your own, or a member without the owner role (an owner-role member names itself). Letters, digits, spaces and . - ' · only. Only people in the member registry can be named; the common session cannot. Use the name the owner supplies, never a Telegram name.",
|
|
45
61
|
}[change] +
|
|
46
|
-
' Only
|
|
62
|
+
' Only an active owner-role caller in its own DM or recorded common-channel message turn is allowed; delta, scheduled/report, replay, plain-member and subagent turns are denied.' +
|
|
63
|
+
(change === 'name'
|
|
64
|
+
? ''
|
|
65
|
+
: ' Grants/revocations run on the target chain. Suspend, resume and offboard wait for running member turns and hold new member turns while changing directories. The common session continues. Changes cancel queued target inputs with a host reason. A waiting change returns scheduled with a commandId; the final result is stored in the common management receipt. Caller authority is checked again when the change runs.'),
|
|
47
66
|
inputSchema: {
|
|
48
67
|
type: 'object',
|
|
49
68
|
additionalProperties: false,
|
|
50
69
|
properties: change === 'list'
|
|
51
70
|
? {}
|
|
52
|
-
:
|
|
53
|
-
? properties
|
|
54
|
-
:
|
|
71
|
+
: change === 'name'
|
|
72
|
+
? { principalId: properties.principalId, name: properties.name }
|
|
73
|
+
: scopeChange
|
|
74
|
+
? {
|
|
75
|
+
principalId: properties.principalId,
|
|
76
|
+
scopeKind: properties.scopeKind,
|
|
77
|
+
scopeId: properties.scopeId,
|
|
78
|
+
}
|
|
79
|
+
: { principalId: properties.principalId },
|
|
55
80
|
required: change === 'list'
|
|
56
81
|
? []
|
|
57
|
-
:
|
|
58
|
-
? ['principalId', '
|
|
59
|
-
:
|
|
82
|
+
: change === 'name'
|
|
83
|
+
? ['principalId', 'name']
|
|
84
|
+
: scopeChange
|
|
85
|
+
? ['principalId', 'scopeKind', 'scopeId']
|
|
86
|
+
: ['principalId'],
|
|
60
87
|
},
|
|
61
88
|
},
|
|
62
89
|
exec: async (input, context) => {
|
|
63
|
-
const ref = context.session?.sourceMessageRef;
|
|
64
|
-
if (context.access.principalId !== options.ownerPrincipalId ||
|
|
65
|
-
context.session?.replaySourceEndMs !== undefined ||
|
|
66
|
-
!ref ||
|
|
67
|
-
!options.isOwnerMessageTurn(ref)) {
|
|
68
|
-
throw Object.assign(new Error('Member management is available only in an owner message turn'), { name: 'denied' });
|
|
69
|
-
}
|
|
70
90
|
const repo = (principals ??= (0, mama_core_1.createPrincipalRepository)(options.adapter));
|
|
91
|
+
const queuedCaller = context.memberManagementQueued && context.memberManagementCaller;
|
|
92
|
+
const callerPrincipal = queuedCaller ? repo.findById(queuedCaller) : undefined;
|
|
93
|
+
const caller = queuedCaller
|
|
94
|
+
? callerPrincipal?.kind === 'member' &&
|
|
95
|
+
callerPrincipal.status === 'active' &&
|
|
96
|
+
(0, owner_authority_js_1.holdsOwnerRole)(repo, queuedCaller)
|
|
97
|
+
? queuedCaller
|
|
98
|
+
: undefined
|
|
99
|
+
: (0, owner_authority_js_1.activeOwnerMessageCaller)(context, options);
|
|
100
|
+
if (!caller) {
|
|
101
|
+
throw Object.assign(new Error("Member management requires a registered person's message turn from an active owner-role member. Discord and Slack common turns have no registered sender; use Telegram."), { name: 'denied' });
|
|
102
|
+
}
|
|
71
103
|
if (change === 'list') {
|
|
72
104
|
const timeZone = options.timeZone.get();
|
|
73
|
-
// Each users_shared pick ends in a host receipt in the
|
|
105
|
+
// Each users_shared pick ends in a host receipt in the common conversation record; a
|
|
74
106
|
// refused or failed pick leaves no registry row, so the receipt is its only trace.
|
|
75
107
|
const enrollmentReceipts = options.adapter
|
|
76
108
|
.prepare(`SELECT m.source_timestamp_ms AS at, r.content AS receipt
|
|
@@ -88,8 +120,10 @@ function memberLifecycleRegistrations(options) {
|
|
|
88
120
|
at: `${new Date(at).toLocaleString('ko-KR', { timeZone })} (${timeZone})`,
|
|
89
121
|
receipt,
|
|
90
122
|
})),
|
|
91
|
-
members: repo.listMembers().map(({ principalId, status }) => ({
|
|
123
|
+
members: repo.listMembers().map(({ principalId, displayName, status }) => ({
|
|
92
124
|
principalId,
|
|
125
|
+
...(displayName === undefined ? {} : { displayName }),
|
|
126
|
+
roles: repo.listRoles(principalId).map(({ role }) => role),
|
|
93
127
|
status,
|
|
94
128
|
grants: repo
|
|
95
129
|
.listRetainedGrants(principalId)
|
|
@@ -101,13 +135,36 @@ function memberLifecycleRegistrations(options) {
|
|
|
101
135
|
const principal = repo.findById(principalId);
|
|
102
136
|
if (!principal)
|
|
103
137
|
throw new Error(`Unknown principal: ${principalId}`);
|
|
104
|
-
|
|
105
|
-
throw Object.assign(new Error(
|
|
106
|
-
|
|
138
|
+
const refuse = (reason) => {
|
|
139
|
+
throw Object.assign(new Error(reason), { name: 'denied' });
|
|
140
|
+
};
|
|
141
|
+
if (principal.kind !== 'member')
|
|
142
|
+
refuse('The common principal cannot be a member-management target');
|
|
143
|
+
if (change === 'name') {
|
|
144
|
+
const requested = input.name;
|
|
145
|
+
if (!memberNameAllowed(requested))
|
|
146
|
+
refuse("A name may use letters, digits, spaces and . - ' · only");
|
|
147
|
+
// An owner's name sits in that owner's own privileged turns; only that owner sets it.
|
|
148
|
+
if ((0, owner_authority_js_1.holdsOwnerRole)(repo, principalId) && principalId !== caller)
|
|
149
|
+
refuse("Only that owner can set an owner-role member's name");
|
|
150
|
+
const displayName = repo.setDisplayName({
|
|
151
|
+
principalId,
|
|
152
|
+
displayName: requested,
|
|
153
|
+
now: Date.now(),
|
|
107
154
|
});
|
|
155
|
+
return { principalId, change, displayName };
|
|
156
|
+
}
|
|
157
|
+
if (change === 'suspend' && principalId === caller)
|
|
158
|
+
refuse('You cannot suspend yourself');
|
|
159
|
+
if ((0, owner_authority_js_1.holdsOwnerRole)(repo, principalId) && change !== 'suspend' && change !== 'resume')
|
|
160
|
+
refuse(change === 'offboard'
|
|
161
|
+
? 'An owner-role member cannot be offboarded'
|
|
162
|
+
: 'Grants cannot be changed for an owner-role member');
|
|
108
163
|
const ports = options.ports;
|
|
109
164
|
if (!ports)
|
|
110
165
|
throw new Error('Member management requires member_root and a running member runtime');
|
|
166
|
+
if (!context.memberManagementQueued)
|
|
167
|
+
return options.scheduleChange(name, input, context);
|
|
111
168
|
if (scopeChange) {
|
|
112
169
|
const scope = { kind: 'memory', scopeKind, scopeId: scopeId.trim() };
|
|
113
170
|
const ownerAccess = options.ownerAccess();
|
|
@@ -148,6 +205,16 @@ function memberLifecycleRegistrations(options) {
|
|
|
148
205
|
return { principalId, change, scope, ...result, sessionReset: served, setAside: false };
|
|
149
206
|
}
|
|
150
207
|
if (change === 'resume') {
|
|
208
|
+
// A durable command can replay after activation but before its common receipt.
|
|
209
|
+
if (principal.status === 'active' && ports.isServed(principalId))
|
|
210
|
+
return {
|
|
211
|
+
principalId,
|
|
212
|
+
change,
|
|
213
|
+
status: 'active',
|
|
214
|
+
sessionReset: true,
|
|
215
|
+
freshEnvironment: true,
|
|
216
|
+
cancelledInputs: 0,
|
|
217
|
+
};
|
|
151
218
|
if (principal.status !== 'suspended')
|
|
152
219
|
throw new Error(`Cannot resume a ${principal.status} member`);
|
|
153
220
|
// Cancel before serving: once served, a queued input is a fresh one the member just sent.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-lifecycle.js","sourceRoot":"","sources":["../../src/api/member-lifecycle.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"member-lifecycle.js","sourceRoot":"","sources":["../../src/api/member-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ActionRegistration, type DatabaseInstance, type JudgmentAccess } from '@jungjaehoon/mama-core';
|
|
2
|
+
import type { Mailbox } from '@jungjaehoon/mama-core/runtime/mailbox';
|
|
3
|
+
import type { NoticeRef } from '../runtime/personal-notices.js';
|
|
4
|
+
import type { TimeZoneSetting } from '../runtime/timezone.js';
|
|
5
|
+
export interface MemberNoticePorts {
|
|
6
|
+
mailbox(): Mailbox;
|
|
7
|
+
/** Wakes host/native delivery without waiting for any member lane in the caller. */
|
|
8
|
+
wake(principalId: string): void;
|
|
9
|
+
}
|
|
10
|
+
export declare function memberNoticeRegistrations(ports: {
|
|
11
|
+
adapter: DatabaseInstance;
|
|
12
|
+
ownerPrincipalId: string;
|
|
13
|
+
ownerAccess(): JudgmentAccess;
|
|
14
|
+
timeZone: TimeZoneSetting;
|
|
15
|
+
notices?: MemberNoticePorts;
|
|
16
|
+
read(ref: NoticeRef, access: JudgmentAccess): Promise<boolean>;
|
|
17
|
+
}): ActionRegistration[];
|
|
18
|
+
//# sourceMappingURL=member-notice-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-notice-actions.d.ts","sourceRoot":"","sources":["../../src/api/member-notice-actions.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wCAAwC,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,OAAO,IAAI,OAAO,CAAC;IACnB,oFAAoF;IACpF,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AACD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,gBAAgB,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,IAAI,cAAc,CAAC;IAC9B,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAChE,GAAG,kBAAkB,EAAE,CA+LvB"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memberNoticeRegistrations = memberNoticeRegistrations;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
5
|
+
const mama_core_1 = require("@jungjaehoon/mama-core");
|
|
6
|
+
const principal_access_js_1 = require("../runtime/principal-access.js");
|
|
7
|
+
const stimulus_delivery_js_1 = require("../runtime/stimulus-delivery.js");
|
|
8
|
+
const turn_orders_js_1 = require("../runtime/turn-orders.js");
|
|
9
|
+
function memberNoticeRegistrations(ports) {
|
|
10
|
+
const common = (context) => {
|
|
11
|
+
if (context.access.principalId !== ports.ownerPrincipalId)
|
|
12
|
+
throw Object.assign(new Error('Only the common session may use this action'), {
|
|
13
|
+
name: 'denied',
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
return [
|
|
17
|
+
{
|
|
18
|
+
contract: {
|
|
19
|
+
name: 'member.directory',
|
|
20
|
+
summary: 'Read the member directory in any common turn: principal ids, display names, statuses, roles and granted partitions. No transport identities, enrollment receipts or personal records.',
|
|
21
|
+
inputSchema: { type: 'object', additionalProperties: false, properties: {} },
|
|
22
|
+
},
|
|
23
|
+
exec: (_input, context) => {
|
|
24
|
+
common(context);
|
|
25
|
+
const repo = (0, mama_core_1.createPrincipalRepository)(ports.adapter);
|
|
26
|
+
return {
|
|
27
|
+
members: repo.listMembers().map(({ principalId, displayName, status }) => ({
|
|
28
|
+
principalId,
|
|
29
|
+
...(displayName === undefined ? {} : { displayName }),
|
|
30
|
+
status,
|
|
31
|
+
roles: repo.listRoles(principalId).map(({ role }) => role),
|
|
32
|
+
grants: repo
|
|
33
|
+
.listRetainedGrants(principalId)
|
|
34
|
+
.flatMap(({ scope }) => (scope.kind === 'memory' ? [scope] : [])),
|
|
35
|
+
})),
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
contract: {
|
|
41
|
+
name: 'member.notice',
|
|
42
|
+
summary: 'Queue one personal notice candidate when a common fact concerns a member: assigned to them, mentions them, or in a partition they hold. Use member.directory and cite source observation refs and the work record ids you wrote. The recipient reads only refs under its own current access and privately decides whether to tell it. No reason, summary or preview; replay never queues notices. Repeated calls for the same recipient and source turn are already queued.',
|
|
43
|
+
inputSchema: {
|
|
44
|
+
type: 'object',
|
|
45
|
+
additionalProperties: false,
|
|
46
|
+
required: ['principalId', 'refs'],
|
|
47
|
+
properties: {
|
|
48
|
+
principalId: { type: 'string', pattern: '\\S' },
|
|
49
|
+
refs: {
|
|
50
|
+
type: 'array',
|
|
51
|
+
minItems: 1,
|
|
52
|
+
maxItems: 500,
|
|
53
|
+
items: {
|
|
54
|
+
oneOf: [
|
|
55
|
+
{
|
|
56
|
+
type: 'object',
|
|
57
|
+
additionalProperties: false,
|
|
58
|
+
required: ['observationRef'],
|
|
59
|
+
properties: {
|
|
60
|
+
observationRef: { type: 'string', pattern: '\\S' },
|
|
61
|
+
source: { type: 'string', pattern: '\\S' },
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
type: 'object',
|
|
66
|
+
additionalProperties: false,
|
|
67
|
+
required: ['memory_id'],
|
|
68
|
+
properties: { memory_id: { type: 'string', pattern: '\\S' } },
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
exec: async (input, context) => {
|
|
77
|
+
common(context);
|
|
78
|
+
const refused = (reason) => ({ queued: false, reason });
|
|
79
|
+
if (context.session?.replaySourceEndMs !== undefined)
|
|
80
|
+
return refused('replay');
|
|
81
|
+
if (!ports.notices)
|
|
82
|
+
return refused('notices_unavailable');
|
|
83
|
+
const ref = context.session?.sourceMessageRef;
|
|
84
|
+
if (!ref)
|
|
85
|
+
return refused('source_stimulus_required');
|
|
86
|
+
const mailbox = ports.notices.mailbox();
|
|
87
|
+
const row = mailbox.readInput(ref, ports.ownerPrincipalId);
|
|
88
|
+
if (!row)
|
|
89
|
+
return refused('source_stimulus_required');
|
|
90
|
+
const record = (0, stimulus_delivery_js_1.isRecordOrderRow)(row) ? (0, turn_orders_js_1.parseRecordOrder)(row.payload) : null;
|
|
91
|
+
const sources = record
|
|
92
|
+
? [
|
|
93
|
+
row,
|
|
94
|
+
...(0, turn_orders_js_1.recordOrderBatches)(record).map((batch) => mailbox.readInput(batch.deltaStimulusId, ports.ownerPrincipalId)),
|
|
95
|
+
]
|
|
96
|
+
: [row];
|
|
97
|
+
if (sources.some((source) => source?.payload &&
|
|
98
|
+
typeof source.payload === 'object' &&
|
|
99
|
+
!Array.isArray(source.payload) &&
|
|
100
|
+
source.payload.replay !== undefined))
|
|
101
|
+
return refused('replay');
|
|
102
|
+
const { principalId, refs } = input;
|
|
103
|
+
const source = record?.deltaStimulusId ?? ref;
|
|
104
|
+
const noticeId = (sourceId) => `notice:${principalId}:${(0, node_crypto_1.createHash)('sha256').update(sourceId).digest('hex')}`;
|
|
105
|
+
const id = noticeId(source);
|
|
106
|
+
const alreadyQueued = (sourceId = source) => {
|
|
107
|
+
const key = noticeId(sourceId);
|
|
108
|
+
return (mailbox.readInput(key, principalId) ||
|
|
109
|
+
ports.adapter.prepare('SELECT 1 FROM mailbox_seen WHERE ref_id=?').get(key) ||
|
|
110
|
+
ports.adapter
|
|
111
|
+
.prepare('SELECT 1 FROM command_bindings WHERE command_id=? AND principal_id=?')
|
|
112
|
+
.get(`notice-close:${key}`, principalId));
|
|
113
|
+
};
|
|
114
|
+
// Check before reading refs: core rejects a duplicate identity with changed payload.
|
|
115
|
+
if (alreadyQueued())
|
|
116
|
+
return refused('already_queued');
|
|
117
|
+
const repo = (0, mama_core_1.createPrincipalRepository)(ports.adapter);
|
|
118
|
+
const person = repo.findById(principalId);
|
|
119
|
+
if (person?.kind !== 'member' || person.status !== 'active')
|
|
120
|
+
return refused('recipient_not_active_member');
|
|
121
|
+
const notifiedObservations = new Set((record?.carried ?? [])
|
|
122
|
+
.filter((batch) => alreadyQueued(batch.deltaStimulusId))
|
|
123
|
+
.flatMap((batch) => batch.observationRefs));
|
|
124
|
+
const filtered = refs.filter((evidence) => !('observationRef' in evidence) ||
|
|
125
|
+
record?.observationRefs.includes(evidence.observationRef) ||
|
|
126
|
+
!notifiedObservations.has(evidence.observationRef));
|
|
127
|
+
// Work record ids accompany the observations they came from: when every cited
|
|
128
|
+
// observation was already noticed, the records were too.
|
|
129
|
+
const observed = (list) => list.some((evidence) => 'observationRef' in evidence);
|
|
130
|
+
const freshRefs = observed(refs) && !observed(filtered) ? [] : filtered;
|
|
131
|
+
if (freshRefs.length === 0)
|
|
132
|
+
return refused('already_queued');
|
|
133
|
+
const access = (0, principal_access_js_1.resolvePrincipalAccess)(principalId, {
|
|
134
|
+
adapter: ports.adapter,
|
|
135
|
+
ownerAccess: ports.ownerAccess(),
|
|
136
|
+
agentId: `member-agent:${principalId}`,
|
|
137
|
+
});
|
|
138
|
+
const readable = [];
|
|
139
|
+
for (const evidence of freshRefs)
|
|
140
|
+
if ((await ports.read(evidence, context.access)) && (await ports.read(evidence, access)))
|
|
141
|
+
readable.push(evidence);
|
|
142
|
+
if (readable.length === 0)
|
|
143
|
+
return refused('no_readable_refs');
|
|
144
|
+
if (repo.findById(principalId)?.status !== 'active')
|
|
145
|
+
return refused('recipient_not_active_member');
|
|
146
|
+
if (alreadyQueued())
|
|
147
|
+
return refused('already_queued');
|
|
148
|
+
const carried = (record?.carried ?? []).filter((batch) => readable.some((evidence) => 'observationRef' in evidence &&
|
|
149
|
+
batch.observationRefs.includes(evidence.observationRef)));
|
|
150
|
+
const accepted = ports.adapter.transaction(() => {
|
|
151
|
+
const accepted = mailbox.enqueue({
|
|
152
|
+
id,
|
|
153
|
+
kind: 'scheduled',
|
|
154
|
+
principalId,
|
|
155
|
+
channelKey: 'notice',
|
|
156
|
+
occurredAt: Date.now(),
|
|
157
|
+
payload: {
|
|
158
|
+
refs: readable,
|
|
159
|
+
timeZone: ports.timeZone.get(),
|
|
160
|
+
lifecycleVersion: repo.lifecycleVersion(principalId),
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
if (accepted === null)
|
|
164
|
+
return null;
|
|
165
|
+
// Commit carried-batch markers with the notice without spending its 500-ref budget.
|
|
166
|
+
// Their input binding also keeps P9 erasure and uncertain-input retention intact.
|
|
167
|
+
const seen = ports.adapter.prepare('INSERT OR IGNORE INTO mailbox_seen (ref_id, seen_at, principal_id) VALUES (?, ?, ?)');
|
|
168
|
+
const bind = ports.adapter.prepare('INSERT OR IGNORE INTO mailbox_input_refs (input_id, ref_id, observation_ref) VALUES (?, ?, NULL)');
|
|
169
|
+
for (const batch of carried) {
|
|
170
|
+
const key = noticeId(batch.deltaStimulusId);
|
|
171
|
+
seen.run(key, Date.now(), principalId);
|
|
172
|
+
bind.run(accepted, key);
|
|
173
|
+
}
|
|
174
|
+
return accepted;
|
|
175
|
+
});
|
|
176
|
+
if (accepted === null)
|
|
177
|
+
return refused('already_queued');
|
|
178
|
+
ports.notices.wake(principalId);
|
|
179
|
+
return { queued: true };
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
];
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=member-notice-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"member-notice-actions.js","sourceRoot":"","sources":["../../src/api/member-notice-actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,14 @@ import { type ActionRegistration, type JudgmentAccess } from '@jungjaehoon/mama-
|
|
|
2
2
|
import type { DatabaseInstance } from '@jungjaehoon/mama-core/db-manager';
|
|
3
3
|
import type { Mailbox, MailboxRow } from '@jungjaehoon/mama-core/runtime/mailbox';
|
|
4
4
|
import type { RawStore } from '../storage/source-archive.js';
|
|
5
|
-
import type
|
|
5
|
+
import { type OwnerMessageLedger } from '../gateways/telegram-message-ledger.js';
|
|
6
|
+
import type { OwnerHostExchangeInput } from '../gateways/turn-contract.js';
|
|
6
7
|
import type { createSerialTurnChain } from '../runtime/principal-sessions.js';
|
|
7
8
|
import type { TelegramFileSender } from './file-delivery.js';
|
|
8
9
|
export interface MemberRecordsTelegram extends TelegramFileSender {
|
|
9
10
|
sendMemberText(access: JudgmentAccess, text: string, operationId: string): Promise<boolean>;
|
|
11
|
+
memberTextDelivered(access: JudgmentAccess, operationId: string): boolean;
|
|
12
|
+
retireMemberJobText(operationId: string): void;
|
|
10
13
|
}
|
|
11
14
|
export interface MemberRecordsPorts {
|
|
12
15
|
root: string;
|
|
@@ -15,12 +18,15 @@ export interface MemberRecordsPorts {
|
|
|
15
18
|
ledger(): OwnerMessageLedger | undefined;
|
|
16
19
|
telegram(): MemberRecordsTelegram | undefined;
|
|
17
20
|
access(id: string): JudgmentAccess;
|
|
18
|
-
turnChain: ReturnType<typeof createSerialTurnChain>;
|
|
21
|
+
turnChain(id: string): ReturnType<typeof createSerialTurnChain>;
|
|
19
22
|
retire(id: string): Promise<void>;
|
|
20
23
|
serve(id: string): void;
|
|
21
24
|
isStopping(): boolean;
|
|
25
|
+
isReady(): boolean;
|
|
22
26
|
resumeQueued(): void;
|
|
23
27
|
recordExchange(id: string, kind: 'export' | 'erase', ref: string, text: string, deliveryVerified: boolean): void;
|
|
28
|
+
/** Write a member's personal copy of a host exchange (a management or enrollment receipt). */
|
|
29
|
+
writeHostExchange(id: string, exchange: OwnerHostExchangeInput): void;
|
|
24
30
|
}
|
|
25
31
|
export declare function createMemberRecords(options: {
|
|
26
32
|
adapter: DatabaseInstance;
|
|
@@ -29,6 +35,15 @@ export declare function createMemberRecords(options: {
|
|
|
29
35
|
}): {
|
|
30
36
|
registrations: ActionRegistration[];
|
|
31
37
|
isBusy: () => boolean;
|
|
38
|
+
excludePrincipals: () => string[];
|
|
39
|
+
/**
|
|
40
|
+
* Keep a personal write for after this member's erasure once its export snapshot is taken;
|
|
41
|
+
* false means the caller writes it now (no erasure, or one whose export will still hold it).
|
|
42
|
+
*/
|
|
43
|
+
deferWhileErasing: (id: string, exchange: OwnerHostExchangeInput) => boolean;
|
|
44
|
+
recover: () => void;
|
|
45
|
+
startRecovery: () => void;
|
|
46
|
+
stopRecovery: () => void;
|
|
32
47
|
isBlocked: (id: string) => boolean;
|
|
33
48
|
onSettled: (row: MailboxRow) => void;
|
|
34
49
|
onDead: (row: MailboxRow, reason: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"member-records.d.ts","sourceRoot":"","sources":["../../src/api/member-records.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"member-records.d.ts","sourceRoot":"","sources":["../../src/api/member-records.ts"],"names":[],"mappings":"AAEA,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,EAAqB,KAAK,kBAAkB,EAAE,MAAM,wCAAwC,CAAC;AACpG,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,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;IAC5F,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;IAC1E,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;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,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC;IAChE,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,OAAO,IAAI,OAAO,CAAC;IACnB,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;IACR,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACvE;AA+FD,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;;;;IA8oBG;;;OAGG;4BACqB,MAAM,YAAY,sBAAsB,KAAG,OAAO;;;;oBA8B1D,MAAM;qBACL,UAAU;kBAuBb,UAAU,UAAU,MAAM;uBACrB,UAAU,UAAU,MAAM;;EAKhD"}
|