@haaaiawd/second-nature 0.2.7 → 0.2.8

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 CHANGED
@@ -108,6 +108,8 @@ const WORKSPACE_BRIDGE_COMMANDS = new Set([
108
108
  "connector_test",
109
109
  "connector_behavior_add",
110
110
  "cycle:recent",
111
+ // v8 ops surface (T-ROS.C.1): causal loop health must be reachable from Claw.
112
+ "loop_status",
111
113
  // v7 ops surface (T-ROS.C.1 / T-ROS.C.2 / T-ROS.C.3 / T-V7C.C.5): self_health, tool_affordance,
112
114
  // heartbeat_digest, snapshot:capture, narrative:diff, timeline, restore, runtime_secret_bootstrap,
113
115
  // connector:run, guidance_payload
@@ -877,6 +879,11 @@ function createHostSafeRouter(spine) {
877
879
  description: "Show recent cycle summary (workspace runtime required)",
878
880
  execute: async () => createUnavailableActionError("HOST_SAFE_CYCLE_RECENT_UNAVAILABLE", "Cycle recent read requires workspace observability database; host-safe plugin does not load persisted audit events.", [], "run_workspace_second_nature_cli_or_full_runtime_package"),
879
881
  },
882
+ {
883
+ name: "loop_status",
884
+ description: "Show v8 causal loop health (workspace runtime required)",
885
+ execute: async () => createUnavailableActionError("HOST_SAFE_LOOP_STATUS_UNAVAILABLE", "loop_status requires workspace state database; provide workspaceRoot so the full workspace bridge can read persisted v8 loop state.", ["workspaceRoot"], "reinvoke_with_workspaceRoot_or_set_SECOND_NATURE_WORKSPACE_ROOT"),
886
+ },
880
887
  ];
881
888
  return {
882
889
  commands,
@@ -1088,6 +1095,8 @@ function parseCommandInput(rawArgs) {
1088
1095
  command,
1089
1096
  input: rest[0] ? { limit: Number(rest[0]) } : undefined,
1090
1097
  };
1098
+ case "loop_status":
1099
+ return { ok: true, command, input: undefined };
1091
1100
  // v7 ops surface (T-ROS.C.2)
1092
1101
  case "self_health":
1093
1102
  return { ok: true, command, input: undefined };
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "id": "second-nature",
3
3
  "name": "Second Nature",
4
- "version": "0.2.7",
5
- "description": "OpenClaw native plugin with synchronous surface registration and bundled runtime spine. Set SECOND_NATURE_WORKSPACE_ROOT or tool workspaceRoot to the same path as the agent workspace. Agent inner guide is packaged as agent-inner-guide.md. v7 ops surface: self_health, tool_affordance, heartbeat_digest, snapshot:capture, narrative:diff, timeline, restore, runtime_secret_bootstrap, connector:run, guidance_payload.",
4
+ "version": "0.2.8",
5
+ "description": "OpenClaw native plugin with synchronous surface registration and bundled runtime spine. Set SECOND_NATURE_WORKSPACE_ROOT or tool workspaceRoot to the same path as the agent workspace. Agent inner guide is packaged as agent-inner-guide.md. Ops surface: loop_status, self_health, tool_affordance, heartbeat_digest, snapshot:capture, narrative:diff, timeline, restore, runtime_secret_bootstrap, connector:run, guidance_payload.",
6
6
  "activation": {
7
7
  "onStartup": true,
8
8
  "onCapabilities": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haaaiawd/second-nature",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "OpenClaw native plugin with synchronous registration, a packaged runtime artifact, and operator-facing status/explain flows.",
5
5
  "keywords": [
6
6
  "openclaw",
@@ -112,6 +112,7 @@ export async function heartbeatCheck(input) {
112
112
  else {
113
113
  const spine = v8Result;
114
114
  surfaceResult.v8Spine = spine;
115
+ surfaceResult.livedExperienceLoopClaimed = Boolean(spine.cycleId && (spine.closureRef || spine.noActionReason));
115
116
  surfaceResult.reasons = [
116
117
  ...surfaceResult.reasons,
117
118
  `v8_spine_cycle:${spine.cycleId}`,