@jungjaehoon/mama-os 0.49.2 → 0.50.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 (135) hide show
  1. package/dist/agent/agent-loop.d.ts +5 -1
  2. package/dist/agent/agent-loop.d.ts.map +1 -1
  3. package/dist/agent/agent-loop.js +24 -4
  4. package/dist/agent/agent-loop.js.map +1 -1
  5. package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
  6. package/dist/agent/code-act/host-bridge.js +39 -7
  7. package/dist/agent/code-act/host-bridge.js.map +1 -1
  8. package/dist/agent/codex-app-server-process.d.ts.map +1 -1
  9. package/dist/agent/codex-app-server-process.js +37 -0
  10. package/dist/agent/codex-app-server-process.js.map +1 -1
  11. package/dist/agent/gateway-tool-executor.d.ts +17 -6
  12. package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
  13. package/dist/agent/gateway-tool-executor.js +512 -143
  14. package/dist/agent/gateway-tool-executor.js.map +1 -1
  15. package/dist/agent/gateway-tools.md +7 -6
  16. package/dist/agent/native-effect-observer.d.ts +19 -0
  17. package/dist/agent/native-effect-observer.d.ts.map +1 -0
  18. package/dist/agent/native-effect-observer.js +70 -0
  19. package/dist/agent/native-effect-observer.js.map +1 -0
  20. package/dist/agent/persistent-cli-process.d.ts.map +1 -1
  21. package/dist/agent/persistent-cli-process.js +6 -1
  22. package/dist/agent/persistent-cli-process.js.map +1 -1
  23. package/dist/agent/tool-registry.d.ts.map +1 -1
  24. package/dist/agent/tool-registry.js +15 -8
  25. package/dist/agent/tool-registry.js.map +1 -1
  26. package/dist/agent/types.d.ts +8 -2
  27. package/dist/agent/types.d.ts.map +1 -1
  28. package/dist/agent/types.js.map +1 -1
  29. package/dist/api/report-handler.d.ts +19 -3
  30. package/dist/api/report-handler.d.ts.map +1 -1
  31. package/dist/api/report-handler.js +123 -17
  32. package/dist/api/report-handler.js.map +1 -1
  33. package/dist/api/report-persistence.d.ts +3 -3
  34. package/dist/api/report-persistence.d.ts.map +1 -1
  35. package/dist/api/report-persistence.js +11 -21
  36. package/dist/api/report-persistence.js.map +1 -1
  37. package/dist/cli/commands/start.d.ts +4 -0
  38. package/dist/cli/commands/start.d.ts.map +1 -1
  39. package/dist/cli/commands/start.js +49 -157
  40. package/dist/cli/commands/start.js.map +1 -1
  41. package/dist/cli/runtime/agent-loop-init.d.ts.map +1 -1
  42. package/dist/cli/runtime/agent-loop-init.js +1 -0
  43. package/dist/cli/runtime/agent-loop-init.js.map +1 -1
  44. package/dist/cli/runtime/api-routes-init.d.ts +5 -19
  45. package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
  46. package/dist/cli/runtime/api-routes-init.js +7 -79
  47. package/dist/cli/runtime/api-routes-init.js.map +1 -1
  48. package/dist/db/migrations/operator-owner-action-candidates.d.ts +19 -0
  49. package/dist/db/migrations/operator-owner-action-candidates.d.ts.map +1 -0
  50. package/dist/db/migrations/operator-owner-action-candidates.js +254 -0
  51. package/dist/db/migrations/operator-owner-action-candidates.js.map +1 -0
  52. package/dist/db/migrations/operator-task-external-lifecycle.d.ts +9 -0
  53. package/dist/db/migrations/operator-task-external-lifecycle.d.ts.map +1 -1
  54. package/dist/db/migrations/operator-task-external-lifecycle.js +52 -22
  55. package/dist/db/migrations/operator-task-external-lifecycle.js.map +1 -1
  56. package/dist/db/migrations/operator-task-review-lifecycle.d.ts.map +1 -1
  57. package/dist/db/migrations/operator-task-review-lifecycle.js +3 -0
  58. package/dist/db/migrations/operator-task-review-lifecycle.js.map +1 -1
  59. package/dist/db/migrations/owner-action-effects.d.ts +18 -0
  60. package/dist/db/migrations/owner-action-effects.d.ts.map +1 -0
  61. package/dist/db/migrations/owner-action-effects.js +111 -0
  62. package/dist/db/migrations/owner-action-effects.js.map +1 -0
  63. package/dist/gateways/message-router.d.ts.map +1 -1
  64. package/dist/gateways/message-router.js +14 -4
  65. package/dist/gateways/message-router.js.map +1 -1
  66. package/dist/gateways/telegram-text-entities.d.ts +99 -0
  67. package/dist/gateways/telegram-text-entities.d.ts.map +1 -0
  68. package/dist/gateways/telegram-text-entities.js +189 -0
  69. package/dist/gateways/telegram-text-entities.js.map +1 -0
  70. package/dist/gateways/telegram.d.ts.map +1 -1
  71. package/dist/gateways/telegram.js +13 -2
  72. package/dist/gateways/telegram.js.map +1 -1
  73. package/dist/gateways/types.d.ts +8 -0
  74. package/dist/gateways/types.d.ts.map +1 -1
  75. package/dist/operator/board-read-views.d.ts +9 -4
  76. package/dist/operator/board-read-views.d.ts.map +1 -1
  77. package/dist/operator/board-read-views.js +11 -0
  78. package/dist/operator/board-read-views.js.map +1 -1
  79. package/dist/operator/external-lifecycle-candidates.d.ts +15 -1
  80. package/dist/operator/external-lifecycle-candidates.d.ts.map +1 -1
  81. package/dist/operator/external-lifecycle-candidates.js +164 -0
  82. package/dist/operator/external-lifecycle-candidates.js.map +1 -1
  83. package/dist/operator/external-lifecycle-discovery.d.ts +61 -0
  84. package/dist/operator/external-lifecycle-discovery.d.ts.map +1 -0
  85. package/dist/operator/external-lifecycle-discovery.js +103 -0
  86. package/dist/operator/external-lifecycle-discovery.js.map +1 -0
  87. package/dist/operator/external-lifecycle.d.ts +23 -0
  88. package/dist/operator/external-lifecycle.d.ts.map +1 -1
  89. package/dist/operator/owner-action-effects.d.ts +101 -0
  90. package/dist/operator/owner-action-effects.d.ts.map +1 -0
  91. package/dist/operator/owner-action-effects.js +335 -0
  92. package/dist/operator/owner-action-effects.js.map +1 -0
  93. package/dist/operator/owner-event-inbox.d.ts +1 -0
  94. package/dist/operator/owner-event-inbox.d.ts.map +1 -1
  95. package/dist/operator/owner-event-inbox.js +6 -0
  96. package/dist/operator/owner-event-inbox.js.map +1 -1
  97. package/dist/operator/owner-event-loop.d.ts +3 -0
  98. package/dist/operator/owner-event-loop.d.ts.map +1 -1
  99. package/dist/operator/owner-event-loop.js +34 -0
  100. package/dist/operator/owner-event-loop.js.map +1 -1
  101. package/dist/operator/owner-event-outcome.d.ts.map +1 -1
  102. package/dist/operator/owner-event-outcome.js +6 -0
  103. package/dist/operator/owner-event-outcome.js.map +1 -1
  104. package/dist/operator/owner-event-policy.d.ts.map +1 -1
  105. package/dist/operator/owner-event-policy.js +2 -26
  106. package/dist/operator/owner-event-policy.js.map +1 -1
  107. package/dist/operator/owner-event-prompt.d.ts.map +1 -1
  108. package/dist/operator/owner-event-prompt.js +2 -5
  109. package/dist/operator/owner-event-prompt.js.map +1 -1
  110. package/dist/operator/task-ledger.d.ts +93 -14
  111. package/dist/operator/task-ledger.d.ts.map +1 -1
  112. package/dist/operator/task-ledger.js +430 -103
  113. package/dist/operator/task-ledger.js.map +1 -1
  114. package/dist/operator/temporal-reconcile.d.ts.map +1 -1
  115. package/dist/operator/temporal-reconcile.js +6 -2
  116. package/dist/operator/temporal-reconcile.js.map +1 -1
  117. package/dist/operator/workorder-consumer.d.ts +2 -0
  118. package/dist/operator/workorder-consumer.d.ts.map +1 -1
  119. package/dist/operator/workorder-consumer.js +20 -5
  120. package/dist/operator/workorder-consumer.js.map +1 -1
  121. package/dist/scheduler/heartbeat.d.ts.map +1 -1
  122. package/dist/scheduler/heartbeat.js +1 -0
  123. package/dist/scheduler/heartbeat.js.map +1 -1
  124. package/dist/sqlite.d.ts +1 -1
  125. package/dist/sqlite.d.ts.map +1 -1
  126. package/dist/sqlite.js +3 -2
  127. package/dist/sqlite.js.map +1 -1
  128. package/dist/wiki/wiki-read.d.ts +2 -1
  129. package/dist/wiki/wiki-read.d.ts.map +1 -1
  130. package/dist/wiki/wiki-read.js +13 -2
  131. package/dist/wiki/wiki-read.js.map +1 -1
  132. package/dist/wiki/wiki-turn-contract.js +1 -1
  133. package/dist/wiki/wiki-turn-contract.js.map +1 -1
  134. package/package.json +1 -1
  135. package/public/viewer/operator/operator.js +3 -1
@@ -1,14 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EXTERNAL_LIFECYCLE_RECEIPTS_COLUMNS_SQL = exports.EXTERNAL_BINDING_RECEIPTS_COLUMNS_SQL = exports.EXTERNAL_TASK_BINDINGS_COLUMNS_SQL = void 0;
3
4
  exports.applyOperatorTaskExternalLifecycleMigration = applyOperatorTaskExternalLifecycleMigration;
4
5
  /**
5
6
  * External lifecycle storage is installed inside TaskLedger's migration
6
7
  * transaction. It intentionally does not infer bindings from legacy task
7
8
  * provenance: only a receipted, candidate-bound decision can create one.
8
9
  */
9
- function applyOperatorTaskExternalLifecycleMigration(db) {
10
- db.exec(`
11
- CREATE TABLE IF NOT EXISTS operator_external_task_bindings (
10
+ /**
11
+ * Current column shapes (Task B2). A Board attempt id is optional audit
12
+ * metadata: rows may instead carry a verified origin run, owner scope and
13
+ * envelope (CHECK). Legacy NOT NULL tables are rebuilt to this shape by
14
+ * `applyOperatorOwnerActionCandidatesMigration`, which runs after this one.
15
+ */
16
+ exports.EXTERNAL_TASK_BINDINGS_COLUMNS_SQL = `
12
17
  id INTEGER PRIMARY KEY AUTOINCREMENT,
13
18
  revision INTEGER NOT NULL DEFAULT 1 CHECK (revision >= 1),
14
19
  task_id INTEGER NOT NULL REFERENCES operator_tasks(id),
@@ -16,21 +21,30 @@ function applyOperatorTaskExternalLifecycleMigration(db) {
16
21
  source_type TEXT NOT NULL CHECK (source_type = 'kanban_card'),
17
22
  external_source_id TEXT NOT NULL,
18
23
  last_observation_seq INTEGER NOT NULL CHECK (last_observation_seq >= 1),
19
- created_by_attempt_id INTEGER NOT NULL REFERENCES operator_tasks(id),
24
+ created_by_attempt_id INTEGER REFERENCES operator_tasks(id),
25
+ created_by_run_id TEXT,
26
+ created_by_owner_scope TEXT,
27
+ created_by_envelope_hash TEXT,
20
28
  active INTEGER NOT NULL DEFAULT 1 CHECK (active IN (0, 1)),
21
29
  created_at INTEGER NOT NULL,
22
- updated_at INTEGER NOT NULL
23
- );
24
-
25
- CREATE UNIQUE INDEX IF NOT EXISTS idx_operator_external_binding_active_task
26
- ON operator_external_task_bindings(task_id) WHERE active = 1;
27
- CREATE UNIQUE INDEX IF NOT EXISTS idx_operator_external_binding_active_external
28
- ON operator_external_task_bindings(connector, source_type, external_source_id) WHERE active = 1;
29
-
30
- CREATE TABLE IF NOT EXISTS operator_external_binding_receipts (
30
+ updated_at INTEGER NOT NULL,
31
+ CHECK (
32
+ created_by_attempt_id IS NOT NULL
33
+ OR (created_by_run_id IS NOT NULL
34
+ AND created_by_owner_scope IS NOT NULL
35
+ AND created_by_envelope_hash IS NOT NULL)
36
+ )`;
37
+ const RECEIPT_ORIGIN_CHECK_SQL = `
38
+ CHECK (
39
+ workorder_attempt_id IS NOT NULL
40
+ OR (origin_run_id IS NOT NULL
41
+ AND origin_owner_scope IS NOT NULL
42
+ AND origin_envelope_hash IS NOT NULL)
43
+ )`;
44
+ exports.EXTERNAL_BINDING_RECEIPTS_COLUMNS_SQL = `
31
45
  candidate_id TEXT PRIMARY KEY,
32
46
  decision TEXT NOT NULL CHECK (decision IN ('bind','decline')),
33
- workorder_attempt_id INTEGER NOT NULL REFERENCES operator_tasks(id),
47
+ workorder_attempt_id INTEGER REFERENCES operator_tasks(id),
34
48
  task_id INTEGER NOT NULL REFERENCES operator_tasks(id),
35
49
  event_id TEXT NOT NULL,
36
50
  connector TEXT NOT NULL CHECK (connector = 'kagemusha'),
@@ -47,15 +61,13 @@ function applyOperatorTaskExternalLifecycleMigration(db) {
47
61
  binding_id INTEGER REFERENCES operator_external_task_bindings(id),
48
62
  origin_run_id TEXT,
49
63
  origin_cause_event_ids TEXT NOT NULL,
50
- created_at INTEGER NOT NULL
51
- );
52
- CREATE INDEX IF NOT EXISTS idx_operator_external_binding_receipts_attempt
53
- ON operator_external_binding_receipts(workorder_attempt_id, candidate_id);
54
-
55
- CREATE TABLE IF NOT EXISTS operator_external_lifecycle_receipts (
64
+ origin_owner_scope TEXT,
65
+ origin_envelope_hash TEXT,
66
+ created_at INTEGER NOT NULL,${RECEIPT_ORIGIN_CHECK_SQL}`;
67
+ exports.EXTERNAL_LIFECYCLE_RECEIPTS_COLUMNS_SQL = `
56
68
  candidate_id TEXT PRIMARY KEY,
57
69
  decision TEXT NOT NULL CHECK (decision IN ('apply','retain')),
58
- workorder_attempt_id INTEGER NOT NULL REFERENCES operator_tasks(id),
70
+ workorder_attempt_id INTEGER REFERENCES operator_tasks(id),
59
71
  task_id INTEGER NOT NULL REFERENCES operator_tasks(id),
60
72
  event_id TEXT NOT NULL,
61
73
  connector TEXT NOT NULL CHECK (connector = 'kagemusha'),
@@ -74,7 +86,25 @@ function applyOperatorTaskExternalLifecycleMigration(db) {
74
86
  reason TEXT NOT NULL,
75
87
  origin_run_id TEXT,
76
88
  origin_cause_event_ids TEXT NOT NULL,
77
- created_at INTEGER NOT NULL
89
+ origin_owner_scope TEXT,
90
+ origin_envelope_hash TEXT,
91
+ created_at INTEGER NOT NULL,${RECEIPT_ORIGIN_CHECK_SQL}`;
92
+ function applyOperatorTaskExternalLifecycleMigration(db) {
93
+ db.exec(`
94
+ CREATE TABLE IF NOT EXISTS operator_external_task_bindings (${exports.EXTERNAL_TASK_BINDINGS_COLUMNS_SQL}
95
+ );
96
+
97
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_operator_external_binding_active_task
98
+ ON operator_external_task_bindings(task_id) WHERE active = 1;
99
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_operator_external_binding_active_external
100
+ ON operator_external_task_bindings(connector, source_type, external_source_id) WHERE active = 1;
101
+
102
+ CREATE TABLE IF NOT EXISTS operator_external_binding_receipts (${exports.EXTERNAL_BINDING_RECEIPTS_COLUMNS_SQL}
103
+ );
104
+ CREATE INDEX IF NOT EXISTS idx_operator_external_binding_receipts_attempt
105
+ ON operator_external_binding_receipts(workorder_attempt_id, candidate_id);
106
+
107
+ CREATE TABLE IF NOT EXISTS operator_external_lifecycle_receipts (${exports.EXTERNAL_LIFECYCLE_RECEIPTS_COLUMNS_SQL}
78
108
  );
79
109
  CREATE INDEX IF NOT EXISTS idx_operator_external_lifecycle_receipts_attempt
80
110
  ON operator_external_lifecycle_receipts(workorder_attempt_id, candidate_id);
@@ -1 +1 @@
1
- {"version":3,"file":"operator-task-external-lifecycle.js","sourceRoot":"","sources":["../../../src/db/migrations/operator-task-external-lifecycle.ts"],"names":[],"mappings":";;AAOA,kGA2KC;AAhLD;;;;GAIG;AACH,SAAgB,2CAA2C,CAAC,EAAkB;IAC5E,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EP,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,EAAE;SAClB,OAAO,CACN;;;;eAIS,CACV;SACA,GAAG,EAAqC,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,0EAA0E,UAAU,CAAC,CAAC,CAAE,CAAC,YAAY,GAAG,CACzG,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;GAUP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CACN;;;;;;;;;eASS,CACV;SACA,GAAG,EAAqC,CAAC;IAC5C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,qEAAqE,YAAY,CAAC,CAAC,CAAE,CAAC,YAAY,GAAG,CACtG,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CP,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"operator-task-external-lifecycle.js","sourceRoot":"","sources":["../../../src/db/migrations/operator-task-external-lifecycle.ts"],"names":[],"mappings":";;;AA6FA,kGAsHC;AAjND;;;;GAIG;AACH;;;;;GAKG;AACU,QAAA,kCAAkC,GAAG;;;;;;;;;;;;;;;;;;;;QAoB1C,CAAC;AAET,MAAM,wBAAwB,GAAG;;;;;;QAMzB,CAAC;AAEI,QAAA,qCAAqC,GAAG;;;;;;;;;;;;;;;;;;;;;;oCAsBjB,wBAAwB,EAAE,CAAC;AAElD,QAAA,uCAAuC,GAAG;;;;;;;;;;;;;;;;;;;;;;;;oCAwBnB,wBAAwB,EAAE,CAAC;AAE/D,SAAgB,2CAA2C,CAAC,EAAkB;IAC5E,EAAE,CAAC,IAAI,CAAC;kEACwD,0CAAkC;;;;;;;;qEAQ/B,6CAAqC;;;;;uEAKnC,+CAAuC;;;;;;;;;;GAU3G,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,EAAE;SAClB,OAAO,CACN;;;;eAIS,CACV;SACA,GAAG,EAAqC,CAAC;IAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACb,0EAA0E,UAAU,CAAC,CAAC,CAAE,CAAC,YAAY,GAAG,CACzG,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;GAUP,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,EAAE;SACpB,OAAO,CACN;;;;;;;;;eASS,CACV;SACA,GAAG,EAAqC,CAAC;IAC5C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACb,qEAAqE,YAAY,CAAC,CAAC,CAAE,CAAC,YAAY,GAAG,CACtG,CAAC;IACJ,CAAC;IAED,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CP,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"operator-task-review-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/operator-task-review-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,sFAAsF;AACtF,wBAAgB,yCAAyC,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAYlF"}
1
+ {"version":3,"file":"operator-task-review-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/operator-task-review-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,sFAAsF;AACtF,wBAAgB,yCAAyC,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAelF"}
@@ -10,5 +10,8 @@ function applyOperatorTaskReviewLifecycleMigration(db) {
10
10
  if (!columns.has('review_anchor_event_id')) {
11
11
  db.exec('ALTER TABLE operator_tasks ADD COLUMN review_anchor_event_id TEXT');
12
12
  }
13
+ if (!columns.has('review_anchor_source_channel')) {
14
+ db.exec('ALTER TABLE operator_tasks ADD COLUMN review_anchor_source_channel TEXT');
15
+ }
13
16
  }
14
17
  //# sourceMappingURL=operator-task-review-lifecycle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"operator-task-review-lifecycle.js","sourceRoot":"","sources":["../../../src/db/migrations/operator-task-review-lifecycle.ts"],"names":[],"mappings":";;AAGA,8FAYC;AAbD,sFAAsF;AACtF,SAAgB,yCAAyC,CAAC,EAAkB;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,CACpB,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EAA8B,CAAC,GAAG,CACpF,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CACxB,CACF,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACtC,EAAE,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC3C,EAAE,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"operator-task-review-lifecycle.js","sourceRoot":"","sources":["../../../src/db/migrations/operator-task-review-lifecycle.ts"],"names":[],"mappings":";;AAGA,8FAeC;AAhBD,sFAAsF;AACtF,SAAgB,yCAAyC,CAAC,EAAkB;IAC1E,MAAM,OAAO,GAAG,IAAI,GAAG,CACpB,EAAE,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAC,GAAG,EAA8B,CAAC,GAAG,CACpF,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CACxB,CACF,CAAC;IACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACtC,EAAE,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC3C,EAAE,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAE,CAAC;QACjD,EAAE,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAC;IACrF,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { SQLiteDatabase } from '../../sqlite.js';
2
+ /**
3
+ * Additive storage for input-independent owner action receipts (Task E).
4
+ *
5
+ * One row per (owner namespace, host-derived occurrence, logical action). The
6
+ * row is reserved BEFORE the effect runs and can only move
7
+ * transmitting -> unknown | confirmed; confirmed is final. The originating
8
+ * model run / envelope are audit metadata: a later authorized attempt of the
9
+ * same occurrence reconciles this row instead of creating another effect.
10
+ *
11
+ * This table is separate from the legacy integer batch-keyed
12
+ * `owner_event_effects` table, which is neither read, altered, nor migrated
13
+ * here. Nothing in this migration is destructive; it is safe to run on every
14
+ * open, including on a database that already carries the table.
15
+ */
16
+ export declare const OWNER_ACTION_EFFECTS_TABLE = "owner_action_effects";
17
+ export declare function applyOwnerActionEffectsMigration(db: SQLiteDatabase): void;
18
+ //# sourceMappingURL=owner-action-effects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-action-effects.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/owner-action-effects.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,yBAAyB,CAAC;AAoBjE,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,cAAc,GAAG,IAAI,CAsFzE"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OWNER_ACTION_EFFECTS_TABLE = void 0;
4
+ exports.applyOwnerActionEffectsMigration = applyOwnerActionEffectsMigration;
5
+ /**
6
+ * Additive storage for input-independent owner action receipts (Task E).
7
+ *
8
+ * One row per (owner namespace, host-derived occurrence, logical action). The
9
+ * row is reserved BEFORE the effect runs and can only move
10
+ * transmitting -> unknown | confirmed; confirmed is final. The originating
11
+ * model run / envelope are audit metadata: a later authorized attempt of the
12
+ * same occurrence reconciles this row instead of creating another effect.
13
+ *
14
+ * This table is separate from the legacy integer batch-keyed
15
+ * `owner_event_effects` table, which is neither read, altered, nor migrated
16
+ * here. Nothing in this migration is destructive; it is safe to run on every
17
+ * open, including on a database that already carries the table.
18
+ */
19
+ exports.OWNER_ACTION_EFFECTS_TABLE = 'owner_action_effects';
20
+ const REQUIRED_COLUMNS = [
21
+ 'owner_scope',
22
+ 'occurrence_key',
23
+ 'action_key',
24
+ 'effect_kind',
25
+ 'status',
26
+ 'intent_json',
27
+ 'intent_sha256',
28
+ 'result_json',
29
+ 'last_error',
30
+ 'origin_model_run_id',
31
+ 'origin_envelope_hash',
32
+ 'origin_workorder_attempt_id',
33
+ 'settled_model_run_id',
34
+ 'created_at',
35
+ 'updated_at',
36
+ ];
37
+ function applyOwnerActionEffectsMigration(db) {
38
+ db.exec(`
39
+ CREATE TABLE IF NOT EXISTS ${exports.OWNER_ACTION_EFFECTS_TABLE} (
40
+ owner_scope TEXT NOT NULL CHECK (length(trim(owner_scope)) > 0),
41
+ occurrence_key TEXT NOT NULL CHECK (length(trim(occurrence_key)) > 0),
42
+ action_key TEXT NOT NULL CHECK (length(trim(action_key)) > 0),
43
+ effect_kind TEXT NOT NULL CHECK (length(trim(effect_kind)) > 0),
44
+ status TEXT NOT NULL CHECK (status IN ('transmitting','unknown','confirmed')),
45
+ intent_json TEXT NOT NULL,
46
+ intent_sha256 TEXT NOT NULL,
47
+ result_json TEXT,
48
+ last_error TEXT,
49
+ origin_model_run_id TEXT NOT NULL CHECK (length(trim(origin_model_run_id)) > 0),
50
+ origin_envelope_hash TEXT NOT NULL CHECK (length(trim(origin_envelope_hash)) > 0),
51
+ origin_workorder_attempt_id INTEGER,
52
+ settled_model_run_id TEXT,
53
+ created_at INTEGER NOT NULL,
54
+ updated_at INTEGER NOT NULL,
55
+ PRIMARY KEY (owner_scope, occurrence_key, action_key)
56
+ );
57
+ CREATE INDEX IF NOT EXISTS idx_owner_action_effects_pending
58
+ ON ${exports.OWNER_ACTION_EFFECTS_TABLE} (owner_scope, occurrence_key, status, created_at, action_key);
59
+ `);
60
+ // Fail loudly rather than run against a same-named table with a different
61
+ // shape: a silent partial schema would make receipts unreadable.
62
+ const columns = new Set(db.prepare(`PRAGMA table_info(${exports.OWNER_ACTION_EFFECTS_TABLE})`).all().map((column) => column.name));
63
+ const missing = REQUIRED_COLUMNS.filter((column) => !columns.has(column));
64
+ if (missing.length > 0) {
65
+ throw new Error(`${exports.OWNER_ACTION_EFFECTS_TABLE} exists without required column(s): ${missing.join(', ')}`);
66
+ }
67
+ const info = db.prepare(`PRAGMA table_info(${exports.OWNER_ACTION_EFFECTS_TABLE})`).all();
68
+ const primaryKey = info
69
+ .filter((column) => column.pk > 0)
70
+ .sort((a, b) => a.pk - b.pk)
71
+ .map((column) => column.name);
72
+ if (primaryKey.join(',') !== 'owner_scope,occurrence_key,action_key') {
73
+ throw new Error(`${exports.OWNER_ACTION_EFFECTS_TABLE} has an invalid receipt primary key`);
74
+ }
75
+ const nullable = new Set([
76
+ 'result_json',
77
+ 'last_error',
78
+ 'origin_workorder_attempt_id',
79
+ 'settled_model_run_id',
80
+ ]);
81
+ if (info.some((column) => !nullable.has(column.name) && column.notnull !== 1)) {
82
+ throw new Error(`${exports.OWNER_ACTION_EFFECTS_TABLE} is missing a required NOT NULL constraint`);
83
+ }
84
+ const schema = db
85
+ .prepare('SELECT sql FROM sqlite_master WHERE type = ? AND name = ?')
86
+ .get('table', exports.OWNER_ACTION_EFFECTS_TABLE);
87
+ const normalized = schema.sql.toLowerCase().replace(/\s+/g, '');
88
+ const checks = [
89
+ "check(statusin('transmitting','unknown','confirmed'))",
90
+ ...[
91
+ 'owner_scope',
92
+ 'occurrence_key',
93
+ 'action_key',
94
+ 'effect_kind',
95
+ 'origin_model_run_id',
96
+ 'origin_envelope_hash',
97
+ ].map((column) => `check(length(trim(${column}))>0)`),
98
+ ];
99
+ if (checks.some((check) => !normalized.includes(check))) {
100
+ throw new Error(`${exports.OWNER_ACTION_EFFECTS_TABLE} is missing a required CHECK constraint`);
101
+ }
102
+ db.exec(`
103
+ CREATE TRIGGER IF NOT EXISTS owner_action_effects_confirmed_immutable
104
+ BEFORE UPDATE ON ${exports.OWNER_ACTION_EFFECTS_TABLE} WHEN OLD.status = 'confirmed'
105
+ BEGIN SELECT RAISE(ABORT, 'confirmed owner action receipt is immutable'); END;
106
+ CREATE TRIGGER IF NOT EXISTS owner_action_effects_confirmed_no_delete
107
+ BEFORE DELETE ON ${exports.OWNER_ACTION_EFFECTS_TABLE} WHEN OLD.status = 'confirmed'
108
+ BEGIN SELECT RAISE(ABORT, 'confirmed owner action receipt is immutable'); END;
109
+ `);
110
+ }
111
+ //# sourceMappingURL=owner-action-effects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner-action-effects.js","sourceRoot":"","sources":["../../../src/db/migrations/owner-action-effects.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/gateways/message-router.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-router.d.ts","sourceRoot":"","sources":["../../src/gateways/message-router.ts"],"names":[],"mappings":"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"}
@@ -78,6 +78,7 @@ const turn_observer_js_1 = require("../operator/turn-observer.js");
78
78
  const learning_markers_js_1 = require("../operator/learning-markers.js");
79
79
  const recall_bundle_formatter_js_1 = require("../memory/recall-bundle-formatter.js");
80
80
  const untrusted_content_js_1 = require("../utils/untrusted-content.js");
81
+ const telegram_text_entities_js_1 = require("./telegram-text-entities.js");
81
82
  const security_monitor_js_1 = require("../security/security-monitor.js");
82
83
  const agent_store_js_1 = require("../db/agent-store.js");
83
84
  const reactive_config_js_1 = require("../envelope/reactive-config.js");
@@ -873,10 +874,16 @@ This protects your credentials from being exposed in chat logs.`;
873
874
  };
874
875
  try {
875
876
  const mediaInstructions = buildUploadedMediaInstructions(message, agentContext.role.allowedTools, agentContext.roleName === 'owner_console');
877
+ // Task G: Telegram sender styling rides directly after the body as data
878
+ // on BOTH model paths and in the persisted user turn. '' when absent, so
879
+ // plain messages and non-Telegram sources are byte-identical to before.
880
+ const formattingSuffix = (0, telegram_text_entities_js_1.buildTelegramFormattingSuffix)(message);
876
881
  // Save user message immediately for crash/refresh resilience.
877
882
  this.sessionStore.appendMessage(session.id, {
878
883
  role: 'user',
879
- content: [message.text, mediaInstructions].filter(Boolean).join('\n\n'),
884
+ content: [`${message.text}${formattingSuffix}`, mediaInstructions]
885
+ .filter(Boolean)
886
+ .join('\n\n'),
880
887
  timestamp: Date.now(),
881
888
  });
882
889
  let response = '';
@@ -1052,7 +1059,10 @@ This protects your credentials from being exposed in chat logs.`;
1052
1059
  sourceTurnId,
1053
1060
  sourceMessageRef,
1054
1061
  ...(runtimeSessionKey === owner_runtime_js_1.OWNER_RUNTIME_SESSION_KEY
1055
- ? { ownerJournalPrompt: message.text, ownerJournalTrust: 'owner' }
1062
+ ? {
1063
+ ownerJournalPrompt: `${message.text}${formattingSuffix}`,
1064
+ ownerJournalTrust: 'owner',
1065
+ }
1056
1066
  : {}),
1057
1067
  // The owner's message is what caused whatever this turn changes, and the router
1058
1068
  // knows it BEFORE the agent runs - the same shape as a reconcile work order
@@ -1168,7 +1178,7 @@ This protects your credentials from being exposed in chat logs.`;
1168
1178
  }
1169
1179
  // Add text content (with memory context, skill context, and page context)
1170
1180
  const pageCtx = isPublicLane ? '' : this.getPageContextPrefix(message);
1171
- const effectiveMessageText = `${pageCtx}${memoryPrefix}${learningPrefix}${skillPrefix}${messageText || ''}`;
1181
+ const effectiveMessageText = `${pageCtx}${memoryPrefix}${learningPrefix}${skillPrefix}${messageText || ''}${formattingSuffix}`;
1172
1182
  if (effectiveMessageText) {
1173
1183
  contentBlocks.push({ type: 'text', text: effectiveMessageText });
1174
1184
  }
@@ -1212,7 +1222,7 @@ This protects your credentials from being exposed in chat logs.`;
1212
1222
  }
1213
1223
  else {
1214
1224
  const pageCtx = isPublicLane ? '' : this.getPageContextPrefix(message);
1215
- const effectiveText = `${pageCtx}${memoryPrefix}${learningPrefix}${skillPrefix}${message.text}`;
1225
+ const effectiveText = `${pageCtx}${memoryPrefix}${learningPrefix}${skillPrefix}${message.text}${formattingSuffix}`;
1216
1226
  const turnStart = Date.now();
1217
1227
  const result = await this.agentLoop.run(effectiveText, options);
1218
1228
  response = result.response;