@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,7 +1,7 @@
1
- export { buildContinuitySnapshot, } from "./snapshot-builder.js";
2
- export { ingestRhythmSignal, resolveAllowedIntentResult, buildSnapshotFromInputs, } from "./heartbeat-loop.js";
3
- export { buildHeartbeatRuntimeSnapshot, buildLifeEvidenceSliceFromInputs, buildHardGuardDeps, resolveRhythmPolicyForHeartbeat, isLifeEvidenceSliceEmpty, } from "./runtime-snapshot.js";
4
- export { buildPlannerRhythmWindow } from "../rhythm/planner-rhythm-window.js";
5
- export { runHeartbeatCycle } from "./run-heartbeat-cycle.js";
6
- export { routeScopedInput, } from "./scope-router.js";
7
- export { requestGuidanceForIntent, dispatchAllowedEffect, executeHeartbeatCycle, } from "./heartbeat-executor.js";
1
+ export { buildContinuitySnapshot, } from "./snapshot-builder.js";
2
+ export { ingestRhythmSignal, resolveAllowedIntentResult, buildSnapshotFromInputs, } from "./heartbeat-loop.js";
3
+ export { buildHeartbeatRuntimeSnapshot, buildLifeEvidenceSliceFromInputs, buildHardGuardDeps, resolveRhythmPolicyForHeartbeat, isLifeEvidenceSliceEmpty, } from "./runtime-snapshot.js";
4
+ export { buildPlannerRhythmWindow } from "../rhythm/planner-rhythm-window.js";
5
+ export { runHeartbeatCycle } from "./run-heartbeat-cycle.js";
6
+ export { routeScopedInput, } from "./scope-router.js";
7
+ export { requestGuidanceForIntent, dispatchAllowedEffect, executeHeartbeatCycle, } from "./heartbeat-executor.js";
@@ -1,21 +1,21 @@
1
- /**
2
- * Control-plane heartbeat cycle entry (T2.1.1).
3
- *
4
- * Core logic: runtime availability gate → scope routing (user_task bypasses rhythm) →
5
- * rhythm path delegates to ingestRhythmSignal. Mirrors L0 control-plane-system §4.3.
6
- *
7
- * Boundaries: does not claim lived-experience completion when runtime is unavailable;
8
- * user_task / user_reply do not enter the rhythm candidate planner.
9
- */
10
- import type { HeartbeatSignal, HeartbeatCycleResult } from "./signal.js";
11
- import type { HeartbeatDeps } from "./heartbeat-loop.js";
12
- export interface RunHeartbeatCycleInput {
13
- signal: HeartbeatSignal;
14
- /** When false, return runtime_carrier_only without loading snapshots (host-safe carrier). */
15
- runtimeAvailable: boolean;
16
- deps: HeartbeatDeps;
17
- }
18
- /**
19
- * Single entry for one heartbeat turn: scope routing, runtime gate, then rhythm loop if applicable.
20
- */
21
- export declare function runHeartbeatCycle(input: RunHeartbeatCycleInput): Promise<HeartbeatCycleResult>;
1
+ /**
2
+ * Control-plane heartbeat cycle entry (T2.1.1).
3
+ *
4
+ * Core logic: runtime availability gate → scope routing (user_task bypasses rhythm) →
5
+ * rhythm path delegates to ingestRhythmSignal. Mirrors L0 control-plane-system §4.3.
6
+ *
7
+ * Boundaries: does not claim lived-experience completion when runtime is unavailable;
8
+ * user_task / user_reply do not enter the rhythm candidate planner.
9
+ */
10
+ import type { HeartbeatSignal, HeartbeatCycleResult } from "./signal.js";
11
+ import type { HeartbeatDeps } from "./heartbeat-loop.js";
12
+ export interface RunHeartbeatCycleInput {
13
+ signal: HeartbeatSignal;
14
+ /** When false, return runtime_carrier_only without loading snapshots (host-safe carrier). */
15
+ runtimeAvailable: boolean;
16
+ deps: HeartbeatDeps;
17
+ }
18
+ /**
19
+ * Single entry for one heartbeat turn: scope routing, runtime gate, then rhythm loop if applicable.
20
+ */
21
+ export declare function runHeartbeatCycle(input: RunHeartbeatCycleInput): Promise<HeartbeatCycleResult>;
@@ -1,35 +1,35 @@
1
- import { ingestRhythmSignal } from "./heartbeat-loop.js";
2
- import { routeScopedInput } from "./scope-router.js";
3
- /**
4
- * Single entry for one heartbeat turn: scope routing, runtime gate, then rhythm loop if applicable.
5
- */
6
- export async function runHeartbeatCycle(input) {
7
- const scoped = {
8
- trigger: input.signal.trigger,
9
- scopeHint: input.signal.scopeHint,
10
- payload: input.signal.payload,
11
- };
12
- const route = routeScopedInput(scoped);
13
- if (!input.runtimeAvailable) {
14
- return {
15
- scope: route.scope,
16
- status: "runtime_carrier_only",
17
- reasons: ["runtime_unavailable_no_lived_experience_loop"],
18
- };
19
- }
20
- if (route.scope === "user_task") {
21
- return {
22
- scope: "user_task",
23
- status: "heartbeat_ok",
24
- reasons: ["rhythm_gate_bypass_user_task"],
25
- };
26
- }
27
- if (route.scope === "user_reply") {
28
- return {
29
- scope: "user_reply",
30
- status: "heartbeat_ok",
31
- reasons: ["user_reply_light_continuity_skeleton"],
32
- };
33
- }
34
- return ingestRhythmSignal(input.signal, input.deps);
35
- }
1
+ import { ingestRhythmSignal } from "./heartbeat-loop.js";
2
+ import { routeScopedInput } from "./scope-router.js";
3
+ /**
4
+ * Single entry for one heartbeat turn: scope routing, runtime gate, then rhythm loop if applicable.
5
+ */
6
+ export async function runHeartbeatCycle(input) {
7
+ const scoped = {
8
+ trigger: input.signal.trigger,
9
+ scopeHint: input.signal.scopeHint,
10
+ payload: input.signal.payload,
11
+ };
12
+ const route = routeScopedInput(scoped);
13
+ if (!input.runtimeAvailable) {
14
+ return {
15
+ scope: route.scope,
16
+ status: "runtime_carrier_only",
17
+ reasons: ["runtime_unavailable_no_lived_experience_loop"],
18
+ };
19
+ }
20
+ if (route.scope === "user_task") {
21
+ return {
22
+ scope: "user_task",
23
+ status: "heartbeat_ok",
24
+ reasons: ["rhythm_gate_bypass_user_task"],
25
+ };
26
+ }
27
+ if (route.scope === "user_reply") {
28
+ return {
29
+ scope: "user_reply",
30
+ status: "heartbeat_ok",
31
+ reasons: ["user_reply_light_continuity_skeleton"],
32
+ };
33
+ }
34
+ return ingestRhythmSignal(input.signal, input.deps);
35
+ }
@@ -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";