@jungjaehoon/mama-os 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +37 -17
  3. package/dist/agent/agent-loop.d.ts.map +1 -1
  4. package/dist/agent/agent-loop.js +8 -0
  5. package/dist/agent/agent-loop.js.map +1 -1
  6. package/dist/agent/attachment-text-extractor.d.ts +2 -0
  7. package/dist/agent/attachment-text-extractor.d.ts.map +1 -0
  8. package/dist/agent/attachment-text-extractor.js +128 -0
  9. package/dist/agent/attachment-text-extractor.js.map +1 -0
  10. package/dist/agent/code-act/constants.d.ts.map +1 -1
  11. package/dist/agent/code-act/constants.js +17 -2
  12. package/dist/agent/code-act/constants.js.map +1 -1
  13. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  14. package/dist/agent/code-act/host-bridge.js +107 -0
  15. package/dist/agent/code-act/host-bridge.js.map +1 -1
  16. package/dist/agent/code-act/tool-policy.d.ts +9 -1
  17. package/dist/agent/code-act/tool-policy.d.ts.map +1 -1
  18. package/dist/agent/code-act/tool-policy.js +30 -1
  19. package/dist/agent/code-act/tool-policy.js.map +1 -1
  20. package/dist/agent/codex-app-server-process.d.ts +1 -0
  21. package/dist/agent/codex-app-server-process.d.ts.map +1 -1
  22. package/dist/agent/codex-app-server-process.js +16 -0
  23. package/dist/agent/codex-app-server-process.js.map +1 -1
  24. package/dist/agent/drive-tools.d.ts +55 -0
  25. package/dist/agent/drive-tools.d.ts.map +1 -0
  26. package/dist/agent/drive-tools.js +263 -0
  27. package/dist/agent/drive-tools.js.map +1 -0
  28. package/dist/agent/gateway-tool-executor.d.ts +11 -3
  29. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  30. package/dist/agent/gateway-tool-executor.js +249 -19
  31. package/dist/agent/gateway-tool-executor.js.map +1 -1
  32. package/dist/agent/gateway-tools.md +9 -0
  33. package/dist/agent/image-translation-tools.d.ts +48 -0
  34. package/dist/agent/image-translation-tools.d.ts.map +1 -0
  35. package/dist/agent/image-translation-tools.js +274 -0
  36. package/dist/agent/image-translation-tools.js.map +1 -0
  37. package/dist/agent/role-manager.d.ts.map +1 -1
  38. package/dist/agent/role-manager.js +9 -1
  39. package/dist/agent/role-manager.js.map +1 -1
  40. package/dist/agent/tool-registry.d.ts.map +1 -1
  41. package/dist/agent/tool-registry.js +53 -0
  42. package/dist/agent/tool-registry.js.map +1 -1
  43. package/dist/agent/types.d.ts +22 -33
  44. package/dist/agent/types.d.ts.map +1 -1
  45. package/dist/agent/types.js.map +1 -1
  46. package/dist/cli/commands/start.d.ts.map +1 -1
  47. package/dist/cli/commands/start.js +18 -8
  48. package/dist/cli/commands/start.js.map +1 -1
  49. package/dist/cli/config/types.d.ts.map +1 -1
  50. package/dist/cli/config/types.js +12 -4
  51. package/dist/cli/config/types.js.map +1 -1
  52. package/dist/cli/runtime/envelope-bootstrap.d.ts.map +1 -1
  53. package/dist/cli/runtime/envelope-bootstrap.js +8 -1
  54. package/dist/cli/runtime/envelope-bootstrap.js.map +1 -1
  55. package/dist/connectors/drive/index.d.ts +1 -1
  56. package/dist/connectors/drive/index.d.ts.map +1 -1
  57. package/dist/connectors/drive/index.js +100 -56
  58. package/dist/connectors/drive/index.js.map +1 -1
  59. package/dist/connectors/framework/gws-utils.d.ts +3 -0
  60. package/dist/connectors/framework/gws-utils.d.ts.map +1 -1
  61. package/dist/connectors/framework/gws-utils.js +17 -0
  62. package/dist/connectors/framework/gws-utils.js.map +1 -1
  63. package/dist/envelope/enforcer.d.ts.map +1 -1
  64. package/dist/envelope/enforcer.js +18 -3
  65. package/dist/envelope/enforcer.js.map +1 -1
  66. package/dist/envelope/reactive-config.d.ts +1 -1
  67. package/dist/envelope/reactive-config.d.ts.map +1 -1
  68. package/dist/envelope/reactive-config.js +10 -2
  69. package/dist/envelope/reactive-config.js.map +1 -1
  70. package/dist/envelope/types.d.ts +1 -1
  71. package/dist/envelope/types.d.ts.map +1 -1
  72. package/dist/envelope/types.js.map +1 -1
  73. package/dist/gateways/message-router.d.ts +4 -0
  74. package/dist/gateways/message-router.d.ts.map +1 -1
  75. package/dist/gateways/message-router.js +433 -335
  76. package/dist/gateways/message-router.js.map +1 -1
  77. package/dist/gateways/session-store.d.ts +2 -0
  78. package/dist/gateways/session-store.d.ts.map +1 -1
  79. package/dist/gateways/session-store.js +41 -1
  80. package/dist/gateways/session-store.js.map +1 -1
  81. package/dist/gateways/telegram-media.d.ts +41 -0
  82. package/dist/gateways/telegram-media.d.ts.map +1 -0
  83. package/dist/gateways/telegram-media.js +242 -0
  84. package/dist/gateways/telegram-media.js.map +1 -0
  85. package/dist/gateways/telegram-message-ledger.d.ts +49 -0
  86. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -0
  87. package/dist/gateways/telegram-message-ledger.js +266 -0
  88. package/dist/gateways/telegram-message-ledger.js.map +1 -0
  89. package/dist/gateways/telegram-response-presenter.d.ts +41 -0
  90. package/dist/gateways/telegram-response-presenter.d.ts.map +1 -0
  91. package/dist/gateways/telegram-response-presenter.js +250 -0
  92. package/dist/gateways/telegram-response-presenter.js.map +1 -0
  93. package/dist/gateways/telegram.d.ts +30 -7
  94. package/dist/gateways/telegram.d.ts.map +1 -1
  95. package/dist/gateways/telegram.js +444 -124
  96. package/dist/gateways/telegram.js.map +1 -1
  97. package/dist/gateways/types.d.ts +4 -2
  98. package/dist/gateways/types.d.ts.map +1 -1
  99. package/dist/operator/operator-interfaces.d.ts +1 -1
  100. package/dist/operator/operator-interfaces.d.ts.map +1 -1
  101. package/dist/operator/operator-trigger-loop.d.ts +12 -0
  102. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  103. package/dist/operator/operator-trigger-loop.js +184 -38
  104. package/dist/operator/operator-trigger-loop.js.map +1 -1
  105. package/dist/operator/pending-report-store.d.ts +35 -0
  106. package/dist/operator/pending-report-store.d.ts.map +1 -0
  107. package/dist/operator/pending-report-store.js +155 -0
  108. package/dist/operator/pending-report-store.js.map +1 -0
  109. package/dist/operator/runtime-config.d.ts +10 -0
  110. package/dist/operator/runtime-config.d.ts.map +1 -0
  111. package/dist/operator/runtime-config.js +21 -0
  112. package/dist/operator/runtime-config.js.map +1 -0
  113. package/dist/operator/situation-report.d.ts +37 -0
  114. package/dist/operator/situation-report.d.ts.map +1 -1
  115. package/dist/operator/situation-report.js +122 -9
  116. package/dist/operator/situation-report.js.map +1 -1
  117. package/package.json +3 -1
  118. package/scripts/attachment/extract-office-text.js +179 -0
  119. package/scripts/attachment/extract-pdf-text.swift +36 -0
  120. package/scripts/image/fb-overlay.py +128 -0
  121. package/scripts/image/ocr-image.py +38 -0
  122. package/scripts/setup-ocr.js +120 -0
  123. package/templates/skills/image-translate.md +17 -22
@@ -0,0 +1,35 @@
1
+ import type { PreparedSituationReport, SituationReporterSnapshot } from './situation-report.js';
2
+ export interface PendingReportOccurrence {
3
+ kind: 'digest' | 'scheduled_full' | 'on_demand_full';
4
+ hourKey?: string;
5
+ firedAtIso?: string;
6
+ }
7
+ export interface PendingReportDelivery extends PreparedSituationReport {
8
+ deliveryId: string;
9
+ occurrence: PendingReportOccurrence;
10
+ }
11
+ export interface PendingReportRequest {
12
+ mode: 'full';
13
+ deliveryId: string;
14
+ occurrence: PendingReportOccurrence;
15
+ acceptedAtIso: string;
16
+ }
17
+ export interface PendingReportState {
18
+ version: 1;
19
+ digest: SituationReporterSnapshot;
20
+ full: SituationReporterSnapshot;
21
+ delivery?: PendingReportDelivery;
22
+ request?: PendingReportRequest;
23
+ }
24
+ export interface PendingReportStore {
25
+ load(): PendingReportState | null;
26
+ save(state: PendingReportState): void;
27
+ }
28
+ export declare class FilePendingReportStore implements PendingReportStore {
29
+ private readonly path;
30
+ private readonly log;
31
+ constructor(path: string, log?: (line: string) => void);
32
+ load(): PendingReportState | null;
33
+ save(state: PendingReportState): void;
34
+ }
35
+ //# sourceMappingURL=pending-report-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-report-store.d.ts","sourceRoot":"","sources":["../../src/operator/pending-report-store.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAEhG,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAsB,SAAQ,uBAAuB;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,uBAAuB,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,uBAAuB,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,yBAAyB,CAAC;IAClC,IAAI,EAAE,yBAAyB,CAAC;IAChC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,IAAI,kBAAkB,GAAG,IAAI,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACvC;AA+HD,qBAAa,sBAAuB,YAAW,kBAAkB;IAE7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBADH,IAAI,EAAE,MAAM,EACZ,GAAG,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAe;IAGzD,IAAI,IAAI,kBAAkB,GAAG,IAAI;IA0BjC,IAAI,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;CAUtC"}
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FilePendingReportStore = void 0;
4
+ const node_fs_1 = require("node:fs");
5
+ const node_path_1 = require("node:path");
6
+ const MAX_PENDING_REPORT_BYTES = 8 * 1024 * 1024;
7
+ const MAX_CHANNELS = 48;
8
+ const MAX_FIRES = 100;
9
+ const MAX_RECALLED = 20;
10
+ const MAX_EVENT_KEYS = 10_000;
11
+ function isPendingReportState(value) {
12
+ if (!value || typeof value !== 'object')
13
+ return false;
14
+ const record = value;
15
+ if (record.version !== 1)
16
+ return false;
17
+ for (const key of ['digest', 'full']) {
18
+ const snapshot = record[key];
19
+ if (!snapshot || typeof snapshot !== 'object')
20
+ return false;
21
+ const fields = snapshot;
22
+ if (!isSituationSnapshot(fields)) {
23
+ return false;
24
+ }
25
+ }
26
+ return ((record.delivery === undefined || isPendingDelivery(record.delivery)) &&
27
+ (record.request === undefined || isPendingRequest(record.request)));
28
+ }
29
+ function isPendingRequest(value) {
30
+ if (!value || typeof value !== 'object')
31
+ return false;
32
+ const record = value;
33
+ const occurrence = record.occurrence;
34
+ return (record.mode === 'full' &&
35
+ isBoundedString(record.deliveryId, 512) &&
36
+ isBoundedString(record.acceptedAtIso, 64) &&
37
+ Boolean(occurrence) &&
38
+ occurrence?.kind === 'on_demand_full' &&
39
+ (occurrence.hourKey === undefined || isBoundedString(occurrence.hourKey, 128)) &&
40
+ isBoundedString(occurrence.firedAtIso, 64));
41
+ }
42
+ function isPendingDelivery(value) {
43
+ if (!value || typeof value !== 'object')
44
+ return false;
45
+ const record = value;
46
+ const occurrence = record.occurrence;
47
+ return ((record.mode === 'digest' || record.mode === 'full') &&
48
+ isBoundedString(record.text, 1_000_000) &&
49
+ isBoundedString(record.deliveryId, 512) &&
50
+ isBoundedString(record.createdAtIso, 64) &&
51
+ Array.isArray(record.citedTriggerIds) &&
52
+ record.citedTriggerIds.length <= MAX_FIRES &&
53
+ record.citedTriggerIds.every((item) => isBoundedString(item, 512)) &&
54
+ Boolean(occurrence) &&
55
+ (occurrence?.kind === 'digest' ||
56
+ occurrence?.kind === 'scheduled_full' ||
57
+ occurrence?.kind === 'on_demand_full') &&
58
+ (occurrence.hourKey === undefined || isBoundedString(occurrence.hourKey, 128)) &&
59
+ (occurrence.firedAtIso === undefined || isBoundedString(occurrence.firedAtIso, 64)));
60
+ }
61
+ function isSituationSnapshot(fields) {
62
+ if (fields.version !== 1 ||
63
+ !isSafeCount(fields.windowTotal) ||
64
+ !isSafeCount(fields.authored) ||
65
+ !Array.isArray(fields.channels) ||
66
+ fields.channels.length > MAX_CHANNELS ||
67
+ !Array.isArray(fields.fires) ||
68
+ fields.fires.length > MAX_FIRES ||
69
+ !Array.isArray(fields.recalled) ||
70
+ fields.recalled.length > MAX_RECALLED ||
71
+ (fields.eventKeys !== undefined &&
72
+ (!Array.isArray(fields.eventKeys) ||
73
+ fields.eventKeys.length > MAX_EVENT_KEYS ||
74
+ !fields.eventKeys.every((item) => isBoundedString(item, 1_024))))) {
75
+ return false;
76
+ }
77
+ return (fields.channels.every(isChannelSnapshot) &&
78
+ fields.fires.every(isFireSnapshot) &&
79
+ fields.recalled.every(isRecalledSnapshot));
80
+ }
81
+ function isChannelSnapshot(value) {
82
+ if (!value || typeof value !== 'object')
83
+ return false;
84
+ const record = value;
85
+ return (isBoundedString(record.channelId, 512) &&
86
+ isSafeCount(record.count) &&
87
+ Array.isArray(record.excerpts) &&
88
+ record.excerpts.length <= 5 &&
89
+ record.excerpts.every((item) => isBoundedString(item, 160)));
90
+ }
91
+ function isFireSnapshot(value) {
92
+ if (!value || typeof value !== 'object')
93
+ return false;
94
+ const record = value;
95
+ return (isBoundedString(record.triggerId, 512) &&
96
+ isBoundedString(record.kind, 512) &&
97
+ isBoundedString(record.channelId, 512) &&
98
+ isSafeCount(record.count) &&
99
+ Array.isArray(record.topics) &&
100
+ record.topics.length <= MAX_RECALLED &&
101
+ record.topics.every((item) => isBoundedString(item, 512)));
102
+ }
103
+ function isRecalledSnapshot(value) {
104
+ if (!value || typeof value !== 'object')
105
+ return false;
106
+ const record = value;
107
+ return isBoundedString(record.topic, 512) && isBoundedString(record.content, 160);
108
+ }
109
+ function isSafeCount(value) {
110
+ return Number.isSafeInteger(value) && value >= 0;
111
+ }
112
+ function isBoundedString(value, maxLength) {
113
+ return typeof value === 'string' && value.length <= maxLength;
114
+ }
115
+ class FilePendingReportStore {
116
+ path;
117
+ log;
118
+ constructor(path, log = () => { }) {
119
+ this.path = path;
120
+ this.log = log;
121
+ }
122
+ load() {
123
+ if (!(0, node_fs_1.existsSync)(this.path))
124
+ return null;
125
+ const size = (0, node_fs_1.statSync)(this.path).size;
126
+ const raw = size <= MAX_PENDING_REPORT_BYTES ? (0, node_fs_1.readFileSync)(this.path, 'utf8') : null;
127
+ try {
128
+ const parsed = raw === null ? null : JSON.parse(raw);
129
+ if (!isPendingReportState(parsed)) {
130
+ throw new Error(size > MAX_PENDING_REPORT_BYTES
131
+ ? 'Pending operator report state exceeds its size limit'
132
+ : 'Pending operator report state is invalid');
133
+ }
134
+ return parsed;
135
+ }
136
+ catch (error) {
137
+ const quarantinePath = `${this.path}.corrupt-${Date.now()}-${process.pid}`;
138
+ (0, node_fs_1.renameSync)(this.path, quarantinePath);
139
+ this.log(`[trigger-loop] invalid pending owner-report state quarantined at ${quarantinePath}: ${error instanceof Error ? error.message : String(error)}`);
140
+ return null;
141
+ }
142
+ }
143
+ save(state) {
144
+ if (!isPendingReportState(state)) {
145
+ throw new Error('Refusing to persist invalid pending operator report state');
146
+ }
147
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(this.path), { recursive: true, mode: 0o700 });
148
+ const temporaryPath = `${this.path}.tmp`;
149
+ (0, node_fs_1.writeFileSync)(temporaryPath, `${JSON.stringify(state)}\n`, { mode: 0o600 });
150
+ (0, node_fs_1.chmodSync)(temporaryPath, 0o600);
151
+ (0, node_fs_1.renameSync)(temporaryPath, this.path);
152
+ }
153
+ }
154
+ exports.FilePendingReportStore = FilePendingReportStore;
155
+ //# sourceMappingURL=pending-report-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pending-report-store.js","sourceRoot":"","sources":["../../src/operator/pending-report-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type OperatorRuntimeEnvironment = Readonly<Record<string, string | undefined>>;
2
+ /** Proactive monitoring is a core operator behavior; an explicit 0 is the opt-out. */
3
+ export declare function isOperatorTriggerLoopEnabled(environment: OperatorRuntimeEnvironment): boolean;
4
+ /**
5
+ * Resolve the owner-report destination without requiring a duplicate secret setting.
6
+ * Falling back is safe only for exactly one allowlisted private Telegram chat; groups
7
+ * and ambiguous allowlists require the explicit environment setting.
8
+ */
9
+ export declare function resolveOperatorReportChatId(environment: OperatorRuntimeEnvironment, allowedChats: readonly string[] | undefined): string;
10
+ //# sourceMappingURL=runtime-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-config.d.ts","sourceRoot":"","sources":["../../src/operator/runtime-config.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;AAEtF,sFAAsF;AACtF,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,0BAA0B,GAAG,OAAO,CAE7F;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,0BAA0B,EACvC,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAC1C,MAAM,CAOR"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isOperatorTriggerLoopEnabled = isOperatorTriggerLoopEnabled;
4
+ exports.resolveOperatorReportChatId = resolveOperatorReportChatId;
5
+ /** Proactive monitoring is a core operator behavior; an explicit 0 is the opt-out. */
6
+ function isOperatorTriggerLoopEnabled(environment) {
7
+ return environment.MAMA_TRIGGER_LOOP !== '0';
8
+ }
9
+ /**
10
+ * Resolve the owner-report destination without requiring a duplicate secret setting.
11
+ * Falling back is safe only for exactly one allowlisted private Telegram chat; groups
12
+ * and ambiguous allowlists require the explicit environment setting.
13
+ */
14
+ function resolveOperatorReportChatId(environment, allowedChats) {
15
+ const explicit = environment.MAMA_TRIGGER_LOOP_REPORT_CHAT?.trim();
16
+ const privateChats = [...new Set((allowedChats ?? []).map((chat) => chat.trim()))].filter((chat) => /^[1-9]\d*$/.test(chat));
17
+ if (explicit)
18
+ return privateChats.includes(explicit) ? explicit : '';
19
+ return privateChats.length === 1 ? privateChats[0] : '';
20
+ }
21
+ //# sourceMappingURL=runtime-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../../src/operator/runtime-config.ts"],"names":[],"mappings":";;AAGA,oEAEC;AAOD,kEAUC;AApBD,sFAAsF;AACtF,SAAgB,4BAA4B,CAAC,WAAuC;IAClF,OAAO,WAAW,CAAC,iBAAiB,KAAK,GAAG,CAAC;AAC/C,CAAC;AAED;;;;GAIG;AACH,SAAgB,2BAA2B,CACzC,WAAuC,EACvC,YAA2C;IAE3C,MAAM,QAAQ,GAAG,WAAW,CAAC,6BAA6B,EAAE,IAAI,EAAE,CAAC;IACnE,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CACvF,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAClC,CAAC;IACF,IAAI,QAAQ;QAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACrE,OAAO,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC"}
@@ -34,6 +34,35 @@ export interface FireActivity {
34
34
  }[];
35
35
  }
36
36
  export type ReportMode = 'digest' | 'full';
37
+ export interface PreparedSituationReport {
38
+ mode: ReportMode;
39
+ text: string;
40
+ citedTriggerIds: string[];
41
+ createdAtIso: string;
42
+ deliveryId?: string;
43
+ }
44
+ export interface SituationReporterSnapshot {
45
+ version: 1;
46
+ channels: Array<{
47
+ channelId: string;
48
+ count: number;
49
+ excerpts: string[];
50
+ }>;
51
+ windowTotal: number;
52
+ fires: Array<{
53
+ triggerId: string;
54
+ kind: string;
55
+ channelId: string;
56
+ count: number;
57
+ topics: string[];
58
+ }>;
59
+ authored: number;
60
+ recalled: Array<{
61
+ topic: string;
62
+ content: string;
63
+ }>;
64
+ eventKeys?: string[];
65
+ }
37
66
  export interface SituationReporterOptions {
38
67
  /** Model provider controls only the tool-call syntax; report workflow/content stays shared. */
39
68
  backend?: BackendType;
@@ -78,19 +107,27 @@ export declare class SituationReporter {
78
107
  private fireAgg;
79
108
  private authored;
80
109
  private recalled;
110
+ private eventKeys;
81
111
  private opts;
82
112
  constructor(opts?: SituationReporterOptions);
83
113
  /** Fold a batch of drained events into the bounded per-channel window. */
84
114
  recordWindow(events: OperatorChannelEvent[]): void;
115
+ hasRecordedEvent(event: OperatorChannelEvent): boolean;
116
+ private eventKey;
117
+ private legacyEventKey;
85
118
  /** Fold one fire into the aggregate; merge the memory it recalled (agent-query-driven). */
86
119
  recordFire(activity: FireActivity): void;
87
120
  recordAuthored(count: number): void;
88
121
  /** Any window events, fires, or authored triggers accumulated since the last reset. */
89
122
  hasActivity(): boolean;
123
+ snapshot(): SituationReporterSnapshot;
124
+ restore(snapshot: SituationReporterSnapshot): void;
90
125
  /**
91
126
  * Agent composes the report from the aggregate; sink delivers it. Returns true if a report was
92
127
  * sent, false if there was nothing to say or the agent suppressed it (NOTHING).
93
128
  */
129
+ prepareReport(askAgent: AskAgent, mode: ReportMode, deliveryId?: string): Promise<PreparedSituationReport | null>;
130
+ deliverPrepared(prepared: PreparedSituationReport, output: Pick<OutputSink, 'send'>): Promise<void>;
94
131
  report(askAgent: AskAgent, output: Pick<OutputSink, 'send'>, mode: ReportMode): Promise<boolean>;
95
132
  private reset;
96
133
  /** Public for testability. Aggregate window + fire activity + recalled memory -> agent prompt. */
@@ -1 +1 @@
1
- {"version":3,"file":"situation-report.d.ts","sourceRoot":"","sources":["../../src/operator/situation-report.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,2BAA2B,CAAC;AAEjE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAChD;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAqB3C,MAAM,WAAW,wBAAwB;IACvC,+FAA+F;IAC/F,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC;IAC9C;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAClD;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxE;AAKD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,OAAO,CAA8B;IAC7C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,IAAI,CAA2B;gBAE3B,IAAI,GAAE,wBAA6B;IAI/C,0EAA0E;IAC1E,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI;IAgBlD,2FAA2F;IAC3F,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAmBxC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,uFAAuF;IACvF,WAAW,IAAI,OAAO;IAItB;;;OAGG;IACG,MAAM,CACV,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAChC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC;IA2DnB,OAAO,CAAC,KAAK;IAQb,kGAAkG;IAClG,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAyItC"}
1
+ {"version":3,"file":"situation-report.d.ts","sourceRoot":"","sources":["../../src/operator/situation-report.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SituationReporter = exports.OPERATOR_FULL_REPORT_TAG = void 0;
4
+ const node_crypto_1 = require("node:crypto");
4
5
  const untrusted_content_js_1 = require("../utils/untrusted-content.js");
5
6
  /**
6
7
  * Machine frame tag prepended to the FULL report prompt so the report-run wiring can tell a full
@@ -12,7 +13,10 @@ exports.OPERATOR_FULL_REPORT_TAG = '[operator_full_report]';
12
13
  const MAX_EXCERPTS_PER_CHANNEL = 5;
13
14
  const MAX_EXCERPT_CHARS = 160;
14
15
  const MAX_CHANNELS_IN_PROMPT = 12;
16
+ const MAX_CHANNELS_IN_SNAPSHOT = MAX_CHANNELS_IN_PROMPT * 4;
15
17
  const MAX_RECALLED = 20;
18
+ const MAX_FIRES_IN_SNAPSHOT = 100;
19
+ const MAX_SEEN_EVENT_KEYS = 10_000;
16
20
  /** Machine trailer the agent appends; stripped before the owner sees the report. */
17
21
  const USED_TRIGGERS_PATTERN = /\n?^USED_TRIGGERS:\s*(.*)\s*$/im;
18
22
  class SituationReporter {
@@ -21,6 +25,7 @@ class SituationReporter {
21
25
  fireAgg = new Map();
22
26
  authored = 0;
23
27
  recalled = new Map(); // topic -> content (deduped, bounded)
28
+ eventKeys = new Set();
24
29
  opts;
25
30
  constructor(opts = {}) {
26
31
  this.opts = opts;
@@ -28,6 +33,15 @@ class SituationReporter {
28
33
  /** Fold a batch of drained events into the bounded per-channel window. */
29
34
  recordWindow(events) {
30
35
  for (const e of events) {
36
+ const eventKey = this.eventKey(e);
37
+ if (this.eventKeys.has(eventKey))
38
+ continue;
39
+ this.eventKeys.add(eventKey);
40
+ if (this.eventKeys.size > MAX_SEEN_EVENT_KEYS) {
41
+ const oldest = this.eventKeys.values().next().value;
42
+ if (oldest)
43
+ this.eventKeys.delete(oldest);
44
+ }
31
45
  const w = this.windowByChannel.get(e.channelId) ?? { count: 0, excerpts: [] };
32
46
  w.count += 1;
33
47
  const text = e.content.trim();
@@ -41,6 +55,15 @@ class SituationReporter {
41
55
  this.windowTotal += 1;
42
56
  }
43
57
  }
58
+ hasRecordedEvent(event) {
59
+ return (this.eventKeys.has(this.eventKey(event)) || this.eventKeys.has(this.legacyEventKey(event)));
60
+ }
61
+ eventKey(event) {
62
+ return (0, node_crypto_1.createHash)('sha256').update(this.legacyEventKey(event)).digest('hex');
63
+ }
64
+ legacyEventKey(event) {
65
+ return `${event.channel}:${event.channelId}:${event.eventIndexId ?? event.id}`;
66
+ }
44
67
  /** Fold one fire into the aggregate; merge the memory it recalled (agent-query-driven). */
45
68
  recordFire(activity) {
46
69
  const key = `${activity.triggerId}|${activity.channelId}`;
@@ -67,19 +90,81 @@ class SituationReporter {
67
90
  hasActivity() {
68
91
  return this.windowTotal > 0 || this.fireAgg.size > 0 || this.authored > 0;
69
92
  }
93
+ snapshot() {
94
+ return {
95
+ version: 1,
96
+ channels: [...this.windowByChannel.entries()]
97
+ .sort((a, b) => b[1].count - a[1].count || a[0].localeCompare(b[0]))
98
+ .slice(0, MAX_CHANNELS_IN_SNAPSHOT)
99
+ .map(([channelId, window]) => ({
100
+ channelId: channelId.slice(0, 512),
101
+ count: window.count,
102
+ excerpts: window.excerpts.map((excerpt) => excerpt.slice(0, MAX_EXCERPT_CHARS)),
103
+ })),
104
+ windowTotal: this.windowTotal,
105
+ fires: [...this.fireAgg.values()]
106
+ .sort((a, b) => b.count - a.count ||
107
+ a.triggerId.localeCompare(b.triggerId) ||
108
+ a.channelId.localeCompare(b.channelId))
109
+ .slice(0, MAX_FIRES_IN_SNAPSHOT)
110
+ .map((fire) => ({
111
+ triggerId: fire.triggerId.slice(0, 512),
112
+ kind: fire.kind.slice(0, 512),
113
+ channelId: fire.channelId.slice(0, 512),
114
+ count: fire.count,
115
+ topics: [...fire.topics].slice(-MAX_RECALLED).map((topic) => topic.slice(0, 512)),
116
+ })),
117
+ authored: this.authored,
118
+ recalled: [...this.recalled.entries()].map(([topic, content]) => ({
119
+ topic: topic.slice(0, 512),
120
+ content: content.slice(0, MAX_EXCERPT_CHARS),
121
+ })),
122
+ eventKeys: [...this.eventKeys].map((key) => key.slice(0, 1_024)),
123
+ };
124
+ }
125
+ restore(snapshot) {
126
+ if (snapshot.version !== 1) {
127
+ throw new Error('Unsupported situation reporter snapshot version');
128
+ }
129
+ this.reset();
130
+ for (const channel of snapshot.channels.slice(0, MAX_CHANNELS_IN_SNAPSHOT)) {
131
+ this.windowByChannel.set(channel.channelId, {
132
+ count: Math.max(0, channel.count),
133
+ excerpts: channel.excerpts.slice(-MAX_EXCERPTS_PER_CHANNEL),
134
+ });
135
+ }
136
+ this.windowTotal = Math.max(0, snapshot.windowTotal);
137
+ for (const fire of snapshot.fires.slice(0, MAX_FIRES_IN_SNAPSHOT)) {
138
+ this.fireAgg.set(`${fire.triggerId}|${fire.channelId}`, {
139
+ triggerId: fire.triggerId,
140
+ kind: fire.kind,
141
+ channelId: fire.channelId,
142
+ count: Math.max(0, fire.count),
143
+ topics: new Set(fire.topics.slice(0, MAX_RECALLED)),
144
+ });
145
+ }
146
+ this.authored = Math.max(0, snapshot.authored);
147
+ for (const item of snapshot.recalled.slice(0, MAX_RECALLED)) {
148
+ this.recalled.set(item.topic, item.content.slice(0, MAX_EXCERPT_CHARS));
149
+ }
150
+ this.eventKeys = new Set((snapshot.eventKeys ?? []).slice(-MAX_SEEN_EVENT_KEYS));
151
+ }
70
152
  /**
71
153
  * Agent composes the report from the aggregate; sink delivers it. Returns true if a report was
72
154
  * sent, false if there was nothing to say or the agent suppressed it (NOTHING).
73
155
  */
74
- async report(askAgent, output, mode) {
156
+ async prepareReport(askAgent, mode, deliveryId) {
75
157
  // M2.1: the scheduled FULL report is a duty report - it composes even on an empty window
76
158
  // (the owner relies on it arriving; a quiet window is itself the news). Digests stay gated.
77
159
  if (mode !== 'full' && !this.hasActivity())
78
- return false;
160
+ return null;
79
161
  const raw = (await askAgent(this.buildPrompt(mode))).trim();
80
162
  if (raw === '' || /^NOTHING\b/i.test(raw)) {
163
+ if (mode === 'full') {
164
+ throw new Error('Full owner report returned no content');
165
+ }
81
166
  this.reset(); // agent judged nothing worth reporting - drop the buffer quietly
82
- return false;
167
+ return null;
83
168
  }
84
169
  // Parse + strip the USED_TRIGGERS machine trailer (the owner never sees it)
85
170
  // and validate the ids against THIS window's fires (no hallucinated credit).
@@ -96,22 +181,42 @@ class SituationReporter {
96
181
  ];
97
182
  }
98
183
  if (text === '') {
184
+ if (mode === 'full') {
185
+ throw new Error('Full owner report returned no content');
186
+ }
99
187
  this.reset(); // trailer-only reply: nothing was delivered, so no credit either
100
- return false;
188
+ return null;
189
+ }
190
+ return {
191
+ mode,
192
+ text,
193
+ citedTriggerIds: cited,
194
+ createdAtIso: new Date().toISOString(),
195
+ ...(deliveryId ? { deliveryId } : {}),
196
+ };
197
+ }
198
+ async deliverPrepared(prepared, output) {
199
+ if (prepared.mode !== 'digest' && prepared.mode !== 'full') {
200
+ throw new Error('Unsupported prepared report mode');
201
+ }
202
+ if (prepared.deliveryId) {
203
+ await output.send(prepared.text, prepared.deliveryId);
204
+ }
205
+ else {
206
+ await output.send(prepared.text);
101
207
  }
102
- await output.send(text); // throws loudly on failure; buffer kept for retry (no-fallback)
103
208
  // Credit only AFTER a successful send: success means "cited in a DELIVERED
104
209
  // report". Crediting before send would double-count on the retry path
105
210
  // (send throws -> buffer kept -> next cadence re-cites the same fires).
106
- if (cited.length > 0) {
107
- this.opts.recordTriggerUse?.(cited);
211
+ if (prepared.citedTriggerIds.length > 0) {
212
+ this.opts.recordTriggerUse?.(prepared.citedTriggerIds);
108
213
  }
109
214
  // Context carry (plan v6 S1-T4): persist the DELIVERED full report so the
110
215
  // chat console can reference "the report you just got" instead of
111
216
  // fabricating one. Same success condition as the delta anchor.
112
- if (mode === 'full') {
217
+ if (prepared.mode === 'full') {
113
218
  try {
114
- this.opts.persistLastFullReport?.(new Date().toISOString(), text);
219
+ this.opts.persistLastFullReport?.(new Date().toISOString(), prepared.text);
115
220
  }
116
221
  catch (error) {
117
222
  // Carry is derived state - persistence failure must not fail the
@@ -120,6 +225,13 @@ class SituationReporter {
120
225
  }
121
226
  }
122
227
  this.reset();
228
+ }
229
+ async report(askAgent, output, mode) {
230
+ const prepared = await this.prepareReport(askAgent, mode);
231
+ if (!prepared) {
232
+ return false;
233
+ }
234
+ await this.deliverPrepared(prepared, output);
123
235
  return true;
124
236
  }
125
237
  reset() {
@@ -128,6 +240,7 @@ class SituationReporter {
128
240
  this.fireAgg.clear();
129
241
  this.authored = 0;
130
242
  this.recalled.clear();
243
+ this.eventKeys.clear();
131
244
  }
132
245
  /** Public for testability. Aggregate window + fire activity + recalled memory -> agent prompt. */
133
246
  buildPrompt(mode) {
@@ -1 +1 @@
1
- {"version":3,"file":"situation-report.js","sourceRoot":"","sources":["../../src/operator/situation-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"situation-report.js","sourceRoot":"","sources":["../../src/operator/situation-report.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jungjaehoon/mama-os",
3
- "version": "0.25.0",
3
+ "version": "0.27.0",
4
4
  "description": "MAMA OS - Local AI Runtime. Your scattered knowledge, organized by AI agents that never sleep.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -11,6 +11,8 @@
11
11
  },
12
12
  "scripts": {
13
13
  "postinstall": "node scripts/postinstall.js",
14
+ "setup:ocr": "node scripts/setup-ocr.js",
15
+ "check:ocr": "node scripts/setup-ocr.js --check",
14
16
  "build": "tsc && pnpm exec tsx scripts/generate-gateway-tools.ts && rm -rf public/viewer/js && tsc -p public/viewer/tsconfig.viewer.json && pnpm run build:ui",
15
17
  "build:ui": "pnpm --dir ui run bundle",
16
18
  "dev:ui": "pnpm --dir ui run dev",