@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.
- package/index.js +855 -851
- package/openclaw.plugin.json +29 -29
- package/package.json +52 -52
- package/runtime/cli/commands/index.d.ts +14 -14
- package/runtime/cli/commands/index.js +193 -193
- package/runtime/cli/explain/explain-surface-subject.d.ts +8 -8
- package/runtime/cli/explain/explain-surface-subject.js +9 -9
- package/runtime/cli/explain/format-explanation.d.ts +12 -12
- package/runtime/cli/explain/format-explanation.js +12 -12
- package/runtime/cli/explain/resolve-subject.js +41 -41
- package/runtime/cli/host-capability/classify-delivery.d.ts +14 -14
- package/runtime/cli/host-capability/classify-delivery.js +20 -20
- package/runtime/cli/host-capability/probe-host-capability.d.ts +2 -2
- package/runtime/cli/host-capability/probe-host-capability.js +58 -58
- package/runtime/cli/host-capability/record-host-capability.d.ts +6 -6
- package/runtime/cli/host-capability/record-host-capability.js +14 -14
- package/runtime/cli/host-capability/types.d.ts +71 -71
- package/runtime/cli/host-capability/types.js +6 -6
- package/runtime/cli/host-smoke/run-host-smoke.d.ts +2 -2
- package/runtime/cli/host-smoke/run-host-smoke.js +40 -40
- package/runtime/cli/host-smoke/types.d.ts +35 -35
- package/runtime/cli/host-smoke/types.js +6 -6
- package/runtime/cli/index.js +58 -54
- package/runtime/cli/ops/heartbeat-surface.d.ts +38 -35
- package/runtime/cli/ops/heartbeat-surface.js +73 -71
- package/runtime/cli/ops/ops-router.d.ts +19 -16
- package/runtime/cli/ops/ops-router.js +89 -87
- package/runtime/cli/ops/show-operator-fallback.d.ts +13 -13
- package/runtime/cli/ops/show-operator-fallback.js +22 -22
- package/runtime/cli/ops/workspace-heartbeat-runner.d.ts +19 -10
- package/runtime/cli/ops/workspace-heartbeat-runner.js +39 -26
- package/runtime/cli/read-models/index.d.ts +29 -29
- package/runtime/cli/read-models/index.js +256 -256
- package/runtime/cli/read-models/operator-explain-map.d.ts +6 -6
- package/runtime/cli/read-models/operator-explain-map.js +10 -10
- package/runtime/cli/read-models/types.d.ts +79 -79
- package/runtime/cli/runtime/runtime-artifact-boundary.d.ts +28 -28
- package/runtime/cli/runtime/runtime-artifact-boundary.js +94 -94
- package/runtime/connectors/base/contract.d.ts +87 -87
- package/runtime/connectors/base/execution-policy.d.ts +47 -47
- package/runtime/connectors/base/execution-policy.js +82 -82
- package/runtime/connectors/base/index.d.ts +8 -8
- package/runtime/connectors/base/index.js +8 -8
- package/runtime/connectors/base/manifest.d.ts +64 -64
- package/runtime/connectors/base/manifest.js +86 -86
- package/runtime/connectors/base/map-life-evidence.d.ts +16 -16
- package/runtime/connectors/base/map-life-evidence.js +79 -79
- package/runtime/connectors/base/policy-layer.d.ts +29 -29
- package/runtime/connectors/base/policy-layer.js +198 -198
- package/runtime/connectors/base/route-planner.js +99 -99
- package/runtime/connectors/index.d.ts +5 -5
- package/runtime/connectors/index.js +5 -5
- package/runtime/connectors/near-real/near-real-connector-smoke.d.ts +19 -19
- package/runtime/connectors/near-real/near-real-connector-smoke.js +152 -152
- package/runtime/core/second-nature/heartbeat/heartbeat-executor.js +114 -114
- package/runtime/core/second-nature/heartbeat/heartbeat-loop.d.ts +63 -63
- package/runtime/core/second-nature/heartbeat/heartbeat-loop.js +139 -139
- package/runtime/core/second-nature/heartbeat/index.d.ts +8 -8
- package/runtime/core/second-nature/heartbeat/index.js +7 -7
- package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.d.ts +21 -21
- package/runtime/core/second-nature/heartbeat/run-heartbeat-cycle.js +35 -35
- package/runtime/core/second-nature/heartbeat/runtime-snapshot.d.ts +28 -28
- package/runtime/core/second-nature/heartbeat/runtime-snapshot.js +35 -35
- package/runtime/core/second-nature/heartbeat/signal.d.ts +42 -42
- package/runtime/core/second-nature/heartbeat/snapshot-builder.d.ts +51 -51
- package/runtime/core/second-nature/index.d.ts +22 -22
- package/runtime/core/second-nature/index.js +22 -22
- package/runtime/core/second-nature/orchestrator/effect-dispatcher.d.ts +100 -100
- package/runtime/core/second-nature/orchestrator/effect-dispatcher.js +144 -144
- package/runtime/core/second-nature/orchestrator/guard-layer.d.ts +8 -8
- package/runtime/core/second-nature/orchestrator/guard-layer.js +110 -110
- package/runtime/core/second-nature/orchestrator/intent-planner.d.ts +13 -13
- package/runtime/core/second-nature/orchestrator/intent-planner.js +199 -199
- package/runtime/core/second-nature/orchestrator/lease-manager.d.ts +14 -14
- package/runtime/core/second-nature/orchestrator/lease-manager.js +58 -58
- package/runtime/core/second-nature/outreach/build-outreach-draft-request.d.ts +6 -6
- package/runtime/core/second-nature/outreach/build-outreach-draft-request.js +63 -63
- package/runtime/core/second-nature/outreach/delivery-target.d.ts +26 -26
- package/runtime/core/second-nature/outreach/delivery-target.js +70 -70
- package/runtime/core/second-nature/outreach/dispatch-user-outreach.d.ts +38 -38
- package/runtime/core/second-nature/outreach/dispatch-user-outreach.js +119 -119
- package/runtime/core/second-nature/outreach/judge-input-from-snapshot.d.ts +7 -7
- package/runtime/core/second-nature/outreach/judge-input-from-snapshot.js +45 -45
- package/runtime/core/second-nature/outreach/judge-outreach.d.ts +40 -40
- package/runtime/core/second-nature/outreach/judge-outreach.js +121 -121
- package/runtime/core/second-nature/quiet/run-source-backed-quiet.d.ts +21 -21
- package/runtime/core/second-nature/quiet/run-source-backed-quiet.js +123 -123
- package/runtime/core/second-nature/rhythm/planner-rhythm-window.d.ts +15 -15
- package/runtime/core/second-nature/rhythm/planner-rhythm-window.js +52 -52
- package/runtime/core/second-nature/rhythm/policy-bridge.d.ts +19 -19
- package/runtime/core/second-nature/rhythm/policy-bridge.js +34 -34
- package/runtime/core/second-nature/runtime/service-entry.js +45 -45
- package/runtime/core/second-nature/types.d.ts +51 -51
- package/runtime/guidance/draft-outreach-message.d.ts +7 -7
- package/runtime/guidance/draft-outreach-message.js +42 -42
- package/runtime/guidance/evidence-guidance.d.ts +40 -40
- package/runtime/guidance/evidence-guidance.js +52 -52
- package/runtime/guidance/index.d.ts +11 -11
- package/runtime/guidance/index.js +11 -11
- package/runtime/guidance/outreach-draft-schema.d.ts +228 -228
- package/runtime/guidance/outreach-draft-schema.js +80 -80
- package/runtime/observability/audit/append-only-audit-store.d.ts +14 -14
- package/runtime/observability/audit/append-only-audit-store.js +21 -21
- package/runtime/observability/audit/audit-envelope.d.ts +51 -51
- package/runtime/observability/audit/audit-envelope.js +130 -130
- package/runtime/observability/audit/verify-audit-hash-chain.d.ts +23 -23
- package/runtime/observability/audit/verify-audit-hash-chain.js +83 -83
- package/runtime/observability/db/index.js +124 -124
- package/runtime/observability/db/schema/host-capability-reports.d.ts +180 -180
- package/runtime/observability/db/schema/host-capability-reports.js +12 -12
- package/runtime/observability/db/schema/index.d.ts +947 -947
- package/runtime/observability/db/schema/index.js +71 -71
- package/runtime/observability/index.d.ts +20 -19
- package/runtime/observability/index.js +19 -18
- package/runtime/observability/query/explain-query.d.ts +48 -48
- package/runtime/observability/query/explain-query.js +114 -114
- package/runtime/observability/query/export-audit-bundle.d.ts +22 -22
- package/runtime/observability/query/export-audit-bundle.js +27 -27
- package/runtime/observability/services/decision-ledger.d.ts +46 -46
- package/runtime/observability/services/decision-ledger.js +161 -161
- package/runtime/observability/services/governance-audit.d.ts +41 -41
- package/runtime/observability/services/governance-audit.js +163 -163
- package/runtime/observability/services/governance-plane-recorder.d.ts +47 -47
- package/runtime/observability/services/governance-plane-recorder.js +55 -55
- package/runtime/observability/services/lived-experience-audit.d.ts +97 -97
- package/runtime/observability/services/lived-experience-audit.js +162 -162
- package/runtime/observability/services/runtime-decision-recorder.d.ts +29 -0
- package/runtime/observability/services/runtime-decision-recorder.js +94 -0
- package/runtime/storage/bootstrap/native-sqlite-probe.d.ts +7 -7
- package/runtime/storage/bootstrap/native-sqlite-probe.js +28 -28
- package/runtime/storage/bootstrap/repair-gate.d.ts +17 -17
- package/runtime/storage/bootstrap/repair-gate.js +71 -71
- package/runtime/storage/bootstrap/storage-mode-smoke.d.ts +38 -38
- package/runtime/storage/bootstrap/storage-mode-smoke.js +85 -85
- package/runtime/storage/db/index.js +154 -154
- package/runtime/storage/db/schema/delivery-attempts.d.ts +199 -199
- package/runtime/storage/db/schema/delivery-attempts.js +13 -13
- package/runtime/storage/db/schema/index.d.ts +9 -9
- package/runtime/storage/db/schema/index.js +9 -9
- package/runtime/storage/db/schema/life-evidence-index.d.ts +161 -161
- package/runtime/storage/db/schema/life-evidence-index.js +11 -11
- package/runtime/storage/db/schema/operator-fallback-artifacts.d.ts +161 -161
- package/runtime/storage/db/schema/operator-fallback-artifacts.js +11 -11
- package/runtime/storage/db/schema/policies.d.ts +98 -98
- package/runtime/storage/db/schema/policies.js +8 -8
- package/runtime/storage/delivery/query-delivery-attempts.d.ts +3 -3
- package/runtime/storage/delivery/query-delivery-attempts.js +32 -32
- package/runtime/storage/delivery/types.d.ts +27 -27
- package/runtime/storage/delivery/types.js +1 -1
- package/runtime/storage/delivery/write-delivery-attempt.d.ts +6 -6
- package/runtime/storage/delivery/write-delivery-attempt.js +36 -36
- package/runtime/storage/fallback/load-operator-fallback.d.ts +14 -14
- package/runtime/storage/fallback/load-operator-fallback.js +47 -47
- package/runtime/storage/fallback/operator-fallback-types.d.ts +9 -9
- package/runtime/storage/fallback/operator-fallback-types.js +1 -1
- package/runtime/storage/fallback/operator-fallback-view.d.ts +11 -11
- package/runtime/storage/fallback/operator-fallback-view.js +1 -1
- package/runtime/storage/fallback/write-operator-fallback.d.ts +6 -6
- package/runtime/storage/fallback/write-operator-fallback.js +21 -21
- package/runtime/storage/index.d.ts +37 -37
- package/runtime/storage/index.js +30 -30
- package/runtime/storage/life-evidence/append-life-evidence.d.ts +7 -7
- package/runtime/storage/life-evidence/append-life-evidence.js +64 -64
- package/runtime/storage/life-evidence/types.d.ts +45 -45
- package/runtime/storage/life-evidence/types.js +6 -6
- package/runtime/storage/quiet/persist-quiet-artifact.d.ts +7 -7
- package/runtime/storage/quiet/persist-quiet-artifact.js +22 -22
- package/runtime/storage/quiet/quiet-artifact-types.d.ts +18 -18
- package/runtime/storage/quiet/quiet-artifact-types.js +1 -1
- package/runtime/storage/quiet/quiet-artifact-writer.d.ts +15 -15
- package/runtime/storage/quiet/quiet-artifact-writer.js +56 -56
- package/runtime/storage/repositories/credential-repository.js +30 -30
- package/runtime/storage/rhythm/rhythm-policy-snapshot.d.ts +10 -10
- package/runtime/storage/rhythm/rhythm-policy-snapshot.js +34 -34
- package/runtime/storage/services/credential-vault.d.ts +13 -13
- package/runtime/storage/services/credential-vault.js +116 -116
- package/runtime/storage/snapshots/continuity-snapshot.d.ts +9 -9
- package/runtime/storage/snapshots/continuity-snapshot.js +41 -41
- package/runtime/storage/snapshots/life-evidence-snapshot.d.ts +6 -6
- package/runtime/storage/snapshots/life-evidence-snapshot.js +114 -114
- package/runtime/storage/snapshots/types.d.ts +58 -58
- package/runtime/storage/snapshots/types.js +1 -1
- package/runtime/storage/state-api.js +104 -104
- package/runtime/storage/user-interest/load-user-interest-snapshot.d.ts +2 -2
- package/runtime/storage/user-interest/load-user-interest-snapshot.js +150 -150
- package/runtime/storage/user-interest/types.d.ts +25 -25
- package/runtime/storage/user-interest/types.js +1 -1
- 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>;
|