@mattstack/rt-client 0.3.0 → 0.4.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.
package/dist/client.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { RtResponse, RtClientOptions } from "./transport.ts";
2
- import type { DemandDecl, ProjectMRsData, DiscussionsData, MrByBranchData, ForgeSlug, ForgeTokenData, RunSummary, RunDetail } from "./commands.ts";
2
+ import type { DemandDecl, ProjectMRsData, DiscussionsData, MrByBranchData, ForgeSlug, ForgeTokenData, RunSummary, RunDetail, WakeMode, ChatMember, ChatMessage, RoomSummary } from "./commands.ts";
3
3
  /**
4
4
  * One repo's project open-MR store. A cold repo forces a full paginated sync
5
5
  * on the daemon side when maxAgeMs demands it, which can run tens of seconds
@@ -25,3 +25,90 @@ export declare function listRuns(repo?: string, opts?: RtClientOptions): Promise
25
25
  runs: RunSummary[];
26
26
  }>>;
27
27
  export declare function getRun(runId: string, repo?: string, opts?: RtClientOptions): Promise<RtResponse<RunDetail>>;
28
+ /**
29
+ * SKILLS-54. rt's only write path into run state, so a wedged run can be
30
+ * resolved by a person instead of lying in the data forever. The write happens
31
+ * in the daemon and is attributed there; consumers never touch the run DB.
32
+ */
33
+ export declare function abandonRun(runId: string, repo?: string, reason?: string, opts?: RtClientOptions): Promise<RtResponse<{
34
+ ok: boolean;
35
+ }>>;
36
+ export declare function chatJoin(a: {
37
+ room: string;
38
+ handle: string;
39
+ wakeOn?: WakeMode;
40
+ cwd?: string;
41
+ pane?: string;
42
+ }, o?: RtClientOptions): Promise<RtResponse<{
43
+ handle: string;
44
+ memberCount: number;
45
+ unread: number;
46
+ }>>;
47
+ export declare function chatLeave(a: {
48
+ room: string;
49
+ handle: string;
50
+ }, o?: RtClientOptions): Promise<RtResponse<Record<string, never>>>;
51
+ export declare function chatPost(a: {
52
+ room: string;
53
+ handle: string;
54
+ body: string;
55
+ }, o?: RtClientOptions): Promise<RtResponse<{
56
+ id: number;
57
+ recipients: string[];
58
+ }>>;
59
+ export declare function chatRead(a: {
60
+ handle: string;
61
+ room?: string;
62
+ limit?: number;
63
+ sinceMs?: number;
64
+ }, o?: RtClientOptions): Promise<RtResponse<{
65
+ rooms: {
66
+ room: string;
67
+ messages: ChatMessage[];
68
+ }[];
69
+ }>>;
70
+ export declare function chatRooms(a: {
71
+ handle: string;
72
+ }, o?: RtClientOptions): Promise<RtResponse<{
73
+ rooms: RoomSummary[];
74
+ }>>;
75
+ export declare function chatWho(a: {
76
+ room: string;
77
+ }, o?: RtClientOptions): Promise<RtResponse<{
78
+ members: ChatMember[];
79
+ }>>;
80
+ export declare function chatMark(a: {
81
+ handle: string;
82
+ room?: string;
83
+ }, o?: RtClientOptions): Promise<RtResponse<Record<string, never>>>;
84
+ export declare function chatMessages(a: {
85
+ room: string;
86
+ before?: number;
87
+ limit?: number;
88
+ }, o?: RtClientOptions): Promise<RtResponse<{
89
+ messages: ChatMessage[];
90
+ }>>;
91
+ export declare function chatArm(a: {
92
+ handle: string;
93
+ room?: string;
94
+ }, o?: RtClientOptions): Promise<RtResponse<Record<string, never>>>;
95
+ export declare function chatTouch(a: {
96
+ handle: string;
97
+ }, o?: RtClientOptions): Promise<RtResponse<Record<string, never>>>;
98
+ export declare function chatDisarm(a: {
99
+ handle: string;
100
+ }, o?: RtClientOptions): Promise<RtResponse<Record<string, never>>>;
101
+ export declare function chatUnreadWaking(a: {
102
+ handle: string;
103
+ room?: string;
104
+ }, o?: RtClientOptions): Promise<RtResponse<{
105
+ rooms: {
106
+ room: string;
107
+ count: number;
108
+ mentions: number;
109
+ maxId: number;
110
+ }[];
111
+ }>>;
112
+ export declare function eventsHead(o?: RtClientOptions): Promise<RtResponse<{
113
+ cursor: number;
114
+ }>>;
@@ -55,6 +55,44 @@ export interface EventsBusEvent {
55
55
  payload: unknown;
56
56
  emittedAt: number;
57
57
  }
58
+ /**
59
+ * Duplicated shape on purpose, same reasoning as EventsBusEvent above:
60
+ * these mirror lib/state/chat-store.ts's types, which rt-client cannot
61
+ * import (it's outside lib/state/ and outside this package entirely).
62
+ */
63
+ export type WakeMode = "mention" | "all" | "none";
64
+ export interface ChatMember {
65
+ room: string;
66
+ handle: string;
67
+ joinedAt: number;
68
+ lastReadId: number;
69
+ wakeOn: WakeMode;
70
+ lastSeenAt?: number;
71
+ armedAt?: number;
72
+ cwd?: string;
73
+ pane?: string;
74
+ }
75
+ export interface ChatMessage {
76
+ id: number;
77
+ room: string;
78
+ handle: string;
79
+ body: string;
80
+ mentions: string[];
81
+ replyTo?: number;
82
+ postedAt: number;
83
+ }
84
+ export interface RoomSummary {
85
+ room: string;
86
+ memberCount: number;
87
+ unread: number;
88
+ mentions: number;
89
+ lastPostedAt?: number;
90
+ }
91
+ export type Attention = {
92
+ needs: boolean;
93
+ reason: "failed" | "stale" | "stranded" | null;
94
+ evidence: string;
95
+ };
58
96
  export interface RunSummary {
59
97
  id: string;
60
98
  repo: string;
@@ -65,6 +103,18 @@ export interface RunSummary {
65
103
  spawned_by: string | null;
66
104
  started_at: number;
67
105
  ended_at: number | null;
106
+ pack_commits: string | null;
107
+ pack_dirty: number;
108
+ attention: Attention;
109
+ /** Max over stage, field, and decision timestamps; falls back to
110
+ `started_at` when the run has produced no events yet. The board orders
111
+ by silence, so this — not `started_at` — is its sort key. */
112
+ last_event_at: number;
113
+ /** Denormalized from the run's `ticket` / `branch` fields so the LIST view
114
+ can render and search them without a detail fetch per row. Null when
115
+ the run has not produced that field yet. */
116
+ ticket: string | null;
117
+ branch: string | null;
68
118
  }
69
119
  export interface RunStageRow {
70
120
  name: string;
@@ -72,6 +122,8 @@ export interface RunStageRow {
72
122
  attempt: number;
73
123
  started_at: number | null;
74
124
  ended_at: number | null;
125
+ reason: string | null;
126
+ detail_path: string | null;
75
127
  }
76
128
  export interface RunFieldRow {
77
129
  key: string;
@@ -204,6 +256,12 @@ export interface Commands {
204
256
  cursor: number;
205
257
  };
206
258
  };
259
+ "events:head": {
260
+ payload: Record<string, never>;
261
+ data: {
262
+ cursor: number;
263
+ };
264
+ };
207
265
  "runs:list": {
208
266
  payload: {
209
267
  repo?: string;
@@ -219,6 +277,128 @@ export interface Commands {
219
277
  };
220
278
  data: RunDetail;
221
279
  };
280
+ "runs:abandon": {
281
+ payload: {
282
+ runId: string;
283
+ repo?: string;
284
+ reason?: string;
285
+ };
286
+ data: {
287
+ ok: boolean;
288
+ };
289
+ };
290
+ "chat:join": {
291
+ payload: {
292
+ room: string;
293
+ handle: string;
294
+ wakeOn?: WakeMode;
295
+ cwd?: string;
296
+ pane?: string;
297
+ };
298
+ data: {
299
+ handle: string;
300
+ memberCount: number;
301
+ unread: number;
302
+ };
303
+ };
304
+ "chat:leave": {
305
+ payload: {
306
+ room: string;
307
+ handle: string;
308
+ };
309
+ data: Record<string, never>;
310
+ };
311
+ "chat:post": {
312
+ payload: {
313
+ room: string;
314
+ handle: string;
315
+ body: string;
316
+ };
317
+ data: {
318
+ id: number;
319
+ recipients: string[];
320
+ };
321
+ };
322
+ "chat:read": {
323
+ payload: {
324
+ handle: string;
325
+ room?: string;
326
+ limit?: number;
327
+ sinceMs?: number;
328
+ };
329
+ data: {
330
+ rooms: {
331
+ room: string;
332
+ messages: ChatMessage[];
333
+ }[];
334
+ };
335
+ };
336
+ "chat:rooms": {
337
+ payload: {
338
+ handle: string;
339
+ };
340
+ data: {
341
+ rooms: RoomSummary[];
342
+ };
343
+ };
344
+ "chat:who": {
345
+ payload: {
346
+ room: string;
347
+ };
348
+ data: {
349
+ members: ChatMember[];
350
+ };
351
+ };
352
+ "chat:mark": {
353
+ payload: {
354
+ handle: string;
355
+ room?: string;
356
+ };
357
+ data: Record<string, never>;
358
+ };
359
+ "chat:messages": {
360
+ payload: {
361
+ room: string;
362
+ before?: number;
363
+ limit?: number;
364
+ };
365
+ data: {
366
+ messages: ChatMessage[];
367
+ };
368
+ };
369
+ "chat:arm": {
370
+ payload: {
371
+ handle: string;
372
+ room?: string;
373
+ };
374
+ data: Record<string, never>;
375
+ };
376
+ "chat:touch": {
377
+ payload: {
378
+ handle: string;
379
+ };
380
+ data: Record<string, never>;
381
+ };
382
+ "chat:disarm": {
383
+ payload: {
384
+ handle: string;
385
+ };
386
+ data: Record<string, never>;
387
+ };
388
+ "chat:unread-waking": {
389
+ payload: {
390
+ handle: string;
391
+ room?: string;
392
+ };
393
+ data: {
394
+ rooms: {
395
+ room: string;
396
+ count: number;
397
+ mentions: number;
398
+ maxId: number;
399
+ }[];
400
+ };
401
+ };
222
402
  }
223
403
  export type CommandName = keyof Commands;
224
404
  export declare const COMMAND_NAMES: readonly CommandName[];
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export { rtCommand, DEFAULT_SOCK } from "./transport.ts";
2
2
  export type { RtResponse, RtClientOptions } from "./transport.ts";
3
- export { readProjectMRs, readDiscussions, readMrsByBranch, resolveForgeToken } from "./client.ts";
3
+ export { readProjectMRs, readDiscussions, readMrsByBranch, resolveForgeToken, listRuns, getRun, abandonRun, chatJoin, chatLeave, chatPost, chatRead, chatRooms, chatWho, chatMark, chatMessages, chatArm, chatTouch, chatDisarm, chatUnreadWaking, eventsHead, } from "./client.ts";
4
4
  export { COMMAND_NAMES } from "./commands.ts";
5
- export type { Discussion, DemandDecl, ProjectMRsScope, ProjectMRsData, DiscussionsData, MrByBranchEntry, MrByBranchData, Commands, CommandName, ForgeSlug, ForgeTokenData, } from "./commands.ts";
5
+ export type { Discussion, DemandDecl, ProjectMRsScope, ProjectMRsData, DiscussionsData, MrByBranchEntry, MrByBranchData, Commands, CommandName, ForgeSlug, ForgeTokenData, Attention, RunSummary, RunStageRow, RunFieldRow, RunDecisionRow, RunDetail, WakeMode, ChatMember, ChatMessage, RoomSummary, } from "./commands.ts";
6
6
  export { subscribe, DEFAULT_WS_URL } from "./relay.ts";
7
7
  export type { RelayEventType } from "./relay.ts";
8
8
  export { repoNameForPath } from "./repos.ts";
@@ -15,4 +15,4 @@ export type { SettingDef, SettingScope } from "./settings/registry-machinery.ts"
15
15
  export { REGISTRY } from "./settings/registry-defs.ts";
16
16
  export { readStore, listTeams } from "./settings/stores.ts";
17
17
  export type { StoreFile } from "./settings/stores.ts";
18
- export { normalizeRemote, identityFromRemote, deriveRepoIdentity, clearIdentityMemo } from "./settings/identity.ts";
18
+ export { normalizeRemote, identityFromRemote, deriveRepoIdentity, clearIdentityMemo, serializeIdentity, parseIdentity, resolveNameToIdentity, type RepoIdentity, } from "./settings/identity.ts";