@jungjaehoon/mama-os 0.26.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 (101) hide show
  1. package/README.md +1 -1
  2. package/dist/agent/agent-loop.d.ts.map +1 -1
  3. package/dist/agent/agent-loop.js +6 -0
  4. package/dist/agent/agent-loop.js.map +1 -1
  5. package/dist/agent/attachment-text-extractor.d.ts +2 -0
  6. package/dist/agent/attachment-text-extractor.d.ts.map +1 -0
  7. package/dist/agent/attachment-text-extractor.js +128 -0
  8. package/dist/agent/attachment-text-extractor.js.map +1 -0
  9. package/dist/agent/code-act/constants.d.ts.map +1 -1
  10. package/dist/agent/code-act/constants.js +17 -2
  11. package/dist/agent/code-act/constants.js.map +1 -1
  12. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  13. package/dist/agent/code-act/host-bridge.js +55 -2
  14. package/dist/agent/code-act/host-bridge.js.map +1 -1
  15. package/dist/agent/code-act/tool-policy.d.ts +7 -1
  16. package/dist/agent/code-act/tool-policy.d.ts.map +1 -1
  17. package/dist/agent/code-act/tool-policy.js +28 -1
  18. package/dist/agent/code-act/tool-policy.js.map +1 -1
  19. package/dist/agent/codex-app-server-process.d.ts +1 -0
  20. package/dist/agent/codex-app-server-process.d.ts.map +1 -1
  21. package/dist/agent/codex-app-server-process.js +16 -0
  22. package/dist/agent/codex-app-server-process.js.map +1 -1
  23. package/dist/agent/drive-tools.d.ts +2 -0
  24. package/dist/agent/drive-tools.d.ts.map +1 -1
  25. package/dist/agent/drive-tools.js +3 -1
  26. package/dist/agent/drive-tools.js.map +1 -1
  27. package/dist/agent/gateway-tool-executor.d.ts +10 -3
  28. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  29. package/dist/agent/gateway-tool-executor.js +207 -26
  30. package/dist/agent/gateway-tool-executor.js.map +1 -1
  31. package/dist/agent/gateway-tools.md +5 -1
  32. package/dist/agent/image-translation-tools.d.ts +48 -0
  33. package/dist/agent/image-translation-tools.d.ts.map +1 -0
  34. package/dist/agent/image-translation-tools.js +274 -0
  35. package/dist/agent/image-translation-tools.js.map +1 -0
  36. package/dist/agent/role-manager.d.ts.map +1 -1
  37. package/dist/agent/role-manager.js +9 -1
  38. package/dist/agent/role-manager.js.map +1 -1
  39. package/dist/agent/tool-registry.d.ts.map +1 -1
  40. package/dist/agent/tool-registry.js +25 -1
  41. package/dist/agent/tool-registry.js.map +1 -1
  42. package/dist/agent/types.d.ts +4 -33
  43. package/dist/agent/types.d.ts.map +1 -1
  44. package/dist/agent/types.js.map +1 -1
  45. package/dist/cli/commands/start.d.ts.map +1 -1
  46. package/dist/cli/commands/start.js +18 -8
  47. package/dist/cli/commands/start.js.map +1 -1
  48. package/dist/cli/config/types.d.ts.map +1 -1
  49. package/dist/cli/config/types.js +5 -1
  50. package/dist/cli/config/types.js.map +1 -1
  51. package/dist/cli/runtime/envelope-bootstrap.js +2 -2
  52. package/dist/cli/runtime/envelope-bootstrap.js.map +1 -1
  53. package/dist/gateways/message-router.d.ts +3 -0
  54. package/dist/gateways/message-router.d.ts.map +1 -1
  55. package/dist/gateways/message-router.js +428 -336
  56. package/dist/gateways/message-router.js.map +1 -1
  57. package/dist/gateways/session-store.d.ts +2 -0
  58. package/dist/gateways/session-store.d.ts.map +1 -1
  59. package/dist/gateways/session-store.js +41 -1
  60. package/dist/gateways/session-store.js.map +1 -1
  61. package/dist/gateways/telegram-media.d.ts +13 -0
  62. package/dist/gateways/telegram-media.d.ts.map +1 -1
  63. package/dist/gateways/telegram-media.js +77 -0
  64. package/dist/gateways/telegram-media.js.map +1 -1
  65. package/dist/gateways/telegram-message-ledger.d.ts +49 -0
  66. package/dist/gateways/telegram-message-ledger.d.ts.map +1 -0
  67. package/dist/gateways/telegram-message-ledger.js +266 -0
  68. package/dist/gateways/telegram-message-ledger.js.map +1 -0
  69. package/dist/gateways/telegram-response-presenter.d.ts +10 -0
  70. package/dist/gateways/telegram-response-presenter.d.ts.map +1 -1
  71. package/dist/gateways/telegram-response-presenter.js +129 -32
  72. package/dist/gateways/telegram-response-presenter.js.map +1 -1
  73. package/dist/gateways/telegram.d.ts +20 -4
  74. package/dist/gateways/telegram.d.ts.map +1 -1
  75. package/dist/gateways/telegram.js +300 -64
  76. package/dist/gateways/telegram.js.map +1 -1
  77. package/dist/operator/operator-interfaces.d.ts +1 -1
  78. package/dist/operator/operator-interfaces.d.ts.map +1 -1
  79. package/dist/operator/operator-trigger-loop.d.ts +12 -0
  80. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  81. package/dist/operator/operator-trigger-loop.js +184 -38
  82. package/dist/operator/operator-trigger-loop.js.map +1 -1
  83. package/dist/operator/pending-report-store.d.ts +35 -0
  84. package/dist/operator/pending-report-store.d.ts.map +1 -0
  85. package/dist/operator/pending-report-store.js +155 -0
  86. package/dist/operator/pending-report-store.js.map +1 -0
  87. package/dist/operator/runtime-config.d.ts +10 -0
  88. package/dist/operator/runtime-config.d.ts.map +1 -0
  89. package/dist/operator/runtime-config.js +21 -0
  90. package/dist/operator/runtime-config.js.map +1 -0
  91. package/dist/operator/situation-report.d.ts +37 -0
  92. package/dist/operator/situation-report.d.ts.map +1 -1
  93. package/dist/operator/situation-report.js +122 -9
  94. package/dist/operator/situation-report.js.map +1 -1
  95. package/package.json +3 -1
  96. package/scripts/attachment/extract-office-text.js +179 -0
  97. package/scripts/attachment/extract-pdf-text.swift +36 -0
  98. package/scripts/image/fb-overlay.py +128 -0
  99. package/scripts/image/ocr-image.py +38 -0
  100. package/scripts/setup-ocr.js +120 -0
  101. package/templates/skills/image-translate.md +17 -22
@@ -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":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEjF,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;AAE3C,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAwBD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,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,SAAS,CAAqB;IACtC,OAAO,CAAC,IAAI,CAA2B;gBAE3B,IAAI,GAAE,wBAA6B;IAI/C,0EAA0E;IAC1E,YAAY,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,IAAI;IAuBlD,gBAAgB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO;IAMtD,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,cAAc;IAItB,2FAA2F;IAC3F,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAmBxC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAInC,uFAAuF;IACvF,WAAW,IAAI,OAAO;IAItB,QAAQ,IAAI,yBAAyB;IAoCrC,OAAO,CAAC,QAAQ,EAAE,yBAAyB,GAAG,IAAI;IA4BlD;;;OAGG;IACG,aAAa,CACjB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IA+CpC,eAAe,CACnB,QAAQ,EAAE,uBAAuB,EACjC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,IAAI,CAAC;IAmCV,MAAM,CACV,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,EAChC,IAAI,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC;IASnB,OAAO,CAAC,KAAK;IASb,kGAAkG;IAClG,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAyItC"}
@@ -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.26.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",
@@ -0,0 +1,179 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { readFileSync, statSync } = require('node:fs');
4
+ const { inflateRawSync } = require('node:zlib');
5
+
6
+ const MAX_ARCHIVE_BYTES = 64 * 1024 * 1024;
7
+ const MAX_ARCHIVE_ENTRIES = 2_000;
8
+
9
+ const [, , filePath, extension, maxOutputRaw] = process.argv;
10
+ const maxOutputBytes = Number(maxOutputRaw);
11
+ if (!filePath || !['.docx', '.xlsx'].includes(extension) || !Number.isSafeInteger(maxOutputBytes)) {
12
+ throw new Error('usage: extract-office-text.js <path> <.docx|.xlsx> <max-output-bytes>');
13
+ }
14
+
15
+ const prefixes =
16
+ extension === '.docx' ? ['word/document.xml'] : ['xl/sharedStrings.xml', 'xl/worksheets/'];
17
+ const entries = readOfficeEntries(filePath, prefixes);
18
+ const text = extension === '.docx' ? extractDocxText(entries) : extractXlsxText(entries);
19
+ process.stdout.write(truncateUtf8(text, maxOutputBytes));
20
+
21
+ function readOfficeEntries(path, wantedPrefixes) {
22
+ if (statSync(path).size > MAX_ARCHIVE_BYTES) {
23
+ throw new Error('Office attachment is too large');
24
+ }
25
+ const archive = readFileSync(path);
26
+ const endOffset = findEndOfCentralDirectory(archive);
27
+ const entryCount = archive.readUInt16LE(endOffset + 10);
28
+ const centralOffset = archive.readUInt32LE(endOffset + 16);
29
+ if (entryCount > MAX_ARCHIVE_ENTRIES) {
30
+ throw new Error('Office attachment has too many entries');
31
+ }
32
+ const result = new Map();
33
+ let cursor = centralOffset;
34
+ let extractedBytes = 0;
35
+ for (let index = 0; index < entryCount; index += 1) {
36
+ requireSignature(archive, cursor, 0x02014b50, 'central directory');
37
+ const flags = archive.readUInt16LE(cursor + 8);
38
+ const method = archive.readUInt16LE(cursor + 10);
39
+ const compressedSize = archive.readUInt32LE(cursor + 20);
40
+ const uncompressedSize = archive.readUInt32LE(cursor + 24);
41
+ const nameLength = archive.readUInt16LE(cursor + 28);
42
+ const extraLength = archive.readUInt16LE(cursor + 30);
43
+ const commentLength = archive.readUInt16LE(cursor + 32);
44
+ const localOffset = archive.readUInt32LE(cursor + 42);
45
+ const nameStart = cursor + 46;
46
+ const name = archive.subarray(nameStart, nameStart + nameLength).toString('utf8');
47
+ cursor = nameStart + nameLength + extraLength + commentLength;
48
+ if (!wantedPrefixes.some((prefix) => name === prefix || name.startsWith(prefix))) {
49
+ continue;
50
+ }
51
+ if ((flags & 0x1) !== 0) {
52
+ throw new Error('Encrypted Office attachments are not supported');
53
+ }
54
+ extractedBytes += uncompressedSize;
55
+ if (extractedBytes > MAX_ARCHIVE_BYTES) {
56
+ throw new Error('Office attachment expands too far');
57
+ }
58
+ requireSignature(archive, localOffset, 0x04034b50, 'local file header');
59
+ const nameSize = archive.readUInt16LE(localOffset + 26);
60
+ const extraSize = archive.readUInt16LE(localOffset + 28);
61
+ const dataStart = localOffset + 30 + nameSize + extraSize;
62
+ const compressed = archive.subarray(dataStart, dataStart + compressedSize);
63
+ const data =
64
+ method === 0
65
+ ? compressed
66
+ : method === 8
67
+ ? inflateRawSync(compressed, { maxOutputLength: MAX_ARCHIVE_BYTES })
68
+ : unsupportedCompression(method);
69
+ if (data.length !== uncompressedSize) {
70
+ throw new Error('Corrupt Office entry');
71
+ }
72
+ result.set(name, data.toString('utf8'));
73
+ }
74
+ return result;
75
+ }
76
+
77
+ function findEndOfCentralDirectory(archive) {
78
+ const minimumOffset = Math.max(0, archive.length - 65_557);
79
+ for (let cursor = archive.length - 22; cursor >= minimumOffset; cursor -= 1) {
80
+ if (archive.readUInt32LE(cursor) === 0x06054b50) {
81
+ return cursor;
82
+ }
83
+ }
84
+ throw new Error('Invalid Office attachment: ZIP directory not found');
85
+ }
86
+
87
+ function requireSignature(archive, offset, expected, label) {
88
+ if (offset < 0 || offset + 4 > archive.length || archive.readUInt32LE(offset) !== expected) {
89
+ throw new Error(`Invalid Office attachment ${label}`);
90
+ }
91
+ }
92
+
93
+ function unsupportedCompression(method) {
94
+ throw new Error(`Unsupported Office compression method: ${method}`);
95
+ }
96
+
97
+ function extractDocxText(entries) {
98
+ const xml = entries.get('word/document.xml');
99
+ if (!xml) {
100
+ throw new Error('Invalid DOCX attachment: word/document.xml is missing');
101
+ }
102
+ return [...xml.matchAll(/<w:p\b[^>]*>([\s\S]*?)<\/w:p>/g)]
103
+ .map((match) => extractXmlText(match[1], 'w:t'))
104
+ .filter(Boolean)
105
+ .join('\n');
106
+ }
107
+
108
+ function extractXlsxText(entries) {
109
+ const sharedXml = entries.get('xl/sharedStrings.xml') || '';
110
+ const shared = [...sharedXml.matchAll(/<si\b[^>]*>([\s\S]*?)<\/si>/g)].map((match) =>
111
+ extractXmlText(match[1], 't')
112
+ );
113
+ const sheets = [...entries.entries()]
114
+ .filter(([name]) => /^xl\/worksheets\/sheet[^/]*\.xml$/.test(name))
115
+ .sort(([left], [right]) => left.localeCompare(right));
116
+ if (sheets.length === 0) {
117
+ throw new Error('Invalid XLSX attachment: no worksheets found');
118
+ }
119
+ const lines = [];
120
+ for (const [name, xml] of sheets) {
121
+ lines.push(`[${name.slice(name.lastIndexOf('/') + 1, -4)}]`);
122
+ for (const cell of xml.matchAll(/<c\b([^>]*)>([\s\S]*?)<\/c>/g)) {
123
+ const reference = readXmlAttribute(cell[1], 'r') || '?';
124
+ const type = readXmlAttribute(cell[1], 't');
125
+ const raw = firstXmlTagText(cell[2], 'v');
126
+ const value =
127
+ type === 's'
128
+ ? shared[Number(raw)] || ''
129
+ : type === 'inlineStr'
130
+ ? extractXmlText(cell[2], 't')
131
+ : decodeXmlEntities(raw);
132
+ if (value) {
133
+ lines.push(`${reference}=${value}`);
134
+ }
135
+ }
136
+ }
137
+ return lines.join('\n');
138
+ }
139
+
140
+ function extractXmlText(xml, tagName) {
141
+ const tag = tagName.replace(':', '\\:');
142
+ return [...xml.matchAll(new RegExp(`<${tag}\\b[^>]*>([\\s\\S]*?)<\\/${tag}>`, 'g'))]
143
+ .map((match) => decodeXmlEntities(match[1]))
144
+ .join('');
145
+ }
146
+
147
+ function firstXmlTagText(xml, tagName) {
148
+ const match = new RegExp(`<${tagName}\\b[^>]*>([\\s\\S]*?)<\\/${tagName}>`).exec(xml);
149
+ return match ? decodeXmlEntities(match[1]) : '';
150
+ }
151
+
152
+ function readXmlAttribute(attributes, name) {
153
+ const match = new RegExp(`(?:^|\\s)${name}=(?:"([^"]*)"|'([^']*)')`).exec(attributes);
154
+ return match ? match[1] || match[2] : undefined;
155
+ }
156
+
157
+ function decodeXmlEntities(value) {
158
+ return value
159
+ .replace(/<[^>]+>/g, '')
160
+ .replace(/&lt;/g, '<')
161
+ .replace(/&gt;/g, '>')
162
+ .replace(/&quot;/g, '"')
163
+ .replace(/&apos;/g, "'")
164
+ .replace(/&amp;/g, '&')
165
+ .replace(/&#(\d+);/g, (_match, code) => String.fromCodePoint(Number(code)))
166
+ .replace(/&#x([0-9a-f]+);/gi, (_match, code) => String.fromCodePoint(parseInt(code, 16)));
167
+ }
168
+
169
+ function truncateUtf8(content, maxBytes) {
170
+ const bytes = Buffer.from(content);
171
+ if (bytes.length <= maxBytes) {
172
+ return content;
173
+ }
174
+ let end = maxBytes;
175
+ while (end > 0 && (bytes[end] & 0xc0) === 0x80) {
176
+ end -= 1;
177
+ }
178
+ return `${bytes.subarray(0, end).toString('utf8')}\n\n[Truncated at ${maxBytes} bytes]`;
179
+ }
@@ -0,0 +1,36 @@
1
+ import Foundation
2
+ import PDFKit
3
+
4
+ guard CommandLine.arguments.count == 3, let maxBytes = Int(CommandLine.arguments[2]), maxBytes > 0 else {
5
+ fputs("usage: extract-pdf-text.swift <pdf-path> <max-output-bytes>\n", stderr)
6
+ exit(2)
7
+ }
8
+
9
+ let url = URL(fileURLWithPath: CommandLine.arguments[1])
10
+ guard let document = PDFDocument(url: url) else {
11
+ fputs("unable to open PDF\n", stderr)
12
+ exit(1)
13
+ }
14
+
15
+ var written = 0
16
+ for index in 0..<document.pageCount {
17
+ if let text = document.page(at: index)?.string, !text.isEmpty {
18
+ let separator = written == 0 ? "" : "\n\n"
19
+ let data = (separator + text).data(using: .utf8) ?? Data()
20
+ let remaining = maxBytes - written
21
+ if remaining <= 0 { break }
22
+ var bounded = Data()
23
+ var prefixLength = min(remaining, data.count)
24
+ while prefixLength > 0 {
25
+ let candidate = Data(data.prefix(prefixLength))
26
+ if String(data: candidate, encoding: .utf8) != nil {
27
+ bounded = candidate
28
+ break
29
+ }
30
+ prefixLength -= 1
31
+ }
32
+ FileHandle.standardOutput.write(bounded)
33
+ written += bounded.count
34
+ if bounded.count < data.count { break }
35
+ }
36
+ }