@miadi/tide-contract 0.2.0 → 0.2.2

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/README.md CHANGED
@@ -13,7 +13,9 @@ This package is the shared covenant between:
13
13
 
14
14
  - `schema/tide-api.schema.json` is the planned source of truth.
15
15
  - `src/index.ts` carries hand-written TypeScript types for this scaffold, edited in lockstep with the schema (guarded by `npm test`, `test/schema-patterns.test.ts`).
16
- - 0.2.0 adds the `multiplexer` discriminator (`"tmux" | "herdr"`, absent ⇒ `"tmux"`), pane targets in both formats (tmux `%76`/`76`, herdr `1-2`), optional `pane_label` (herdr ids are compact/non-durable ⇒ label→id resolution at action time), the `TideSendKeysResult` discriminated union, and optional `agent_status` on `EpisodeLane` / `TidePendingApproval`.
16
+ - 0.2.0 adds the `multiplexer` discriminator (`"tmux" | "herdr"`, absent ⇒ `"tmux"`), pane targets in both formats, optional `pane_label`, the `TideSendKeysResult` discriminated union, and optional `agent_status` on `EpisodeLane` / `TidePendingApproval`.
17
+ - 0.2.1 corrects the herdr pane-id story from the EP137 live smoke (herdr 0.7.4): real ids are `w1:p2` (legacy `1-2` still accepted), **session-scoped and monotonic** — they do not compact or get reused when panes close, a stale id fails loudly with `pane_not_found`, and `pane rename` sets the `label` field that label→id resolution matches at action time.
18
+ - 0.2.2 types the remaining live-verified herdr envelopes: `TideHerdrPaneInfo` (`pane list` rows), `TideHerdrWaitOutputResult` (`wait output` hit), and `TideHerdrAgentStatusEvent` (`wait agent-status` hits print an EVENT envelope, not a result envelope).
17
19
  - Runtime identity constants are exported from `src/index.ts` and mirrored in the schema `x-tide` metadata: `tide`, `MIADI_HOME`, `~/.miadi/navigator`, and `miadi.tide.daemon.v2`.
18
20
  - Future work should generate the TypeScript types from the schema and validate IronSilk runtime payloads with Python `jsonschema`.
19
21
 
package/dist/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export type Multiplexer = "tmux" | "herdr";
16
16
  export type TideAgentStatus = "idle" | "working" | "blocked" | "done" | "unknown";
17
17
  export interface TerminalContext {
18
18
  multiplexer?: Multiplexer;
19
- /** Pane id in the owning multiplexer: tmux (e.g. "%56") or herdr (e.g. "1-2"). Field name is historical. */
19
+ /** Pane id in the owning multiplexer: tmux (e.g. "%56") or herdr (e.g. "w1:p2" as of herdr 0.7; legacy "1-2" accepted). Field name is historical. */
20
20
  tmux_pane: string;
21
21
  pid: number;
22
22
  cwd: string;
@@ -65,9 +65,9 @@ export interface TideTerminalTarget {
65
65
  session_name: string;
66
66
  window_id: string;
67
67
  window_name: string;
68
- /** Pane id in the owning multiplexer: tmux (e.g. "%56") or herdr (e.g. "1-2"). */
68
+ /** Pane id in the owning multiplexer: tmux (e.g. "%56") or herdr (e.g. "w1:p2" as of herdr 0.7; legacy "1-2" accepted). */
69
69
  pane_id: string;
70
- /** Durable pane label (herdr); resolve label→id at action time — herdr ids compact when panes close. */
70
+ /** Durable pane label (herdr, set via `pane rename`); resolve label→id at action time — herdr ids are session-scoped and a stale id fails loudly with pane_not_found. */
71
71
  pane_label?: string;
72
72
  cwd: string;
73
73
  pane_active: boolean;
@@ -127,7 +127,7 @@ export interface TideTmuxSendKeysResult {
127
127
  */
128
128
  export interface TideHerdrSendKeysResult {
129
129
  multiplexer: "herdr";
130
- /** Resolved herdr pane id (e.g. "1-2"). Compact and non-durable. */
130
+ /** Resolved herdr pane id (e.g. "w1:p2" as of herdr 0.7; legacy "1-2" accepted). Session-scoped, not durable across herdr restarts. */
131
131
  target: string;
132
132
  /** Durable pane label this target was resolved from, when label→id resolution ran. */
133
133
  pane_label?: string;
@@ -135,7 +135,7 @@ export interface TideHerdrSendKeysResult {
135
135
  message: string;
136
136
  /** Whether a real Enter key was sent after the literal text. */
137
137
  submitted: boolean;
138
- /** Exact herdr CLI argv used to type the literal text (e.g. ["pane","send-text","1-2", …]). */
138
+ /** Exact herdr CLI argv used to type the literal text (e.g. ["pane","send-text","w1:p2", …]). */
139
139
  literal_command: string[];
140
140
  /** Exact herdr CLI argv used to submit Enter, or null when `submitted` is false. */
141
141
  submit_command: string[] | null;
@@ -144,6 +144,57 @@ export interface TideHerdrSendKeysResult {
144
144
  }
145
145
  /** Discriminated union on `multiplexer`; an absent discriminator means the tmux variant. */
146
146
  export type TideSendKeysResult = TideTmuxSendKeysResult | TideHerdrSendKeysResult;
147
+ /**
148
+ * One row from `herdr pane list` (fields observed live on herdr 0.7.4, EP137).
149
+ * `label` appears only after `herdr pane rename`; rows carry
150
+ * `terminal_title`/`terminal_title_stripped`, never `title`.
151
+ */
152
+ export interface TideHerdrPaneInfo {
153
+ /** Session-scoped herdr pane id (e.g. "w1:p2"). */
154
+ pane_id?: string;
155
+ /** Durable pane label set via `herdr pane rename` — the field label→id resolution matches. */
156
+ label?: string;
157
+ focused?: boolean;
158
+ agent_status?: TideAgentStatus | string;
159
+ workspace_id?: string;
160
+ tab_id?: string;
161
+ cwd?: string;
162
+ terminal_title?: string;
163
+ terminal_title_stripped?: string;
164
+ [key: string]: unknown;
165
+ }
166
+ /**
167
+ * Envelope printed by `herdr wait output` on a hit (herdr 0.7.4, EP137):
168
+ * `result.type` is "output_matched" with `matched_line` and a read transcript
169
+ * block. On timeout herdr exits 1 with error JSON on stderr — that path
170
+ * surfaces as a TideError, never as this shape.
171
+ */
172
+ export interface TideHerdrWaitOutputResult {
173
+ id?: string;
174
+ result?: {
175
+ type?: string;
176
+ matched_line?: string;
177
+ pane_id?: string;
178
+ workspace_id?: string;
179
+ [key: string]: unknown;
180
+ };
181
+ [key: string]: unknown;
182
+ }
183
+ /**
184
+ * EVENT envelope printed by `herdr wait agent-status` on a hit (herdr 0.7.4,
185
+ * EP137) — NOT a result envelope. On timeout herdr exits 1 with plain text on
186
+ * stderr — that path surfaces as a TideError.
187
+ */
188
+ export interface TideHerdrAgentStatusEvent {
189
+ event?: string;
190
+ data?: {
191
+ pane_id?: string;
192
+ workspace_id?: string;
193
+ agent_status?: TideAgentStatus | string;
194
+ [key: string]: unknown;
195
+ };
196
+ [key: string]: unknown;
197
+ }
147
198
  export type ObserverControllerPosture = "observer" | "controller" | "auto";
148
199
  export type EpisodeLaneRole = "planning" | "perspective" | "delivery" | "implementation" | "custom";
149
200
  export type EpisodeLaneVerificationState = "verified" | "unverified" | "unknown";
@@ -151,9 +202,9 @@ export interface EpisodeLane {
151
202
  episode_id: string;
152
203
  lane_id: string;
153
204
  lane_role: EpisodeLaneRole;
154
- /** Pane target: tmux pane id (e.g. "%76") or herdr pane id (e.g. "1-2"). */
205
+ /** Pane target: tmux pane id (e.g. "%76") or herdr pane id (e.g. "w1:p2"). */
155
206
  pane_target: string | null;
156
- /** Durable pane label. herdr ids are compact and non-durable, so label→id resolution happens at action time. */
207
+ /** Durable pane label. herdr ids are session-scoped (they do not survive a herdr restart), so label→id resolution happens at action time. */
157
208
  pane_label?: string | null;
158
209
  agent_status?: TideAgentStatus;
159
210
  verification_state: EpisodeLaneVerificationState;
@@ -173,7 +224,7 @@ export interface TideLaneCheckpoint {
173
224
  episode_id: string;
174
225
  lane_id: string;
175
226
  pane_target: string | null;
176
- /** Durable pane label for re-resolving the (non-durable) herdr pane id at action time. */
227
+ /** Durable pane label for re-resolving the (session-scoped) herdr pane id at action time. */
177
228
  pane_label?: string | null;
178
229
  continuation_note: string | null;
179
230
  artifact_paths: string[];
@@ -202,7 +253,7 @@ export interface TidePendingApproval {
202
253
  episode_id: string;
203
254
  lane_id: string | null;
204
255
  pane_target: string | null;
205
- /** Durable pane label for re-resolving the (non-durable) herdr pane id at action time. */
256
+ /** Durable pane label for re-resolving the (session-scoped) herdr pane id at action time. */
206
257
  pane_label?: string | null;
207
258
  agent_status?: TideAgentStatus;
208
259
  action_type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@miadi/tide-contract",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Schema-first Tide API contract shared by Miadi and the IronSilk tide runtime.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -51,8 +51,8 @@
51
51
  "episode_id": { "type": "string", "description": "Unique episode identifier." },
52
52
  "lane_id": { "type": "string", "description": "Unique lane identifier within the episode (e.g., 'planning', 'delivery')." },
53
53
  "lane_role": { "$ref": "#/$defs/episodeLaneRole" },
54
- "pane_target": { "type": ["string", "null"], "pattern": "^(%?[0-9]+|[0-9]+-[0-9]+)$", "description": "Optional pane target: tmux pane id (e.g., '%76' or '76') or herdr pane id (e.g., '1-2')." },
55
- "pane_label": { "type": ["string", "null"], "description": "Durable pane label. herdr pane ids are compact and non-durable, so label→id resolution happens at action time." },
54
+ "pane_target": { "type": ["string", "null"], "pattern": "^(%?[0-9]+|[0-9]+-[0-9]+|w[0-9]+:p[0-9]+)$", "description": "Optional pane target: tmux pane id (e.g., '%76' or '76') or herdr pane id (e.g., 'w1:p2' as of herdr 0.7; legacy '1-2' accepted)." },
55
+ "pane_label": { "type": ["string", "null"], "description": "Durable pane label. herdr pane ids are session-scoped (they do not survive a herdr restart), so label→id resolution happens at action time." },
56
56
  "agent_status": { "$ref": "#/$defs/agentStatus" },
57
57
  "verification_state": { "$ref": "#/$defs/episodeLaneVerificationState" },
58
58
  "domain_id": { "type": ["string", "null"] },
@@ -81,7 +81,7 @@
81
81
  "episode_id": { "type": "string" },
82
82
  "lane_id": { "type": "string" },
83
83
  "pane_target": { "type": ["string", "null"] },
84
- "pane_label": { "type": ["string", "null"], "description": "Durable pane label for re-resolving the (non-durable) herdr pane id at action time." },
84
+ "pane_label": { "type": ["string", "null"], "description": "Durable pane label for re-resolving the (session-scoped) herdr pane id at action time." },
85
85
  "continuation_note": { "type": ["string", "null"] },
86
86
  "artifact_paths": { "type": "array", "items": { "type": "string" } },
87
87
  "safe_to_close": { "type": "boolean" },
@@ -124,7 +124,7 @@
124
124
  "episode_id": { "type": "string" },
125
125
  "lane_id": { "type": ["string", "null"] },
126
126
  "pane_target": { "type": ["string", "null"] },
127
- "pane_label": { "type": ["string", "null"], "description": "Durable pane label for re-resolving the (non-durable) herdr pane id at action time." },
127
+ "pane_label": { "type": ["string", "null"], "description": "Durable pane label for re-resolving the (session-scoped) herdr pane id at action time." },
128
128
  "agent_status": { "$ref": "#/$defs/agentStatus" },
129
129
  "action_type": { "type": "string", "description": "e.g., 'steer', 'send', 'close', 'commit'." },
130
130
  "proposal_text": { "type": ["string", "null"] },
@@ -147,7 +147,7 @@
147
147
  ],
148
148
  "properties": {
149
149
  "multiplexer": { "$ref": "#/$defs/multiplexer" },
150
- "tmux_pane": { "type": "string", "pattern": "^(%?[0-9]+|[0-9]+-[0-9]+)$", "description": "Pane id in the owning multiplexer: tmux (e.g., '%56') or herdr (e.g., '1-2'). Field name is historical." },
150
+ "tmux_pane": { "type": "string", "pattern": "^(%?[0-9]+|[0-9]+-[0-9]+|w[0-9]+:p[0-9]+)$", "description": "Pane id in the owning multiplexer: tmux (e.g., '%56') or herdr (e.g., 'w1:p2' as of herdr 0.7; legacy '1-2' accepted). Field name is historical." },
151
151
  "pid": { "type": "integer" },
152
152
  "cwd": { "type": "string" },
153
153
  "domain_id": { "type": ["string", "null"] },
@@ -258,8 +258,8 @@
258
258
  "session_name": { "type": "string" },
259
259
  "window_id": { "type": "string" },
260
260
  "window_name": { "type": "string" },
261
- "pane_id": { "type": "string", "pattern": "^(%?[0-9]+|[0-9]+-[0-9]+)$", "description": "Pane id in the owning multiplexer: tmux (e.g., '%56') or herdr (e.g., '1-2')." },
262
- "pane_label": { "type": "string", "description": "Durable pane label (herdr); resolve label→id at action time — herdr ids compact when panes close." },
261
+ "pane_id": { "type": "string", "pattern": "^(%?[0-9]+|[0-9]+-[0-9]+|w[0-9]+:p[0-9]+)$", "description": "Pane id in the owning multiplexer: tmux (e.g., '%56') or herdr (e.g., 'w1:p2' as of herdr 0.7; legacy '1-2' accepted)." },
262
+ "pane_label": { "type": "string", "description": "Durable pane label (herdr, set via `pane rename`); resolve label→id at action time — herdr ids are session-scoped and a stale id fails loudly with pane_not_found." },
263
263
  "cwd": { "type": "string" },
264
264
  "pane_active": { "type": "boolean" },
265
265
  "session_attached": { "type": "integer", "minimum": 0 },
@@ -319,12 +319,12 @@
319
319
  "description": "Result/plan of a direct send-keys steer against a herdr pane. The argv fields carry herdr CLI arguments instead of tmux argv.",
320
320
  "properties": {
321
321
  "multiplexer": { "const": "herdr" },
322
- "target": { "type": "string", "pattern": "^[0-9]+-[0-9]+$", "description": "Resolved herdr pane id (e.g., '1-2'). Compact and non-durable." },
322
+ "target": { "type": "string", "pattern": "^([0-9]+-[0-9]+|w[0-9]+:p[0-9]+)$", "description": "Resolved herdr pane id (e.g., 'w1:p2' as of herdr 0.7; legacy '1-2' accepted). Session-scoped, not durable across herdr restarts." },
323
323
  "pane_label": { "type": "string", "description": "Durable pane label this target was resolved from, when label→id resolution ran." },
324
324
  "message": { "type": "string", "description": "The literal text typed into the pane." },
325
325
  "submitted": { "type": "boolean", "description": "Whether a real Enter key was sent after the literal text." },
326
- "literal_command": { "type": "array", "items": { "type": "string" }, "description": "Exact herdr CLI argv used to type the literal text (e.g., ['pane','send-text','1-2', …])." },
327
- "submit_command": { "type": ["array", "null"], "items": { "type": "string" }, "description": "Exact herdr CLI argv used to submit Enter (['pane','send-keys','1-2','Enter']), or null when 'submitted' is false." },
326
+ "literal_command": { "type": "array", "items": { "type": "string" }, "description": "Exact herdr CLI argv used to type the literal text (e.g., ['pane','send-text','w1:p2', …])." },
327
+ "submit_command": { "type": ["array", "null"], "items": { "type": "string" }, "description": "Exact herdr CLI argv used to submit Enter (['pane','send-keys','w1:p2','Enter']), or null when 'submitted' is false." },
328
328
  "sent_at": { "type": "string", "description": "ISO timestamp the keys were sent (omitted on a dry-run plan)." }
329
329
  }
330
330
  },
@@ -334,6 +334,57 @@
334
334
  { "$ref": "#/$defs/herdrSendKeysResult" }
335
335
  ],
336
336
  "description": "Discriminated union on 'multiplexer'; an absent discriminator means the tmux variant."
337
+ },
338
+ "herdrPaneInfo": {
339
+ "type": "object",
340
+ "additionalProperties": true,
341
+ "description": "One row from `herdr pane list` (loose — herdr owns the shape; fields below observed live on herdr 0.7.4, EP137). `label` appears only after `herdr pane rename`; rows carry terminal_title/terminal_title_stripped, never `title`.",
342
+ "properties": {
343
+ "pane_id": { "type": "string", "description": "Session-scoped herdr pane id (e.g., 'w1:p2')." },
344
+ "label": { "type": "string", "description": "Durable pane label set via `herdr pane rename` — the field label→id resolution matches." },
345
+ "focused": { "type": "boolean" },
346
+ "agent_status": { "$ref": "#/$defs/agentStatus" },
347
+ "workspace_id": { "type": "string" },
348
+ "tab_id": { "type": "string" },
349
+ "cwd": { "type": "string" },
350
+ "terminal_title": { "type": "string" },
351
+ "terminal_title_stripped": { "type": "string" }
352
+ }
353
+ },
354
+ "herdrWaitOutputResult": {
355
+ "type": "object",
356
+ "additionalProperties": true,
357
+ "description": "Envelope printed by `herdr wait output` on a hit (herdr 0.7.4, EP137-verified): result.type is 'output_matched' with matched_line and a read transcript block. On timeout herdr exits 1 with an error JSON on stderr — that path surfaces as a TideError, never as this shape.",
358
+ "properties": {
359
+ "id": { "type": "string" },
360
+ "result": {
361
+ "type": "object",
362
+ "additionalProperties": true,
363
+ "properties": {
364
+ "type": { "type": "string" },
365
+ "matched_line": { "type": "string" },
366
+ "pane_id": { "type": "string" },
367
+ "workspace_id": { "type": "string" }
368
+ }
369
+ }
370
+ }
371
+ },
372
+ "herdrAgentStatusEvent": {
373
+ "type": "object",
374
+ "additionalProperties": true,
375
+ "description": "EVENT envelope printed by `herdr wait agent-status` on a hit (herdr 0.7.4, EP137-verified) — NOT a result envelope. On timeout herdr exits 1 with plain text on stderr — that path surfaces as a TideError.",
376
+ "properties": {
377
+ "event": { "type": "string", "description": "e.g., 'pane.agent_status_changed'." },
378
+ "data": {
379
+ "type": "object",
380
+ "additionalProperties": true,
381
+ "properties": {
382
+ "pane_id": { "type": "string" },
383
+ "workspace_id": { "type": "string" },
384
+ "agent_status": { "$ref": "#/$defs/agentStatus" }
385
+ }
386
+ }
387
+ }
337
388
  }
338
389
  },
339
390
  "properties": {