@haaaiawd/second-nature 0.1.17 → 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 -855
- 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,35 +1,35 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Host smoke plan + report types (T1.3.1).
|
|
3
|
-
*
|
|
4
|
-
* `heartbeat_tool_invocation` verifies that a near-real transcript actually invoked heartbeat_check.
|
|
5
|
-
*/
|
|
6
|
-
export interface HeartbeatToolInvocationCase {
|
|
7
|
-
readonly type: "heartbeat_tool_invocation";
|
|
8
|
-
/** Tool names, ops strings, or host transcript fragments observed during the smoke turn */
|
|
9
|
-
toolInvocations: string[];
|
|
10
|
-
}
|
|
11
|
-
export interface DocsVsObservedConflictCase {
|
|
12
|
-
readonly type: "docs_vs_observed_conflict";
|
|
13
|
-
docExpectation: string;
|
|
14
|
-
observedBehavior: string;
|
|
15
|
-
}
|
|
16
|
-
export type HostSmokeCase = HeartbeatToolInvocationCase | DocsVsObservedConflictCase;
|
|
17
|
-
export interface HostSmokePlan {
|
|
18
|
-
cases: HostSmokeCase[];
|
|
19
|
-
docLinks?: string[];
|
|
20
|
-
docCheckedAt?: string;
|
|
21
|
-
hostVersion?: string;
|
|
22
|
-
}
|
|
23
|
-
export interface HostSmokeCaseResult {
|
|
24
|
-
caseType: HostSmokeCase["type"];
|
|
25
|
-
status: "pass" | "fail" | "unknown";
|
|
26
|
-
reasons: string[];
|
|
27
|
-
}
|
|
28
|
-
export interface HostSmokeReport {
|
|
29
|
-
reportId: string;
|
|
30
|
-
generatedAt: string;
|
|
31
|
-
results: HostSmokeCaseResult[];
|
|
32
|
-
docLinks?: string[];
|
|
33
|
-
docCheckedAt?: string;
|
|
34
|
-
hostVersion?: string;
|
|
35
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Host smoke plan + report types (T1.3.1).
|
|
3
|
+
*
|
|
4
|
+
* `heartbeat_tool_invocation` verifies that a near-real transcript actually invoked heartbeat_check.
|
|
5
|
+
*/
|
|
6
|
+
export interface HeartbeatToolInvocationCase {
|
|
7
|
+
readonly type: "heartbeat_tool_invocation";
|
|
8
|
+
/** Tool names, ops strings, or host transcript fragments observed during the smoke turn */
|
|
9
|
+
toolInvocations: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface DocsVsObservedConflictCase {
|
|
12
|
+
readonly type: "docs_vs_observed_conflict";
|
|
13
|
+
docExpectation: string;
|
|
14
|
+
observedBehavior: string;
|
|
15
|
+
}
|
|
16
|
+
export type HostSmokeCase = HeartbeatToolInvocationCase | DocsVsObservedConflictCase;
|
|
17
|
+
export interface HostSmokePlan {
|
|
18
|
+
cases: HostSmokeCase[];
|
|
19
|
+
docLinks?: string[];
|
|
20
|
+
docCheckedAt?: string;
|
|
21
|
+
hostVersion?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface HostSmokeCaseResult {
|
|
24
|
+
caseType: HostSmokeCase["type"];
|
|
25
|
+
status: "pass" | "fail" | "unknown";
|
|
26
|
+
reasons: string[];
|
|
27
|
+
}
|
|
28
|
+
export interface HostSmokeReport {
|
|
29
|
+
reportId: string;
|
|
30
|
+
generatedAt: string;
|
|
31
|
+
results: HostSmokeCaseResult[];
|
|
32
|
+
docLinks?: string[];
|
|
33
|
+
docCheckedAt?: string;
|
|
34
|
+
hostVersion?: string;
|
|
35
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Host smoke plan + report types (T1.3.1).
|
|
3
|
-
*
|
|
4
|
-
* `heartbeat_tool_invocation` verifies that a near-real transcript actually invoked heartbeat_check.
|
|
5
|
-
*/
|
|
6
|
-
export {};
|
|
1
|
+
/**
|
|
2
|
+
* Host smoke plan + report types (T1.3.1).
|
|
3
|
+
*
|
|
4
|
+
* `heartbeat_tool_invocation` verifies that a near-real transcript actually invoked heartbeat_check.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
package/runtime/cli/index.js
CHANGED
|
@@ -1,54 +1,58 @@
|
|
|
1
|
-
import { createObservabilityDatabase } from "../observability/db/index.js";
|
|
2
|
-
import { createStateAPI, createStateDatabase } from "../storage/index.js";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import { createActionBridge } from "./action-bridge.js";
|
|
5
|
-
import { createCliCommands } from "./commands/index.js";
|
|
6
|
-
import { createOpsRouter } from "./ops/ops-router.js";
|
|
7
|
-
import { createCliReadModels } from "./read-models/index.js";
|
|
8
|
-
import { resolvePackagedRuntime } from "./runtime/runtime-artifact-boundary.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
readModels: runtime.readModels,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
export
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
export {
|
|
51
|
-
export {
|
|
52
|
-
export
|
|
53
|
-
export {
|
|
54
|
-
export {
|
|
1
|
+
import { createObservabilityDatabase } from "../observability/db/index.js";
|
|
2
|
+
import { createStateAPI, createStateDatabase } from "../storage/index.js";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
import { createActionBridge } from "./action-bridge.js";
|
|
5
|
+
import { createCliCommands } from "./commands/index.js";
|
|
6
|
+
import { createOpsRouter } from "./ops/ops-router.js";
|
|
7
|
+
import { createCliReadModels } from "./read-models/index.js";
|
|
8
|
+
import { resolvePackagedRuntime } from "./runtime/runtime-artifact-boundary.js";
|
|
9
|
+
import { createRuntimeDecisionRecorder, } from "../observability/services/runtime-decision-recorder.js";
|
|
10
|
+
export function createCliRuntimeDeps(overrides = {}) {
|
|
11
|
+
const stateDb = overrides.stateDb ?? createStateDatabase();
|
|
12
|
+
const observabilityDb = overrides.observabilityDb ?? createObservabilityDatabase();
|
|
13
|
+
const stateApi = overrides.stateApi ?? createStateAPI(stateDb);
|
|
14
|
+
const readModels = overrides.readModels ?? createCliReadModels({ stateDb, observabilityDb });
|
|
15
|
+
const actionBridge = overrides.actionBridge ?? createActionBridge(stateApi);
|
|
16
|
+
const runtimeRecorder = overrides.runtimeRecorder ?? createRuntimeDecisionRecorder(observabilityDb);
|
|
17
|
+
return {
|
|
18
|
+
stateDb,
|
|
19
|
+
observabilityDb,
|
|
20
|
+
stateApi,
|
|
21
|
+
readModels,
|
|
22
|
+
actionBridge,
|
|
23
|
+
runtimeRecorder,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export function createCommandRouter(options = {}) {
|
|
27
|
+
const runtime = createCliRuntimeDeps(options.deps);
|
|
28
|
+
const pluginRoot = path.join(process.cwd(), "plugin");
|
|
29
|
+
const opsRouter = createOpsRouter({
|
|
30
|
+
runtimeAvailable: resolvePackagedRuntime(pluginRoot).ok,
|
|
31
|
+
readModels: runtime.readModels,
|
|
32
|
+
runtimeRecorder: runtime.runtimeRecorder,
|
|
33
|
+
});
|
|
34
|
+
const commands = createCliCommands({
|
|
35
|
+
readModels: runtime.readModels,
|
|
36
|
+
actionBridge: runtime.actionBridge,
|
|
37
|
+
opsRouter,
|
|
38
|
+
});
|
|
39
|
+
return {
|
|
40
|
+
commands,
|
|
41
|
+
resolve(name) {
|
|
42
|
+
return commands.find((command) => command.name === name);
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function closeCliRuntimeDeps(deps) {
|
|
47
|
+
deps.stateDb.close();
|
|
48
|
+
deps.observabilityDb.close();
|
|
49
|
+
}
|
|
50
|
+
export { createOpsRouter } from "./ops/ops-router.js";
|
|
51
|
+
export { heartbeatCheck, } from "./ops/heartbeat-surface.js";
|
|
52
|
+
export * from "./host-capability/types.js";
|
|
53
|
+
export { classifyDeliveryCapability } from "./host-capability/classify-delivery.js";
|
|
54
|
+
export { probeHostCapability } from "./host-capability/probe-host-capability.js";
|
|
55
|
+
export { recordHostCapability } from "./host-capability/record-host-capability.js";
|
|
56
|
+
export { runHostSmoke } from "./host-smoke/run-host-smoke.js";
|
|
57
|
+
export { explainSurfaceSubject } from "./explain/explain-surface-subject.js";
|
|
58
|
+
export { showOperatorFallback, OperatorFallbackNotFoundError } from "./ops/show-operator-fallback.js";
|
|
@@ -1,35 +1,38 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Stable HeartbeatSurfaceResult for second_nature_ops / CLI (T1.1.3, cli-system / ADR-005).
|
|
3
|
-
*
|
|
4
|
-
* S1 scope: carrier / probe / runtime-unavailable / fake control-plane passthrough only.
|
|
5
|
-
* Workspace full runtime: delegates to `runHeartbeatCycle` when read models are wired (US-001 / CH-09-02).
|
|
6
|
-
*/
|
|
7
|
-
import type { SurfaceMode } from "../runtime/runtime-artifact-boundary.js";
|
|
8
|
-
import type { HeartbeatSignal } from "../../core/second-nature/heartbeat/signal.js";
|
|
9
|
-
import type { CliReadModels } from "../read-models/index.js";
|
|
10
|
-
|
|
11
|
-
export
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Stable HeartbeatSurfaceResult for second_nature_ops / CLI (T1.1.3, cli-system / ADR-005).
|
|
3
|
+
*
|
|
4
|
+
* S1 scope: carrier / probe / runtime-unavailable / fake control-plane passthrough only.
|
|
5
|
+
* Workspace full runtime: delegates to `runHeartbeatCycle` when read models are wired (US-001 / CH-09-02).
|
|
6
|
+
*/
|
|
7
|
+
import type { SurfaceMode } from "../runtime/runtime-artifact-boundary.js";
|
|
8
|
+
import type { HeartbeatSignal } from "../../core/second-nature/heartbeat/signal.js";
|
|
9
|
+
import type { CliReadModels } from "../read-models/index.js";
|
|
10
|
+
import type { RuntimeDecisionRecorder } from "../../observability/services/runtime-decision-recorder.js";
|
|
11
|
+
export type HeartbeatSurfaceStatus = "heartbeat_ok" | "intent_selected" | "denied" | "deferred" | "runtime_carrier_only" | "delivery_unavailable";
|
|
12
|
+
export interface HeartbeatSurfaceResult {
|
|
13
|
+
ok: boolean;
|
|
14
|
+
status: HeartbeatSurfaceStatus;
|
|
15
|
+
surfaceMode: SurfaceMode;
|
|
16
|
+
decisionId?: string;
|
|
17
|
+
deliveryAttemptId?: string;
|
|
18
|
+
capabilityReportRef?: string;
|
|
19
|
+
fallbackRef?: string;
|
|
20
|
+
reasons: string[];
|
|
21
|
+
/** When false, callers must not treat the round as lived-experience loop completion */
|
|
22
|
+
livedExperienceLoopClaimed: boolean;
|
|
23
|
+
/** True when structured fields mirror a fake adapter for schema parity only */
|
|
24
|
+
schemaParityOnly?: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface HeartbeatCheckInput {
|
|
27
|
+
probeOnly?: boolean;
|
|
28
|
+
runtimeAvailable: boolean;
|
|
29
|
+
fakeControlPlanePassthrough?: Record<string, unknown>;
|
|
30
|
+
/** When set, full-runtime heartbeat_check runs the control-plane decision loop (US-001). */
|
|
31
|
+
readModels?: CliReadModels;
|
|
32
|
+
/** When set, full-runtime cycles are persisted so `loadStatus` exits unknown (T1.2.3). */
|
|
33
|
+
runtimeRecorder?: RuntimeDecisionRecorder;
|
|
34
|
+
timestamp?: string;
|
|
35
|
+
sessionContext?: string;
|
|
36
|
+
scopeHint?: HeartbeatSignal["scopeHint"];
|
|
37
|
+
}
|
|
38
|
+
export declare function heartbeatCheck(input: HeartbeatCheckInput): Promise<HeartbeatSurfaceResult>;
|
|
@@ -1,71 +1,73 @@
|
|
|
1
|
-
import { createWorkspaceHeartbeatRunner } from "./workspace-heartbeat-runner.js";
|
|
2
|
-
function mapCycleToSurface(cycle, surfaceMode) {
|
|
3
|
-
const status = cycle.status === "runtime_carrier_only" ? "runtime_carrier_only" : cycle.status;
|
|
4
|
-
return {
|
|
5
|
-
ok: true,
|
|
6
|
-
status,
|
|
7
|
-
surfaceMode,
|
|
8
|
-
decisionId: cycle.decisionId,
|
|
9
|
-
deliveryAttemptId: cycle.deliveryAttemptId,
|
|
10
|
-
fallbackRef: cycle.fallbackRef,
|
|
11
|
-
reasons: cycle.reasons,
|
|
12
|
-
livedExperienceLoopClaimed: false,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
export async function heartbeatCheck(input) {
|
|
16
|
-
if (!input.runtimeAvailable) {
|
|
17
|
-
return {
|
|
18
|
-
ok: true,
|
|
19
|
-
status: "runtime_carrier_only",
|
|
20
|
-
surfaceMode: "host_safe_carrier",
|
|
21
|
-
reasons: ["runtime_unavailable_packaged_carrier"],
|
|
22
|
-
livedExperienceLoopClaimed: false,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
if (input.probeOnly) {
|
|
26
|
-
return {
|
|
27
|
-
ok: true,
|
|
28
|
-
status: "heartbeat_ok",
|
|
29
|
-
surfaceMode: "capability_probe",
|
|
30
|
-
reasons: ["probe_only"],
|
|
31
|
-
livedExperienceLoopClaimed: false,
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
if (input.fakeControlPlanePassthrough) {
|
|
35
|
-
const decisionId = typeof input.fakeControlPlanePassthrough.decisionId === "string"
|
|
36
|
-
? input.fakeControlPlanePassthrough.decisionId
|
|
37
|
-
: undefined;
|
|
38
|
-
return {
|
|
39
|
-
ok: true,
|
|
40
|
-
status: "intent_selected",
|
|
41
|
-
surfaceMode: "host_safe_carrier",
|
|
42
|
-
reasons: ["fake_control_plane_passthrough"],
|
|
43
|
-
decisionId,
|
|
44
|
-
livedExperienceLoopClaimed: false,
|
|
45
|
-
schemaParityOnly: true,
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
if (!input.readModels) {
|
|
49
|
-
return {
|
|
50
|
-
ok: true,
|
|
51
|
-
status: "runtime_carrier_only",
|
|
52
|
-
surfaceMode: "host_safe_carrier",
|
|
53
|
-
reasons: ["heartbeat_read_models_unavailable"],
|
|
54
|
-
livedExperienceLoopClaimed: false,
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
const timestamp = typeof input.timestamp === "string" && input.timestamp.trim().length > 0
|
|
58
|
-
? input.timestamp.trim()
|
|
59
|
-
: new Date().toISOString();
|
|
60
|
-
const signal = {
|
|
61
|
-
trigger: "heartbeat_bridge",
|
|
62
|
-
scopeHint: input.scopeHint,
|
|
63
|
-
payload: {
|
|
64
|
-
timestamp,
|
|
65
|
-
sessionContext: typeof input.sessionContext === "string" ? input.sessionContext : undefined,
|
|
66
|
-
},
|
|
67
|
-
};
|
|
68
|
-
const run = createWorkspaceHeartbeatRunner(input.readModels
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
1
|
+
import { createWorkspaceHeartbeatRunner } from "./workspace-heartbeat-runner.js";
|
|
2
|
+
function mapCycleToSurface(cycle, surfaceMode) {
|
|
3
|
+
const status = cycle.status === "runtime_carrier_only" ? "runtime_carrier_only" : cycle.status;
|
|
4
|
+
return {
|
|
5
|
+
ok: true,
|
|
6
|
+
status,
|
|
7
|
+
surfaceMode,
|
|
8
|
+
decisionId: cycle.decisionId,
|
|
9
|
+
deliveryAttemptId: cycle.deliveryAttemptId,
|
|
10
|
+
fallbackRef: cycle.fallbackRef,
|
|
11
|
+
reasons: cycle.reasons,
|
|
12
|
+
livedExperienceLoopClaimed: false,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export async function heartbeatCheck(input) {
|
|
16
|
+
if (!input.runtimeAvailable) {
|
|
17
|
+
return {
|
|
18
|
+
ok: true,
|
|
19
|
+
status: "runtime_carrier_only",
|
|
20
|
+
surfaceMode: "host_safe_carrier",
|
|
21
|
+
reasons: ["runtime_unavailable_packaged_carrier"],
|
|
22
|
+
livedExperienceLoopClaimed: false,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (input.probeOnly) {
|
|
26
|
+
return {
|
|
27
|
+
ok: true,
|
|
28
|
+
status: "heartbeat_ok",
|
|
29
|
+
surfaceMode: "capability_probe",
|
|
30
|
+
reasons: ["probe_only"],
|
|
31
|
+
livedExperienceLoopClaimed: false,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (input.fakeControlPlanePassthrough) {
|
|
35
|
+
const decisionId = typeof input.fakeControlPlanePassthrough.decisionId === "string"
|
|
36
|
+
? input.fakeControlPlanePassthrough.decisionId
|
|
37
|
+
: undefined;
|
|
38
|
+
return {
|
|
39
|
+
ok: true,
|
|
40
|
+
status: "intent_selected",
|
|
41
|
+
surfaceMode: "host_safe_carrier",
|
|
42
|
+
reasons: ["fake_control_plane_passthrough"],
|
|
43
|
+
decisionId,
|
|
44
|
+
livedExperienceLoopClaimed: false,
|
|
45
|
+
schemaParityOnly: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (!input.readModels) {
|
|
49
|
+
return {
|
|
50
|
+
ok: true,
|
|
51
|
+
status: "runtime_carrier_only",
|
|
52
|
+
surfaceMode: "host_safe_carrier",
|
|
53
|
+
reasons: ["heartbeat_read_models_unavailable"],
|
|
54
|
+
livedExperienceLoopClaimed: false,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const timestamp = typeof input.timestamp === "string" && input.timestamp.trim().length > 0
|
|
58
|
+
? input.timestamp.trim()
|
|
59
|
+
: new Date().toISOString();
|
|
60
|
+
const signal = {
|
|
61
|
+
trigger: "heartbeat_bridge",
|
|
62
|
+
scopeHint: input.scopeHint,
|
|
63
|
+
payload: {
|
|
64
|
+
timestamp,
|
|
65
|
+
sessionContext: typeof input.sessionContext === "string" ? input.sessionContext : undefined,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
const run = createWorkspaceHeartbeatRunner(input.readModels, {
|
|
69
|
+
runtimeRecorder: input.runtimeRecorder,
|
|
70
|
+
});
|
|
71
|
+
const cycle = await run(signal);
|
|
72
|
+
return mapCycleToSurface(cycle, "workspace_full_runtime");
|
|
73
|
+
}
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared ops command dispatch for CLI + tool surfaces (T1.1.3, T1.2.2).
|
|
3
|
-
*/
|
|
4
|
-
import { type HeartbeatCheckInput, type HeartbeatSurfaceResult } from "./heartbeat-surface.js";
|
|
5
|
-
import type { CliReadModels } from "../read-models/index.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Shared ops command dispatch for CLI + tool surfaces (T1.1.3, T1.2.2).
|
|
3
|
+
*/
|
|
4
|
+
import { type HeartbeatCheckInput, type HeartbeatSurfaceResult } from "./heartbeat-surface.js";
|
|
5
|
+
import type { CliReadModels } from "../read-models/index.js";
|
|
6
|
+
import type { RuntimeDecisionRecorder } from "../../observability/services/runtime-decision-recorder.js";
|
|
7
|
+
export interface OpsRouterDeps {
|
|
8
|
+
/** When true, packaged runtime artifacts resolved and full graph is loadable */
|
|
9
|
+
runtimeAvailable: boolean;
|
|
10
|
+
/** Workspace read models: fallback view + heartbeat decision loop inputs (T1.2.2 / US-001). */
|
|
11
|
+
readModels?: CliReadModels;
|
|
12
|
+
/** Persists full-runtime heartbeat cycles so `loadStatus` exits the unknown baseline (T1.2.3). */
|
|
13
|
+
runtimeRecorder?: RuntimeDecisionRecorder;
|
|
14
|
+
}
|
|
15
|
+
export interface OpsRouter {
|
|
16
|
+
heartbeatCheck(input: HeartbeatCheckInput): Promise<HeartbeatSurfaceResult>;
|
|
17
|
+
dispatch(command: string, input?: Record<string, unknown>): HeartbeatSurfaceResult | Record<string, unknown> | Promise<HeartbeatSurfaceResult> | Promise<Record<string, unknown>>;
|
|
18
|
+
}
|
|
19
|
+
export declare function createOpsRouter(deps: OpsRouterDeps): OpsRouter;
|
|
@@ -1,87 +1,89 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Shared ops command dispatch for CLI + tool surfaces (T1.1.3, T1.2.2).
|
|
3
|
-
*/
|
|
4
|
-
import { heartbeatCheck } from "./heartbeat-surface.js";
|
|
5
|
-
import { showOperatorFallback, OperatorFallbackNotFoundError } from "./show-operator-fallback.js";
|
|
6
|
-
function coerceProbeOnlyFlag(input) {
|
|
7
|
-
const v = input?.probeOnly;
|
|
8
|
-
return v === true || v === "true" || v === 1 || v === "1";
|
|
9
|
-
}
|
|
10
|
-
export function createOpsRouter(deps) {
|
|
11
|
-
return {
|
|
12
|
-
heartbeatCheck: (input) => heartbeatCheck({
|
|
13
|
-
...input,
|
|
14
|
-
runtimeAvailable: input.runtimeAvailable ?? deps.runtimeAvailable,
|
|
15
|
-
readModels: input.readModels ?? deps.readModels,
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Shared ops command dispatch for CLI + tool surfaces (T1.1.3, T1.2.2).
|
|
3
|
+
*/
|
|
4
|
+
import { heartbeatCheck } from "./heartbeat-surface.js";
|
|
5
|
+
import { showOperatorFallback, OperatorFallbackNotFoundError } from "./show-operator-fallback.js";
|
|
6
|
+
function coerceProbeOnlyFlag(input) {
|
|
7
|
+
const v = input?.probeOnly;
|
|
8
|
+
return v === true || v === "true" || v === 1 || v === "1";
|
|
9
|
+
}
|
|
10
|
+
export function createOpsRouter(deps) {
|
|
11
|
+
return {
|
|
12
|
+
heartbeatCheck: (input) => heartbeatCheck({
|
|
13
|
+
...input,
|
|
14
|
+
runtimeAvailable: input.runtimeAvailable ?? deps.runtimeAvailable,
|
|
15
|
+
readModels: input.readModels ?? deps.readModels,
|
|
16
|
+
runtimeRecorder: input.runtimeRecorder ?? deps.runtimeRecorder,
|
|
17
|
+
}),
|
|
18
|
+
dispatch(command, input) {
|
|
19
|
+
if (command === "heartbeat_check") {
|
|
20
|
+
const runtimeAvailable = typeof input?.runtimeAvailable === "boolean" ? input.runtimeAvailable : deps.runtimeAvailable;
|
|
21
|
+
return heartbeatCheck({
|
|
22
|
+
probeOnly: coerceProbeOnlyFlag(input),
|
|
23
|
+
runtimeAvailable,
|
|
24
|
+
fakeControlPlanePassthrough: input?.fakeControlPlanePassthrough && typeof input.fakeControlPlanePassthrough === "object"
|
|
25
|
+
? input.fakeControlPlanePassthrough
|
|
26
|
+
: undefined,
|
|
27
|
+
readModels: input?.readModels ?? deps.readModels,
|
|
28
|
+
runtimeRecorder: input?.runtimeRecorder ?? deps.runtimeRecorder,
|
|
29
|
+
timestamp: typeof input?.timestamp === "string" ? input.timestamp : undefined,
|
|
30
|
+
sessionContext: typeof input?.sessionContext === "string" ? input.sessionContext : undefined,
|
|
31
|
+
scopeHint: input?.scopeHint,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
if (command === "fallback") {
|
|
35
|
+
const ref = typeof input?.ref === "string" ? input.ref.trim() : "";
|
|
36
|
+
if (!ref) {
|
|
37
|
+
return {
|
|
38
|
+
ok: false,
|
|
39
|
+
error: {
|
|
40
|
+
code: "MISSING_FALLBACK_REF",
|
|
41
|
+
message: "fallback requires args.ref (e.g. fallback:…)",
|
|
42
|
+
requiredUserInput: ["ref"],
|
|
43
|
+
nextStep: "reinvoke_with_ref",
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (!deps.readModels?.loadFallbackView) {
|
|
48
|
+
return {
|
|
49
|
+
ok: false,
|
|
50
|
+
error: {
|
|
51
|
+
code: "FALLBACK_READ_MODEL_UNAVAILABLE",
|
|
52
|
+
message: "Operator fallback view requires workspace read models",
|
|
53
|
+
requiredUserInput: ["ref"],
|
|
54
|
+
nextStep: "wire_read_models_into_ops_router",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return (async () => {
|
|
59
|
+
try {
|
|
60
|
+
const data = await showOperatorFallback(ref, deps.readModels);
|
|
61
|
+
return { ok: true, command: "fallback", data };
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
if (error instanceof OperatorFallbackNotFoundError) {
|
|
65
|
+
return {
|
|
66
|
+
ok: false,
|
|
67
|
+
command: "fallback",
|
|
68
|
+
error: {
|
|
69
|
+
code: error.code,
|
|
70
|
+
message: error.message,
|
|
71
|
+
requiredUserInput: ["ref"],
|
|
72
|
+
nextStep: "verify_fallback_ref_from_delivery_audit",
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
})();
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
ok: false,
|
|
82
|
+
error: {
|
|
83
|
+
code: "unknown_ops_command",
|
|
84
|
+
message: `Unknown ops command: ${command}`,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
}
|