@haaaiawd/second-nature 0.1.16 → 0.1.18

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 (188) hide show
  1. package/index.js +855 -851
  2. package/openclaw.plugin.json +29 -29
  3. package/package.json +52 -52
  4. package/runtime/cli/commands/index.d.ts +14 -14
  5. package/runtime/cli/commands/index.js +193 -193
  6. package/runtime/cli/explain/explain-surface-subject.d.ts +8 -8
  7. package/runtime/cli/explain/explain-surface-subject.js +9 -9
  8. package/runtime/cli/explain/format-explanation.d.ts +12 -12
  9. package/runtime/cli/explain/format-explanation.js +12 -12
  10. package/runtime/cli/explain/resolve-subject.js +41 -41
  11. package/runtime/cli/host-capability/classify-delivery.d.ts +14 -14
  12. package/runtime/cli/host-capability/classify-delivery.js +20 -20
  13. package/runtime/cli/host-capability/probe-host-capability.d.ts +2 -2
  14. package/runtime/cli/host-capability/probe-host-capability.js +58 -58
  15. package/runtime/cli/host-capability/record-host-capability.d.ts +6 -6
  16. package/runtime/cli/host-capability/record-host-capability.js +14 -14
  17. package/runtime/cli/host-capability/types.d.ts +71 -71
  18. package/runtime/cli/host-capability/types.js +6 -6
  19. package/runtime/cli/host-smoke/run-host-smoke.d.ts +2 -2
  20. package/runtime/cli/host-smoke/run-host-smoke.js +40 -40
  21. package/runtime/cli/host-smoke/types.d.ts +35 -35
  22. package/runtime/cli/host-smoke/types.js +6 -6
  23. package/runtime/cli/index.js +58 -54
  24. package/runtime/cli/ops/heartbeat-surface.d.ts +38 -35
  25. package/runtime/cli/ops/heartbeat-surface.js +73 -71
  26. package/runtime/cli/ops/ops-router.d.ts +19 -16
  27. package/runtime/cli/ops/ops-router.js +89 -87
  28. package/runtime/cli/ops/show-operator-fallback.d.ts +13 -13
  29. package/runtime/cli/ops/show-operator-fallback.js +22 -22
  30. package/runtime/cli/ops/workspace-heartbeat-runner.d.ts +19 -10
  31. package/runtime/cli/ops/workspace-heartbeat-runner.js +39 -26
  32. package/runtime/cli/read-models/index.d.ts +29 -29
  33. package/runtime/cli/read-models/index.js +256 -256
  34. package/runtime/cli/read-models/operator-explain-map.d.ts +6 -6
  35. package/runtime/cli/read-models/operator-explain-map.js +10 -10
  36. package/runtime/cli/read-models/types.d.ts +79 -79
  37. package/runtime/cli/runtime/runtime-artifact-boundary.d.ts +28 -28
  38. package/runtime/cli/runtime/runtime-artifact-boundary.js +94 -94
  39. package/runtime/connectors/base/contract.d.ts +87 -87
  40. package/runtime/connectors/base/execution-policy.d.ts +47 -47
  41. package/runtime/connectors/base/execution-policy.js +82 -82
  42. package/runtime/connectors/base/index.d.ts +8 -8
  43. package/runtime/connectors/base/index.js +8 -8
  44. package/runtime/connectors/base/manifest.d.ts +64 -64
  45. package/runtime/connectors/base/manifest.js +86 -86
  46. package/runtime/connectors/base/map-life-evidence.d.ts +16 -16
  47. package/runtime/connectors/base/map-life-evidence.js +79 -79
  48. package/runtime/connectors/base/policy-layer.d.ts +29 -29
  49. package/runtime/connectors/base/policy-layer.js +198 -198
  50. package/runtime/connectors/base/route-planner.js +99 -99
  51. package/runtime/connectors/index.d.ts +5 -5
  52. package/runtime/connectors/index.js +5 -5
  53. package/runtime/connectors/near-real/near-real-connector-smoke.d.ts +19 -19
  54. package/runtime/connectors/near-real/near-real-connector-smoke.js +152 -152
  55. package/runtime/core/second-nature/heartbeat/heartbeat-executor.js +114 -114
  56. package/runtime/core/second-nature/heartbeat/heartbeat-loop.d.ts +63 -63
  57. package/runtime/core/second-nature/heartbeat/heartbeat-loop.js +139 -139
  58. package/runtime/core/second-nature/heartbeat/index.d.ts +8 -8
  59. package/runtime/core/second-nature/heartbeat/index.js +7 -7
  60. package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.d.ts +21 -21
  61. package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.js +35 -35
  62. package/runtime/core/second-nature/heartbeat/runtime-snapshot.d.ts +28 -28
  63. package/runtime/core/second-nature/heartbeat/runtime-snapshot.js +35 -35
  64. package/runtime/core/second-nature/heartbeat/signal.d.ts +42 -42
  65. package/runtime/core/second-nature/heartbeat/snapshot-builder.d.ts +51 -51
  66. package/runtime/core/second-nature/index.d.ts +22 -22
  67. package/runtime/core/second-nature/index.js +22 -22
  68. package/runtime/core/second-nature/orchestrator/effect-dispatcher.d.ts +100 -100
  69. package/runtime/core/second-nature/orchestrator/effect-dispatcher.js +144 -144
  70. package/runtime/core/second-nature/orchestrator/guard-layer.d.ts +8 -8
  71. package/runtime/core/second-nature/orchestrator/guard-layer.js +110 -110
  72. package/runtime/core/second-nature/orchestrator/intent-planner.d.ts +13 -13
  73. package/runtime/core/second-nature/orchestrator/intent-planner.js +199 -199
  74. package/runtime/core/second-nature/orchestrator/lease-manager.d.ts +14 -14
  75. package/runtime/core/second-nature/orchestrator/lease-manager.js +58 -58
  76. package/runtime/core/second-nature/outreach/build-outreach-draft-request.d.ts +6 -6
  77. package/runtime/core/second-nature/outreach/build-outreach-draft-request.js +63 -63
  78. package/runtime/core/second-nature/outreach/delivery-target.d.ts +26 -26
  79. package/runtime/core/second-nature/outreach/delivery-target.js +70 -70
  80. package/runtime/core/second-nature/outreach/dispatch-user-outreach.d.ts +38 -38
  81. package/runtime/core/second-nature/outreach/dispatch-user-outreach.js +119 -119
  82. package/runtime/core/second-nature/outreach/judge-input-from-snapshot.d.ts +7 -7
  83. package/runtime/core/second-nature/outreach/judge-input-from-snapshot.js +45 -45
  84. package/runtime/core/second-nature/outreach/judge-outreach.d.ts +40 -40
  85. package/runtime/core/second-nature/outreach/judge-outreach.js +121 -121
  86. package/runtime/core/second-nature/quiet/run-source-backed-quiet.d.ts +21 -21
  87. package/runtime/core/second-nature/quiet/run-source-backed-quiet.js +123 -123
  88. package/runtime/core/second-nature/rhythm/planner-rhythm-window.d.ts +15 -15
  89. package/runtime/core/second-nature/rhythm/planner-rhythm-window.js +52 -52
  90. package/runtime/core/second-nature/rhythm/policy-bridge.d.ts +19 -19
  91. package/runtime/core/second-nature/rhythm/policy-bridge.js +34 -34
  92. package/runtime/core/second-nature/runtime/service-entry.js +45 -45
  93. package/runtime/core/second-nature/types.d.ts +51 -51
  94. package/runtime/guidance/draft-outreach-message.d.ts +7 -7
  95. package/runtime/guidance/draft-outreach-message.js +42 -42
  96. package/runtime/guidance/evidence-guidance.d.ts +40 -40
  97. package/runtime/guidance/evidence-guidance.js +52 -52
  98. package/runtime/guidance/index.d.ts +11 -11
  99. package/runtime/guidance/index.js +11 -11
  100. package/runtime/guidance/outreach-draft-schema.d.ts +228 -228
  101. package/runtime/guidance/outreach-draft-schema.js +80 -80
  102. package/runtime/observability/audit/append-only-audit-store.d.ts +14 -14
  103. package/runtime/observability/audit/append-only-audit-store.js +21 -21
  104. package/runtime/observability/audit/audit-envelope.d.ts +51 -51
  105. package/runtime/observability/audit/audit-envelope.js +130 -130
  106. package/runtime/observability/audit/verify-audit-hash-chain.d.ts +23 -23
  107. package/runtime/observability/audit/verify-audit-hash-chain.js +83 -83
  108. package/runtime/observability/db/index.js +124 -124
  109. package/runtime/observability/db/schema/host-capability-reports.d.ts +180 -180
  110. package/runtime/observability/db/schema/host-capability-reports.js +12 -12
  111. package/runtime/observability/db/schema/index.d.ts +947 -947
  112. package/runtime/observability/db/schema/index.js +71 -71
  113. package/runtime/observability/index.d.ts +20 -19
  114. package/runtime/observability/index.js +19 -18
  115. package/runtime/observability/query/explain-query.d.ts +48 -48
  116. package/runtime/observability/query/explain-query.js +114 -114
  117. package/runtime/observability/query/export-audit-bundle.d.ts +22 -22
  118. package/runtime/observability/query/export-audit-bundle.js +27 -27
  119. package/runtime/observability/services/decision-ledger.d.ts +46 -46
  120. package/runtime/observability/services/decision-ledger.js +161 -161
  121. package/runtime/observability/services/governance-audit.d.ts +41 -41
  122. package/runtime/observability/services/governance-audit.js +163 -163
  123. package/runtime/observability/services/governance-plane-recorder.d.ts +47 -47
  124. package/runtime/observability/services/governance-plane-recorder.js +55 -55
  125. package/runtime/observability/services/lived-experience-audit.d.ts +97 -97
  126. package/runtime/observability/services/lived-experience-audit.js +162 -162
  127. package/runtime/observability/services/runtime-decision-recorder.d.ts +29 -0
  128. package/runtime/observability/services/runtime-decision-recorder.js +94 -0
  129. package/runtime/storage/bootstrap/native-sqlite-probe.d.ts +7 -7
  130. package/runtime/storage/bootstrap/native-sqlite-probe.js +28 -28
  131. package/runtime/storage/bootstrap/repair-gate.d.ts +17 -17
  132. package/runtime/storage/bootstrap/repair-gate.js +71 -71
  133. package/runtime/storage/bootstrap/storage-mode-smoke.d.ts +38 -38
  134. package/runtime/storage/bootstrap/storage-mode-smoke.js +85 -85
  135. package/runtime/storage/db/index.js +154 -154
  136. package/runtime/storage/db/schema/delivery-attempts.d.ts +199 -199
  137. package/runtime/storage/db/schema/delivery-attempts.js +13 -13
  138. package/runtime/storage/db/schema/index.d.ts +9 -9
  139. package/runtime/storage/db/schema/index.js +9 -9
  140. package/runtime/storage/db/schema/life-evidence-index.d.ts +161 -161
  141. package/runtime/storage/db/schema/life-evidence-index.js +11 -11
  142. package/runtime/storage/db/schema/operator-fallback-artifacts.d.ts +161 -161
  143. package/runtime/storage/db/schema/operator-fallback-artifacts.js +11 -11
  144. package/runtime/storage/db/schema/policies.d.ts +98 -98
  145. package/runtime/storage/db/schema/policies.js +8 -8
  146. package/runtime/storage/delivery/query-delivery-attempts.d.ts +3 -3
  147. package/runtime/storage/delivery/query-delivery-attempts.js +32 -32
  148. package/runtime/storage/delivery/types.d.ts +27 -27
  149. package/runtime/storage/delivery/types.js +1 -1
  150. package/runtime/storage/delivery/write-delivery-attempt.d.ts +6 -6
  151. package/runtime/storage/delivery/write-delivery-attempt.js +36 -36
  152. package/runtime/storage/fallback/load-operator-fallback.d.ts +14 -14
  153. package/runtime/storage/fallback/load-operator-fallback.js +47 -47
  154. package/runtime/storage/fallback/operator-fallback-types.d.ts +9 -9
  155. package/runtime/storage/fallback/operator-fallback-types.js +1 -1
  156. package/runtime/storage/fallback/operator-fallback-view.d.ts +11 -11
  157. package/runtime/storage/fallback/operator-fallback-view.js +1 -1
  158. package/runtime/storage/fallback/write-operator-fallback.d.ts +6 -6
  159. package/runtime/storage/fallback/write-operator-fallback.js +21 -21
  160. package/runtime/storage/index.d.ts +37 -37
  161. package/runtime/storage/index.js +30 -30
  162. package/runtime/storage/life-evidence/append-life-evidence.d.ts +7 -7
  163. package/runtime/storage/life-evidence/append-life-evidence.js +64 -64
  164. package/runtime/storage/life-evidence/types.d.ts +45 -45
  165. package/runtime/storage/life-evidence/types.js +6 -6
  166. package/runtime/storage/quiet/persist-quiet-artifact.d.ts +7 -7
  167. package/runtime/storage/quiet/persist-quiet-artifact.js +22 -22
  168. package/runtime/storage/quiet/quiet-artifact-types.d.ts +18 -18
  169. package/runtime/storage/quiet/quiet-artifact-types.js +1 -1
  170. package/runtime/storage/quiet/quiet-artifact-writer.d.ts +15 -15
  171. package/runtime/storage/quiet/quiet-artifact-writer.js +56 -56
  172. package/runtime/storage/repositories/credential-repository.js +30 -30
  173. package/runtime/storage/rhythm/rhythm-policy-snapshot.d.ts +10 -10
  174. package/runtime/storage/rhythm/rhythm-policy-snapshot.js +34 -34
  175. package/runtime/storage/services/credential-vault.d.ts +13 -13
  176. package/runtime/storage/services/credential-vault.js +116 -116
  177. package/runtime/storage/snapshots/continuity-snapshot.d.ts +9 -9
  178. package/runtime/storage/snapshots/continuity-snapshot.js +41 -41
  179. package/runtime/storage/snapshots/life-evidence-snapshot.d.ts +6 -6
  180. package/runtime/storage/snapshots/life-evidence-snapshot.js +114 -114
  181. package/runtime/storage/snapshots/types.d.ts +58 -58
  182. package/runtime/storage/snapshots/types.js +1 -1
  183. package/runtime/storage/state-api.js +104 -104
  184. package/runtime/storage/user-interest/load-user-interest-snapshot.d.ts +2 -2
  185. package/runtime/storage/user-interest/load-user-interest-snapshot.js +150 -150
  186. package/runtime/storage/user-interest/types.d.ts +25 -25
  187. package/runtime/storage/user-interest/types.js +1 -1
  188. package/workspace-ops-bridge.js +81 -80
@@ -1,11 +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)]);
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)]);
@@ -1,98 +1,98 @@
1
- export declare const policyRecords: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
2
- name: "policy_records";
3
- schema: undefined;
4
- columns: {
5
- platformId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6
- name: "platform_id";
7
- tableName: "policy_records";
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
- socialDailyLimit: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
- name: "social_daily_limit";
26
- tableName: "policy_records";
27
- dataType: "number";
28
- columnType: "SQLiteInteger";
29
- data: number;
30
- driverParam: number;
31
- notNull: true;
32
- hasDefault: false;
33
- isPrimaryKey: false;
34
- isAutoincrement: false;
35
- hasRuntimeDefault: false;
36
- enumValues: undefined;
37
- baseColumn: never;
38
- identity: undefined;
39
- generated: undefined;
40
- }, {}, {}>;
41
- quietEnabled: import("drizzle-orm/sqlite-core").SQLiteColumn<{
42
- name: "quiet_enabled";
43
- tableName: "policy_records";
44
- dataType: "boolean";
45
- columnType: "SQLiteBoolean";
46
- data: boolean;
47
- driverParam: number;
48
- notNull: true;
49
- hasDefault: false;
50
- isPrimaryKey: false;
51
- isAutoincrement: false;
52
- hasRuntimeDefault: false;
53
- enumValues: undefined;
54
- baseColumn: never;
55
- identity: undefined;
56
- generated: undefined;
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
- }, {}, {}>;
75
- updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
76
- name: "updated_at";
77
- tableName: "policy_records";
78
- dataType: "string";
79
- columnType: "SQLiteText";
80
- data: string;
81
- driverParam: string;
82
- notNull: true;
83
- hasDefault: false;
84
- isPrimaryKey: false;
85
- isAutoincrement: false;
86
- hasRuntimeDefault: false;
87
- enumValues: [string, ...string[]];
88
- baseColumn: never;
89
- identity: undefined;
90
- generated: undefined;
91
- }, {}, {
92
- length: number | undefined;
93
- }>;
94
- };
95
- dialect: "sqlite";
96
- }>;
97
- export type PolicyRecord = typeof policyRecords.$inferSelect;
98
- export type NewPolicyRecord = typeof policyRecords.$inferInsert;
1
+ export declare const policyRecords: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
2
+ name: "policy_records";
3
+ schema: undefined;
4
+ columns: {
5
+ platformId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
6
+ name: "platform_id";
7
+ tableName: "policy_records";
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
+ socialDailyLimit: import("drizzle-orm/sqlite-core").SQLiteColumn<{
25
+ name: "social_daily_limit";
26
+ tableName: "policy_records";
27
+ dataType: "number";
28
+ columnType: "SQLiteInteger";
29
+ data: number;
30
+ driverParam: number;
31
+ notNull: true;
32
+ hasDefault: false;
33
+ isPrimaryKey: false;
34
+ isAutoincrement: false;
35
+ hasRuntimeDefault: false;
36
+ enumValues: undefined;
37
+ baseColumn: never;
38
+ identity: undefined;
39
+ generated: undefined;
40
+ }, {}, {}>;
41
+ quietEnabled: import("drizzle-orm/sqlite-core").SQLiteColumn<{
42
+ name: "quiet_enabled";
43
+ tableName: "policy_records";
44
+ dataType: "boolean";
45
+ columnType: "SQLiteBoolean";
46
+ data: boolean;
47
+ driverParam: number;
48
+ notNull: true;
49
+ hasDefault: false;
50
+ isPrimaryKey: false;
51
+ isAutoincrement: false;
52
+ hasRuntimeDefault: false;
53
+ enumValues: undefined;
54
+ baseColumn: never;
55
+ identity: undefined;
56
+ generated: undefined;
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
+ }, {}, {}>;
75
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
76
+ name: "updated_at";
77
+ tableName: "policy_records";
78
+ dataType: "string";
79
+ columnType: "SQLiteText";
80
+ data: string;
81
+ driverParam: string;
82
+ notNull: true;
83
+ hasDefault: false;
84
+ isPrimaryKey: false;
85
+ isAutoincrement: false;
86
+ hasRuntimeDefault: false;
87
+ enumValues: [string, ...string[]];
88
+ baseColumn: never;
89
+ identity: undefined;
90
+ generated: undefined;
91
+ }, {}, {
92
+ length: number | undefined;
93
+ }>;
94
+ };
95
+ dialect: "sqlite";
96
+ }>;
97
+ export type PolicyRecord = typeof policyRecords.$inferSelect;
98
+ export type NewPolicyRecord = typeof policyRecords.$inferInsert;
@@ -1,8 +1,8 @@
1
- import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
2
- export const policyRecords = sqliteTable("policy_records", {
3
- platformId: text("platform_id").primaryKey(),
4
- socialDailyLimit: integer("social_daily_limit").notNull(),
5
- quietEnabled: integer("quiet_enabled", { mode: "boolean" }).notNull(),
6
- outreachDailyBudget: integer("outreach_daily_budget").notNull().default(2),
7
- updatedAt: text("updated_at").notNull(),
8
- });
1
+ import { integer, sqliteTable, text } from "drizzle-orm/sqlite-core";
2
+ export const policyRecords = sqliteTable("policy_records", {
3
+ platformId: text("platform_id").primaryKey(),
4
+ socialDailyLimit: integer("social_daily_limit").notNull(),
5
+ quietEnabled: integer("quiet_enabled", { mode: "boolean" }).notNull(),
6
+ outreachDailyBudget: integer("outreach_daily_budget").notNull().default(2),
7
+ updatedAt: text("updated_at").notNull(),
8
+ });
@@ -1,3 +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[]>;
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[]>;
@@ -1,32 +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
- }
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
+ }
@@ -1,27 +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
- }
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
+ }
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1,6 +1,6 @@
1
- /**
2
- * Persists delivery attempts with state-system validation (T4.3.1).
3
- */
4
- import type { StateDatabase } from "../db/index.js";
5
- import type { DeliveryAttemptAck, DeliveryAttemptWrite } from "./types.js";
6
- export declare function writeDeliveryAttempt(state: StateDatabase, attempt: DeliveryAttemptWrite): Promise<DeliveryAttemptAck>;
1
+ /**
2
+ * Persists delivery attempts with state-system validation (T4.3.1).
3
+ */
4
+ import type { StateDatabase } from "../db/index.js";
5
+ import type { DeliveryAttemptAck, DeliveryAttemptWrite } from "./types.js";
6
+ export declare function writeDeliveryAttempt(state: StateDatabase, attempt: DeliveryAttemptWrite): Promise<DeliveryAttemptAck>;
@@ -1,36 +1,36 @@
1
- import { deliveryAttempts } from "../db/schema/delivery-attempts.js";
2
- function assertDeliveryAttemptValid(attempt) {
3
- if (attempt.status === "sent") {
4
- const hasProof = Boolean(attempt.messageId?.trim()) || Boolean(attempt.hostProofRef);
5
- if (!hasProof) {
6
- throw new Error("delivery_attempt_sent_requires_message_id_or_host_proof_ref");
7
- }
8
- }
9
- if (attempt.status === "failed" || attempt.status === "dropped_by_host_policy") {
10
- const hasDiag = Boolean(attempt.errorClass?.trim()) || Boolean(attempt.fallbackRef?.trim());
11
- if (!hasDiag) {
12
- throw new Error("delivery_attempt_failed_requires_error_class_or_fallback_ref");
13
- }
14
- }
15
- }
16
- export async function writeDeliveryAttempt(state, attempt) {
17
- assertDeliveryAttemptValid(attempt);
18
- const createdAt = new Date().toISOString();
19
- await state.db.insert(deliveryAttempts).values({
20
- attemptId: attempt.attemptId,
21
- decisionId: attempt.decisionId,
22
- target: attempt.target ?? null,
23
- channel: attempt.channel ?? null,
24
- status: attempt.status,
25
- messageId: attempt.messageId ?? null,
26
- hostProofRefJson: attempt.hostProofRef ? JSON.stringify(attempt.hostProofRef) : null,
27
- errorClass: attempt.errorClass ?? null,
28
- fallbackRef: attempt.fallbackRef ?? null,
29
- createdAt,
30
- });
31
- return {
32
- attemptId: attempt.attemptId,
33
- status: attempt.status,
34
- fallbackRef: attempt.fallbackRef,
35
- };
36
- }
1
+ import { deliveryAttempts } from "../db/schema/delivery-attempts.js";
2
+ function assertDeliveryAttemptValid(attempt) {
3
+ if (attempt.status === "sent") {
4
+ const hasProof = Boolean(attempt.messageId?.trim()) || Boolean(attempt.hostProofRef);
5
+ if (!hasProof) {
6
+ throw new Error("delivery_attempt_sent_requires_message_id_or_host_proof_ref");
7
+ }
8
+ }
9
+ if (attempt.status === "failed" || attempt.status === "dropped_by_host_policy") {
10
+ const hasDiag = Boolean(attempt.errorClass?.trim()) || Boolean(attempt.fallbackRef?.trim());
11
+ if (!hasDiag) {
12
+ throw new Error("delivery_attempt_failed_requires_error_class_or_fallback_ref");
13
+ }
14
+ }
15
+ }
16
+ export async function writeDeliveryAttempt(state, attempt) {
17
+ assertDeliveryAttemptValid(attempt);
18
+ const createdAt = new Date().toISOString();
19
+ await state.db.insert(deliveryAttempts).values({
20
+ attemptId: attempt.attemptId,
21
+ decisionId: attempt.decisionId,
22
+ target: attempt.target ?? null,
23
+ channel: attempt.channel ?? null,
24
+ status: attempt.status,
25
+ messageId: attempt.messageId ?? null,
26
+ hostProofRefJson: attempt.hostProofRef ? JSON.stringify(attempt.hostProofRef) : null,
27
+ errorClass: attempt.errorClass ?? null,
28
+ fallbackRef: attempt.fallbackRef ?? null,
29
+ createdAt,
30
+ });
31
+ return {
32
+ attemptId: attempt.attemptId,
33
+ status: attempt.status,
34
+ fallbackRef: attempt.fallbackRef,
35
+ };
36
+ }
@@ -1,14 +1,14 @@
1
- import type { StateDatabase } from "../db/index.js";
2
- import type { SourceRef } from "../life-evidence/types.js";
3
- import type { OperatorFallbackView } from "./operator-fallback-view.js";
4
- export declare function normalizeFallbackRef(ref: string): string;
5
- /** Loads persisted operator fallback row; does not coerce status (use `toOperatorFallbackView`). */
6
- export declare function loadOperatorFallbackRow(state: StateDatabase, fallbackRef: string): Promise<{
7
- fallbackRef: string;
8
- reason: string;
9
- status: string;
10
- sourceRefs: SourceRef[];
11
- candidateMessage?: string;
12
- nextStep: string;
13
- } | null>;
14
- export declare function toOperatorFallbackView(row: NonNullable<Awaited<ReturnType<typeof loadOperatorFallbackRow>>>): OperatorFallbackView;
1
+ import type { StateDatabase } from "../db/index.js";
2
+ import type { SourceRef } from "../life-evidence/types.js";
3
+ import type { OperatorFallbackView } from "./operator-fallback-view.js";
4
+ export declare function normalizeFallbackRef(ref: string): string;
5
+ /** Loads persisted operator fallback row; does not coerce status (use `toOperatorFallbackView`). */
6
+ export declare function loadOperatorFallbackRow(state: StateDatabase, fallbackRef: string): Promise<{
7
+ fallbackRef: string;
8
+ reason: string;
9
+ status: string;
10
+ sourceRefs: SourceRef[];
11
+ candidateMessage?: string;
12
+ nextStep: string;
13
+ } | null>;
14
+ export declare function toOperatorFallbackView(row: NonNullable<Awaited<ReturnType<typeof loadOperatorFallbackRow>>>): OperatorFallbackView;
@@ -1,47 +1,47 @@
1
- import { eq } from "drizzle-orm";
2
- import { operatorFallbackArtifacts } from "../db/schema/operator-fallback-artifacts.js";
3
- const REASONS = new Set(["target_none", "channel_missing", "host_unsupported", "delivery_failed"]);
4
- export function normalizeFallbackRef(ref) {
5
- const t = ref.trim();
6
- if (!t)
7
- return t;
8
- return t.startsWith("fallback:") ? t : `fallback:${t}`;
9
- }
10
- function parseSourceRefs(json) {
11
- try {
12
- const parsed = JSON.parse(json);
13
- return Array.isArray(parsed) ? parsed : [];
14
- }
15
- catch {
16
- return [];
17
- }
18
- }
19
- /** Loads persisted operator fallback row; does not coerce status (use `toOperatorFallbackView`). */
20
- export async function loadOperatorFallbackRow(state, fallbackRef) {
21
- const key = normalizeFallbackRef(fallbackRef);
22
- if (!key)
23
- return null;
24
- const rows = await state.db.select().from(operatorFallbackArtifacts).where(eq(operatorFallbackArtifacts.fallbackRef, key)).limit(1);
25
- const row = rows[0];
26
- if (!row)
27
- return null;
28
- return {
29
- fallbackRef: row.fallbackRef,
30
- reason: row.reason,
31
- status: row.status,
32
- sourceRefs: parseSourceRefs(row.sourceRefsJson),
33
- candidateMessage: row.candidateMessage ?? undefined,
34
- nextStep: row.nextStep,
35
- };
36
- }
37
- export function toOperatorFallbackView(row) {
38
- const reason = REASONS.has(row.reason) ? row.reason : row.reason;
39
- return {
40
- fallbackRef: row.fallbackRef,
41
- reason,
42
- status: "not_sent",
43
- sourceRefs: row.sourceRefs,
44
- candidateMessage: row.candidateMessage,
45
- nextStep: row.nextStep,
46
- };
47
- }
1
+ import { eq } from "drizzle-orm";
2
+ import { operatorFallbackArtifacts } from "../db/schema/operator-fallback-artifacts.js";
3
+ const REASONS = new Set(["target_none", "channel_missing", "host_unsupported", "delivery_failed"]);
4
+ export function normalizeFallbackRef(ref) {
5
+ const t = ref.trim();
6
+ if (!t)
7
+ return t;
8
+ return t.startsWith("fallback:") ? t : `fallback:${t}`;
9
+ }
10
+ function parseSourceRefs(json) {
11
+ try {
12
+ const parsed = JSON.parse(json);
13
+ return Array.isArray(parsed) ? parsed : [];
14
+ }
15
+ catch {
16
+ return [];
17
+ }
18
+ }
19
+ /** Loads persisted operator fallback row; does not coerce status (use `toOperatorFallbackView`). */
20
+ export async function loadOperatorFallbackRow(state, fallbackRef) {
21
+ const key = normalizeFallbackRef(fallbackRef);
22
+ if (!key)
23
+ return null;
24
+ const rows = await state.db.select().from(operatorFallbackArtifacts).where(eq(operatorFallbackArtifacts.fallbackRef, key)).limit(1);
25
+ const row = rows[0];
26
+ if (!row)
27
+ return null;
28
+ return {
29
+ fallbackRef: row.fallbackRef,
30
+ reason: row.reason,
31
+ status: row.status,
32
+ sourceRefs: parseSourceRefs(row.sourceRefsJson),
33
+ candidateMessage: row.candidateMessage ?? undefined,
34
+ nextStep: row.nextStep,
35
+ };
36
+ }
37
+ export function toOperatorFallbackView(row) {
38
+ const reason = REASONS.has(row.reason) ? row.reason : row.reason;
39
+ return {
40
+ fallbackRef: row.fallbackRef,
41
+ reason,
42
+ status: "not_sent",
43
+ sourceRefs: row.sourceRefs,
44
+ candidateMessage: row.candidateMessage,
45
+ nextStep: row.nextStep,
46
+ };
47
+ }
@@ -1,9 +1,9 @@
1
- import type { SourceRef } from "../life-evidence/types.js";
2
- export type OperatorFallbackReason = "target_none" | "channel_missing" | "host_unsupported" | "delivery_failed";
3
- export interface OperatorFallbackWrite {
4
- reason: OperatorFallbackReason;
5
- decisionId: string;
6
- sourceRefs: SourceRef[];
7
- candidateMessage?: string;
8
- nextStep: string;
9
- }
1
+ import type { SourceRef } from "../life-evidence/types.js";
2
+ export type OperatorFallbackReason = "target_none" | "channel_missing" | "host_unsupported" | "delivery_failed";
3
+ export interface OperatorFallbackWrite {
4
+ reason: OperatorFallbackReason;
5
+ decisionId: string;
6
+ sourceRefs: SourceRef[];
7
+ candidateMessage?: string;
8
+ nextStep: string;
9
+ }
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1,11 +1,11 @@
1
- import type { SourceRef } from "../life-evidence/types.js";
2
- import type { OperatorFallbackReason } from "./operator-fallback-types.js";
3
- /** Operator-facing delivery fallback (T1.2.2 / cli-system v5). Status is always not_sent — never sent/delivered. */
4
- export interface OperatorFallbackView {
5
- fallbackRef: string;
6
- reason: OperatorFallbackReason | string;
7
- status: "not_sent";
8
- sourceRefs: SourceRef[];
9
- candidateMessage?: string;
10
- nextStep: string;
11
- }
1
+ import type { SourceRef } from "../life-evidence/types.js";
2
+ import type { OperatorFallbackReason } from "./operator-fallback-types.js";
3
+ /** Operator-facing delivery fallback (T1.2.2 / cli-system v5). Status is always not_sent — never sent/delivered. */
4
+ export interface OperatorFallbackView {
5
+ fallbackRef: string;
6
+ reason: OperatorFallbackReason | string;
7
+ status: "not_sent";
8
+ sourceRefs: SourceRef[];
9
+ candidateMessage?: string;
10
+ nextStep: string;
11
+ }
@@ -1 +1 @@
1
- export {};
1
+ export {};
@@ -1,6 +1,6 @@
1
- import type { StateDatabase } from "../db/index.js";
2
- import type { OperatorFallbackWrite } from "./operator-fallback-types.js";
3
- export interface OperatorFallbackAck {
4
- fallbackRef: string;
5
- }
6
- export declare function writeOperatorFallback(state: StateDatabase, input: OperatorFallbackWrite): Promise<OperatorFallbackAck>;
1
+ import type { StateDatabase } from "../db/index.js";
2
+ import type { OperatorFallbackWrite } from "./operator-fallback-types.js";
3
+ export interface OperatorFallbackAck {
4
+ fallbackRef: string;
5
+ }
6
+ export declare function writeOperatorFallback(state: StateDatabase, input: OperatorFallbackWrite): Promise<OperatorFallbackAck>;