@jungjaehoon/mama-os 0.21.0 → 0.22.1

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 (151) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +12 -4
  3. package/dist/agent/agent-loop.d.ts.map +1 -1
  4. package/dist/agent/agent-loop.js +76 -11
  5. package/dist/agent/agent-loop.js.map +1 -1
  6. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  7. package/dist/agent/code-act/host-bridge.js +74 -0
  8. package/dist/agent/code-act/host-bridge.js.map +1 -1
  9. package/dist/agent/codex-mcp-process.d.ts +1 -0
  10. package/dist/agent/codex-mcp-process.d.ts.map +1 -1
  11. package/dist/agent/codex-mcp-process.js +3 -2
  12. package/dist/agent/codex-mcp-process.js.map +1 -1
  13. package/dist/agent/gateway-tool-executor.d.ts +16 -1
  14. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  15. package/dist/agent/gateway-tool-executor.js +148 -2
  16. package/dist/agent/gateway-tool-executor.js.map +1 -1
  17. package/dist/agent/gateway-tools.md +6 -1
  18. package/dist/agent/model-runner.d.ts +8 -0
  19. package/dist/agent/model-runner.d.ts.map +1 -1
  20. package/dist/agent/model-runner.js.map +1 -1
  21. package/dist/agent/persistent-cli-adapter.d.ts +6 -0
  22. package/dist/agent/persistent-cli-adapter.d.ts.map +1 -1
  23. package/dist/agent/persistent-cli-adapter.js +21 -10
  24. package/dist/agent/persistent-cli-adapter.js.map +1 -1
  25. package/dist/agent/tool-registry.d.ts.map +1 -1
  26. package/dist/agent/tool-registry.js +32 -1
  27. package/dist/agent/tool-registry.js.map +1 -1
  28. package/dist/agent/types.d.ts +26 -2
  29. package/dist/agent/types.d.ts.map +1 -1
  30. package/dist/agent/types.js.map +1 -1
  31. package/dist/api/index.d.ts +1 -1
  32. package/dist/api/index.d.ts.map +1 -1
  33. package/dist/api/index.js +15 -13
  34. package/dist/api/index.js.map +1 -1
  35. package/dist/api/operator-handler.d.ts +2 -0
  36. package/dist/api/operator-handler.d.ts.map +1 -1
  37. package/dist/api/operator-handler.js +23 -5
  38. package/dist/api/operator-handler.js.map +1 -1
  39. package/dist/api/operator-summary.d.ts +3 -0
  40. package/dist/api/operator-summary.d.ts.map +1 -0
  41. package/dist/api/operator-summary.js +72 -0
  42. package/dist/api/operator-summary.js.map +1 -0
  43. package/dist/api/operator-tasks-handler.d.ts +7 -0
  44. package/dist/api/operator-tasks-handler.d.ts.map +1 -0
  45. package/dist/api/operator-tasks-handler.js +165 -0
  46. package/dist/api/operator-tasks-handler.js.map +1 -0
  47. package/dist/cli/commands/start.d.ts.map +1 -1
  48. package/dist/cli/commands/start.js +62 -12
  49. package/dist/cli/commands/start.js.map +1 -1
  50. package/dist/cli/runtime/agent-loop-init.d.ts +2 -1
  51. package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
  52. package/dist/cli/runtime/agent-loop-init.js +16 -8
  53. package/dist/cli/runtime/agent-loop-init.js.map +1 -1
  54. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  55. package/dist/cli/runtime/api-routes-init.js +196 -158
  56. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  57. package/dist/cli/runtime/gateway-init.d.ts.map +1 -1
  58. package/dist/cli/runtime/gateway-init.js +3 -1
  59. package/dist/cli/runtime/gateway-init.js.map +1 -1
  60. package/dist/cli/runtime/gateway-wiring.d.ts.map +1 -1
  61. package/dist/cli/runtime/gateway-wiring.js +6 -0
  62. package/dist/cli/runtime/gateway-wiring.js.map +1 -1
  63. package/dist/cli/runtime/memory-agent-init.d.ts +2 -1
  64. package/dist/cli/runtime/memory-agent-init.d.ts.map +1 -1
  65. package/dist/cli/runtime/memory-agent-init.js +15 -3
  66. package/dist/cli/runtime/memory-agent-init.js.map +1 -1
  67. package/dist/connectors/framework/types.d.ts +8 -0
  68. package/dist/connectors/framework/types.d.ts.map +1 -1
  69. package/dist/connectors/slack/index.d.ts.map +1 -1
  70. package/dist/connectors/slack/index.js +3 -1
  71. package/dist/connectors/slack/index.js.map +1 -1
  72. package/dist/connectors/trello/index.d.ts.map +1 -1
  73. package/dist/connectors/trello/index.js +6 -2
  74. package/dist/connectors/trello/index.js.map +1 -1
  75. package/dist/db/agent-store.d.ts +5 -0
  76. package/dist/db/agent-store.d.ts.map +1 -1
  77. package/dist/db/agent-store.js +6 -3
  78. package/dist/db/agent-store.js.map +1 -1
  79. package/dist/db/migrations/agent-activity-tool-name.d.ts +8 -0
  80. package/dist/db/migrations/agent-activity-tool-name.d.ts.map +1 -0
  81. package/dist/db/migrations/agent-activity-tool-name.js +24 -0
  82. package/dist/db/migrations/agent-activity-tool-name.js.map +1 -0
  83. package/dist/envelope/run-guard.d.ts +10 -0
  84. package/dist/envelope/run-guard.d.ts.map +1 -0
  85. package/dist/envelope/run-guard.js +19 -0
  86. package/dist/envelope/run-guard.js.map +1 -0
  87. package/dist/gateways/telegram.d.ts +1 -0
  88. package/dist/gateways/telegram.d.ts.map +1 -1
  89. package/dist/gateways/telegram.js +25 -1
  90. package/dist/gateways/telegram.js.map +1 -1
  91. package/dist/memory/history-extractor.d.ts.map +1 -1
  92. package/dist/memory/history-extractor.js +10 -5
  93. package/dist/memory/history-extractor.js.map +1 -1
  94. package/dist/multi-agent/agent-event-bus.d.ts +4 -0
  95. package/dist/multi-agent/agent-event-bus.d.ts.map +1 -1
  96. package/dist/multi-agent/agent-event-bus.js.map +1 -1
  97. package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
  98. package/dist/multi-agent/dashboard-agent-persona.js +18 -5
  99. package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
  100. package/dist/multi-agent/runtime-process.d.ts +4 -2
  101. package/dist/multi-agent/runtime-process.d.ts.map +1 -1
  102. package/dist/multi-agent/runtime-process.js +7 -4
  103. package/dist/multi-agent/runtime-process.js.map +1 -1
  104. package/dist/observability/code-audit.d.ts +83 -0
  105. package/dist/observability/code-audit.d.ts.map +1 -0
  106. package/dist/observability/code-audit.js +334 -0
  107. package/dist/observability/code-audit.js.map +1 -0
  108. package/dist/operator/action-verifier.d.ts +50 -0
  109. package/dist/operator/action-verifier.d.ts.map +1 -0
  110. package/dist/operator/action-verifier.js +68 -0
  111. package/dist/operator/action-verifier.js.map +1 -0
  112. package/dist/operator/board-reconcile.d.ts +62 -0
  113. package/dist/operator/board-reconcile.d.ts.map +1 -0
  114. package/dist/operator/board-reconcile.js +160 -0
  115. package/dist/operator/board-reconcile.js.map +1 -0
  116. package/dist/operator/board-slot-instructions.d.ts +8 -0
  117. package/dist/operator/board-slot-instructions.d.ts.map +1 -1
  118. package/dist/operator/board-slot-instructions.js +25 -1
  119. package/dist/operator/board-slot-instructions.js.map +1 -1
  120. package/dist/operator/operator-trigger-loop.d.ts +15 -2
  121. package/dist/operator/operator-trigger-loop.d.ts.map +1 -1
  122. package/dist/operator/operator-trigger-loop.js +40 -1
  123. package/dist/operator/operator-trigger-loop.js.map +1 -1
  124. package/dist/operator/report-scheduler.d.ts +23 -0
  125. package/dist/operator/report-scheduler.d.ts.map +1 -1
  126. package/dist/operator/report-scheduler.js +56 -8
  127. package/dist/operator/report-scheduler.js.map +1 -1
  128. package/dist/operator/situation-report.d.ts +5 -1
  129. package/dist/operator/situation-report.d.ts.map +1 -1
  130. package/dist/operator/situation-report.js +14 -3
  131. package/dist/operator/situation-report.js.map +1 -1
  132. package/dist/operator/task-ledger.d.ts +96 -0
  133. package/dist/operator/task-ledger.d.ts.map +1 -0
  134. package/dist/operator/task-ledger.js +277 -0
  135. package/dist/operator/task-ledger.js.map +1 -0
  136. package/dist/security/security-monitor.d.ts +12 -0
  137. package/dist/security/security-monitor.d.ts.map +1 -1
  138. package/dist/security/security-monitor.js +51 -14
  139. package/dist/security/security-monitor.js.map +1 -1
  140. package/dist/utils/untrusted-content.d.ts +18 -0
  141. package/dist/utils/untrusted-content.d.ts.map +1 -0
  142. package/dist/utils/untrusted-content.js +34 -0
  143. package/dist/utils/untrusted-content.js.map +1 -0
  144. package/package.json +1 -1
  145. package/public/ui/assets/index-CKOJQYXA.css +1 -0
  146. package/public/ui/assets/index-OSgiwL24.js +62 -0
  147. package/public/ui/index.html +3 -2
  148. package/public/ui/theme-init.js +20 -0
  149. package/public/viewer/viewer.html +12 -28
  150. package/public/ui/assets/index-BDsaQNGd.js +0 -62
  151. package/public/ui/assets/index-C4URnm_X.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"operator-handler.d.ts","sourceRoot":"","sources":["../../src/api/operator-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAuBjC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAoDrE"}
1
+ {"version":3,"file":"operator-handler.d.ts","sourceRoot":"","sources":["../../src/api/operator-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAOjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAwBvD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAAG,MAAM,CA+D/F"}
@@ -20,16 +20,23 @@ const express_1 = require("express");
20
20
  const node_fs_1 = require("node:fs");
21
21
  const node_path_1 = require("node:path");
22
22
  const sqlite_js_1 = __importDefault(require("../sqlite.js"));
23
+ const task_ledger_js_1 = require("../operator/task-ledger.js");
23
24
  const trigger_registry_js_1 = require("../operator/trigger-registry.js");
25
+ const operator_summary_js_1 = require("./operator-summary.js");
24
26
  /** TriggerRecord nests counters (stats.*) -- flatten explicitly, never spread. */
25
27
  function toWire(t) {
26
28
  return {
27
29
  id: t.id,
28
30
  kind: t.kind,
29
31
  memoryQuery: t.memoryQuery,
32
+ match: t.match,
33
+ procedure: t.procedure,
34
+ requiredEvidence: t.requiredEvidence,
30
35
  status: t.status,
31
36
  authoredBy: t.authoredBy,
32
37
  createdAt: t.createdAt,
38
+ updatedAt: t.updatedAt,
39
+ provenance: t.provenance,
33
40
  fired: t.stats.fired,
34
41
  succeeded: t.stats.succeeded,
35
42
  failed: t.stats.failed,
@@ -41,22 +48,33 @@ function createOperatorRouter(opts) {
41
48
  // existing tests that never call /api/operator -- an eager open would touch
42
49
  // the real ~/.mama path from every one of them (the PR #126 pollution class)
43
50
  // and crash on fresh installs where the parent directory does not exist yet.
44
- let registry = null;
45
- const getRegistry = () => {
46
- if (!registry) {
51
+ let lazyState = null;
52
+ const getLazyState = () => {
53
+ if (!lazyState) {
47
54
  (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(opts.dbPath), { recursive: true });
48
55
  const db = new sqlite_js_1.default(opts.dbPath);
49
56
  db.prepare('PRAGMA busy_timeout = 5000').get();
50
- registry = new trigger_registry_js_1.TriggerRegistry(db);
57
+ lazyState = {
58
+ registry: new trigger_registry_js_1.TriggerRegistry(db),
59
+ taskLedger: new task_ledger_js_1.TaskLedger(db),
60
+ };
51
61
  }
52
- return registry;
62
+ return lazyState;
53
63
  };
64
+ const getRegistry = () => getLazyState().registry;
65
+ const getTaskLedger = () => getLazyState().taskLedger;
54
66
  const router = (0, express_1.Router)();
55
67
  router.get('/summary', (_req, res) => {
56
68
  const all = getRegistry().listAll();
57
69
  const active = all.filter((t) => t.status === 'active');
58
70
  const disabled = all.filter((t) => t.status === 'disabled');
59
71
  res.json({
72
+ report: {
73
+ actionRequired: (0, operator_summary_js_1.countActionRequiredCards)(opts.reportStore.get('action_required')?.html),
74
+ },
75
+ tasks: {
76
+ unconfirmed: getTaskLedger().countOpenUnconfirmed(),
77
+ },
60
78
  triggers: {
61
79
  active: active.length,
62
80
  disabled: disabled.length,
@@ -1 +1 @@
1
- {"version":3,"file":"operator-handler.js","sourceRoot":"","sources":["../../src/api/operator-handler.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;AAyBH,oDAoDC;AA3ED,qCAAiC;AACjC,qCAAoC;AACpC,yCAAoC;AACpC,6DAAoC;AACpC,yEAAkE;AAGlE,kFAAkF;AAClF,SAAS,MAAM,CAAC,CAAgB;IAC9B,OAAO;QACL,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,UAAU,EAAE,CAAC,CAAC,UAAU;QACxB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK;QACpB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS;QAC5B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;QACtB,cAAc,EAAE,CAAC,CAAC,cAAc,IAAI,IAAI;KACzC,CAAC;AACJ,CAAC;AAED,SAAgB,oBAAoB,CAAC,IAAwB;IAC3D,wEAAwE;IACxE,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,IAAI,QAAQ,GAA2B,IAAI,CAAC;IAC5C,MAAM,WAAW,GAAG,GAAoB,EAAE;QACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAA,mBAAS,EAAC,IAAA,mBAAO,EAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,EAAE,GAAG,IAAI,mBAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,EAAE,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC,GAAG,EAAE,CAAC;YAC/C,QAAQ,GAAG,IAAI,qCAAe,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IAExB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;QAC5D,GAAG,CAAC,IAAI,CAAC;YACP,QAAQ,EAAE;gBACR,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,QAAQ,CAAC,MAAM;gBACzB,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACjD,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBACzD,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;aACpD;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACpC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAChD,MAAM,MAAM,GAAI,GAAG,CAAC,IAAwC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QACnC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YAC/B,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAClD,iEAAiE;QACjE,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,uBAAuB,MAAM,EAAE,CAAC,CAAC;QACzE,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"operator-handler.js","sourceRoot":"","sources":["../../src/api/operator-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function countElementsWithClass(html: string | undefined, className: string): number;
2
+ export declare function countActionRequiredCards(html: string | undefined): number;
3
+ //# sourceMappingURL=operator-summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator-summary.d.ts","sourceRoot":"","sources":["../../src/api/operator-summary.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAqE1F;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.countElementsWithClass = countElementsWithClass;
4
+ exports.countActionRequiredCards = countActionRequiredCards;
5
+ function countElementsWithClass(html, className) {
6
+ if (!html || !className) {
7
+ return 0;
8
+ }
9
+ const uncommentedHtml = html.replace(/<!--[\s\S]*?(?:-->|$)/g, '');
10
+ const elementPattern = /<[A-Za-z][A-Za-z0-9:-]*\b(?:[^>"']|"[^"]*"|'[^']*')*>/g;
11
+ let count = 0;
12
+ for (const match of uncommentedHtml.matchAll(elementPattern)) {
13
+ const openingTag = match[0];
14
+ const tagName = /^<[A-Za-z][A-Za-z0-9:-]*/.exec(openingTag);
15
+ if (!tagName) {
16
+ continue;
17
+ }
18
+ let index = tagName[0].length;
19
+ while (index < openingTag.length) {
20
+ while (/\s/.test(openingTag[index] ?? '')) {
21
+ index += 1;
22
+ }
23
+ if (openingTag[index] === '>' || openingTag[index] === '/') {
24
+ break;
25
+ }
26
+ const nameStart = index;
27
+ while (index < openingTag.length && !/[\s=/>]/.test(openingTag[index] ?? '')) {
28
+ index += 1;
29
+ }
30
+ if (index === nameStart) {
31
+ index += 1;
32
+ continue;
33
+ }
34
+ const attributeName = openingTag.slice(nameStart, index).toLowerCase();
35
+ while (/\s/.test(openingTag[index] ?? '')) {
36
+ index += 1;
37
+ }
38
+ if (openingTag[index] !== '=') {
39
+ continue;
40
+ }
41
+ index += 1;
42
+ while (/\s/.test(openingTag[index] ?? '')) {
43
+ index += 1;
44
+ }
45
+ const quote = openingTag[index];
46
+ if (quote !== '"' && quote !== "'") {
47
+ while (index < openingTag.length && !/[\s>]/.test(openingTag[index] ?? '')) {
48
+ index += 1;
49
+ }
50
+ continue;
51
+ }
52
+ const valueStart = index + 1;
53
+ const valueEnd = openingTag.indexOf(quote, valueStart);
54
+ if (valueEnd === -1) {
55
+ break;
56
+ }
57
+ if (attributeName === 'class') {
58
+ const classTokens = openingTag.slice(valueStart, valueEnd).split(/\s+/).filter(Boolean);
59
+ if (classTokens.includes(className)) {
60
+ count += 1;
61
+ }
62
+ break;
63
+ }
64
+ index = valueEnd + 1;
65
+ }
66
+ }
67
+ return count;
68
+ }
69
+ function countActionRequiredCards(html) {
70
+ return countElementsWithClass(html, 'report-card');
71
+ }
72
+ //# sourceMappingURL=operator-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator-summary.js","sourceRoot":"","sources":["../../src/api/operator-summary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Express } from 'express';
2
+ import { type TaskLedger } from '../operator/task-ledger.js';
3
+ export interface OperatorTaskRouteDeps {
4
+ getTaskLedger: () => TaskLedger | null;
5
+ }
6
+ export declare function registerOperatorTaskRoutes(app: Express, deps: OperatorTaskRouteDeps): void;
7
+ //# sourceMappingURL=operator-tasks-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator-tasks-handler.d.ts","sourceRoot":"","sources":["../../src/api/operator-tasks-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAqB,MAAM,SAAS,CAAC;AAE1D,OAAO,EAGL,KAAK,UAAU,EAKhB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC;CACxC;AAoHD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAsD1F"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.registerOperatorTaskRoutes = registerOperatorTaskRoutes;
4
+ const auth_middleware_js_1 = require("./auth-middleware.js");
5
+ const task_ledger_js_1 = require("../operator/task-ledger.js");
6
+ const ALLOWED_PATCH_FIELDS = new Set(['status', 'priority', 'assignee', 'due_date', 'confirmed']);
7
+ const ISO_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
8
+ function serializeTask(task) {
9
+ return {
10
+ id: task.id,
11
+ title: task.title,
12
+ status: task.status,
13
+ priority: task.priority,
14
+ assignee: task.assignee,
15
+ due_date: task.deadlineIso,
16
+ source_channel: task.sourceChannel,
17
+ latest_event: task.latestEvent,
18
+ auto_created: task.autoCreated,
19
+ confirmed: task.confirmed,
20
+ created_at: task.createdAt,
21
+ updated_at: task.updatedAt,
22
+ };
23
+ }
24
+ function isValidDate(value) {
25
+ if (!ISO_DATE_PATTERN.test(value)) {
26
+ return false;
27
+ }
28
+ const [year, month, day] = value.split('-').map(Number);
29
+ const date = new Date(Date.UTC(year, month - 1, day));
30
+ return (date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day);
31
+ }
32
+ function readStringQuery(value, field) {
33
+ if (value === undefined)
34
+ return undefined;
35
+ if (typeof value !== 'string') {
36
+ throw new Error(`${field} must be a string`);
37
+ }
38
+ return value;
39
+ }
40
+ function readLimit(value) {
41
+ if (value === undefined)
42
+ return 50;
43
+ if (typeof value !== 'string' || !/^\d+$/.test(value)) {
44
+ throw new Error('limit must be an integer from 1 to 200');
45
+ }
46
+ const limit = Number(value);
47
+ if (!Number.isSafeInteger(limit) || limit < 1 || limit > 200) {
48
+ throw new Error('limit must be an integer from 1 to 200');
49
+ }
50
+ return limit;
51
+ }
52
+ function validatePatchBody(body) {
53
+ if (body === null || typeof body !== 'object' || Array.isArray(body)) {
54
+ throw new Error('body must be a non-empty object');
55
+ }
56
+ const input = body;
57
+ const keys = Object.keys(input);
58
+ if (keys.length === 0) {
59
+ throw new Error('body must be a non-empty object');
60
+ }
61
+ const unknownFields = keys.filter((key) => !ALLOWED_PATCH_FIELDS.has(key));
62
+ if (unknownFields.length > 0) {
63
+ throw new Error(`unknown fields: ${unknownFields.join(', ')}`);
64
+ }
65
+ const patch = {};
66
+ if ('status' in input) {
67
+ if (typeof input.status !== 'string' || !task_ledger_js_1.TASK_STATUSES.includes(input.status)) {
68
+ throw new Error(`status must be one of ${task_ledger_js_1.TASK_STATUSES.join('|')}`);
69
+ }
70
+ patch.status = input.status;
71
+ }
72
+ if ('priority' in input) {
73
+ if (typeof input.priority !== 'string' ||
74
+ !task_ledger_js_1.TASK_PRIORITIES.includes(input.priority)) {
75
+ throw new Error(`priority must be one of ${task_ledger_js_1.TASK_PRIORITIES.join('|')}`);
76
+ }
77
+ patch.priority = input.priority;
78
+ }
79
+ if ('assignee' in input) {
80
+ if (input.assignee !== null && typeof input.assignee !== 'string') {
81
+ throw new Error('assignee must be a string or null');
82
+ }
83
+ patch.assignee = input.assignee === null ? null : input.assignee.trim();
84
+ }
85
+ if ('due_date' in input) {
86
+ if (input.due_date !== null && typeof input.due_date !== 'string') {
87
+ throw new Error('due_date must be a YYYY-MM-DD date or null');
88
+ }
89
+ if (typeof input.due_date === 'string' && !isValidDate(input.due_date)) {
90
+ throw new Error('due_date must be a real YYYY-MM-DD calendar date or null');
91
+ }
92
+ patch.deadline = input.due_date;
93
+ }
94
+ if ('confirmed' in input) {
95
+ if (typeof input.confirmed !== 'boolean') {
96
+ throw new Error('confirmed must be a boolean');
97
+ }
98
+ patch.confirmed = input.confirmed;
99
+ }
100
+ return patch;
101
+ }
102
+ function getLedgerOr503(deps, res) {
103
+ const ledger = deps.getTaskLedger();
104
+ if (!ledger) {
105
+ res.status(503).json({ error: 'task ledger unavailable' });
106
+ return null;
107
+ }
108
+ return ledger;
109
+ }
110
+ function registerOperatorTaskRoutes(app, deps) {
111
+ app.get('/api/operator/tasks', auth_middleware_js_1.requireAuth, (req, res) => {
112
+ const ledger = getLedgerOr503(deps, res);
113
+ if (!ledger)
114
+ return;
115
+ try {
116
+ const status = readStringQuery(req.query.status, 'status');
117
+ if (status !== undefined && !task_ledger_js_1.TASK_STATUSES.includes(status)) {
118
+ res.status(400).json({
119
+ error: `status must be one of ${task_ledger_js_1.TASK_STATUSES.join('|')}`,
120
+ });
121
+ return;
122
+ }
123
+ const sourceChannel = readStringQuery(req.query.source_channel, 'source_channel');
124
+ const limit = readLimit(req.query.limit);
125
+ const tasks = ledger.list({
126
+ status: status,
127
+ channel: sourceChannel,
128
+ limit,
129
+ order: 'deadline_priority',
130
+ });
131
+ res.json({ tasks: tasks.map(serializeTask) });
132
+ }
133
+ catch (error) {
134
+ res.status(400).json({ error: error instanceof Error ? error.message : String(error) });
135
+ }
136
+ });
137
+ app.patch('/api/operator/tasks/:id', auth_middleware_js_1.requireAuth, (req, res) => {
138
+ const ledger = getLedgerOr503(deps, res);
139
+ if (!ledger)
140
+ return;
141
+ const rawId = req.params.id;
142
+ if (typeof rawId !== 'string' || !/^[1-9]\d*$/.test(rawId)) {
143
+ res.status(400).json({ error: 'id must be a positive base-10 integer' });
144
+ return;
145
+ }
146
+ const id = Number(rawId);
147
+ if (!Number.isSafeInteger(id)) {
148
+ res.status(400).json({ error: 'id must be a positive base-10 integer' });
149
+ return;
150
+ }
151
+ if (!ledger.getById(id)) {
152
+ res.status(404).json({ error: 'task not found' });
153
+ return;
154
+ }
155
+ try {
156
+ const patch = validatePatchBody(req.body);
157
+ const task = ledger.update(id, patch);
158
+ res.json({ ok: true, task: serializeTask(task) });
159
+ }
160
+ catch (error) {
161
+ res.status(400).json({ error: error instanceof Error ? error.message : String(error) });
162
+ }
163
+ });
164
+ }
165
+ //# sourceMappingURL=operator-tasks-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operator-tasks-handler.js","sourceRoot":"","sources":["../../src/api/operator-tasks-handler.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
@@ -65,6 +65,7 @@ const index_js_2 = require("../../gateways/index.js");
65
65
  const graph_api_js_1 = require("../../api/graph-api.js");
66
66
  const sqlite_js_1 = __importDefault(require("../../sqlite.js"));
67
67
  const node_fs_1 = require("node:fs");
68
+ const node_path_1 = require("node:path");
68
69
  const minimatch_1 = require("minimatch");
69
70
  const ui_command_handler_js_1 = require("../../api/ui-command-handler.js");
70
71
  const agent_store_js_1 = require("../../db/agent-store.js");
@@ -104,6 +105,9 @@ const CODE_ACT_MUTATION_TOOLS = new Set([
104
105
  'mama_ingest',
105
106
  'report_publish',
106
107
  'wiki_publish',
108
+ 'task_create',
109
+ 'task_update',
110
+ 'contract_no_update',
107
111
  ]);
108
112
  function isTruthyEnvValue(value) {
109
113
  return value !== undefined && TRUTHY_ENV_VALUES.has(value.trim().toLowerCase());
@@ -499,12 +503,17 @@ async function runAgentLoop(config, options = {}) {
499
503
  }
500
504
  const agentLoopBackend = runtimeBackend === 'codex' || runtimeBackend === 'codex-mcp' ? 'codex-mcp' : 'claude';
501
505
  // Initialize main agent loop + client (reasoning state is closure-scoped inside)
502
- const { agentLoop, agentLoopClient } = (0, agent_loop_init_js_1.initMainAgentLoop)(config, oauthManager, db, metricsStore, agentLoopBackend, {
506
+ const { agentLoop, agentLoopClient } = (0, agent_loop_init_js_1.initMainAgentLoop)(config, oauthManager, db, metricsStore, agentLoopBackend, toolExecutor, {
503
507
  ...options,
504
508
  envelopeIssuanceMode: envelopeBootstrap.metadata.issuance,
505
509
  });
506
510
  // ── Phase 3: MAMA Core API ────────────────────────────────────────────────
507
511
  const { mamaApi, mamaApiClient, connectorExtractionFn } = await (0, mama_core_init_js_1.initMamaCore)(config);
512
+ // Wire the boot MAMA API onto the shared executor so it never lazily builds a
513
+ // SECOND API/adapter stack against the same DB (initializeMAMAApi). This also
514
+ // lets the memory agent fold into the shared executor (Task 7) instead of
515
+ // carrying its own private instance just for this API.
516
+ toolExecutor.setMamaApi(mamaApi);
508
517
  // getAdapter is still used directly in this file for DB queries after initDB has run
509
518
  // eslint-disable-next-line @typescript-eslint/no-require-imports
510
519
  const { getAdapter } = require('@jungjaehoon/mama-core/db-manager');
@@ -517,7 +526,7 @@ async function runAgentLoop(config, options = {}) {
517
526
  const messageRouter = new index_js_2.MessageRouter(sessionStore, agentLoopClient, mamaApiClient, (0, message_router_config_js_1.resolveMessageRouterConfig)(config, runtimeBackend), envelopeBootstrap.envelopeConfig, envelopeBootstrap.envelopeAuthority);
518
527
  messageRouter.setSessionsDb(db);
519
528
  // validationService wired after creation (Phase 5 below)
520
- const { memoryAgentLoop } = await (0, memory_agent_init_js_1.initMemoryAgent)(oauthManager, config, mamaApi, mamaApiClient, messageRouter, agentLoopBackend);
529
+ const { memoryAgentLoop } = await (0, memory_agent_init_js_1.initMemoryAgent)(oauthManager, config, mamaApi, mamaApiClient, messageRouter, agentLoopBackend, toolExecutor);
521
530
  // ── Phase 5: Graph Handler + Embedding ────────────────────────────────────
522
531
  // Create singleton UI command queue for Agent↔Viewer communication
523
532
  const uiCommandQueue = new ui_command_handler_js_1.UICommandQueue();
@@ -832,6 +841,37 @@ async function runAgentLoop(config, options = {}) {
832
841
  // and point it at the loop once it exists. Null until then -> nudge no-ops (no loop = nothing to
833
842
  // wake), which preserves today's behavior when MAMA_TRIGGER_LOOP is unset.
834
843
  const triggerLoopNudge = { current: null };
844
+ // M8: board-reconcile feed. The trigger loop is built BEFORE the event bus
845
+ // exists (initApiServer), so it emits through this mutable sink (same
846
+ // pattern as triggerLoopNudge above).
847
+ const channelDeltaSink = {
848
+ current: null,
849
+ };
850
+ // Operator DB + native task ledger (M8): wired UNCONDITIONALLY -- the task
851
+ // tools are standard gateway tools and must work even when the trigger loop
852
+ // is off (review finding on #142). Single handle, closed once at shutdown.
853
+ const operatorDbPath = (0, config_manager_js_1.expandPath)('~/.mama/operator/triggers.db');
854
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(operatorDbPath), { recursive: true });
855
+ const operatorDb = new sqlite_js_1.default(operatorDbPath);
856
+ try {
857
+ const { TaskLedger } = await import('../../operator/task-ledger.js');
858
+ toolExecutor.setTaskLedger(new TaskLedger(operatorDb));
859
+ }
860
+ catch (err) {
861
+ // Fail loud, but do not leak the handle on a failed boot.
862
+ operatorDb.close();
863
+ throw err;
864
+ }
865
+ gateways.push({
866
+ stop: async () => {
867
+ try {
868
+ operatorDb.close();
869
+ }
870
+ catch {
871
+ /* already closed */
872
+ }
873
+ },
874
+ });
835
875
  const { rawStoreForApi, enabledConnectorNames, connectorSchedulerStop } = await (0, connector_init_js_1.initConnectors)(connectorExtractionFn, { nudge: () => triggerLoopNudge.current?.() });
836
876
  codeActRawConnectors = resolveCodeActRawConnectors(enabledConnectorNames);
837
877
  // Inject rawStore into tool executor for agent_test connector data access
@@ -858,15 +898,11 @@ async function runAgentLoop(config, options = {}) {
858
898
  const { createMamaMemoryPort } = await import('../../operator/mama-memory-port.js');
859
899
  const { askAgentCLI } = await import('../../operator/trigger-author.js');
860
900
  const { reviewTriggerCLI } = await import('../../operator/trigger-review.js');
861
- const { mkdirSync } = await import('node:fs');
862
- const { dirname } = await import('node:path');
863
901
  const { ReportScheduler, FileReportScheduleStore, parseReportHours } = await import('../../operator/report-scheduler.js');
864
902
  const { createPersonaReportAsk, OPERATOR_REPORT_SESSION_KEY } = await import('../../operator/report-run.js');
865
903
  const { OPERATOR_FULL_REPORT_TAG } = await import('../../operator/situation-report.js');
866
904
  const { buildBoardPublishLines } = await import('../../operator/board-slot-instructions.js');
867
- const triggerDbPath = (0, config_manager_js_1.expandPath)('~/.mama/operator/triggers.db');
868
- mkdirSync(dirname(triggerDbPath), { recursive: true });
869
- const triggerRegistry = new TriggerRegistry(new sqlite_js_1.default(triggerDbPath));
905
+ const triggerRegistry = new TriggerRegistry(operatorDb);
870
906
  // Owner-report leg (M1.5): destination chat comes from env (~/.mama/start.sh),
871
907
  // never source. No chat configured or no telegram gateway -> loop stays read-only.
872
908
  const reportChatId = process.env.MAMA_TRIGGER_LOOP_REPORT_CHAT || '';
@@ -883,6 +919,7 @@ async function runAgentLoop(config, options = {}) {
883
919
  delta: new ConnectorDeltaRepo(getAdapter(), (0, config_manager_js_1.expandPath)('~/.mama/operator/trigger-loop-cursors.json')),
884
920
  memory: createMamaMemoryPort(),
885
921
  registry: triggerRegistry,
922
+ onChannelDelta: (channelKey, lines) => channelDeltaSink.current?.(channelKey, lines),
886
923
  askAgent: askAgentCLI,
887
924
  // M2.2: reports go through the daemon's persona agent (system prompt, pinned model,
888
925
  // session lanes) instead of the bare CLI - report tone comes from generation inputs.
@@ -900,7 +937,11 @@ async function runAgentLoop(config, options = {}) {
900
937
  issueEnvelope: envelopeBootstrap.envelopeAuthority && envelopeBootstrap.metadata.issuance !== 'off'
901
938
  ? async () => {
902
939
  const projectId = (0, reactive_config_js_1.resolveReactiveProjectRoot)(config, process.env);
903
- const wallSeconds = Math.min(Math.max(Math.floor((config.timeouts?.agent_ms ?? 300_000) / 1000), 1), 300);
940
+ // A report run is multi-turn (each turn may take up to agent_ms).
941
+ // The TTL must cover the RUN, not one request - otherwise every
942
+ // long gather structurally outlives its envelope and all
943
+ // end-of-run writes die '[expired]' (9 observed pre-fix).
944
+ const wallSeconds = Math.min(Math.max(Number(process.env.MAMA_REPORT_WALL_SECONDS) || 900, 60), 1800);
904
945
  return envelopeBootstrap.envelopeAuthority.buildAndPersist({
905
946
  agent_id: 'operator-report',
906
947
  instance_id: (0, node_crypto_1.randomUUID)(),
@@ -932,6 +973,11 @@ async function runAgentLoop(config, options = {}) {
932
973
  sessionKey: OPERATOR_REPORT_SESSION_KEY,
933
974
  source: 'operator',
934
975
  channelId: 'report',
976
+ // Stateless report lane: each run starts on a fresh session so the
977
+ // continuous session no longer accumulates every run's gather dumps
978
+ // (measured 146s -> 521s growth over 3 days). Continuity comes from
979
+ // the storage layer (self-gather + mama_recall + report store).
980
+ freshSession: true,
935
981
  ...(envelope ? { envelope } : {}),
936
982
  });
937
983
  return { response: result.response, history: result.history };
@@ -945,11 +991,14 @@ async function runAgentLoop(config, options = {}) {
945
991
  // M2.3: the scheduled full report self-gathers via the persona agent's gateway tools
946
992
  // (the Kagemusha lesson: a reporter with tools has substance; a window summary alone
947
993
  // reports "quiet" whenever polling is between batches).
948
- fullReportSelfGather: [
994
+ fullReportSelfGather: ({ lastSuccessIso }) => [
949
995
  'kagemusha_overview() for room/task/message counts',
950
996
  'kagemusha_tasks({}) for the open task board, plus kagemusha_tasks({ status: "review" }) for items awaiting review (status values must be real board statuses like pending/in_progress/review - invented labels match nothing)',
951
- 'kagemusha_entities({ activeOnly: true }) for active channels, then kagemusha_messages({ channelId }) on the busiest 2-3 (since defaults to the last 7 days; pass an ISO-8601 timestamp like since: "2026-07-09T00:00:00Z" to narrow it - never a phrase like "24h ago")',
997
+ lastSuccessIso
998
+ ? `kagemusha_entities({ activeOnly: true }) for active channels, then kagemusha_messages({ channelId, since: "${lastSuccessIso}" }) on the busiest 2-3 - since is the last successful report; do NOT widen it`
999
+ : 'kagemusha_entities({ activeOnly: true }) for active channels, then kagemusha_messages({ channelId }) on the busiest 2-3 (since defaults to the last 7 days; pass an ISO-8601 timestamp like since: "2026-07-09T00:00:00Z" to narrow it - never a phrase like "24h ago")',
952
1000
  'mama_recall(query) for memory relevant to what you find',
1001
+ 'schedule_upcoming({ days: 14 }) for upcoming calendar events -- cross-check task deadlines against them',
953
1002
  ],
954
1003
  // Kagemusha dual output: the same scheduled run updates the /ui operator board
955
1004
  // slots via report_publish, then writes the plain-text owner report.
@@ -978,8 +1027,8 @@ async function runAgentLoop(config, options = {}) {
978
1027
  stop: async () => {
979
1028
  triggerLoopNudge.current = null;
980
1029
  stopTriggerLoop();
981
- // Close the operator triggers.db handle (PR #119 review: was leaked on shutdown).
982
- triggerRegistry.close();
1030
+ // The shared operator DB handle is closed by the unconditional stop
1031
+ // hook above (single owner); nothing to close here.
983
1032
  },
984
1033
  });
985
1034
  console.log('✓ Trigger loop enabled (MAMA_TRIGGER_LOOP=1, read-only surface mode)');
@@ -1003,6 +1052,7 @@ async function runAgentLoop(config, options = {}) {
1003
1052
  envelopeAuthority: envelopeBootstrap.envelopeAuthority,
1004
1053
  contextCompileService,
1005
1054
  });
1055
+ channelDeltaSink.current = (channelKey, lines) => eventBus.emit({ type: 'operator:channel-delta', channelKey, lines });
1006
1056
  await (0, api_routes_init_js_1.registerApiRoutes)({
1007
1057
  config,
1008
1058
  apiServer,