harnery 0.34.0 → 0.35.0

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 (212) hide show
  1. package/dist/commander.d.ts.map +1 -1
  2. package/dist/commander.js +2 -0
  3. package/dist/commands/agents.d.ts +15 -4
  4. package/dist/commands/agents.d.ts.map +1 -1
  5. package/dist/commands/agents.js +91 -162
  6. package/dist/commands/browse.d.ts.map +1 -1
  7. package/dist/commands/browse.js +26 -2
  8. package/dist/commands/decision.d.ts.map +1 -1
  9. package/dist/commands/decision.js +2 -2
  10. package/dist/commands/events.d.ts.map +1 -1
  11. package/dist/commands/events.js +18 -1
  12. package/dist/commands/presence.d.ts.map +1 -1
  13. package/dist/commands/presence.js +2 -2
  14. package/dist/commands/semantic.d.ts +4 -0
  15. package/dist/commands/semantic.d.ts.map +1 -0
  16. package/dist/commands/semantic.js +147 -0
  17. package/dist/commands/web.d.ts.map +1 -1
  18. package/dist/commands/web.js +17 -0
  19. package/dist/core/agents/canonical-emit.d.ts +3 -0
  20. package/dist/core/agents/canonical-emit.d.ts.map +1 -1
  21. package/dist/core/agents/canonical-emit.js +12 -0
  22. package/dist/core/agents/claim-path.d.ts +11 -0
  23. package/dist/core/agents/claim-path.d.ts.map +1 -0
  24. package/dist/core/agents/claim-path.js +22 -0
  25. package/dist/core/agents/coord-client.d.ts +29 -3
  26. package/dist/core/agents/coord-client.d.ts.map +1 -1
  27. package/dist/core/agents/coord-client.js +88 -9
  28. package/dist/core/agents/live-authority-v3.d.ts.map +1 -1
  29. package/dist/core/agents/live-authority-v3.js +1 -3
  30. package/dist/core/agents/live-lifecycle-v3.js +3 -3
  31. package/dist/core/agents/live-observation-v3.d.ts.map +1 -1
  32. package/dist/core/agents/live-observation-v3.js +2 -2
  33. package/dist/core/agents/render/prompt-context.js +12 -10
  34. package/dist/core/agents/rules/stop-hook.d.ts.map +1 -1
  35. package/dist/core/agents/rules/stop-hook.js +23 -11
  36. package/dist/core/agents/session-name-display.d.ts +2 -1
  37. package/dist/core/agents/session-name-display.d.ts.map +1 -1
  38. package/dist/core/agents/session-name-display.js +10 -3
  39. package/dist/core/agents/state/heartbeat-reader.d.ts +46 -0
  40. package/dist/core/agents/state/heartbeat-reader.d.ts.map +1 -0
  41. package/dist/core/agents/state/heartbeat-reader.js +25 -0
  42. package/dist/core/agents/state/heartbeat-writer.d.ts +3 -48
  43. package/dist/core/agents/state/heartbeat-writer.d.ts.map +1 -1
  44. package/dist/core/agents/state/heartbeat-writer.js +16 -34
  45. package/dist/core/agents/state/live-coordination-view.d.ts +1 -1
  46. package/dist/core/agents/state/live-coordination-view.d.ts.map +1 -1
  47. package/dist/core/agents/state/live-coordination-view.js +25 -1
  48. package/dist/core/agents/state/names.d.ts +9 -1
  49. package/dist/core/agents/state/names.d.ts.map +1 -1
  50. package/dist/core/agents/state/names.js +190 -182
  51. package/dist/core/agents/state/stale-sweep.d.ts.map +1 -1
  52. package/dist/core/agents/state/stale-sweep.js +23 -5
  53. package/dist/core/artifacts/constants.d.ts +5 -0
  54. package/dist/core/artifacts/constants.d.ts.map +1 -0
  55. package/dist/core/artifacts/constants.js +4 -0
  56. package/dist/core/artifacts/index.d.ts +3 -3
  57. package/dist/core/artifacts/index.d.ts.map +1 -1
  58. package/dist/core/artifacts/index.js +50 -7
  59. package/dist/core/events/v3/base-contract.d.ts +795 -0
  60. package/dist/core/events/v3/base-contract.d.ts.map +1 -1
  61. package/dist/core/events/v3/base-contract.js +33 -0
  62. package/dist/core/events/v3/capabilities.d.ts +11 -0
  63. package/dist/core/events/v3/capabilities.d.ts.map +1 -1
  64. package/dist/core/events/v3/capabilities.js +23 -0
  65. package/dist/core/events/v3/generated.d.ts +1 -1
  66. package/dist/core/events/v3/generated.js +1 -1
  67. package/dist/core/events/v3/index.d.ts +4 -3
  68. package/dist/core/events/v3/index.d.ts.map +1 -1
  69. package/dist/core/events/v3/index.js +4 -3
  70. package/dist/core/events/v3/latency.d.ts +31 -1
  71. package/dist/core/events/v3/latency.d.ts.map +1 -1
  72. package/dist/core/events/v3/latency.js +127 -3
  73. package/dist/core/events/v3/live-routing.d.ts +30 -0
  74. package/dist/core/events/v3/live-routing.d.ts.map +1 -1
  75. package/dist/core/events/v3/live-routing.js +109 -1
  76. package/dist/core/events/v3/producers/command-recorder.d.ts.map +1 -1
  77. package/dist/core/events/v3/producers/command-recorder.js +10 -1
  78. package/dist/core/events/v3/producers/coordination-recorder.d.ts.map +1 -1
  79. package/dist/core/events/v3/producers/coordination-recorder.js +14 -3
  80. package/dist/core/events/v3/producers/hook-base.d.ts +17 -1
  81. package/dist/core/events/v3/producers/hook-base.d.ts.map +1 -1
  82. package/dist/core/events/v3/producers/hook-base.js +82 -1
  83. package/dist/core/events/v3/producers/intake.d.ts +6 -0
  84. package/dist/core/events/v3/producers/intake.d.ts.map +1 -1
  85. package/dist/core/events/v3/producers/intake.js +11 -0
  86. package/dist/core/events/v3/producers/recorder.d.ts +62 -0
  87. package/dist/core/events/v3/producers/recorder.d.ts.map +1 -1
  88. package/dist/core/events/v3/producers/recorder.js +654 -18
  89. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts +51 -0
  90. package/dist/core/events/v3/runtime-telemetry-capabilities.d.ts.map +1 -0
  91. package/dist/core/events/v3/runtime-telemetry-capabilities.js +54 -0
  92. package/dist/core/events/v3/turn-telemetry.d.ts +9 -0
  93. package/dist/core/events/v3/turn-telemetry.d.ts.map +1 -1
  94. package/dist/core/hooks/adapter/parse.d.ts +3 -0
  95. package/dist/core/hooks/adapter/parse.d.ts.map +1 -1
  96. package/dist/core/hooks/adapter/parse.js +14 -0
  97. package/dist/core/hooks/adapter/runtime-telemetry.d.ts +119 -0
  98. package/dist/core/hooks/adapter/runtime-telemetry.d.ts.map +1 -0
  99. package/dist/core/hooks/adapter/runtime-telemetry.js +568 -0
  100. package/dist/core/hooks/cli.js +114 -38
  101. package/dist/core/hooks/remediation-cap.d.ts +34 -0
  102. package/dist/core/hooks/remediation-cap.d.ts.map +1 -0
  103. package/dist/core/hooks/remediation-cap.js +71 -0
  104. package/dist/core/hooks/resolve/transcript.d.ts +25 -9
  105. package/dist/core/hooks/resolve/transcript.d.ts.map +1 -1
  106. package/dist/core/hooks/resolve/transcript.js +35 -17
  107. package/dist/core/semantic/adapters.d.ts +34 -0
  108. package/dist/core/semantic/adapters.d.ts.map +1 -0
  109. package/dist/core/semantic/adapters.js +222 -0
  110. package/dist/core/semantic/contract.d.ts +588 -0
  111. package/dist/core/semantic/contract.d.ts.map +1 -0
  112. package/dist/core/semantic/contract.js +230 -0
  113. package/dist/core/semantic/evidence.d.ts +11 -0
  114. package/dist/core/semantic/evidence.d.ts.map +1 -0
  115. package/dist/core/semantic/evidence.js +262 -0
  116. package/dist/core/semantic/index.d.ts +10 -0
  117. package/dist/core/semantic/index.d.ts.map +1 -0
  118. package/dist/core/semantic/index.js +9 -0
  119. package/dist/core/semantic/once.d.ts +33 -0
  120. package/dist/core/semantic/once.d.ts.map +1 -0
  121. package/dist/core/semantic/once.js +293 -0
  122. package/dist/core/semantic/prompt.d.ts +12 -0
  123. package/dist/core/semantic/prompt.d.ts.map +1 -0
  124. package/dist/core/semantic/prompt.js +70 -0
  125. package/dist/core/semantic/scheduler.d.ts +16 -0
  126. package/dist/core/semantic/scheduler.d.ts.map +1 -0
  127. package/dist/core/semantic/scheduler.js +67 -0
  128. package/dist/core/semantic/service-status.d.ts +31 -0
  129. package/dist/core/semantic/service-status.d.ts.map +1 -0
  130. package/dist/core/semantic/service-status.js +84 -0
  131. package/dist/core/semantic/service.d.ts +51 -0
  132. package/dist/core/semantic/service.d.ts.map +1 -0
  133. package/dist/core/semantic/service.js +470 -0
  134. package/dist/core/semantic/storage.d.ts +71 -0
  135. package/dist/core/semantic/storage.d.ts.map +1 -0
  136. package/dist/core/semantic/storage.js +179 -0
  137. package/dist/core/semantic/validate.d.ts +16 -0
  138. package/dist/core/semantic/validate.d.ts.map +1 -0
  139. package/dist/core/semantic/validate.js +174 -0
  140. package/dist/lib/browser/client.d.ts +11 -0
  141. package/dist/lib/browser/client.d.ts.map +1 -1
  142. package/dist/lib/browser/client.js +13 -0
  143. package/dist/lib/browser/index.d.ts +1 -0
  144. package/dist/lib/browser/index.d.ts.map +1 -1
  145. package/dist/lib/browser/standalone-html.d.ts +25 -0
  146. package/dist/lib/browser/standalone-html.d.ts.map +1 -0
  147. package/dist/lib/browser/standalone-html.js +284 -0
  148. package/dist/lib/instructions/apply.d.ts.map +1 -1
  149. package/dist/lib/instructions/apply.js +1 -0
  150. package/dist/lib/instructions/templates.d.ts +2 -0
  151. package/dist/lib/instructions/templates.d.ts.map +1 -1
  152. package/dist/lib/instructions/templates.js +144 -4
  153. package/package.json +6 -1
  154. package/schemas/event-v3.schema.json +2758 -478
  155. package/src/commander.ts +2 -0
  156. package/src/commands/agents.ts +104 -152
  157. package/src/commands/browse.ts +25 -2
  158. package/src/commands/decision.ts +8 -2
  159. package/src/commands/events.ts +21 -1
  160. package/src/commands/presence.ts +7 -2
  161. package/src/commands/semantic.ts +179 -0
  162. package/src/commands/web.ts +15 -0
  163. package/src/core/agents/canonical-emit.ts +15 -0
  164. package/src/core/agents/claim-path.ts +23 -0
  165. package/src/core/agents/coord-client.ts +92 -8
  166. package/src/core/agents/live-authority-v3.ts +1 -4
  167. package/src/core/agents/live-lifecycle-v3.ts +8 -3
  168. package/src/core/agents/live-observation-v3.ts +7 -2
  169. package/src/core/agents/render/prompt-context.ts +13 -10
  170. package/src/core/agents/rules/stop-hook.ts +24 -11
  171. package/src/core/agents/session-name-display.ts +11 -3
  172. package/src/core/agents/state/heartbeat-reader.ts +69 -0
  173. package/src/core/agents/state/heartbeat-writer.ts +20 -84
  174. package/src/core/agents/state/live-coordination-view.ts +26 -1
  175. package/src/core/agents/state/names.ts +190 -182
  176. package/src/core/agents/state/stale-sweep.ts +25 -5
  177. package/src/core/artifacts/constants.ts +4 -0
  178. package/src/core/artifacts/index.ts +49 -7
  179. package/src/core/events/v3/base-contract.ts +39 -0
  180. package/src/core/events/v3/capabilities.ts +34 -0
  181. package/src/core/events/v3/generated.ts +1 -1
  182. package/src/core/events/v3/index.ts +21 -0
  183. package/src/core/events/v3/latency.ts +213 -2
  184. package/src/core/events/v3/live-routing.ts +120 -1
  185. package/src/core/events/v3/producers/command-recorder.ts +10 -1
  186. package/src/core/events/v3/producers/coordination-recorder.ts +17 -5
  187. package/src/core/events/v3/producers/hook-base.ts +115 -1
  188. package/src/core/events/v3/producers/intake.ts +18 -0
  189. package/src/core/events/v3/producers/recorder.ts +856 -21
  190. package/src/core/events/v3/runtime-telemetry-capabilities.ts +137 -0
  191. package/src/core/events/v3/turn-telemetry.ts +10 -0
  192. package/src/core/hooks/adapter/parse.ts +16 -0
  193. package/src/core/hooks/adapter/runtime-telemetry.ts +805 -0
  194. package/src/core/hooks/cli.ts +126 -41
  195. package/src/core/hooks/remediation-cap.ts +77 -0
  196. package/src/core/hooks/resolve/transcript.ts +49 -17
  197. package/src/core/semantic/adapters.ts +293 -0
  198. package/src/core/semantic/contract.ts +298 -0
  199. package/src/core/semantic/evidence.ts +336 -0
  200. package/src/core/semantic/index.ts +127 -0
  201. package/src/core/semantic/once.ts +410 -0
  202. package/src/core/semantic/prompt.ts +84 -0
  203. package/src/core/semantic/scheduler.ts +107 -0
  204. package/src/core/semantic/service-status.ts +118 -0
  205. package/src/core/semantic/service.ts +580 -0
  206. package/src/core/semantic/storage.ts +286 -0
  207. package/src/core/semantic/validate.ts +212 -0
  208. package/src/lib/browser/client.ts +21 -0
  209. package/src/lib/browser/index.ts +4 -0
  210. package/src/lib/browser/standalone-html.ts +312 -0
  211. package/src/lib/instructions/apply.ts +1 -0
  212. package/src/lib/instructions/templates.ts +149 -4
@@ -1 +1 @@
1
- {"version":3,"file":"commander.d.ts","sourceRoot":"","sources":["../src/commander.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commander.d.ts","sourceRoot":"","sources":["../src/commander.ts"],"names":[],"mappings":"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"}
package/dist/commander.js CHANGED
@@ -52,6 +52,7 @@ import { registerPolicyCommand } from "./commands/policy.js";
52
52
  import { registerPresenceCommand } from "./commands/presence.js";
53
53
  import { registerReadCommand } from "./commands/read.js";
54
54
  import { registerRelayCommand } from "./commands/relay.js";
55
+ import { registerSemanticCommand } from "./commands/semantic.js";
55
56
  import { registerSyncCommand } from "./commands/sync.js";
56
57
  import { registerSectionCommand, registerTocCommand } from "./commands/toc.js";
57
58
  import { registerTokensCommand } from "./commands/tokens.js";
@@ -127,6 +128,7 @@ export function createHarneryProgram(opts = {}) {
127
128
  registerCheckpointCommand(program, emit, opts.context);
128
129
  registerJournalCommand(program, emit);
129
130
  registerLedgerV3Command(program, emit, opts.context);
131
+ registerSemanticCommand(program, emit, opts.context);
130
132
  registerEventsCommand(program, emit, opts.context);
131
133
  registerArtifactsCommand(program, emit, opts.context);
132
134
  registerDecisionCommand(program, emit);
@@ -14,8 +14,8 @@
14
14
  */
15
15
  import type { Command } from "commander";
16
16
  import type { EmitContext, HarneryProgramContext } from "../commander.js";
17
+ import { nativeSessionIdentity } from "../core/agents/index.js";
17
18
  import { type SessionFinalizationRequestV3 } from "../core/agents/session-finalizer-v3.js";
18
- import { type Heartbeat } from "../core/agents/state/heartbeat-writer.js";
19
19
  import type { EventTypeV3 } from "../core/events/v3/contract.js";
20
20
  /**
21
21
  * Spawn options for agent-coord child processes: pin the coord root the
@@ -32,8 +32,7 @@ export declare function coordHelperOpts(root: string): {
32
32
  cwd: string;
33
33
  env: NodeJS.ProcessEnv;
34
34
  };
35
- /** Producer joins use the private native session ID; `session_id` is the canonical V3 fingerprint. */
36
- export declare function nativeSessionIdentity(row: Pick<Heartbeat, "native_session_id" | "session_id"> | null | undefined, fallback: string): string;
35
+ export { nativeSessionIdentity };
37
36
  export declare function registerAgentsCommand(program: Command, emitParam: EmitContext, programContext?: HarneryProgramContext): void;
38
37
  export declare function registerCouncilCommands(parent: Command): void;
39
38
  type StatusPeerHeartbeat = {
@@ -126,6 +125,19 @@ export type EventLedgerHealthV3 = {
126
125
  * that fails to read lands in `collection_errors` instead of aborting the rest.
127
126
  */
128
127
  export declare function collectEventLedgerHealthV3(root: string, nowMs?: number): EventLedgerHealthV3;
128
+ /**
129
+ * Tally stop-hook remediation-cap exhaustions in the window from
130
+ * `.harnery/debug/agent-hook.ndjson` (rows with
131
+ * `skipped: "stop-remediation-cap-exhausted"`). Each one is a session whose
132
+ * end-of-turn evidence never landed, so the Stop hook gave up bouncing it and
133
+ * let the turn end unenforced — a compliance gap an operator should see
134
+ * without grepping the debug ledger.
135
+ */
136
+ export declare function readStopRemediationExhaustions(root: string, cutoffMs: number): {
137
+ total: number;
138
+ latestAt: string | null;
139
+ sessions: string[];
140
+ };
129
141
  /** Tally agent-hook failures (.harnery/debug/agent-hook.errors.ndjson) in the
130
142
  * window by exact error and phase, while separating current-hour failures from
131
143
  * historical rows. Each line is {ts, error, phase, ...}. */
@@ -173,5 +185,4 @@ export interface ActiveAgentHealthSummary {
173
185
  * V3 generations, not disposable heartbeat caches, are the active-agent authority.
174
186
  */
175
187
  export declare function collectActiveAgentHealth(root: string, nowMs?: number): ActiveAgentHealthSummary;
176
- export {};
177
188
  //# sourceMappingURL=agents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/commands/agents.ts"],"names":[],"mappings":"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"}
@@ -13,15 +13,15 @@
13
13
  * harn agents health --since 7d --json
14
14
  */
15
15
  import { spawnSync } from "node:child_process";
16
- import { existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync, } from "node:fs";
16
+ import { existsSync, mkdirSync, mkdtempSync, readdirSync, readFileSync, rmSync, writeFileSync, } from "node:fs";
17
17
  import { homedir, tmpdir } from "node:os";
18
18
  import { basename, join, resolve } from "node:path";
19
19
  import { coordBinPath } from "../core/agents/coord-bin.js";
20
20
  import { checkGitFinalization, formatGitFinalizationFailure, readSessionWriteClaims, } from "../core/agents/finalization.js";
21
- import { emitEventV3, monorepoRoot, normalizeAdapter, resolveOwner, resolveOwnerBySessionEnv, resolveOwnerWithSource, sessionIdentityFromEnv, } from "../core/agents/index.js";
21
+ import { emitEventV3, monorepoRoot, nativeSessionIdentity, normalizeAdapter, resolveOwner, resolveOwnerBySessionEnv, resolveOwnerWithSource, sessionIdentityFromEnv, } from "../core/agents/index.js";
22
22
  import { reopenLiveCoordinationGenerationV3 } from "../core/agents/live-authority-v3.js";
23
23
  import { listSessionFinalizationRequestsV3, observeHostDisappearedV3, reconcileSessionFinalizationV3, requestSessionEndExplicitV3, } from "../core/agents/session-finalizer-v3.js";
24
- import { SESSION_NAME_DISPLAY_NOTE } from "../core/agents/session-name-display.js";
24
+ import { SESSION_NAME_DISPLAY_NOTE, sessionNameDisplayPending, } from "../core/agents/session-name-display.js";
25
25
  import { buildLifecycleSuggestedName, buildSuggestedName, readHeartbeat as readHeartbeatCache, } from "../core/agents/state/heartbeat-writer.js";
26
26
  import { readLiveCoordinationRow, readLiveCoordinationRows, } from "../core/agents/state/live-coordination-view.js";
27
27
  import { foldSessionState, } from "../core/agents/state/session-state.js";
@@ -34,6 +34,7 @@ import { listHookProducerStateRecordsV3, readHookProducerStateV3, } from "../cor
34
34
  import { readLedgerV3 } from "../core/events/v3/reader.js";
35
35
  import { EVENT_V3_LEDGER_RELATIVE_ROOT } from "../core/events/v3/writer.js";
36
36
  import { evaluateRunQualityIfDue } from "../core/guard/index.js";
37
+ import { readRuntimeContextUsage } from "../core/hooks/adapter/runtime-telemetry.js";
37
38
  import { readRemoteMachines } from "../core/presence/index.js";
38
39
  import { registerContextCommand } from "./context.js";
39
40
  function readCurrentCoordinationRow(instanceId) {
@@ -57,9 +58,8 @@ import { displayName as displayAgentName, ensureIdentity, listIdentities, lookup
57
58
  function freshnessCutoffSecs() {
58
59
  return coordFreshnessSeconds();
59
60
  }
60
- const SUBAGENT_NOTE = "Bash identity is process-level; if you're running inside a subagent, " +
61
- "this resolves to the parent group's name, not the subagent's. A subagent-aware " +
62
- "bridge (per-shell marker file at .harnery/shells/<pid>) is out of scope.";
61
+ const SUBAGENT_NOTE = "Native adapter subagents resolve to their own child generation after the hook bridge " +
62
+ "observes delegation. An unbridged subprocess shell still resolves through its parent.";
63
63
  /**
64
64
  * Spawn options for agent-coord child processes: pin the coord root the
65
65
  * command already resolved (git-superproject-aware via `monorepoRoot()`), so
@@ -122,18 +122,7 @@ function activityOf(hb) {
122
122
  function taskStateOf(hb) {
123
123
  return hb.task_state ?? "active";
124
124
  }
125
- /** Producer joins use the private native session ID; `session_id` is the canonical V3 fingerprint. */
126
- export function nativeSessionIdentity(row, fallback) {
127
- if (row?.native_session_id)
128
- return row.native_session_id;
129
- // A projection-only row carries the privacy-safe canonical session
130
- // fingerprint, not the adapter's native session ID needed to join the hook
131
- // producer. Until a disposable cache exists, the resolved owner is the only
132
- // native identity available to command surfaces such as `agents status`.
133
- if (row?.session_id && !/^sid_[a-f0-9]{64}$/.test(row.session_id))
134
- return row.session_id;
135
- return fallback;
136
- }
125
+ export { nativeSessionIdentity };
137
126
  function lifecycleLabel(hb) {
138
127
  const state = taskStateOf(hb);
139
128
  return state === "blocked" && hb.task_state_reason ? `${state}: ${hb.task_state_reason}` : state;
@@ -176,9 +165,9 @@ export function registerAgentsCommand(program, emitParam, programContext) {
176
165
  cmd
177
166
  .command("suggest-name [description...]")
178
167
  .description('Reprint a session name ("Agent <you> - <description>") for the operator to set as their ' +
179
- "adapter tab title. With no arg, derives it from your current task. The primary naming path " +
168
+ "adapter tab title. With no arg, prefers the exact pending name, then derives from your current task. The primary naming path " +
180
169
  "is set-task (it suggests a name on the first focus declaration); reach for this to reprint " +
181
- "or re-suggest after a topic pivot. Read-only.")
170
+ "or to create an explicit pending-display retry with --json. Read-only.")
182
171
  .option("--json", "JSON output instead of the bare name")
183
172
  .option("--session-id <id>", "Lookup the V3 generation by session_id directly, bypassing the ppid walk.")
184
173
  .action((description, opts) => {
@@ -1378,16 +1367,24 @@ function runSetTask(task, opts) {
1378
1367
  // the first time. `first_of_session: true` means exactly "this call produced
1379
1368
  // the session name" — it is never true with a null name (an empty first
1380
1369
  // declaration or a `--session-id` relay both keep the window open instead).
1381
- const suggestedName = !priorHb?.suggested_session_name && hb?.suggested_session_name
1382
- ? hb.suggested_session_name
1383
- : null;
1384
- const firstOfSession = suggestedName !== null;
1370
+ // A native generation restart may rebuild the current cache during the
1371
+ // mutation and carry an already-seen suggestion from the prior generation.
1372
+ // That title is continuity evidence, not a new display request.
1373
+ const pendingName = sessionNameDisplayPending(hb);
1374
+ const firstSuggestedName = !priorHb?.suggested_session_name && pendingName ? pendingName : null;
1375
+ // Routine focus declarations stay title-silent. A pending display no longer
1376
+ // turns every repeated set-task into a fresh name instruction; explicit
1377
+ // recovery belongs to `agents suggest-name --json`.
1378
+ const suggestedName = firstSuggestedName;
1379
+ const firstOfSession = firstSuggestedName !== null;
1380
+ const sessionNameRetry = false;
1385
1381
  emit.data({
1386
1382
  instance_id: myOwner,
1387
1383
  name: hb?.name ?? null,
1388
1384
  task: hb?.task ?? null,
1389
1385
  cleared: !task || task.length === 0,
1390
1386
  first_of_session: firstOfSession,
1387
+ session_name_retry: sessionNameRetry,
1391
1388
  suggested_session_name: suggestedName,
1392
1389
  ...(lifecycleWarning ? { warning: lifecycleWarning } : {}),
1393
1390
  // Right-time instruction: the UserPromptSubmit nudge fires before the name
@@ -1595,12 +1592,15 @@ function runSuggestName(descriptionParts, opts) {
1595
1592
  }
1596
1593
  const hb = readCurrentCoordinationRow(myOwner);
1597
1594
  const agentName = hb?.name || "unknown";
1598
- // Description resolution: an explicit arg wins; with no arg, fall back to the
1599
- // agent's current declared task, so a bare `suggest-name` reprints the running
1600
- // session's name (handy after a topic pivot). Read-only — mutates no state;
1601
- // the primary naming path is set-task's first-of-session suggestion.
1595
+ // A bare suggest-name must prefer the exact pending suggestion over rebuilding
1596
+ // from the current task. The task may have changed since the title was minted;
1597
+ // reconstructing it would produce a block the display latch can never accept.
1598
+ // An explicit description keeps the read-only re-suggest behavior.
1599
+ const pendingName = sessionNameDisplayPending(hb);
1602
1600
  const parts = descriptionParts.length > 0 ? descriptionParts : hb?.task ? [hb.task] : [];
1603
- const built = buildSuggestedName(agentName, parts);
1601
+ const built = descriptionParts.length === 0 && pendingName
1602
+ ? { suggestedName: pendingName, description: hb?.task ?? pendingName }
1603
+ : buildSuggestedName(agentName, parts);
1604
1604
  if (!built) {
1605
1605
  emit.error({
1606
1606
  code: "no_description",
@@ -1615,6 +1615,7 @@ function runSuggestName(descriptionParts, opts) {
1615
1615
  emit.data({
1616
1616
  name: displayName,
1617
1617
  suggested_session_name: suggestedName,
1618
+ session_name_retry: pendingName === suggestedName,
1618
1619
  agent_name: agentName,
1619
1620
  description,
1620
1621
  });
@@ -1963,10 +1964,10 @@ function readContextUsage(sessionId, platform) {
1963
1964
  // store `contextUsagePercent` per composer in workspaceStorage's state.vscdb;
1964
1965
  // readCursorContextUsage reads that via bun:sqlite (percent-only).
1965
1966
  if (platform === "codex")
1966
- return readCodexContextUsage(sessionId);
1967
+ return readRuntimeContextUsage("codex", sessionId);
1967
1968
  if (platform === "cursor")
1968
1969
  return readCursorContextUsage(sessionId);
1969
- return readClaudeContextUsage(sessionId);
1970
+ return readRuntimeContextUsage("claude-code", sessionId);
1970
1971
  }
1971
1972
  function readCursorContextUsage(sessionId) {
1972
1973
  // Cursor stores per-chat (composer) context usage as a percent in each
@@ -2039,137 +2040,6 @@ function readCursorContextUsage(sessionId) {
2039
2040
  }
2040
2041
  return null;
2041
2042
  }
2042
- function readClaudeContextUsage(sessionId) {
2043
- const root = monorepoRoot();
2044
- if (!root)
2045
- return null;
2046
- // Claude Code's project dir scheme: prepend "-", replace "/" → "-".
2047
- const encoded = `-${root.replace(/^\//, "").replace(/\//g, "-")}`;
2048
- const transcriptPath = resolve(homedir(), ".claude", "projects", encoded, `${sessionId}.jsonl`);
2049
- if (!existsSync(transcriptPath))
2050
- return null;
2051
- let raw;
2052
- try {
2053
- raw = readFileSync(transcriptPath, "utf8");
2054
- }
2055
- catch {
2056
- return null;
2057
- }
2058
- const lines = raw.split("\n");
2059
- for (let i = lines.length - 1; i >= 0; i--) {
2060
- const line = lines[i].trim();
2061
- if (!line)
2062
- continue;
2063
- try {
2064
- const entry = JSON.parse(line);
2065
- const usage = entry?.message?.usage;
2066
- if (entry?.type === "assistant" && usage) {
2067
- const used = (usage.input_tokens ?? 0) +
2068
- (usage.cache_creation_input_tokens ?? 0) +
2069
- (usage.cache_read_input_tokens ?? 0);
2070
- // Window: hardcode 1M for Opus 4.7 1M (current default). Refine to
2071
- // model-aware lookup when other models become routine.
2072
- return { used, window: 1000000 };
2073
- }
2074
- }
2075
- catch {
2076
- // skip malformed line
2077
- }
2078
- }
2079
- return null;
2080
- }
2081
- function readCodexContextUsage(sessionId) {
2082
- // Codex transcripts: ~/.codex/sessions/YYYY/MM/DD/rollout-<TS>-<sessionId>.jsonl
2083
- // On WSL the active install often lives on the Windows side under
2084
- // /mnt/c/Users/<user>/.codex/sessions/; both are searched.
2085
- const path = findCodexTranscript(sessionId);
2086
- if (!path)
2087
- return null;
2088
- let raw;
2089
- try {
2090
- raw = readFileSync(path, "utf8");
2091
- }
2092
- catch {
2093
- return null;
2094
- }
2095
- const lines = raw.split("\n");
2096
- // Walk backwards: most recent token_count event wins.
2097
- for (let i = lines.length - 1; i >= 0; i--) {
2098
- const line = lines[i].trim();
2099
- if (!line)
2100
- continue;
2101
- try {
2102
- const entry = JSON.parse(line);
2103
- if (entry?.type === "event_msg" && entry?.payload?.type === "token_count") {
2104
- const info = entry.payload.info;
2105
- const used = info?.last_token_usage?.input_tokens;
2106
- const window = info?.model_context_window;
2107
- if (typeof used === "number" && typeof window === "number" && window > 0) {
2108
- return { used, window };
2109
- }
2110
- }
2111
- }
2112
- catch {
2113
- // skip malformed line
2114
- }
2115
- }
2116
- return null;
2117
- }
2118
- function findCodexTranscript(sessionId) {
2119
- // Candidate roots in priority order.
2120
- const homeRoot = resolve(homedir(), ".codex", "sessions");
2121
- const wslRoots = [];
2122
- try {
2123
- if (existsSync("/mnt/c/Users")) {
2124
- for (const entry of readdirSync("/mnt/c/Users")) {
2125
- wslRoots.push(`/mnt/c/Users/${entry}/.codex/sessions`);
2126
- }
2127
- }
2128
- }
2129
- catch {
2130
- // ignore
2131
- }
2132
- const roots = [homeRoot, ...wslRoots];
2133
- const suffix = `-${sessionId}.jsonl`;
2134
- for (const root of roots) {
2135
- if (!existsSync(root))
2136
- continue;
2137
- try {
2138
- // Recursive scan: sessions are partitioned by YYYY/MM/DD/, so depth
2139
- // is bounded at 3 + one file per session. Cheap enough at status time.
2140
- const stack = [root];
2141
- while (stack.length) {
2142
- const dir = stack.pop();
2143
- let entries;
2144
- try {
2145
- entries = readdirSync(dir);
2146
- }
2147
- catch {
2148
- continue;
2149
- }
2150
- for (const name of entries) {
2151
- const full = `${dir}/${name}`;
2152
- try {
2153
- const stat = statSync(full);
2154
- if (stat.isDirectory()) {
2155
- stack.push(full);
2156
- }
2157
- else if (name.endsWith(suffix)) {
2158
- return full;
2159
- }
2160
- }
2161
- catch {
2162
- // ignore
2163
- }
2164
- }
2165
- }
2166
- }
2167
- catch {
2168
- // ignore root scan failures
2169
- }
2170
- }
2171
- return null;
2172
- }
2173
2043
  function formatLocalTime(d) {
2174
2044
  // "Sat, May 9, 2026, 3:48 AM CDT", rendered in the Chicago timezone.
2175
2045
  return new Intl.DateTimeFormat("en-US", {
@@ -2628,6 +2498,53 @@ export function collectEventLedgerHealthV3(root, nowMs = Date.now()) {
2628
2498
  collection_errors: collectionErrors,
2629
2499
  };
2630
2500
  }
2501
+ /**
2502
+ * Tally stop-hook remediation-cap exhaustions in the window from
2503
+ * `.harnery/debug/agent-hook.ndjson` (rows with
2504
+ * `skipped: "stop-remediation-cap-exhausted"`). Each one is a session whose
2505
+ * end-of-turn evidence never landed, so the Stop hook gave up bouncing it and
2506
+ * let the turn end unenforced — a compliance gap an operator should see
2507
+ * without grepping the debug ledger.
2508
+ */
2509
+ export function readStopRemediationExhaustions(root, cutoffMs) {
2510
+ const p = resolve(root, ".harnery", "debug", "agent-hook.ndjson");
2511
+ if (!existsSync(p))
2512
+ return { total: 0, latestAt: null, sessions: [] };
2513
+ let raw;
2514
+ try {
2515
+ raw = readFileSync(p, "utf8");
2516
+ }
2517
+ catch {
2518
+ return { total: 0, latestAt: null, sessions: [] };
2519
+ }
2520
+ let total = 0;
2521
+ let latestMs = Number.NEGATIVE_INFINITY;
2522
+ const sessions = new Set();
2523
+ for (const line of raw.split("\n")) {
2524
+ if (!line.includes("stop-remediation-cap-exhausted"))
2525
+ continue;
2526
+ try {
2527
+ const e = JSON.parse(line);
2528
+ if (e.skipped !== "stop-remediation-cap-exhausted")
2529
+ continue;
2530
+ const tsMs = e.ts ? Date.parse(e.ts) : Number.NaN;
2531
+ if (!Number.isFinite(tsMs) || tsMs < cutoffMs)
2532
+ continue;
2533
+ total++;
2534
+ latestMs = Math.max(latestMs, tsMs);
2535
+ if (e.session_id && sessions.size < 5)
2536
+ sessions.add(e.session_id);
2537
+ }
2538
+ catch {
2539
+ /* skip malformed */
2540
+ }
2541
+ }
2542
+ return {
2543
+ total,
2544
+ latestAt: Number.isFinite(latestMs) ? new Date(latestMs).toISOString() : null,
2545
+ sessions: [...sessions],
2546
+ };
2547
+ }
2631
2548
  /** Tally agent-hook failures (.harnery/debug/agent-hook.errors.ndjson) in the
2632
2549
  * window by exact error and phase, while separating current-hour failures from
2633
2550
  * historical rows. Each line is {ts, error, phase, ...}. */
@@ -3129,6 +3046,7 @@ function runHealth(opts) {
3129
3046
  }
3130
3047
  }
3131
3048
  const hookErrors = readHookErrors(root, cutoffMs, nowMs);
3049
+ const stopRemediation = readStopRemediationExhaustions(root, cutoffMs);
3132
3050
  const stream = readStreamStats(root);
3133
3051
  const eventLedger = collectEventLedgerHealthV3(root);
3134
3052
  // Canonical health.* events carry the full instance_id, already resolved to
@@ -3233,6 +3151,12 @@ function runHealth(opts) {
3233
3151
  if (zombieCount > 0) {
3234
3152
  anomalies.push(`${zombieCount} zombie heartbeat(s) in active/ (${zombieSamples.join(", ")}); broken files the sweep isn't reaping`);
3235
3153
  }
3154
+ if (stopRemediation.total > 0) {
3155
+ const who = stopRemediation.sessions.length > 0
3156
+ ? ` (sessions: ${stopRemediation.sessions.map((s) => s.slice(0, 8)).join(", ")})`
3157
+ : "";
3158
+ anomalies.push(`stop-hook remediation cap exhausted ${stopRemediation.total}x in ${opts.since}${who}; these sessions ended turns without the end-of-turn ritual — check why their evidence never lands`);
3159
+ }
3236
3160
  if (eventLedger.state === "live") {
3237
3161
  // Open spans whose generation has no open turn: the turn ended without its
3238
3162
  // tool spans closing, so an explicit end can only queue, never finalize.
@@ -3291,6 +3215,11 @@ function runHealth(opts) {
3291
3215
  stream,
3292
3216
  zombies: { count: zombieCount, samples: zombieSamples },
3293
3217
  event_ledger: eventLedger,
3218
+ stop_remediation: {
3219
+ total: stopRemediation.total,
3220
+ latest_at: stopRemediation.latestAt,
3221
+ sessions: stopRemediation.sessions,
3222
+ },
3294
3223
  anomalies,
3295
3224
  };
3296
3225
  if (opts.json) {
@@ -1 +1 @@
1
- {"version":3,"file":"browse.d.ts","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AA+N1E,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+cN"}
1
+ {"version":3,"file":"browse.d.ts","sourceRoot":"","sources":["../../src/commands/browse.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAgO1E,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+cN"}
@@ -920,9 +920,24 @@ async function runTrioMode(browser, navResult, opts, evalResult, visibility, wid
920
920
  else if (opts.captureEvaluate) {
921
921
  throw new Error("--capture-evaluate requires a screenshot; remove --no-screenshot.");
922
922
  }
923
+ // A trio `.html` is opened in a browser later — from the files origin, from
924
+ // another machine, from disk — so it has to carry its own CSS and media. A
925
+ // selector capture is a DOM fragment, not a document, and stays raw.
923
926
  const htmlPath = `${prefix}.html`;
924
- const html = await browser.htmlContent(opts.selector);
925
- writeFileSync(htmlPath, html);
927
+ let snapshot;
928
+ if (opts.selector) {
929
+ writeFileSync(htmlPath, await browser.htmlContent(opts.selector));
930
+ }
931
+ else {
932
+ try {
933
+ snapshot = await browser.standaloneHtml();
934
+ writeFileSync(htmlPath, snapshot.html);
935
+ }
936
+ catch {
937
+ // Inlining is best-effort; a raw serialization beats no snapshot at all.
938
+ writeFileSync(htmlPath, await browser.htmlContent());
939
+ }
940
+ }
926
941
  written.push(htmlPath);
927
942
  const diag = browser.diagnostics();
928
943
  const jsonPath = `${prefix}.json`;
@@ -939,6 +954,15 @@ async function runTrioMode(browser, navResult, opts, evalResult, visibility, wid
939
954
  };
940
955
  if (pngBytes !== undefined)
941
956
  envelope.screenshotBytes = pngBytes;
957
+ if (snapshot) {
958
+ envelope.htmlSnapshot = {
959
+ stylesheetsInlined: snapshot.stylesheetsInlined,
960
+ stylesheetsLinked: snapshot.stylesheetsLinked,
961
+ resourcesInlined: snapshot.resourcesInlined,
962
+ resourcesLinked: snapshot.resourcesLinked,
963
+ inlinedBytes: snapshot.inlinedBytes,
964
+ };
965
+ }
942
966
  if (opts.evaluate)
943
967
  envelope.eval = evalResult;
944
968
  if (opts.captureEvaluate) {
@@ -1 +1 @@
1
- {"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../src/commands/decision.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAwCnD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CAgStF"}
1
+ {"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../src/commands/decision.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA8CnD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,GAAG,IAAI,CAgStF"}
@@ -1,5 +1,5 @@
1
1
  import { existsSync, readFileSync } from "node:fs";
2
- import { emitEventV3, monorepoRoot, normalizeAdapter, resolveOwner } from "../core/agents/index.js";
2
+ import { emitEventV3, monorepoRoot, nativeSessionIdentity, normalizeAdapter, resolveOwner, } from "../core/agents/index.js";
3
3
  import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
4
4
  import { resolveBinName } from "../core/config.js";
5
5
  import { archiveDecision, claimDecision, DECISION_STAKES, fileDecision, isStakes, isStatus, isTier, isVerdict, listDecisions, reopenDecision, resolveDecision, reviewDecision, searchDecisions, showDecision, supersedeDecision, triageDecision, wontfixDecision, } from "../lib/decision/index.js";
@@ -349,7 +349,7 @@ function emitDecisionEvent(newState, manifest, priorState) {
349
349
  const hb = root ? readLiveCoordinationRow(root, owner) : null;
350
350
  emitEventV3({
351
351
  owner,
352
- session: hb?.session_id ?? owner,
352
+ session: nativeSessionIdentity(hb, owner),
353
353
  adapter: normalizeAdapter(hb?.platform),
354
354
  observation: {
355
355
  event_type: "decision.state_changed",
@@ -1 +1 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAkC1E,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+CN"}
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/commands/events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAmC1E,uEAAuE;AACvE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CA+CN"}
@@ -72,6 +72,7 @@ function summarizeByGeneration(turns) {
72
72
  tool_ms: sumMetrics(group.map(({ tool_ms }) => tool_ms)),
73
73
  command_ms: sumMetrics(group.map(({ command_exclusive_ms }) => command_exclusive_ms)),
74
74
  wait_ms: sumMetrics(group.map(({ wait_ms }) => wait_ms)),
75
+ agent_action_ms: sumMetrics(group.map(({ response_latency }) => response_latency.agent_action_ms)),
75
76
  inference_ms: sumMetrics(group.map(({ inference_ms }) => inference_ms)),
76
77
  harness_ms: sumMetrics(group.map(({ harness_ms }) => harness_ms)),
77
78
  residual_ms: sumMetrics(group.map(({ residual_ms }) => residual_ms)),
@@ -129,6 +130,8 @@ function renderTurns(turns) {
129
130
  "TOOL",
130
131
  "COMMAND",
131
132
  "WAIT",
133
+ "ACTION",
134
+ "POST-TOOL",
132
135
  "INFERENCE",
133
136
  "HARNESS",
134
137
  "RESIDUAL",
@@ -140,6 +143,8 @@ function renderTurns(turns) {
140
143
  formatMetric(turn.tool_ms),
141
144
  formatMetric(turn.command_exclusive_ms),
142
145
  formatMetric(turn.wait_ms),
146
+ formatMetric(turn.response_latency.agent_action_ms),
147
+ formatMetric(turn.response_latency.post_tool_response_ms),
143
148
  formatMetric(turn.inference_ms),
144
149
  formatMetric(turn.harness_ms),
145
150
  formatMetric(turn.residual_ms),
@@ -147,13 +152,25 @@ function renderTurns(turns) {
147
152
  ]));
148
153
  }
149
154
  function renderGenerations(rows) {
150
- return renderTable(["GENERATION", "TURNS", "WALL", "TOOL", "COMMAND", "WAIT", "INFERENCE", "HARNESS", "RESIDUAL"], rows.map((row) => [
155
+ return renderTable([
156
+ "GENERATION",
157
+ "TURNS",
158
+ "WALL",
159
+ "TOOL",
160
+ "COMMAND",
161
+ "WAIT",
162
+ "ACTION",
163
+ "INFERENCE",
164
+ "HARNESS",
165
+ "RESIDUAL",
166
+ ], rows.map((row) => [
151
167
  row.generation_id,
152
168
  String(row.turns),
153
169
  formatMetric(row.wall_ms),
154
170
  formatMetric(row.tool_ms),
155
171
  formatMetric(row.command_ms),
156
172
  formatMetric(row.wait_ms),
173
+ formatMetric(row.agent_action_ms),
157
174
  formatMetric(row.inference_ms),
158
175
  formatMetric(row.harness_ms),
159
176
  formatMetric(row.residual_ms),
@@ -1 +1 @@
1
- {"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAsBnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA8KjF"}
1
+ {"version":3,"file":"presence.d.ts","sourceRoot":"","sources":["../../src/commands/presence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AA2BnD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CA8KjF"}
@@ -1,5 +1,5 @@
1
1
  import { monorepoRoot } from "../core/agents/coord-client.js";
2
- import { emitEventV3, normalizeAdapter, resolveOwner } from "../core/agents/index.js";
2
+ import { emitEventV3, nativeSessionIdentity, normalizeAdapter, resolveOwner, } from "../core/agents/index.js";
3
3
  import { readLiveCoordinationRow } from "../core/agents/state/live-coordination-view.js";
4
4
  import { fetchPresence, publishPresence, readRemoteMachines, relayDaemonStatus, runRelayDaemon, } from "../core/presence/index.js";
5
5
  import { ageSeconds, applyDetection, clearPresence, formatAge, presenceFilePath, readPresence, writePresence, } from "../lib/presence.js";
@@ -203,7 +203,7 @@ function emitPresenceChange(from, to, source) {
203
203
  const hb = root ? readLiveCoordinationRow(root, owner) : null;
204
204
  emitEventV3({
205
205
  owner,
206
- session: hb?.session_id ?? owner,
206
+ session: nativeSessionIdentity(hb, owner),
207
207
  adapter: normalizeAdapter(hb?.platform),
208
208
  observation: {
209
209
  event_type: "coord.presence_changed",
@@ -0,0 +1,4 @@
1
+ import type { Command } from "commander";
2
+ import type { EmitContext, HarneryProgramContext } from "../commander.js";
3
+ export declare function registerSemanticCommand(program: Command, emit: EmitContext, context?: HarneryProgramContext): void;
4
+ //# sourceMappingURL=semantic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/commands/semantic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAc1E,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,WAAW,EACjB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,IAAI,CAiIN"}