@haaaiawd/second-nature 0.1.7 → 0.1.9

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 (184) hide show
  1. package/index.js +429 -96
  2. package/openclaw.plugin.json +1 -1
  3. package/package.json +1 -1
  4. package/runtime/cli/commands/index.d.ts +2 -0
  5. package/runtime/cli/commands/index.js +61 -6
  6. package/runtime/cli/explain/explain-surface-subject.d.ts +8 -0
  7. package/runtime/cli/explain/explain-surface-subject.js +9 -0
  8. package/runtime/cli/explain/format-explanation.d.ts +2 -0
  9. package/runtime/cli/explain/format-explanation.js +2 -0
  10. package/runtime/cli/explain/resolve-subject.js +15 -0
  11. package/runtime/cli/host-capability/classify-delivery.d.ts +14 -0
  12. package/runtime/cli/host-capability/classify-delivery.js +20 -0
  13. package/runtime/cli/host-capability/probe-host-capability.d.ts +2 -0
  14. package/runtime/cli/host-capability/probe-host-capability.js +58 -0
  15. package/runtime/cli/host-capability/record-host-capability.d.ts +6 -0
  16. package/runtime/cli/host-capability/record-host-capability.js +14 -0
  17. package/runtime/cli/host-capability/types.d.ts +71 -0
  18. package/runtime/cli/host-capability/types.js +6 -0
  19. package/runtime/cli/host-smoke/run-host-smoke.d.ts +2 -0
  20. package/runtime/cli/host-smoke/run-host-smoke.js +40 -0
  21. package/runtime/cli/host-smoke/types.d.ts +35 -0
  22. package/runtime/cli/host-smoke/types.js +6 -0
  23. package/runtime/cli/index.js +18 -0
  24. package/runtime/cli/ops/heartbeat-surface.d.ts +35 -0
  25. package/runtime/cli/ops/heartbeat-surface.js +71 -0
  26. package/runtime/cli/ops/ops-router.d.ts +16 -0
  27. package/runtime/cli/ops/ops-router.js +83 -0
  28. package/runtime/cli/ops/show-operator-fallback.d.ts +13 -0
  29. package/runtime/cli/ops/show-operator-fallback.js +22 -0
  30. package/runtime/cli/ops/workspace-heartbeat-runner.d.ts +10 -0
  31. package/runtime/cli/ops/workspace-heartbeat-runner.js +26 -0
  32. package/runtime/cli/read-models/index.d.ts +11 -2
  33. package/runtime/cli/read-models/index.js +50 -0
  34. package/runtime/cli/read-models/operator-explain-map.d.ts +6 -0
  35. package/runtime/cli/read-models/operator-explain-map.js +10 -0
  36. package/runtime/cli/read-models/types.d.ts +5 -1
  37. package/runtime/cli/runtime/runtime-artifact-boundary.d.ts +28 -0
  38. package/runtime/cli/runtime/runtime-artifact-boundary.js +94 -0
  39. package/runtime/connectors/base/contract.d.ts +6 -0
  40. package/runtime/connectors/base/execution-policy.d.ts +47 -0
  41. package/runtime/connectors/base/execution-policy.js +82 -0
  42. package/runtime/connectors/base/index.d.ts +2 -0
  43. package/runtime/connectors/base/index.js +2 -0
  44. package/runtime/connectors/base/manifest.d.ts +55 -2
  45. package/runtime/connectors/base/manifest.js +50 -0
  46. package/runtime/connectors/base/map-life-evidence.d.ts +16 -0
  47. package/runtime/connectors/base/map-life-evidence.js +79 -0
  48. package/runtime/connectors/base/policy-layer.d.ts +2 -0
  49. package/runtime/connectors/base/policy-layer.js +20 -35
  50. package/runtime/connectors/base/route-planner.js +1 -0
  51. package/runtime/connectors/index.d.ts +1 -0
  52. package/runtime/connectors/index.js +1 -0
  53. package/runtime/connectors/near-real/near-real-connector-smoke.d.ts +19 -0
  54. package/runtime/connectors/near-real/near-real-connector-smoke.js +152 -0
  55. package/runtime/core/second-nature/heartbeat/heartbeat-executor.js +2 -0
  56. package/runtime/core/second-nature/heartbeat/heartbeat-loop.d.ts +37 -16
  57. package/runtime/core/second-nature/heartbeat/heartbeat-loop.js +95 -29
  58. package/runtime/core/second-nature/heartbeat/index.d.ts +4 -1
  59. package/runtime/core/second-nature/heartbeat/index.js +4 -1
  60. package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.d.ts +21 -0
  61. package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.js +35 -0
  62. package/runtime/core/second-nature/heartbeat/runtime-snapshot.d.ts +28 -0
  63. package/runtime/core/second-nature/heartbeat/runtime-snapshot.js +35 -0
  64. package/runtime/core/second-nature/heartbeat/signal.d.ts +9 -2
  65. package/runtime/core/second-nature/heartbeat/snapshot-builder.d.ts +19 -1
  66. package/runtime/core/second-nature/index.d.ts +8 -0
  67. package/runtime/core/second-nature/index.js +8 -0
  68. package/runtime/core/second-nature/orchestrator/effect-dispatcher.d.ts +1 -1
  69. package/runtime/core/second-nature/orchestrator/effect-dispatcher.js +9 -4
  70. package/runtime/core/second-nature/orchestrator/guard-layer.d.ts +6 -0
  71. package/runtime/core/second-nature/orchestrator/guard-layer.js +76 -20
  72. package/runtime/core/second-nature/orchestrator/intent-planner.d.ts +10 -0
  73. package/runtime/core/second-nature/orchestrator/intent-planner.js +135 -28
  74. package/runtime/core/second-nature/orchestrator/lease-manager.d.ts +1 -1
  75. package/runtime/core/second-nature/orchestrator/lease-manager.js +1 -1
  76. package/runtime/core/second-nature/outreach/build-outreach-draft-request.d.ts +6 -0
  77. package/runtime/core/second-nature/outreach/build-outreach-draft-request.js +63 -0
  78. package/runtime/core/second-nature/outreach/delivery-target.d.ts +26 -0
  79. package/runtime/core/second-nature/outreach/delivery-target.js +70 -0
  80. package/runtime/core/second-nature/outreach/dispatch-user-outreach.d.ts +38 -0
  81. package/runtime/core/second-nature/outreach/dispatch-user-outreach.js +119 -0
  82. package/runtime/core/second-nature/outreach/judge-input-from-snapshot.d.ts +7 -0
  83. package/runtime/core/second-nature/outreach/judge-input-from-snapshot.js +45 -0
  84. package/runtime/core/second-nature/outreach/judge-outreach.d.ts +40 -0
  85. package/runtime/core/second-nature/outreach/judge-outreach.js +121 -0
  86. package/runtime/core/second-nature/quiet/run-source-backed-quiet.d.ts +21 -0
  87. package/runtime/core/second-nature/quiet/run-source-backed-quiet.js +123 -0
  88. package/runtime/core/second-nature/rhythm/planner-rhythm-window.d.ts +15 -0
  89. package/runtime/core/second-nature/rhythm/planner-rhythm-window.js +52 -0
  90. package/runtime/core/second-nature/rhythm/policy-bridge.d.ts +19 -0
  91. package/runtime/core/second-nature/rhythm/policy-bridge.js +34 -0
  92. package/runtime/core/second-nature/types.d.ts +16 -2
  93. package/runtime/guidance/draft-outreach-message.d.ts +7 -0
  94. package/runtime/guidance/draft-outreach-message.js +42 -0
  95. package/runtime/guidance/evidence-guidance.d.ts +40 -0
  96. package/runtime/guidance/evidence-guidance.js +52 -0
  97. package/runtime/guidance/index.d.ts +3 -0
  98. package/runtime/guidance/index.js +3 -0
  99. package/runtime/guidance/outreach-draft-schema.d.ts +228 -0
  100. package/runtime/guidance/outreach-draft-schema.js +80 -0
  101. package/runtime/observability/audit/append-only-audit-store.d.ts +14 -0
  102. package/runtime/observability/audit/append-only-audit-store.js +21 -0
  103. package/runtime/observability/audit/audit-envelope.d.ts +51 -0
  104. package/runtime/observability/audit/audit-envelope.js +130 -0
  105. package/runtime/observability/audit/verify-audit-hash-chain.d.ts +23 -0
  106. package/runtime/observability/audit/verify-audit-hash-chain.js +83 -0
  107. package/runtime/observability/db/index.js +11 -0
  108. package/runtime/observability/db/schema/host-capability-reports.d.ts +180 -0
  109. package/runtime/observability/db/schema/host-capability-reports.js +12 -0
  110. package/runtime/observability/db/schema/index.d.ts +1 -0
  111. package/runtime/observability/db/schema/index.js +1 -0
  112. package/runtime/observability/index.d.ts +7 -0
  113. package/runtime/observability/index.js +7 -0
  114. package/runtime/observability/query/explain-query.d.ts +48 -0
  115. package/runtime/observability/query/explain-query.js +114 -0
  116. package/runtime/observability/query/export-audit-bundle.d.ts +22 -0
  117. package/runtime/observability/query/export-audit-bundle.js +27 -0
  118. package/runtime/observability/services/decision-ledger.d.ts +1 -1
  119. package/runtime/observability/services/decision-ledger.js +4 -0
  120. package/runtime/observability/services/execution-telemetry.d.ts +0 -1
  121. package/runtime/observability/services/governance-audit.d.ts +14 -0
  122. package/runtime/observability/services/governance-audit.js +25 -1
  123. package/runtime/observability/services/governance-plane-recorder.d.ts +47 -0
  124. package/runtime/observability/services/governance-plane-recorder.js +55 -0
  125. package/runtime/observability/services/lived-experience-audit.d.ts +97 -0
  126. package/runtime/observability/services/lived-experience-audit.js +161 -0
  127. package/runtime/storage/bootstrap/native-sqlite-probe.d.ts +7 -0
  128. package/runtime/storage/bootstrap/native-sqlite-probe.js +28 -0
  129. package/runtime/storage/bootstrap/repair-gate.d.ts +17 -0
  130. package/runtime/storage/bootstrap/repair-gate.js +71 -0
  131. package/runtime/storage/bootstrap/storage-mode-smoke.d.ts +38 -0
  132. package/runtime/storage/bootstrap/storage-mode-smoke.js +85 -0
  133. package/runtime/storage/db/index.js +49 -0
  134. package/runtime/storage/db/schema/delivery-attempts.d.ts +199 -0
  135. package/runtime/storage/db/schema/delivery-attempts.js +13 -0
  136. package/runtime/storage/db/schema/index.d.ts +3 -0
  137. package/runtime/storage/db/schema/index.js +3 -0
  138. package/runtime/storage/db/schema/life-evidence-index.d.ts +161 -0
  139. package/runtime/storage/db/schema/life-evidence-index.js +11 -0
  140. package/runtime/storage/db/schema/operator-fallback-artifacts.d.ts +161 -0
  141. package/runtime/storage/db/schema/operator-fallback-artifacts.js +11 -0
  142. package/runtime/storage/db/schema/policies.d.ts +17 -0
  143. package/runtime/storage/db/schema/policies.js +1 -0
  144. package/runtime/storage/delivery/query-delivery-attempts.d.ts +3 -0
  145. package/runtime/storage/delivery/query-delivery-attempts.js +32 -0
  146. package/runtime/storage/delivery/types.d.ts +27 -0
  147. package/runtime/storage/delivery/types.js +1 -0
  148. package/runtime/storage/delivery/write-delivery-attempt.d.ts +6 -0
  149. package/runtime/storage/delivery/write-delivery-attempt.js +36 -0
  150. package/runtime/storage/fallback/load-operator-fallback.d.ts +14 -0
  151. package/runtime/storage/fallback/load-operator-fallback.js +47 -0
  152. package/runtime/storage/fallback/operator-fallback-types.d.ts +9 -0
  153. package/runtime/storage/fallback/operator-fallback-types.js +1 -0
  154. package/runtime/storage/fallback/operator-fallback-view.d.ts +11 -0
  155. package/runtime/storage/fallback/operator-fallback-view.js +1 -0
  156. package/runtime/storage/fallback/write-operator-fallback.d.ts +6 -0
  157. package/runtime/storage/fallback/write-operator-fallback.js +21 -0
  158. package/runtime/storage/index.d.ts +21 -0
  159. package/runtime/storage/index.js +14 -0
  160. package/runtime/storage/life-evidence/append-life-evidence.d.ts +7 -0
  161. package/runtime/storage/life-evidence/append-life-evidence.js +64 -0
  162. package/runtime/storage/life-evidence/types.d.ts +45 -0
  163. package/runtime/storage/life-evidence/types.js +6 -0
  164. package/runtime/storage/quiet/persist-quiet-artifact.d.ts +7 -0
  165. package/runtime/storage/quiet/persist-quiet-artifact.js +22 -0
  166. package/runtime/storage/quiet/quiet-artifact-types.d.ts +18 -0
  167. package/runtime/storage/quiet/quiet-artifact-types.js +1 -0
  168. package/runtime/storage/quiet/quiet-artifact-writer.d.ts +15 -0
  169. package/runtime/storage/quiet/quiet-artifact-writer.js +56 -0
  170. package/runtime/storage/rhythm/rhythm-policy-snapshot.d.ts +10 -0
  171. package/runtime/storage/rhythm/rhythm-policy-snapshot.js +34 -0
  172. package/runtime/storage/services/credential-vault.d.ts +5 -0
  173. package/runtime/storage/services/credential-vault.js +46 -9
  174. package/runtime/storage/snapshots/continuity-snapshot.d.ts +9 -0
  175. package/runtime/storage/snapshots/continuity-snapshot.js +41 -0
  176. package/runtime/storage/snapshots/life-evidence-snapshot.d.ts +6 -0
  177. package/runtime/storage/snapshots/life-evidence-snapshot.js +114 -0
  178. package/runtime/storage/snapshots/types.d.ts +58 -0
  179. package/runtime/storage/snapshots/types.js +1 -0
  180. package/runtime/storage/state-api.js +11 -4
  181. package/runtime/storage/user-interest/load-user-interest-snapshot.d.ts +2 -0
  182. package/runtime/storage/user-interest/load-user-interest-snapshot.js +150 -0
  183. package/runtime/storage/user-interest/types.d.ts +25 -0
  184. package/runtime/storage/user-interest/types.js +1 -0
@@ -0,0 +1,199 @@
1
+ export declare const deliveryAttempts: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
2
+ name: "delivery_attempts";
3
+ schema: undefined;
4
+ columns: {
5
+ attemptId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6
+ name: "attempt_id";
7
+ tableName: "delivery_attempts";
8
+ dataType: "string";
9
+ columnType: "SQLiteText";
10
+ data: string;
11
+ driverParam: string;
12
+ notNull: true;
13
+ hasDefault: false;
14
+ isPrimaryKey: true;
15
+ isAutoincrement: false;
16
+ hasRuntimeDefault: false;
17
+ enumValues: [string, ...string[]];
18
+ baseColumn: never;
19
+ identity: undefined;
20
+ generated: undefined;
21
+ }, {}, {
22
+ length: number | undefined;
23
+ }>;
24
+ decisionId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
+ name: "decision_id";
26
+ tableName: "delivery_attempts";
27
+ dataType: "string";
28
+ columnType: "SQLiteText";
29
+ data: string;
30
+ driverParam: string;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: [string, ...string[]];
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {
41
+ length: number | undefined;
42
+ }>;
43
+ target: import("drizzle-orm/sqlite-core").SQLiteColumn<{
44
+ name: "target";
45
+ tableName: "delivery_attempts";
46
+ dataType: "string";
47
+ columnType: "SQLiteText";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: false;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: [string, ...string[]];
56
+ baseColumn: never;
57
+ identity: undefined;
58
+ generated: undefined;
59
+ }, {}, {
60
+ length: number | undefined;
61
+ }>;
62
+ channel: import("drizzle-orm/sqlite-core").SQLiteColumn<{
63
+ name: "channel";
64
+ tableName: "delivery_attempts";
65
+ dataType: "string";
66
+ columnType: "SQLiteText";
67
+ data: string;
68
+ driverParam: string;
69
+ notNull: false;
70
+ hasDefault: false;
71
+ isPrimaryKey: false;
72
+ isAutoincrement: false;
73
+ hasRuntimeDefault: false;
74
+ enumValues: [string, ...string[]];
75
+ baseColumn: never;
76
+ identity: undefined;
77
+ generated: undefined;
78
+ }, {}, {
79
+ length: number | undefined;
80
+ }>;
81
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
82
+ name: "status";
83
+ tableName: "delivery_attempts";
84
+ dataType: "string";
85
+ columnType: "SQLiteText";
86
+ data: string;
87
+ driverParam: string;
88
+ notNull: true;
89
+ hasDefault: false;
90
+ isPrimaryKey: false;
91
+ isAutoincrement: false;
92
+ hasRuntimeDefault: false;
93
+ enumValues: [string, ...string[]];
94
+ baseColumn: never;
95
+ identity: undefined;
96
+ generated: undefined;
97
+ }, {}, {
98
+ length: number | undefined;
99
+ }>;
100
+ messageId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
101
+ name: "message_id";
102
+ tableName: "delivery_attempts";
103
+ dataType: "string";
104
+ columnType: "SQLiteText";
105
+ data: string;
106
+ driverParam: string;
107
+ notNull: false;
108
+ hasDefault: false;
109
+ isPrimaryKey: false;
110
+ isAutoincrement: false;
111
+ hasRuntimeDefault: false;
112
+ enumValues: [string, ...string[]];
113
+ baseColumn: never;
114
+ identity: undefined;
115
+ generated: undefined;
116
+ }, {}, {
117
+ length: number | undefined;
118
+ }>;
119
+ hostProofRefJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
120
+ name: "host_proof_ref_json";
121
+ tableName: "delivery_attempts";
122
+ dataType: "string";
123
+ columnType: "SQLiteText";
124
+ data: string;
125
+ driverParam: string;
126
+ notNull: false;
127
+ hasDefault: false;
128
+ isPrimaryKey: false;
129
+ isAutoincrement: false;
130
+ hasRuntimeDefault: false;
131
+ enumValues: [string, ...string[]];
132
+ baseColumn: never;
133
+ identity: undefined;
134
+ generated: undefined;
135
+ }, {}, {
136
+ length: number | undefined;
137
+ }>;
138
+ errorClass: import("drizzle-orm/sqlite-core").SQLiteColumn<{
139
+ name: "error_class";
140
+ tableName: "delivery_attempts";
141
+ dataType: "string";
142
+ columnType: "SQLiteText";
143
+ data: string;
144
+ driverParam: string;
145
+ notNull: false;
146
+ hasDefault: false;
147
+ isPrimaryKey: false;
148
+ isAutoincrement: false;
149
+ hasRuntimeDefault: false;
150
+ enumValues: [string, ...string[]];
151
+ baseColumn: never;
152
+ identity: undefined;
153
+ generated: undefined;
154
+ }, {}, {
155
+ length: number | undefined;
156
+ }>;
157
+ fallbackRef: import("drizzle-orm/sqlite-core").SQLiteColumn<{
158
+ name: "fallback_ref";
159
+ tableName: "delivery_attempts";
160
+ dataType: "string";
161
+ columnType: "SQLiteText";
162
+ data: string;
163
+ driverParam: string;
164
+ notNull: false;
165
+ hasDefault: false;
166
+ isPrimaryKey: false;
167
+ isAutoincrement: false;
168
+ hasRuntimeDefault: false;
169
+ enumValues: [string, ...string[]];
170
+ baseColumn: never;
171
+ identity: undefined;
172
+ generated: undefined;
173
+ }, {}, {
174
+ length: number | undefined;
175
+ }>;
176
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
177
+ name: "created_at";
178
+ tableName: "delivery_attempts";
179
+ dataType: "string";
180
+ columnType: "SQLiteText";
181
+ data: string;
182
+ driverParam: string;
183
+ notNull: true;
184
+ hasDefault: false;
185
+ isPrimaryKey: false;
186
+ isAutoincrement: false;
187
+ hasRuntimeDefault: false;
188
+ enumValues: [string, ...string[]];
189
+ baseColumn: never;
190
+ identity: undefined;
191
+ generated: undefined;
192
+ }, {}, {
193
+ length: number | undefined;
194
+ }>;
195
+ };
196
+ dialect: "sqlite";
197
+ }>;
198
+ export type DeliveryAttemptRow = typeof deliveryAttempts.$inferSelect;
199
+ export type NewDeliveryAttemptRow = typeof deliveryAttempts.$inferInsert;
@@ -0,0 +1,13 @@
1
+ import { index, sqliteTable, text } from "drizzle-orm/sqlite-core";
2
+ export const deliveryAttempts = sqliteTable("delivery_attempts", {
3
+ attemptId: text("attempt_id").primaryKey(),
4
+ decisionId: text("decision_id").notNull(),
5
+ target: text("target"),
6
+ channel: text("channel"),
7
+ status: text("status").notNull(),
8
+ messageId: text("message_id"),
9
+ hostProofRefJson: text("host_proof_ref_json"),
10
+ errorClass: text("error_class"),
11
+ fallbackRef: text("fallback_ref"),
12
+ createdAt: text("created_at").notNull(),
13
+ }, (table) => [index("delivery_attempt_decision_idx").on(table.decisionId)]);
@@ -1,6 +1,9 @@
1
1
  export * from "./assets.js";
2
2
  export * from "./credentials.js";
3
3
  export * from "./intent-commits.js";
4
+ export * from "./life-evidence-index.js";
4
5
  export * from "./policies.js";
5
6
  export * from "./proposals.js";
6
7
  export * from "./provenance.js";
8
+ export * from "./delivery-attempts.js";
9
+ export * from "./operator-fallback-artifacts.js";
@@ -1,6 +1,9 @@
1
1
  export * from "./assets.js";
2
2
  export * from "./credentials.js";
3
3
  export * from "./intent-commits.js";
4
+ export * from "./life-evidence-index.js";
4
5
  export * from "./policies.js";
5
6
  export * from "./proposals.js";
6
7
  export * from "./provenance.js";
8
+ export * from "./delivery-attempts.js";
9
+ export * from "./operator-fallback-artifacts.js";
@@ -0,0 +1,161 @@
1
+ export declare const lifeEvidenceIndex: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
2
+ name: "life_evidence_index";
3
+ schema: undefined;
4
+ columns: {
5
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6
+ name: "id";
7
+ tableName: "life_evidence_index";
8
+ dataType: "string";
9
+ columnType: "SQLiteText";
10
+ data: string;
11
+ driverParam: string;
12
+ notNull: true;
13
+ hasDefault: false;
14
+ isPrimaryKey: true;
15
+ isAutoincrement: false;
16
+ hasRuntimeDefault: false;
17
+ enumValues: [string, ...string[]];
18
+ baseColumn: never;
19
+ identity: undefined;
20
+ generated: undefined;
21
+ }, {}, {
22
+ length: number | undefined;
23
+ }>;
24
+ timestamp: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
+ name: "timestamp";
26
+ tableName: "life_evidence_index";
27
+ dataType: "string";
28
+ columnType: "SQLiteText";
29
+ data: string;
30
+ driverParam: string;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: [string, ...string[]];
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {
41
+ length: number | undefined;
42
+ }>;
43
+ evidenceType: import("drizzle-orm/sqlite-core").SQLiteColumn<{
44
+ name: "evidence_type";
45
+ tableName: "life_evidence_index";
46
+ dataType: "string";
47
+ columnType: "SQLiteText";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: true;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: [string, ...string[]];
56
+ baseColumn: never;
57
+ identity: undefined;
58
+ generated: undefined;
59
+ }, {}, {
60
+ length: number | undefined;
61
+ }>;
62
+ sensitivity: import("drizzle-orm/sqlite-core").SQLiteColumn<{
63
+ name: "sensitivity";
64
+ tableName: "life_evidence_index";
65
+ dataType: "string";
66
+ columnType: "SQLiteText";
67
+ data: string;
68
+ driverParam: string;
69
+ notNull: true;
70
+ hasDefault: false;
71
+ isPrimaryKey: false;
72
+ isAutoincrement: false;
73
+ hasRuntimeDefault: false;
74
+ enumValues: [string, ...string[]];
75
+ baseColumn: never;
76
+ identity: undefined;
77
+ generated: undefined;
78
+ }, {}, {
79
+ length: number | undefined;
80
+ }>;
81
+ producer: import("drizzle-orm/sqlite-core").SQLiteColumn<{
82
+ name: "producer";
83
+ tableName: "life_evidence_index";
84
+ dataType: "string";
85
+ columnType: "SQLiteText";
86
+ data: string;
87
+ driverParam: string;
88
+ notNull: true;
89
+ hasDefault: false;
90
+ isPrimaryKey: false;
91
+ isAutoincrement: false;
92
+ hasRuntimeDefault: false;
93
+ enumValues: [string, ...string[]];
94
+ baseColumn: never;
95
+ identity: undefined;
96
+ generated: undefined;
97
+ }, {}, {
98
+ length: number | undefined;
99
+ }>;
100
+ artifactPath: import("drizzle-orm/sqlite-core").SQLiteColumn<{
101
+ name: "artifact_path";
102
+ tableName: "life_evidence_index";
103
+ dataType: "string";
104
+ columnType: "SQLiteText";
105
+ data: string;
106
+ driverParam: string;
107
+ notNull: true;
108
+ hasDefault: false;
109
+ isPrimaryKey: false;
110
+ isAutoincrement: false;
111
+ hasRuntimeDefault: false;
112
+ enumValues: [string, ...string[]];
113
+ baseColumn: never;
114
+ identity: undefined;
115
+ generated: undefined;
116
+ }, {}, {
117
+ length: number | undefined;
118
+ }>;
119
+ platformId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
120
+ name: "platform_id";
121
+ tableName: "life_evidence_index";
122
+ dataType: "string";
123
+ columnType: "SQLiteText";
124
+ data: string;
125
+ driverParam: string;
126
+ notNull: false;
127
+ hasDefault: false;
128
+ isPrimaryKey: false;
129
+ isAutoincrement: false;
130
+ hasRuntimeDefault: false;
131
+ enumValues: [string, ...string[]];
132
+ baseColumn: never;
133
+ identity: undefined;
134
+ generated: undefined;
135
+ }, {}, {
136
+ length: number | undefined;
137
+ }>;
138
+ sourceRefsJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
139
+ name: "source_refs_json";
140
+ tableName: "life_evidence_index";
141
+ dataType: "string";
142
+ columnType: "SQLiteText";
143
+ data: string;
144
+ driverParam: string;
145
+ notNull: true;
146
+ hasDefault: false;
147
+ isPrimaryKey: false;
148
+ isAutoincrement: false;
149
+ hasRuntimeDefault: false;
150
+ enumValues: [string, ...string[]];
151
+ baseColumn: never;
152
+ identity: undefined;
153
+ generated: undefined;
154
+ }, {}, {
155
+ length: number | undefined;
156
+ }>;
157
+ };
158
+ dialect: "sqlite";
159
+ }>;
160
+ export type LifeEvidenceIndexRecord = typeof lifeEvidenceIndex.$inferSelect;
161
+ export type NewLifeEvidenceIndexRecord = typeof lifeEvidenceIndex.$inferInsert;
@@ -0,0 +1,11 @@
1
+ import { sqliteTable, text } from "drizzle-orm/sqlite-core";
2
+ export const lifeEvidenceIndex = sqliteTable("life_evidence_index", {
3
+ id: text("id").primaryKey(),
4
+ timestamp: text("timestamp").notNull(),
5
+ evidenceType: text("evidence_type").notNull(),
6
+ sensitivity: text("sensitivity").notNull(),
7
+ producer: text("producer").notNull(),
8
+ artifactPath: text("artifact_path").notNull(),
9
+ platformId: text("platform_id"),
10
+ sourceRefsJson: text("source_refs_json").notNull(),
11
+ });
@@ -0,0 +1,161 @@
1
+ export declare const operatorFallbackArtifacts: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
2
+ name: "operator_fallback_artifacts";
3
+ schema: undefined;
4
+ columns: {
5
+ fallbackRef: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6
+ name: "fallback_ref";
7
+ tableName: "operator_fallback_artifacts";
8
+ dataType: "string";
9
+ columnType: "SQLiteText";
10
+ data: string;
11
+ driverParam: string;
12
+ notNull: true;
13
+ hasDefault: false;
14
+ isPrimaryKey: true;
15
+ isAutoincrement: false;
16
+ hasRuntimeDefault: false;
17
+ enumValues: [string, ...string[]];
18
+ baseColumn: never;
19
+ identity: undefined;
20
+ generated: undefined;
21
+ }, {}, {
22
+ length: number | undefined;
23
+ }>;
24
+ decisionId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
+ name: "decision_id";
26
+ tableName: "operator_fallback_artifacts";
27
+ dataType: "string";
28
+ columnType: "SQLiteText";
29
+ data: string;
30
+ driverParam: string;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: [string, ...string[]];
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {
41
+ length: number | undefined;
42
+ }>;
43
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
44
+ name: "status";
45
+ tableName: "operator_fallback_artifacts";
46
+ dataType: "string";
47
+ columnType: "SQLiteText";
48
+ data: string;
49
+ driverParam: string;
50
+ notNull: true;
51
+ hasDefault: false;
52
+ isPrimaryKey: false;
53
+ isAutoincrement: false;
54
+ hasRuntimeDefault: false;
55
+ enumValues: [string, ...string[]];
56
+ baseColumn: never;
57
+ identity: undefined;
58
+ generated: undefined;
59
+ }, {}, {
60
+ length: number | undefined;
61
+ }>;
62
+ reason: import("drizzle-orm/sqlite-core").SQLiteColumn<{
63
+ name: "reason";
64
+ tableName: "operator_fallback_artifacts";
65
+ dataType: "string";
66
+ columnType: "SQLiteText";
67
+ data: string;
68
+ driverParam: string;
69
+ notNull: true;
70
+ hasDefault: false;
71
+ isPrimaryKey: false;
72
+ isAutoincrement: false;
73
+ hasRuntimeDefault: false;
74
+ enumValues: [string, ...string[]];
75
+ baseColumn: never;
76
+ identity: undefined;
77
+ generated: undefined;
78
+ }, {}, {
79
+ length: number | undefined;
80
+ }>;
81
+ sourceRefsJson: import("drizzle-orm/sqlite-core").SQLiteColumn<{
82
+ name: "source_refs_json";
83
+ tableName: "operator_fallback_artifacts";
84
+ dataType: "string";
85
+ columnType: "SQLiteText";
86
+ data: string;
87
+ driverParam: string;
88
+ notNull: true;
89
+ hasDefault: false;
90
+ isPrimaryKey: false;
91
+ isAutoincrement: false;
92
+ hasRuntimeDefault: false;
93
+ enumValues: [string, ...string[]];
94
+ baseColumn: never;
95
+ identity: undefined;
96
+ generated: undefined;
97
+ }, {}, {
98
+ length: number | undefined;
99
+ }>;
100
+ candidateMessage: import("drizzle-orm/sqlite-core").SQLiteColumn<{
101
+ name: "candidate_message";
102
+ tableName: "operator_fallback_artifacts";
103
+ dataType: "string";
104
+ columnType: "SQLiteText";
105
+ data: string;
106
+ driverParam: string;
107
+ notNull: false;
108
+ hasDefault: false;
109
+ isPrimaryKey: false;
110
+ isAutoincrement: false;
111
+ hasRuntimeDefault: false;
112
+ enumValues: [string, ...string[]];
113
+ baseColumn: never;
114
+ identity: undefined;
115
+ generated: undefined;
116
+ }, {}, {
117
+ length: number | undefined;
118
+ }>;
119
+ nextStep: import("drizzle-orm/sqlite-core").SQLiteColumn<{
120
+ name: "next_step";
121
+ tableName: "operator_fallback_artifacts";
122
+ dataType: "string";
123
+ columnType: "SQLiteText";
124
+ data: string;
125
+ driverParam: string;
126
+ notNull: true;
127
+ hasDefault: false;
128
+ isPrimaryKey: false;
129
+ isAutoincrement: false;
130
+ hasRuntimeDefault: false;
131
+ enumValues: [string, ...string[]];
132
+ baseColumn: never;
133
+ identity: undefined;
134
+ generated: undefined;
135
+ }, {}, {
136
+ length: number | undefined;
137
+ }>;
138
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
139
+ name: "created_at";
140
+ tableName: "operator_fallback_artifacts";
141
+ dataType: "string";
142
+ columnType: "SQLiteText";
143
+ data: string;
144
+ driverParam: string;
145
+ notNull: true;
146
+ hasDefault: false;
147
+ isPrimaryKey: false;
148
+ isAutoincrement: false;
149
+ hasRuntimeDefault: false;
150
+ enumValues: [string, ...string[]];
151
+ baseColumn: never;
152
+ identity: undefined;
153
+ generated: undefined;
154
+ }, {}, {
155
+ length: number | undefined;
156
+ }>;
157
+ };
158
+ dialect: "sqlite";
159
+ }>;
160
+ export type OperatorFallbackRow = typeof operatorFallbackArtifacts.$inferSelect;
161
+ export type NewOperatorFallbackRow = typeof operatorFallbackArtifacts.$inferInsert;
@@ -0,0 +1,11 @@
1
+ import { index, sqliteTable, text } from "drizzle-orm/sqlite-core";
2
+ export const operatorFallbackArtifacts = sqliteTable("operator_fallback_artifacts", {
3
+ fallbackRef: text("fallback_ref").primaryKey(),
4
+ decisionId: text("decision_id").notNull(),
5
+ status: text("status").notNull(),
6
+ reason: text("reason").notNull(),
7
+ sourceRefsJson: text("source_refs_json").notNull(),
8
+ candidateMessage: text("candidate_message"),
9
+ nextStep: text("next_step").notNull(),
10
+ createdAt: text("created_at").notNull(),
11
+ }, (table) => [index("operator_fallback_decision_idx").on(table.decisionId)]);
@@ -55,6 +55,23 @@ export declare const policyRecords: import("drizzle-orm/sqlite-core").SQLiteTabl
55
55
  identity: undefined;
56
56
  generated: undefined;
57
57
  }, {}, {}>;
58
+ outreachDailyBudget: import("drizzle-orm/sqlite-core").SQLiteColumn<{
59
+ name: "outreach_daily_budget";
60
+ tableName: "policy_records";
61
+ dataType: "number";
62
+ columnType: "SQLiteInteger";
63
+ data: number;
64
+ driverParam: number;
65
+ notNull: true;
66
+ hasDefault: true;
67
+ isPrimaryKey: false;
68
+ isAutoincrement: false;
69
+ hasRuntimeDefault: false;
70
+ enumValues: undefined;
71
+ baseColumn: never;
72
+ identity: undefined;
73
+ generated: undefined;
74
+ }, {}, {}>;
58
75
  updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
59
76
  name: "updated_at";
60
77
  tableName: "policy_records";
@@ -3,5 +3,6 @@ export const policyRecords = sqliteTable("policy_records", {
3
3
  platformId: text("platform_id").primaryKey(),
4
4
  socialDailyLimit: integer("social_daily_limit").notNull(),
5
5
  quietEnabled: integer("quiet_enabled", { mode: "boolean" }).notNull(),
6
+ outreachDailyBudget: integer("outreach_daily_budget").notNull().default(2),
6
7
  updatedAt: text("updated_at").notNull(),
7
8
  });
@@ -0,0 +1,3 @@
1
+ import type { StateDatabase } from "../db/index.js";
2
+ import type { DeliveryAttemptRecord } from "./types.js";
3
+ export declare function listDeliveryAttemptsByDecisionId(state: StateDatabase, decisionId: string): Promise<DeliveryAttemptRecord[]>;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Read models for delivery attempts by decisionId (T4.3.1).
3
+ */
4
+ import { eq } from "drizzle-orm";
5
+ import { deliveryAttempts } from "../db/schema/delivery-attempts.js";
6
+ function rowToRecord(row) {
7
+ let hostProofRef;
8
+ if (row.hostProofRefJson) {
9
+ try {
10
+ hostProofRef = JSON.parse(row.hostProofRefJson);
11
+ }
12
+ catch {
13
+ hostProofRef = undefined;
14
+ }
15
+ }
16
+ return {
17
+ attemptId: row.attemptId,
18
+ decisionId: row.decisionId,
19
+ target: row.target ?? undefined,
20
+ channel: row.channel ?? undefined,
21
+ status: row.status,
22
+ messageId: row.messageId ?? undefined,
23
+ hostProofRef,
24
+ errorClass: row.errorClass ?? undefined,
25
+ fallbackRef: row.fallbackRef ?? undefined,
26
+ createdAt: row.createdAt,
27
+ };
28
+ }
29
+ export async function listDeliveryAttemptsByDecisionId(state, decisionId) {
30
+ const rows = await state.db.select().from(deliveryAttempts).where(eq(deliveryAttempts.decisionId, decisionId));
31
+ return rows.map(rowToRecord);
32
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Delivery attempt persistence (state-system v5 / T4.3.1).
3
+ *
4
+ * Boundaries: validates proof fields before index write; hostProofRef uses SourceRef JSON.
5
+ * Test coverage: tests/unit/storage/delivery-attempt.test.ts
6
+ */
7
+ import type { SourceRef } from "../life-evidence/types.js";
8
+ export type DeliveryAttemptStatus = "sent" | "failed" | "dropped_by_host_policy";
9
+ export interface DeliveryAttemptWrite {
10
+ attemptId: string;
11
+ decisionId: string;
12
+ target?: "none" | "last" | "explicit";
13
+ channel?: string;
14
+ status: DeliveryAttemptStatus;
15
+ messageId?: string;
16
+ hostProofRef?: SourceRef;
17
+ errorClass?: string;
18
+ fallbackRef?: string;
19
+ }
20
+ export interface DeliveryAttemptRecord extends DeliveryAttemptWrite {
21
+ createdAt: string;
22
+ }
23
+ export interface DeliveryAttemptAck {
24
+ attemptId: string;
25
+ status: DeliveryAttemptStatus;
26
+ fallbackRef?: string;
27
+ }
@@ -0,0 +1 @@
1
+ export {};