@haaaiawd/second-nature 0.1.18 → 0.1.20

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 (190) hide show
  1. package/index.js +911 -855
  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 +224 -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 +67 -58
  24. package/runtime/cli/ops/heartbeat-surface.d.ts +45 -38
  25. package/runtime/cli/ops/heartbeat-surface.js +79 -73
  26. package/runtime/cli/ops/ops-router.d.ts +32 -19
  27. package/runtime/cli/ops/ops-router.js +188 -89
  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 +40 -19
  31. package/runtime/cli/ops/workspace-heartbeat-runner.js +93 -39
  32. package/runtime/cli/read-models/index.d.ts +46 -29
  33. package/runtime/cli/read-models/index.js +391 -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 +129 -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 +162 -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 +47 -47
  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 -20
  114. package/runtime/observability/index.js +19 -19
  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/observability-retention.d.ts +10 -0
  128. package/runtime/observability/services/observability-retention.js +37 -0
  129. package/runtime/observability/services/runtime-decision-recorder.d.ts +29 -29
  130. package/runtime/observability/services/runtime-decision-recorder.js +94 -94
  131. package/runtime/storage/bootstrap/native-sqlite-probe.d.ts +7 -7
  132. package/runtime/storage/bootstrap/native-sqlite-probe.js +28 -28
  133. package/runtime/storage/bootstrap/repair-gate.d.ts +17 -17
  134. package/runtime/storage/bootstrap/repair-gate.js +71 -71
  135. package/runtime/storage/bootstrap/storage-mode-smoke.d.ts +38 -38
  136. package/runtime/storage/bootstrap/storage-mode-smoke.js +85 -85
  137. package/runtime/storage/db/index.js +61 -61
  138. package/runtime/storage/db/schema/delivery-attempts.d.ts +199 -199
  139. package/runtime/storage/db/schema/delivery-attempts.js +13 -13
  140. package/runtime/storage/db/schema/index.d.ts +9 -9
  141. package/runtime/storage/db/schema/index.js +9 -9
  142. package/runtime/storage/db/schema/life-evidence-index.d.ts +161 -161
  143. package/runtime/storage/db/schema/life-evidence-index.js +11 -11
  144. package/runtime/storage/db/schema/operator-fallback-artifacts.d.ts +161 -161
  145. package/runtime/storage/db/schema/operator-fallback-artifacts.js +11 -11
  146. package/runtime/storage/db/schema/policies.d.ts +98 -98
  147. package/runtime/storage/db/schema/policies.js +8 -8
  148. package/runtime/storage/delivery/query-delivery-attempts.d.ts +3 -3
  149. package/runtime/storage/delivery/query-delivery-attempts.js +32 -32
  150. package/runtime/storage/delivery/types.d.ts +27 -27
  151. package/runtime/storage/delivery/types.js +1 -1
  152. package/runtime/storage/delivery/write-delivery-attempt.d.ts +6 -6
  153. package/runtime/storage/delivery/write-delivery-attempt.js +36 -36
  154. package/runtime/storage/fallback/load-operator-fallback.d.ts +14 -14
  155. package/runtime/storage/fallback/load-operator-fallback.js +47 -47
  156. package/runtime/storage/fallback/operator-fallback-types.d.ts +9 -9
  157. package/runtime/storage/fallback/operator-fallback-types.js +1 -1
  158. package/runtime/storage/fallback/operator-fallback-view.d.ts +11 -11
  159. package/runtime/storage/fallback/operator-fallback-view.js +1 -1
  160. package/runtime/storage/fallback/write-operator-fallback.d.ts +6 -6
  161. package/runtime/storage/fallback/write-operator-fallback.js +21 -21
  162. package/runtime/storage/index.d.ts +37 -37
  163. package/runtime/storage/index.js +30 -30
  164. package/runtime/storage/life-evidence/append-life-evidence.d.ts +7 -7
  165. package/runtime/storage/life-evidence/append-life-evidence.js +64 -64
  166. package/runtime/storage/life-evidence/types.d.ts +45 -45
  167. package/runtime/storage/life-evidence/types.js +6 -6
  168. package/runtime/storage/quiet/persist-quiet-artifact.d.ts +7 -7
  169. package/runtime/storage/quiet/persist-quiet-artifact.js +22 -22
  170. package/runtime/storage/quiet/quiet-artifact-types.d.ts +18 -18
  171. package/runtime/storage/quiet/quiet-artifact-types.js +1 -1
  172. package/runtime/storage/quiet/quiet-artifact-writer.d.ts +15 -15
  173. package/runtime/storage/quiet/quiet-artifact-writer.js +56 -56
  174. package/runtime/storage/repositories/credential-repository.js +30 -30
  175. package/runtime/storage/rhythm/rhythm-policy-snapshot.d.ts +10 -10
  176. package/runtime/storage/rhythm/rhythm-policy-snapshot.js +34 -34
  177. package/runtime/storage/services/credential-vault.d.ts +13 -13
  178. package/runtime/storage/services/credential-vault.js +116 -116
  179. package/runtime/storage/snapshots/continuity-snapshot.d.ts +9 -9
  180. package/runtime/storage/snapshots/continuity-snapshot.js +41 -41
  181. package/runtime/storage/snapshots/life-evidence-snapshot.d.ts +6 -6
  182. package/runtime/storage/snapshots/life-evidence-snapshot.js +114 -114
  183. package/runtime/storage/snapshots/types.d.ts +58 -58
  184. package/runtime/storage/snapshots/types.js +1 -1
  185. package/runtime/storage/state-api.js +104 -104
  186. package/runtime/storage/user-interest/load-user-interest-snapshot.d.ts +2 -2
  187. package/runtime/storage/user-interest/load-user-interest-snapshot.js +150 -150
  188. package/runtime/storage/user-interest/types.d.ts +25 -25
  189. package/runtime/storage/user-interest/types.js +1 -1
  190. package/workspace-ops-bridge.js +90 -81
@@ -1,28 +1,28 @@
1
- /**
2
- * HeartbeatRuntimeSnapshot assembly for candidate planner + hard guards (T2.1.3, T2.2.1).
3
- */
4
- import type { ContinuitySnapshot, ControlPlaneSourceRef } from "../types.js";
5
- import type { RhythmPolicy } from "../rhythm/rhythm-policy.js";
6
- import { type PlannerRhythmWindowSlice } from "../rhythm/planner-rhythm-window.js";
7
- import type { SnapshotInputs } from "./snapshot-builder.js";
8
- export interface PlannerLifeEvidenceSlice {
9
- evidenceRefs: ControlPlaneSourceRef[];
10
- platformEventCount: number;
11
- workEventCount: number;
12
- emptyReason?: "no_sources" | "state_unavailable" | "redacted_only";
13
- }
14
- export declare function isLifeEvidenceSliceEmpty(slice: PlannerLifeEvidenceSlice): boolean;
15
- export interface HardGuardDeps {
16
- hasDuplicateIntent: (idempotencyKey: string) => boolean;
17
- isOutreachCooldownClear: (idempotencyKey: string) => boolean;
18
- }
19
- export interface HeartbeatRuntimeSnapshot {
20
- continuity: ContinuitySnapshot;
21
- lifeEvidence: PlannerLifeEvidenceSlice;
22
- rhythmWindow: PlannerRhythmWindowSlice;
23
- hardGuards: HardGuardDeps;
24
- }
25
- export declare function buildLifeEvidenceSliceFromInputs(inputs: SnapshotInputs): PlannerLifeEvidenceSlice;
26
- export declare function buildHardGuardDeps(continuity: ContinuitySnapshot, inputs: SnapshotInputs): HardGuardDeps;
27
- export declare function resolveRhythmPolicyForHeartbeat(inputs: SnapshotInputs): RhythmPolicy;
28
- export declare function buildHeartbeatRuntimeSnapshot(timestamp: string, inputs: SnapshotInputs, continuity: ContinuitySnapshot): HeartbeatRuntimeSnapshot;
1
+ /**
2
+ * HeartbeatRuntimeSnapshot assembly for candidate planner + hard guards (T2.1.3, T2.2.1).
3
+ */
4
+ import type { ContinuitySnapshot, ControlPlaneSourceRef } from "../types.js";
5
+ import type { RhythmPolicy } from "../rhythm/rhythm-policy.js";
6
+ import { type PlannerRhythmWindowSlice } from "../rhythm/planner-rhythm-window.js";
7
+ import type { SnapshotInputs } from "./snapshot-builder.js";
8
+ export interface PlannerLifeEvidenceSlice {
9
+ evidenceRefs: ControlPlaneSourceRef[];
10
+ platformEventCount: number;
11
+ workEventCount: number;
12
+ emptyReason?: "no_sources" | "state_unavailable" | "redacted_only";
13
+ }
14
+ export declare function isLifeEvidenceSliceEmpty(slice: PlannerLifeEvidenceSlice): boolean;
15
+ export interface HardGuardDeps {
16
+ hasDuplicateIntent: (idempotencyKey: string) => boolean;
17
+ isOutreachCooldownClear: (idempotencyKey: string) => boolean;
18
+ }
19
+ export interface HeartbeatRuntimeSnapshot {
20
+ continuity: ContinuitySnapshot;
21
+ lifeEvidence: PlannerLifeEvidenceSlice;
22
+ rhythmWindow: PlannerRhythmWindowSlice;
23
+ hardGuards: HardGuardDeps;
24
+ }
25
+ export declare function buildLifeEvidenceSliceFromInputs(inputs: SnapshotInputs): PlannerLifeEvidenceSlice;
26
+ export declare function buildHardGuardDeps(continuity: ContinuitySnapshot, inputs: SnapshotInputs): HardGuardDeps;
27
+ export declare function resolveRhythmPolicyForHeartbeat(inputs: SnapshotInputs): RhythmPolicy;
28
+ export declare function buildHeartbeatRuntimeSnapshot(timestamp: string, inputs: SnapshotInputs, continuity: ContinuitySnapshot): HeartbeatRuntimeSnapshot;
@@ -1,35 +1,35 @@
1
- import { rhythmPolicySnapshotToRhythmPolicy } from "../rhythm/policy-bridge.js";
2
- import { buildPlannerRhythmWindow } from "../rhythm/planner-rhythm-window.js";
3
- export function isLifeEvidenceSliceEmpty(slice) {
4
- return slice.evidenceRefs.length === 0 && slice.platformEventCount === 0 && slice.workEventCount === 0;
5
- }
6
- export function buildLifeEvidenceSliceFromInputs(inputs) {
7
- return {
8
- evidenceRefs: inputs.lifeEvidenceRefs ?? [],
9
- platformEventCount: inputs.platformEventCount ?? 0,
10
- workEventCount: inputs.workEventCount ?? 0,
11
- emptyReason: inputs.lifeEvidenceEmptyReason,
12
- };
13
- }
14
- export function buildHardGuardDeps(continuity, inputs) {
15
- return {
16
- hasDuplicateIntent: (key) => (inputs.duplicateIntentKeys?.includes(key) ?? false) ||
17
- continuity.deniedIntents.some((d) => d.reason === "duplicate_intent" && d.intentHash === key),
18
- isOutreachCooldownClear: (key) => !(inputs.outreachCooldownKeys?.includes(key) ?? false),
19
- };
20
- }
21
- export function resolveRhythmPolicyForHeartbeat(inputs) {
22
- if (inputs.rhythmPolicy) {
23
- return inputs.rhythmPolicy;
24
- }
25
- return rhythmPolicySnapshotToRhythmPolicy({
26
- quietEnabled: inputs.quietEnabledBridge ?? false,
27
- });
28
- }
29
- export function buildHeartbeatRuntimeSnapshot(timestamp, inputs, continuity) {
30
- const policy = resolveRhythmPolicyForHeartbeat(inputs);
31
- const rhythmWindow = buildPlannerRhythmWindow(timestamp, continuity, policy);
32
- const lifeEvidence = buildLifeEvidenceSliceFromInputs(inputs);
33
- const hardGuards = buildHardGuardDeps(continuity, inputs);
34
- return { continuity, lifeEvidence, rhythmWindow, hardGuards };
35
- }
1
+ import { rhythmPolicySnapshotToRhythmPolicy } from "../rhythm/policy-bridge.js";
2
+ import { buildPlannerRhythmWindow } from "../rhythm/planner-rhythm-window.js";
3
+ export function isLifeEvidenceSliceEmpty(slice) {
4
+ return slice.evidenceRefs.length === 0 && slice.platformEventCount === 0 && slice.workEventCount === 0;
5
+ }
6
+ export function buildLifeEvidenceSliceFromInputs(inputs) {
7
+ return {
8
+ evidenceRefs: inputs.lifeEvidenceRefs ?? [],
9
+ platformEventCount: inputs.platformEventCount ?? 0,
10
+ workEventCount: inputs.workEventCount ?? 0,
11
+ emptyReason: inputs.lifeEvidenceEmptyReason,
12
+ };
13
+ }
14
+ export function buildHardGuardDeps(continuity, inputs) {
15
+ return {
16
+ hasDuplicateIntent: (key) => (inputs.duplicateIntentKeys?.includes(key) ?? false) ||
17
+ continuity.deniedIntents.some((d) => d.reason === "duplicate_intent" && d.intentHash === key),
18
+ isOutreachCooldownClear: (key) => !(inputs.outreachCooldownKeys?.includes(key) ?? false),
19
+ };
20
+ }
21
+ export function resolveRhythmPolicyForHeartbeat(inputs) {
22
+ if (inputs.rhythmPolicy) {
23
+ return inputs.rhythmPolicy;
24
+ }
25
+ return rhythmPolicySnapshotToRhythmPolicy({
26
+ quietEnabled: inputs.quietEnabledBridge ?? false,
27
+ });
28
+ }
29
+ export function buildHeartbeatRuntimeSnapshot(timestamp, inputs, continuity) {
30
+ const policy = resolveRhythmPolicyForHeartbeat(inputs);
31
+ const rhythmWindow = buildPlannerRhythmWindow(timestamp, continuity, policy);
32
+ const lifeEvidence = buildLifeEvidenceSliceFromInputs(inputs);
33
+ const hardGuards = buildHardGuardDeps(continuity, inputs);
34
+ return { continuity, lifeEvidence, rhythmWindow, hardGuards };
35
+ }
@@ -1,42 +1,42 @@
1
- /**
2
- * Heartbeat Signal Contract
3
- *
4
- * Defines the signal types that enter the control-plane from various sources.
5
- * Per ADR-005: runtime scope classification depends on bridge protocol,
6
- * entry type, or explicit signal metadata, NOT on host natural classification.
7
- */
8
- export type RuntimeScope = "rhythm" | "user_task" | "user_reply";
9
- export type RuntimeTrigger = "heartbeat_bridge" | "user_task" | "user_reply" | "interrupt" | "resume";
10
- export type HeartbeatCycleStatus = "heartbeat_ok" | "intent_selected" | "deferred" | "denied"
11
- /** Delivery port returned failed / host dropped; operator fallback written (T2.3.2 / ADR-007). */
12
- | "delivery_unavailable"
13
- /** Host-safe packaged carrier: no lived-experience loop (ADR-005 / control-plane L0). */
14
- | "runtime_carrier_only";
15
- export interface HeartbeatSignal {
16
- trigger: RuntimeTrigger;
17
- scopeHint?: RuntimeScope;
18
- payload: {
19
- timestamp: string;
20
- sessionContext?: string;
21
- heartbeatChecklist?: string;
22
- };
23
- }
24
- export interface ScopedRuntimeInput {
25
- trigger: RuntimeTrigger;
26
- scopeHint?: RuntimeScope;
27
- payload: Record<string, unknown>;
28
- }
29
- export interface HeartbeatCycleResult {
30
- scope: RuntimeScope;
31
- status: HeartbeatCycleStatus;
32
- selectedIntentId?: string;
33
- reasons: string[];
34
- decisionId?: string;
35
- deliveryAttemptId?: string;
36
- fallbackRef?: string;
37
- }
38
- export interface ScopeRouteResult {
39
- scope: RuntimeScope;
40
- trigger: RuntimeTrigger;
41
- handled: boolean;
42
- }
1
+ /**
2
+ * Heartbeat Signal Contract
3
+ *
4
+ * Defines the signal types that enter the control-plane from various sources.
5
+ * Per ADR-005: runtime scope classification depends on bridge protocol,
6
+ * entry type, or explicit signal metadata, NOT on host natural classification.
7
+ */
8
+ export type RuntimeScope = "rhythm" | "user_task" | "user_reply";
9
+ export type RuntimeTrigger = "heartbeat_bridge" | "user_task" | "user_reply" | "interrupt" | "resume";
10
+ export type HeartbeatCycleStatus = "heartbeat_ok" | "intent_selected" | "deferred" | "denied"
11
+ /** Delivery port returned failed / host dropped; operator fallback written (T2.3.2 / ADR-007). */
12
+ | "delivery_unavailable"
13
+ /** Host-safe packaged carrier: no lived-experience loop (ADR-005 / control-plane L0). */
14
+ | "runtime_carrier_only";
15
+ export interface HeartbeatSignal {
16
+ trigger: RuntimeTrigger;
17
+ scopeHint?: RuntimeScope;
18
+ payload: {
19
+ timestamp: string;
20
+ sessionContext?: string;
21
+ heartbeatChecklist?: string;
22
+ };
23
+ }
24
+ export interface ScopedRuntimeInput {
25
+ trigger: RuntimeTrigger;
26
+ scopeHint?: RuntimeScope;
27
+ payload: Record<string, unknown>;
28
+ }
29
+ export interface HeartbeatCycleResult {
30
+ scope: RuntimeScope;
31
+ status: HeartbeatCycleStatus;
32
+ selectedIntentId?: string;
33
+ reasons: string[];
34
+ decisionId?: string;
35
+ deliveryAttemptId?: string;
36
+ fallbackRef?: string;
37
+ }
38
+ export interface ScopeRouteResult {
39
+ scope: RuntimeScope;
40
+ trigger: RuntimeTrigger;
41
+ handled: boolean;
42
+ }
@@ -1,51 +1,51 @@
1
- /**
2
- * Snapshot Builder
3
- *
4
- * Builds a ContinuitySnapshot from state-system, workspace, and runtime context.
5
- * This is the input preparation step for each heartbeat round.
6
- *
7
- * Per design doc §4.2: SnapshotBuilder prepares inputs for the Rhythm Engine.
8
- */
9
- import type { ContinuitySnapshot, ControlPlaneSourceRef, TopLevelMode } from "../types.js";
10
- import type { RhythmPolicy } from "../rhythm/rhythm-policy.js";
11
- import type { DeliveryCapabilitySnapshot } from "../outreach/delivery-target.js";
12
- import type { UserInterestSnapshot } from "../../../storage/user-interest/types.js";
13
- export interface SnapshotInputs {
14
- mode: TopLevelMode;
15
- currentWindowId: string;
16
- pendingObligations: string[];
17
- recentOutreachHashes: string[];
18
- deniedIntents: Array<{
19
- intentHash: string;
20
- reason: string;
21
- at: string;
22
- }>;
23
- budgets?: {
24
- socialUsed: number;
25
- socialLimit: number;
26
- };
27
- awaitingUserInput?: boolean;
28
- riskSuppressed?: boolean;
29
- /** Evidence refs for source-backed planner/guards (T2.1.3 / T2.2.1). */
30
- lifeEvidenceRefs?: ControlPlaneSourceRef[];
31
- platformEventCount?: number;
32
- workEventCount?: number;
33
- lifeEvidenceEmptyReason?: "no_sources" | "state_unavailable" | "redacted_only";
34
- /** Optional explicit rhythm geometry; otherwise `quietEnabledBridge` drives policy-bridge default. */
35
- rhythmPolicy?: RhythmPolicy;
36
- /** Passed to `rhythmPolicySnapshotToRhythmPolicy` when `rhythmPolicy` is absent. */
37
- quietEnabledBridge?: boolean;
38
- duplicateIntentKeys?: string[];
39
- outreachCooldownKeys?: string[];
40
- /** When present, outreach judgment uses this delivery snapshot (ADR-007). */
41
- deliveryCapability?: DeliveryCapabilitySnapshot;
42
- /** When present, outreach judgment uses this user-interest read model (T4.2.2). */
43
- userInterestSnapshot?: UserInterestSnapshot;
44
- }
45
- /**
46
- * Build a ContinuitySnapshot from loaded inputs.
47
- *
48
- * In production, inputs come from state-system (mode, budgets, obligations),
49
- * workspace (outreach hashes, denied intents), and runtime context (window ID).
50
- */
51
- export declare function buildContinuitySnapshot(inputs: SnapshotInputs): ContinuitySnapshot;
1
+ /**
2
+ * Snapshot Builder
3
+ *
4
+ * Builds a ContinuitySnapshot from state-system, workspace, and runtime context.
5
+ * This is the input preparation step for each heartbeat round.
6
+ *
7
+ * Per design doc §4.2: SnapshotBuilder prepares inputs for the Rhythm Engine.
8
+ */
9
+ import type { ContinuitySnapshot, ControlPlaneSourceRef, TopLevelMode } from "../types.js";
10
+ import type { RhythmPolicy } from "../rhythm/rhythm-policy.js";
11
+ import type { DeliveryCapabilitySnapshot } from "../outreach/delivery-target.js";
12
+ import type { UserInterestSnapshot } from "../../../storage/user-interest/types.js";
13
+ export interface SnapshotInputs {
14
+ mode: TopLevelMode;
15
+ currentWindowId: string;
16
+ pendingObligations: string[];
17
+ recentOutreachHashes: string[];
18
+ deniedIntents: Array<{
19
+ intentHash: string;
20
+ reason: string;
21
+ at: string;
22
+ }>;
23
+ budgets?: {
24
+ socialUsed: number;
25
+ socialLimit: number;
26
+ };
27
+ awaitingUserInput?: boolean;
28
+ riskSuppressed?: boolean;
29
+ /** Evidence refs for source-backed planner/guards (T2.1.3 / T2.2.1). */
30
+ lifeEvidenceRefs?: ControlPlaneSourceRef[];
31
+ platformEventCount?: number;
32
+ workEventCount?: number;
33
+ lifeEvidenceEmptyReason?: "no_sources" | "state_unavailable" | "redacted_only";
34
+ /** Optional explicit rhythm geometry; otherwise `quietEnabledBridge` drives policy-bridge default. */
35
+ rhythmPolicy?: RhythmPolicy;
36
+ /** Passed to `rhythmPolicySnapshotToRhythmPolicy` when `rhythmPolicy` is absent. */
37
+ quietEnabledBridge?: boolean;
38
+ duplicateIntentKeys?: string[];
39
+ outreachCooldownKeys?: string[];
40
+ /** When present, outreach judgment uses this delivery snapshot (ADR-007). */
41
+ deliveryCapability?: DeliveryCapabilitySnapshot;
42
+ /** When present, outreach judgment uses this user-interest read model (T4.2.2). */
43
+ userInterestSnapshot?: UserInterestSnapshot;
44
+ }
45
+ /**
46
+ * Build a ContinuitySnapshot from loaded inputs.
47
+ *
48
+ * In production, inputs come from state-system (mode, budgets, obligations),
49
+ * workspace (outreach hashes, denied intents), and runtime context (window ID).
50
+ */
51
+ export declare function buildContinuitySnapshot(inputs: SnapshotInputs): ContinuitySnapshot;
@@ -1,22 +1,22 @@
1
- export * from "./types.js";
2
- export * from "./rhythm/rhythm-policy.js";
3
- export * from "./rhythm/select-window.js";
4
- export * from "./rhythm/policy-bridge.js";
5
- export * from "./orchestrator/intent-planner.js";
6
- export * from "./orchestrator/guard-layer.js";
7
- export * from "./heartbeat/runtime-snapshot.js";
8
- export * from "./orchestrator/lease-manager.js";
9
- export * from "./orchestrator/effect-dispatcher.js";
10
- export * from "./orchestrator/resume-from-checkpoint.js";
11
- export * from "./quiet/quiet-pipeline.js";
12
- export * from "./reflection/run-narrative-reflection.js";
13
- export * from "./outreach/evaluate-outreach.js";
14
- export * from "./outreach/build-message.js";
15
- export * from "./outreach/delivery-target.js";
16
- export * from "./outreach/judge-outreach.js";
17
- export * from "./outreach/build-outreach-draft-request.js";
18
- export * from "./outreach/dispatch-user-outreach.js";
19
- export * from "./outreach/judge-input-from-snapshot.js";
20
- export * from "./quiet/run-source-backed-quiet.js";
21
- export * from "./guidance/request-guidance.js";
22
- export * from "./guidance/apply-guidance.js";
1
+ export * from "./types.js";
2
+ export * from "./rhythm/rhythm-policy.js";
3
+ export * from "./rhythm/select-window.js";
4
+ export * from "./rhythm/policy-bridge.js";
5
+ export * from "./orchestrator/intent-planner.js";
6
+ export * from "./orchestrator/guard-layer.js";
7
+ export * from "./heartbeat/runtime-snapshot.js";
8
+ export * from "./orchestrator/lease-manager.js";
9
+ export * from "./orchestrator/effect-dispatcher.js";
10
+ export * from "./orchestrator/resume-from-checkpoint.js";
11
+ export * from "./quiet/quiet-pipeline.js";
12
+ export * from "./reflection/run-narrative-reflection.js";
13
+ export * from "./outreach/evaluate-outreach.js";
14
+ export * from "./outreach/build-message.js";
15
+ export * from "./outreach/delivery-target.js";
16
+ export * from "./outreach/judge-outreach.js";
17
+ export * from "./outreach/build-outreach-draft-request.js";
18
+ export * from "./outreach/dispatch-user-outreach.js";
19
+ export * from "./outreach/judge-input-from-snapshot.js";
20
+ export * from "./quiet/run-source-backed-quiet.js";
21
+ export * from "./guidance/request-guidance.js";
22
+ export * from "./guidance/apply-guidance.js";
@@ -1,22 +1,22 @@
1
- export * from "./types.js";
2
- export * from "./rhythm/rhythm-policy.js";
3
- export * from "./rhythm/select-window.js";
4
- export * from "./rhythm/policy-bridge.js";
5
- export * from "./orchestrator/intent-planner.js";
6
- export * from "./orchestrator/guard-layer.js";
7
- export * from "./heartbeat/runtime-snapshot.js";
8
- export * from "./orchestrator/lease-manager.js";
9
- export * from "./orchestrator/effect-dispatcher.js";
10
- export * from "./orchestrator/resume-from-checkpoint.js";
11
- export * from "./quiet/quiet-pipeline.js";
12
- export * from "./reflection/run-narrative-reflection.js";
13
- export * from "./outreach/evaluate-outreach.js";
14
- export * from "./outreach/build-message.js";
15
- export * from "./outreach/delivery-target.js";
16
- export * from "./outreach/judge-outreach.js";
17
- export * from "./outreach/build-outreach-draft-request.js";
18
- export * from "./outreach/dispatch-user-outreach.js";
19
- export * from "./outreach/judge-input-from-snapshot.js";
20
- export * from "./quiet/run-source-backed-quiet.js";
21
- export * from "./guidance/request-guidance.js";
22
- export * from "./guidance/apply-guidance.js";
1
+ export * from "./types.js";
2
+ export * from "./rhythm/rhythm-policy.js";
3
+ export * from "./rhythm/select-window.js";
4
+ export * from "./rhythm/policy-bridge.js";
5
+ export * from "./orchestrator/intent-planner.js";
6
+ export * from "./orchestrator/guard-layer.js";
7
+ export * from "./heartbeat/runtime-snapshot.js";
8
+ export * from "./orchestrator/lease-manager.js";
9
+ export * from "./orchestrator/effect-dispatcher.js";
10
+ export * from "./orchestrator/resume-from-checkpoint.js";
11
+ export * from "./quiet/quiet-pipeline.js";
12
+ export * from "./reflection/run-narrative-reflection.js";
13
+ export * from "./outreach/evaluate-outreach.js";
14
+ export * from "./outreach/build-message.js";
15
+ export * from "./outreach/delivery-target.js";
16
+ export * from "./outreach/judge-outreach.js";
17
+ export * from "./outreach/build-outreach-draft-request.js";
18
+ export * from "./outreach/dispatch-user-outreach.js";
19
+ export * from "./outreach/judge-input-from-snapshot.js";
20
+ export * from "./quiet/run-source-backed-quiet.js";
21
+ export * from "./guidance/request-guidance.js";
22
+ export * from "./guidance/apply-guidance.js";
@@ -1,100 +1,100 @@
1
- import type { ConnectorResult, CapabilityIntent } from "../../../connectors/base/contract.js";
2
- import { LeaseManager, type EffectClass } from "./lease-manager.js";
3
- export interface AllowedIntent {
4
- id: string;
5
- kind: "work" | "exploration" | "social" | "quiet" | "reflection" | "outreach" | "maintenance";
6
- summary: string;
7
- effectClass: EffectClass;
8
- platformId?: string;
9
- payload?: Record<string, unknown>;
10
- }
11
- export interface DecisionContext {
12
- decisionId: string;
13
- intentId: string;
14
- tickId: string;
15
- checkpointId: string;
16
- traceId: string;
17
- }
18
- export interface IntentCommitPort {
19
- createIntentCommitRecord(input: {
20
- intentId: string;
21
- decisionId: string;
22
- checkpointId?: string;
23
- state: "planned" | "dispatched" | "externally_acknowledged" | "committed" | "reconcile" | "aborted";
24
- }): Promise<{
25
- id: string;
26
- }>;
27
- advanceIntentCommitState(id: string, state: "planned" | "dispatched" | "externally_acknowledged" | "committed" | "reconcile" | "aborted", metadata?: Record<string, unknown>): Promise<void>;
28
- commitIntentOutcome(id: string, outcome: {
29
- traceId: string;
30
- outcomeRef: string;
31
- }): Promise<void>;
32
- abortIntentCommit(id: string, reason: string): Promise<void>;
33
- }
34
- export interface ConnectorExecutor {
35
- executeEffect(input: {
36
- platformId: string;
37
- intent: CapabilityIntent;
38
- payload: Record<string, unknown>;
39
- decisionId: string;
40
- intentId: string;
41
- idempotencyKey: string;
42
- }): Promise<ConnectorResult<unknown>>;
43
- }
44
- export interface CheckpointPort {
45
- saveCheckpoint(input: {
46
- id: string;
47
- tickId: string;
48
- intentId: string;
49
- phase: "before_effect" | "before_quiet_write";
50
- snapshotRef: string;
51
- }): Promise<void>;
52
- }
53
- export interface MemoryPort {
54
- persistCurationResult(input: {
55
- summary: string;
56
- sourceRefs: string[];
57
- traceId: string;
58
- }): Promise<void>;
59
- }
60
- export interface ReflectionPort {
61
- runNarrativeReflection(input: {
62
- decisionId: string;
63
- intentId: string;
64
- traceId: string;
65
- }): Promise<{
66
- outcomeRef: string;
67
- }>;
68
- }
69
- export type DispatchResult = {
70
- status: "deferred";
71
- reason: string;
72
- } | {
73
- status: "effect_executed";
74
- result: ConnectorResult<unknown>;
75
- commitId: string;
76
- } | {
77
- status: "curated";
78
- commitId: string;
79
- } | {
80
- status: "reflected";
81
- commitId: string;
82
- } | {
83
- status: "maintenance_done";
84
- commitId: string;
85
- };
86
- export declare class EffectDispatcher {
87
- private readonly leaseManager;
88
- private readonly commitPort;
89
- private readonly connectorExecutor;
90
- private readonly checkpointPort;
91
- private readonly memoryPort;
92
- private readonly reflectionPort;
93
- constructor(leaseManager: LeaseManager, commitPort: IntentCommitPort, connectorExecutor: ConnectorExecutor, checkpointPort: CheckpointPort, memoryPort: MemoryPort, reflectionPort: ReflectionPort);
94
- dispatchEffect(intent: AllowedIntent, decision: DecisionContext): Promise<DispatchResult>;
95
- }
96
- export declare function buildDecisionContext(input: {
97
- tickId: string;
98
- decisionId?: string;
99
- intentId: string;
100
- }): DecisionContext;
1
+ import type { ConnectorResult, CapabilityIntent } from "../../../connectors/base/contract.js";
2
+ import { LeaseManager, type EffectClass } from "./lease-manager.js";
3
+ export interface AllowedIntent {
4
+ id: string;
5
+ kind: "work" | "exploration" | "social" | "quiet" | "reflection" | "outreach" | "maintenance";
6
+ summary: string;
7
+ effectClass: EffectClass;
8
+ platformId?: string;
9
+ payload?: Record<string, unknown>;
10
+ }
11
+ export interface DecisionContext {
12
+ decisionId: string;
13
+ intentId: string;
14
+ tickId: string;
15
+ checkpointId: string;
16
+ traceId: string;
17
+ }
18
+ export interface IntentCommitPort {
19
+ createIntentCommitRecord(input: {
20
+ intentId: string;
21
+ decisionId: string;
22
+ checkpointId?: string;
23
+ state: "planned" | "dispatched" | "externally_acknowledged" | "committed" | "reconcile" | "aborted";
24
+ }): Promise<{
25
+ id: string;
26
+ }>;
27
+ advanceIntentCommitState(id: string, state: "planned" | "dispatched" | "externally_acknowledged" | "committed" | "reconcile" | "aborted", metadata?: Record<string, unknown>): Promise<void>;
28
+ commitIntentOutcome(id: string, outcome: {
29
+ traceId: string;
30
+ outcomeRef: string;
31
+ }): Promise<void>;
32
+ abortIntentCommit(id: string, reason: string): Promise<void>;
33
+ }
34
+ export interface ConnectorExecutor {
35
+ executeEffect(input: {
36
+ platformId: string;
37
+ intent: CapabilityIntent;
38
+ payload: Record<string, unknown>;
39
+ decisionId: string;
40
+ intentId: string;
41
+ idempotencyKey: string;
42
+ }): Promise<ConnectorResult<unknown>>;
43
+ }
44
+ export interface CheckpointPort {
45
+ saveCheckpoint(input: {
46
+ id: string;
47
+ tickId: string;
48
+ intentId: string;
49
+ phase: "before_effect" | "before_quiet_write";
50
+ snapshotRef: string;
51
+ }): Promise<void>;
52
+ }
53
+ export interface MemoryPort {
54
+ persistCurationResult(input: {
55
+ summary: string;
56
+ sourceRefs: string[];
57
+ traceId: string;
58
+ }): Promise<void>;
59
+ }
60
+ export interface ReflectionPort {
61
+ runNarrativeReflection(input: {
62
+ decisionId: string;
63
+ intentId: string;
64
+ traceId: string;
65
+ }): Promise<{
66
+ outcomeRef: string;
67
+ }>;
68
+ }
69
+ export type DispatchResult = {
70
+ status: "deferred";
71
+ reason: string;
72
+ } | {
73
+ status: "effect_executed";
74
+ result: ConnectorResult<unknown>;
75
+ commitId: string;
76
+ } | {
77
+ status: "curated";
78
+ commitId: string;
79
+ } | {
80
+ status: "reflected";
81
+ commitId: string;
82
+ } | {
83
+ status: "maintenance_done";
84
+ commitId: string;
85
+ };
86
+ export declare class EffectDispatcher {
87
+ private readonly leaseManager;
88
+ private readonly commitPort;
89
+ private readonly connectorExecutor;
90
+ private readonly checkpointPort;
91
+ private readonly memoryPort;
92
+ private readonly reflectionPort;
93
+ constructor(leaseManager: LeaseManager, commitPort: IntentCommitPort, connectorExecutor: ConnectorExecutor, checkpointPort: CheckpointPort, memoryPort: MemoryPort, reflectionPort: ReflectionPort);
94
+ dispatchEffect(intent: AllowedIntent, decision: DecisionContext): Promise<DispatchResult>;
95
+ }
96
+ export declare function buildDecisionContext(input: {
97
+ tickId: string;
98
+ decisionId?: string;
99
+ intentId: string;
100
+ }): DecisionContext;