@north-light/api 0.3.503 → 0.3.505
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/api/client.d.ts +5 -1
- package/dist/api/client.js +6 -0
- package/dist/api/contract.d.ts +1 -1
- package/dist/api/contract.js +1 -1
- package/dist/api/dto/canvas.d.ts +40 -0
- package/dist/api/routes.d.ts +2 -0
- package/dist/api/routes.js +2 -0
- package/dist/core/keybindings/catalog.d.ts +4 -3
- package/dist/core/keybindings/catalog.js +31 -2
- package/package.json +1 -1
package/dist/api/client.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ import type { CancelReviewRequest, CreateReviewRequest, ListReviewsQuery, Review
|
|
|
30
30
|
import type { CreateReviewCommentRequest, EditReviewCommentRequest, ListReviewCommentsQuery, ReadReviewCommentEventsQuery, ReviewCommentActionRequest, ReviewCommentDetailDTO, ReviewCommentEventsDTO, ReviewCommentForkDTO, ReviewCommentListDTO, ReviewCommentMutationDTO, ReviewCommentRangeBatchRequest, ReviewCommentRangeBatchResultDTO } from './dto/review-comments.js';
|
|
31
31
|
import type { CancelInboxTicketRequest, CanceledTicketResultDTO, InboxListDTO, InboxPageDTO, InboxPageHistoryDTO, InboxPageResponseDTO, InboxTicketIdDTO, PageFeedbackResolutionDTO, PageResponsesDTO, PageTicketResultDTO, RespondInboxPageRequest } from './dto/inbox.js';
|
|
32
32
|
import type { CreateHumanRequestDTO, CreateHumanRequestRequest, HumanRequestDTO, HumanRequestIdDTO, ReplaceHumanRequestRequest, RespondHumanRequestRequest, SettleHumanRequestRequest, PageComponentListDTO } from './dto/human-requests.js';
|
|
33
|
-
import type { AttentionCountsDTO, AttentionDTO, DashboardDTO, DashboardQuery, HistoryGrepQuery, HistoryGrepResultDTO, HistoryReadQuery, HistoryStatsQuery, HistoryStatsResultDTO, HistoryReadResultDTO, HistorySearchQuery, HistorySearchResultDTO, GraphDTO, PruneRequest, PruneResultDTO, RosterDTO, SnapshotDTO } from './dto/canvas.js';
|
|
33
|
+
import type { AttentionCountsDTO, AttentionDTO, DashboardDTO, DashboardQuery, HistoryGrepQuery, HistoryGrepResultDTO, HistoryReadQuery, HistoryStatsQuery, HistoryStatsResultDTO, HistoryReadResultDTO, HistorySearchQuery, HistorySearchResultDTO, GraphDTO, PruneRequest, PruneResultDTO, LiveRootsDTO, RosterDTO, SnapshotDTO } from './dto/canvas.js';
|
|
34
34
|
import type { AbandonWorktreeRequest, AbandonWorktreeResultDTO, CloseWorktreeResultDTO, QuarantinedWorktreeDTO, SpaceListDTO } from './dto/worktree.js';
|
|
35
35
|
import type { BrokerExtensionStateDTO, BrokerExecutionRequest, BrokerGeneratedNameRequest, BrokerGeneratedNameResultDTO, BrokerModelCommitRequest, BrokerModelCommitResultDTO, BrokerParkActivityResultDTO, BrokerParkCompleteRequest, BrokerPersonaAckRequest, BrokerPersonaAckResultDTO, BrokerSessionBoundRequest, BrokerSessionBoundResultDTO, BrokerSettleDirective, BrokerSettleRequest, BrokerTelemetryRequest } from './dto/broker-ops.js';
|
|
36
36
|
import type { AcknowledgeMailRequest, AcknowledgeMailResultDTO, ClaimMailRequest, ClaimMailResultDTO } from './dto/mail.js';
|
|
@@ -200,6 +200,7 @@ export declare class CrtrClient {
|
|
|
200
200
|
commitBrokerGeneratedName(id: string, req: BrokerGeneratedNameRequest): Promise<BrokerGeneratedNameResultDTO>;
|
|
201
201
|
commitBrokerPersonaAck(id: string, req: BrokerPersonaAckRequest): Promise<BrokerPersonaAckResultDTO>;
|
|
202
202
|
closeNode(id: string, req?: CloseRequest): Promise<CloseResultDTO>;
|
|
203
|
+
markNodeRead(id: string): Promise<void>;
|
|
203
204
|
recycleNode(id: string): Promise<NodeDetailDTO>;
|
|
204
205
|
demoteNode(id: string): Promise<NodeDetailDTO>;
|
|
205
206
|
promoteNode(id: string, req: PromoteRequest): Promise<NodeDetailDTO>;
|
|
@@ -447,6 +448,9 @@ export declare class CrtrClient {
|
|
|
447
448
|
* two indexed queries server-side, no per-row enrichment. The recurring
|
|
448
449
|
* poll target for attach/browser topology; use `canvasSnapshot` for the
|
|
449
450
|
* enriched on-demand view. */
|
|
451
|
+
liveRoots(q?: {
|
|
452
|
+
profile?: string;
|
|
453
|
+
}): Promise<LiveRootsDTO>;
|
|
450
454
|
canvasRoster(): Promise<RosterDTO>;
|
|
451
455
|
/** Explicitly compressed browse snapshot; the Node-only canvas source
|
|
452
456
|
* decompresses it because socketFetch does not interpret content-encoding. */
|
package/dist/api/client.js
CHANGED
|
@@ -334,6 +334,9 @@ export class CrtrClient {
|
|
|
334
334
|
closeNode(id, req) {
|
|
335
335
|
return this.request('POST', routes.nodeClose(this.nodePath(id)), req ?? {});
|
|
336
336
|
}
|
|
337
|
+
async markNodeRead(id) {
|
|
338
|
+
await this.request('POST', routes.nodeRead(this.nodePath(id)), {});
|
|
339
|
+
}
|
|
337
340
|
recycleNode(id) {
|
|
338
341
|
return this.request('POST', routes.nodeRecycle(this.nodePath(id)), {});
|
|
339
342
|
}
|
|
@@ -824,6 +827,9 @@ export class CrtrClient {
|
|
|
824
827
|
* two indexed queries server-side, no per-row enrichment. The recurring
|
|
825
828
|
* poll target for attach/browser topology; use `canvasSnapshot` for the
|
|
826
829
|
* enriched on-demand view. */
|
|
830
|
+
liveRoots(q = {}) {
|
|
831
|
+
return this.request('GET', withQuery(routes.canvasLiveRoots(), q));
|
|
832
|
+
}
|
|
827
833
|
canvasRoster() {
|
|
828
834
|
return this.request('GET', routes.canvasRoster());
|
|
829
835
|
}
|
package/dist/api/contract.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** The contract level this build serves and requires. Written by `scripts/contract.mjs release`; never edit by hand. */
|
|
2
|
-
export declare const CONTRACT_LEVEL = "1.
|
|
2
|
+
export declare const CONTRACT_LEVEL = "1.18";
|
|
3
3
|
/** Request header naming the one contract level the caller needs, e.g. `1.3`. Optional: absent means no check. */
|
|
4
4
|
export declare const REQUIRED_CONTRACT_HEADER = "Crouter-Required-Contract";
|
|
5
5
|
/** Response header listing the contract levels the server serves, comma-separated, one per major, e.g. `1.3`. */
|
package/dist/api/contract.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
//
|
|
13
13
|
// PURITY (spec §3.1): Node built-ins + `src/api/*` only.
|
|
14
14
|
/** The contract level this build serves and requires. Written by `scripts/contract.mjs release`; never edit by hand. */
|
|
15
|
-
export const CONTRACT_LEVEL = '1.
|
|
15
|
+
export const CONTRACT_LEVEL = '1.18';
|
|
16
16
|
/** Request header naming the one contract level the caller needs, e.g. `1.3`. Optional: absent means no check. */
|
|
17
17
|
export const REQUIRED_CONTRACT_HEADER = 'Crouter-Required-Contract';
|
|
18
18
|
/** Response header listing the contract levels the server serves, comma-separated, one per major, e.g. `1.3`. */
|
package/dist/api/dto/canvas.d.ts
CHANGED
|
@@ -68,6 +68,8 @@ export interface HistorySearchQuery {
|
|
|
68
68
|
from?: string;
|
|
69
69
|
/** Weigh full body text in ranking (`--body`). */
|
|
70
70
|
weigh_body?: boolean;
|
|
71
|
+
/** One hit per node (its best-scoring artifact), every matching node, unpaginated. Requires non-empty `nodes`; each hit carries `node_id`. */
|
|
72
|
+
per_node?: boolean;
|
|
71
73
|
/** relevance | recency | oldest — already resolved to the effective sort. */
|
|
72
74
|
sort?: string;
|
|
73
75
|
snippet_lines?: number;
|
|
@@ -303,6 +305,44 @@ export interface BrowseCanvasDTO {
|
|
|
303
305
|
nodes: BrowseNodeDTO[];
|
|
304
306
|
edges: RosterEdgeDTO[];
|
|
305
307
|
}
|
|
308
|
+
/** One in-tree child of a live root, for the dashboard's expansion. */
|
|
309
|
+
export interface LiveRootChildDTO {
|
|
310
|
+
node_id: NodeIdDTO;
|
|
311
|
+
name: string;
|
|
312
|
+
status: NodeStatusDTO;
|
|
313
|
+
streaming: boolean;
|
|
314
|
+
asks: number;
|
|
315
|
+
fault: string | null;
|
|
316
|
+
}
|
|
317
|
+
/** One live root conversation with everything the dashboard row shows, counted over its whole subtree. */
|
|
318
|
+
export interface LiveRootDTO {
|
|
319
|
+
node_id: NodeIdDTO;
|
|
320
|
+
name: string;
|
|
321
|
+
cwd: string;
|
|
322
|
+
profile_id: string | null;
|
|
323
|
+
status: NodeStatusDTO;
|
|
324
|
+
/** The State line of the last recap; null before the first recap. */
|
|
325
|
+
state_line: string | null;
|
|
326
|
+
/** The persisted first message, shown while `state_line` is null. */
|
|
327
|
+
goal: string | null;
|
|
328
|
+
/** Pending inbox items (asks and reviews) from any node in the subtree. */
|
|
329
|
+
asks: number;
|
|
330
|
+
/** The oldest pending ask's inbox ticket id. */
|
|
331
|
+
first_ask_ticket_id: string | null;
|
|
332
|
+
/** The first fault in root-then-subtree order, as a short summary. */
|
|
333
|
+
fault: string | null;
|
|
334
|
+
/** Nodes in the subtree, root included, with an open turn and a live process. */
|
|
335
|
+
running_count: number;
|
|
336
|
+
/** The root settled a turn after a viewer was last shown the conversation. */
|
|
337
|
+
unread: boolean;
|
|
338
|
+
last_activity: IsoTime;
|
|
339
|
+
children: LiveRootChildDTO[];
|
|
340
|
+
}
|
|
341
|
+
/** `GET /v1/canvas/live-roots` — the dashboard's one-read projection. Person callers only. */
|
|
342
|
+
export interface LiveRootsDTO {
|
|
343
|
+
generated_at: IsoTime;
|
|
344
|
+
rows: LiveRootDTO[];
|
|
345
|
+
}
|
|
306
346
|
/** One row in `GET /v1/canvas/graph`: exactly the node fields the attach graph displays. */
|
|
307
347
|
export interface GraphNodeDTO {
|
|
308
348
|
node_id: NodeIdDTO;
|
package/dist/api/routes.d.ts
CHANGED
|
@@ -59,6 +59,7 @@ export declare const routes: {
|
|
|
59
59
|
readonly brokerRecovery: (id: string) => string;
|
|
60
60
|
readonly nodeFault: (id: string) => string;
|
|
61
61
|
readonly nodeClose: (id: string) => string;
|
|
62
|
+
readonly nodeRead: (id: string) => string;
|
|
62
63
|
readonly nodeRecycle: (id: string) => string;
|
|
63
64
|
readonly nodeDemote: (id: string) => string;
|
|
64
65
|
readonly nodePromote: (id: string) => string;
|
|
@@ -92,6 +93,7 @@ export declare const routes: {
|
|
|
92
93
|
readonly canvasHistoryRead: () => string;
|
|
93
94
|
readonly canvasHistoryStats: () => string;
|
|
94
95
|
readonly canvasSnapshot: () => string;
|
|
96
|
+
readonly canvasLiveRoots: () => string;
|
|
95
97
|
readonly canvasRoster: () => string;
|
|
96
98
|
readonly canvasBrowse: () => string;
|
|
97
99
|
readonly canvasAnalytics: () => string;
|
package/dist/api/routes.js
CHANGED
|
@@ -77,6 +77,7 @@ export const routes = {
|
|
|
77
77
|
brokerRecovery: (id) => `${V}/broker/${id}/recovery`,
|
|
78
78
|
nodeFault: (id) => `${V}/nodes/${id}/fault`,
|
|
79
79
|
nodeClose: (id) => `${V}/nodes/${id}/close`,
|
|
80
|
+
nodeRead: (id) => `${V}/nodes/${id}/read`,
|
|
80
81
|
nodeRecycle: (id) => `${V}/nodes/${id}/recycle`,
|
|
81
82
|
nodeDemote: (id) => `${V}/nodes/${id}/demote`,
|
|
82
83
|
nodePromote: (id) => `${V}/nodes/${id}/promote`,
|
|
@@ -114,6 +115,7 @@ export const routes = {
|
|
|
114
115
|
canvasHistoryRead: () => `${V}/canvas/history/read`,
|
|
115
116
|
canvasHistoryStats: () => `${V}/canvas/history/stats`,
|
|
116
117
|
canvasSnapshot: () => `${V}/canvas/snapshot`,
|
|
118
|
+
canvasLiveRoots: () => `${V}/canvas/live-roots`,
|
|
117
119
|
canvasRoster: () => `${V}/canvas/roster`,
|
|
118
120
|
canvasBrowse: () => `${V}/canvas/browse`,
|
|
119
121
|
canvasAnalytics: () => `${V}/canvas/analytics`,
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import type { BindingDefinition, SafetyRequirement } from './types.js';
|
|
2
2
|
import type { AttachBindingId, AttachMenuBindingId } from './attach-control.js';
|
|
3
|
-
type TmuxMenuAction = 'open' | 'attach' | 'show' | 'view-settings' | 'provider-options' | 'fold-tools' | 'show-working' | 'metadata' | 'promote' | 'demote-mode' | 'resume' | 'fork' | 'demote' | 'make-resident' | 'detach' | 'close-subtree' | 'background-bash' | 'file-review' | 'pin' | 'reload-viewer' | 'recap' | 'context' | 'context-admin' | 'providers' | 'plugins' | 'analytics' | 'graph' | 'focus-manager' | 'copy-id' | 'issues';
|
|
3
|
+
type TmuxMenuAction = 'open' | 'attach' | 'show' | 'view-settings' | 'provider-options' | 'fold-tools' | 'show-working' | 'metadata' | 'promote' | 'demote-mode' | 'resume' | 'fork' | 'demote' | 'make-resident' | 'detach' | 'close-subtree' | 'background-bash' | 'file-review' | 'pin' | 'reload-viewer' | 'recap' | 'context' | 'context-admin' | 'providers' | 'plugins' | 'analytics' | 'graph' | 'focus-manager' | 'copy-id' | 'issues' | 'dashboard';
|
|
4
4
|
type TmuxMenuEntryAction = Exclude<TmuxMenuAction, 'open' | 'attach'> | `issue.${'idea' | 'bug'}`;
|
|
5
5
|
type GraphAction = 'down' | 'up' | 'first' | 'last' | 'collapse-or-manager' | 'expand-or-child' | 'focus' | 'revive' | 'focus-manager' | 'close-subtree' | 'dismiss';
|
|
6
6
|
type BrowseAction = 'quit' | 'down' | 'up' | 'first' | 'last' | 'expand-or-child' | 'collapse-or-parent' | 'toggle-fold' | 'tab-next' | 'tab-previous' | `tab.${1 | 2 | 3 | 4 | 5}` | 'close-subtree' | 'confirm-close' | 'sort' | 'scope' | 'profile' | 'residents' | 'preview' | 'report' | 'pin' | 'search' | 'revive-now' | 'focus' | 'focus-background' | 'yank-id';
|
|
7
|
+
type DashboardAction = 'down' | 'up' | 'first' | 'last' | 'expand' | 'collapse' | 'open' | 'pin' | 'rename' | 'close' | 'confirm-close' | 'cancel-close' | 'profile' | 'input' | 'input-cancel' | 'input-submit' | 'directory-next' | 'directory-previous' | 'help';
|
|
7
8
|
type ProfileMenuAction = 'up' | 'down' | 'select' | 'accept-default' | 'abort' | `slot.${1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9}` | 'create' | 'search-existing' | 'use-root' | 'set-default' | 'add-directory' | 'unpin' | 'manage';
|
|
8
9
|
type SetupAction = 'cancel' | 'tab-next' | 'tab-previous' | 'open' | 'list-down' | 'list-up' | 'toggle' | 'details' | 'advance' | 'cell-previous' | 'cell-next';
|
|
9
10
|
type SetupKeybindingAction = 'edit' | 'commit-edit' | 'cancel-edit' | 'unbind' | 'reset-row' | 'reset-all' | 'save' | 'discard' | 'page-up' | 'page-down' | 'filter' | 'filter-delete' | 'filter-clear';
|
|
10
11
|
type SetupModelsAction = 'open' | 'commit' | 'cancel' | 'scope-next';
|
|
11
|
-
export type BindingId = `crtr.tmux.menu.${TmuxMenuAction}` | `crtr.tmux.menu.issue.${'idea' | 'bug'}` | AttachMenuBindingId | `crtr.tmux.menu-global.${TmuxMenuEntryAction}` | `crtr.tmux.node.${'next' | 'previous'}` | 'crtr.tmux.inbox.toggle' | `crtr.attach.scroll.${'up' | 'down' | 'page-up' | 'page-down' | 'live'}` | 'crtr.attach.mouse.toggle' | 'crtr.attach.copy.message' | 'crtr.attach.help.toggle' | `crtr.attach.search.${'next' | 'previous' | 'edit' | 'close'}` | AttachBindingId | `crtr.graph.${GraphAction}` | `crtr.graph.confirm.${'accept' | 'cancel'}` | `crtr.inspector.${'force-quit' | 'down' | 'up' | 'section-next' | 'section-prev' | 'page-down' | 'page-up' | 'toggle-detail' | 'cancel-item' | 'open-log' | 'confirm' | 'dismiss' | 'retarget' | 'refresh' | 'quit'}` | `crtr.browse.${BrowseAction}` | `crtr.browse.search.${'cancel' | 'commit' | 'delete' | 'quit'}` | `crtr.profile.menu.${ProfileMenuAction}` | `crtr.profile.search.${'up' | 'down' | 'pick' | 'back' | 'delete' | 'abort'}` | `crtr.setup.${SetupAction}` | `crtr.setup.confirm.${'accept' | 'back'}` | `crtr.setup.keybindings.${SetupKeybindingAction}` | `crtr.setup.models.${SetupModelsAction}`;
|
|
12
|
-
export declare const BINDING_CATALOG: readonly [BindingDefinition<"crtr.tmux.menu.open">, BindingDefinition<"crtr.tmux.menu.attach">, ...(BindingDefinition<BindingId> | BindingDefinition<"crtr.tmux.node.next"> | BindingDefinition<"crtr.tmux.node.previous"> | BindingDefinition<"crtr.tmux.inbox.toggle"> | BindingDefinition<"crtr.attach.scroll.up"> | BindingDefinition<"crtr.attach.scroll.down"> | BindingDefinition<"crtr.attach.scroll.page-up"> | BindingDefinition<"crtr.attach.scroll.page-down"> | BindingDefinition<"crtr.attach.scroll.live"> | BindingDefinition<"crtr.attach.mouse.toggle"> | BindingDefinition<"crtr.attach.copy.message"> | BindingDefinition<"crtr.attach.search.next"> | BindingDefinition<"crtr.attach.search.previous"> | BindingDefinition<"crtr.attach.search.edit"> | BindingDefinition<"crtr.attach.search.close"> | BindingDefinition<"crtr.graph.down"> | BindingDefinition<"crtr.graph.up"> | BindingDefinition<"crtr.graph.first"> | BindingDefinition<"crtr.graph.last"> | BindingDefinition<"crtr.graph.collapse-or-manager"> | BindingDefinition<"crtr.graph.expand-or-child"> | BindingDefinition<"crtr.graph.focus"> | BindingDefinition<"crtr.graph.revive"> | BindingDefinition<"crtr.graph.focus-manager"> | BindingDefinition<"crtr.graph.close-subtree"> | BindingDefinition<"crtr.graph.dismiss"> | BindingDefinition<"crtr.graph.confirm.accept"> | BindingDefinition<"crtr.graph.confirm.cancel"> | BindingDefinition<"crtr.inspector.force-quit"> | BindingDefinition<"crtr.inspector.down"> | BindingDefinition<"crtr.inspector.up"> | BindingDefinition<"crtr.inspector.section-next"> | BindingDefinition<"crtr.inspector.section-prev"> | BindingDefinition<"crtr.inspector.page-down"> | BindingDefinition<"crtr.inspector.page-up"> | BindingDefinition<"crtr.inspector.toggle-detail"> | BindingDefinition<"crtr.inspector.cancel-item"> | BindingDefinition<"crtr.inspector.open-log"> | BindingDefinition<"crtr.inspector.confirm"> | BindingDefinition<"crtr.inspector.dismiss"> | BindingDefinition<"crtr.inspector.retarget"> | BindingDefinition<"crtr.inspector.refresh"> | BindingDefinition<"crtr.inspector.quit"> | BindingDefinition<"crtr.browse.quit"> | BindingDefinition<"crtr.browse.down"> | BindingDefinition<"crtr.browse.up"> | BindingDefinition<"crtr.browse.first"> | BindingDefinition<"crtr.browse.last"> | BindingDefinition<"crtr.browse.expand-or-child"> | BindingDefinition<"crtr.browse.collapse-or-parent"> | BindingDefinition<"crtr.browse.toggle-fold"> | BindingDefinition<"crtr.browse.tab-next"> | BindingDefinition<"crtr.browse.tab-previous"> | BindingDefinition<"crtr.browse.tab.2" | "crtr.browse.tab.5" | "crtr.browse.tab.4" | "crtr.browse.tab.3" | "crtr.browse.tab.1"> | BindingDefinition<"crtr.browse.close-subtree"> | BindingDefinition<"crtr.browse.confirm-close"> | BindingDefinition<"crtr.browse.sort"> | BindingDefinition<"crtr.browse.scope"> | BindingDefinition<"crtr.browse.profile"> | BindingDefinition<"crtr.browse.residents"> | BindingDefinition<"crtr.browse.preview"> | BindingDefinition<"crtr.browse.report"> | BindingDefinition<"crtr.browse.pin"> | BindingDefinition<"crtr.browse.search"> | BindingDefinition<"crtr.browse.revive-now"> | BindingDefinition<"crtr.browse.focus"> | BindingDefinition<"crtr.browse.focus-background"> | BindingDefinition<"crtr.browse.yank-id"> | BindingDefinition<"crtr.browse.search.cancel"> | BindingDefinition<"crtr.browse.search.commit"> | BindingDefinition<"crtr.browse.search.delete"> | BindingDefinition<"crtr.browse.search.quit"> | BindingDefinition<"crtr.profile.menu.up"> | BindingDefinition<"crtr.profile.menu.down"> | BindingDefinition<"crtr.profile.menu.select"> | BindingDefinition<"crtr.profile.menu.accept-default"> | BindingDefinition<"crtr.profile.menu.abort"> | BindingDefinition<"crtr.profile.menu.slot.2" | "crtr.profile.menu.slot.5" | "crtr.profile.menu.slot.4" | "crtr.profile.menu.slot.7" | "crtr.profile.menu.slot.3" | "crtr.profile.menu.slot.6" | "crtr.profile.menu.slot.1" | "crtr.profile.menu.slot.8" | "crtr.profile.menu.slot.9">)[], BindingDefinition<"crtr.profile.menu.create">, BindingDefinition<"crtr.profile.menu.search-existing">, BindingDefinition<"crtr.profile.menu.use-root">, BindingDefinition<"crtr.profile.menu.set-default">, BindingDefinition<"crtr.profile.menu.add-directory">, BindingDefinition<"crtr.profile.menu.unpin">, BindingDefinition<"crtr.profile.menu.manage">, BindingDefinition<"crtr.profile.search.up">, BindingDefinition<"crtr.profile.search.down">, BindingDefinition<"crtr.profile.search.pick">, BindingDefinition<"crtr.profile.search.back">, BindingDefinition<"crtr.profile.search.delete">, BindingDefinition<"crtr.profile.search.abort">, BindingDefinition<"crtr.setup.cancel">, BindingDefinition<"crtr.setup.tab-next">, BindingDefinition<"crtr.setup.tab-previous">, BindingDefinition<"crtr.setup.open">, BindingDefinition<"crtr.setup.list-down">, BindingDefinition<"crtr.setup.list-up">, BindingDefinition<"crtr.setup.toggle">, BindingDefinition<"crtr.setup.details">, BindingDefinition<"crtr.setup.advance">, BindingDefinition<"crtr.setup.confirm.accept">, BindingDefinition<"crtr.setup.confirm.back">, BindingDefinition<"crtr.setup.keybindings.edit">, BindingDefinition<"crtr.setup.keybindings.commit-edit">, BindingDefinition<"crtr.setup.keybindings.cancel-edit">, BindingDefinition<"crtr.setup.keybindings.unbind">, BindingDefinition<"crtr.setup.keybindings.reset-row">, BindingDefinition<"crtr.setup.keybindings.reset-all">, BindingDefinition<"crtr.setup.keybindings.save">, BindingDefinition<"crtr.setup.keybindings.discard">, BindingDefinition<"crtr.setup.keybindings.page-up">, BindingDefinition<"crtr.setup.keybindings.page-down">, BindingDefinition<"crtr.setup.keybindings.filter">, BindingDefinition<"crtr.setup.keybindings.filter-delete">, BindingDefinition<"crtr.setup.keybindings.filter-clear">, BindingDefinition<"crtr.setup.cell-previous">, BindingDefinition<"crtr.setup.cell-next">, BindingDefinition<"crtr.setup.models.open">, BindingDefinition<"crtr.setup.models.scope-next">, BindingDefinition<"crtr.setup.models.commit">, BindingDefinition<"crtr.setup.models.cancel">];
|
|
12
|
+
export type BindingId = `crtr.tmux.menu.${TmuxMenuAction}` | `crtr.tmux.menu.issue.${'idea' | 'bug'}` | AttachMenuBindingId | `crtr.tmux.menu-global.${TmuxMenuEntryAction}` | `crtr.tmux.node.${'next' | 'previous'}` | 'crtr.tmux.inbox.toggle' | `crtr.attach.scroll.${'up' | 'down' | 'page-up' | 'page-down' | 'live'}` | 'crtr.attach.mouse.toggle' | 'crtr.attach.copy.message' | 'crtr.attach.help.toggle' | `crtr.attach.search.${'next' | 'previous' | 'edit' | 'close'}` | AttachBindingId | `crtr.graph.${GraphAction}` | `crtr.graph.confirm.${'accept' | 'cancel'}` | `crtr.inspector.${'force-quit' | 'down' | 'up' | 'section-next' | 'section-prev' | 'page-down' | 'page-up' | 'toggle-detail' | 'cancel-item' | 'open-log' | 'confirm' | 'dismiss' | 'retarget' | 'refresh' | 'quit'}` | `crtr.browse.${BrowseAction}` | `crtr.browse.search.${'cancel' | 'commit' | 'delete' | 'quit'}` | `crtr.dashboard.${DashboardAction}` | `crtr.profile.menu.${ProfileMenuAction}` | `crtr.profile.search.${'up' | 'down' | 'pick' | 'back' | 'delete' | 'abort'}` | `crtr.setup.${SetupAction}` | `crtr.setup.confirm.${'accept' | 'back'}` | `crtr.setup.keybindings.${SetupKeybindingAction}` | `crtr.setup.models.${SetupModelsAction}`;
|
|
13
|
+
export declare const BINDING_CATALOG: readonly [BindingDefinition<"crtr.tmux.menu.open">, BindingDefinition<"crtr.tmux.menu.attach">, ...(BindingDefinition<BindingId> | BindingDefinition<"crtr.tmux.node.next"> | BindingDefinition<"crtr.tmux.node.previous"> | BindingDefinition<"crtr.tmux.inbox.toggle"> | BindingDefinition<"crtr.attach.scroll.up"> | BindingDefinition<"crtr.attach.scroll.down"> | BindingDefinition<"crtr.attach.scroll.page-up"> | BindingDefinition<"crtr.attach.scroll.page-down"> | BindingDefinition<"crtr.attach.scroll.live"> | BindingDefinition<"crtr.attach.mouse.toggle"> | BindingDefinition<"crtr.attach.copy.message"> | BindingDefinition<"crtr.attach.search.next"> | BindingDefinition<"crtr.attach.search.previous"> | BindingDefinition<"crtr.attach.search.edit"> | BindingDefinition<"crtr.attach.search.close"> | BindingDefinition<"crtr.graph.down"> | BindingDefinition<"crtr.graph.up"> | BindingDefinition<"crtr.graph.first"> | BindingDefinition<"crtr.graph.last"> | BindingDefinition<"crtr.graph.collapse-or-manager"> | BindingDefinition<"crtr.graph.expand-or-child"> | BindingDefinition<"crtr.graph.focus"> | BindingDefinition<"crtr.graph.revive"> | BindingDefinition<"crtr.graph.focus-manager"> | BindingDefinition<"crtr.graph.close-subtree"> | BindingDefinition<"crtr.graph.dismiss"> | BindingDefinition<"crtr.graph.confirm.accept"> | BindingDefinition<"crtr.graph.confirm.cancel"> | BindingDefinition<"crtr.inspector.force-quit"> | BindingDefinition<"crtr.inspector.down"> | BindingDefinition<"crtr.inspector.up"> | BindingDefinition<"crtr.inspector.section-next"> | BindingDefinition<"crtr.inspector.section-prev"> | BindingDefinition<"crtr.inspector.page-down"> | BindingDefinition<"crtr.inspector.page-up"> | BindingDefinition<"crtr.inspector.toggle-detail"> | BindingDefinition<"crtr.inspector.cancel-item"> | BindingDefinition<"crtr.inspector.open-log"> | BindingDefinition<"crtr.inspector.confirm"> | BindingDefinition<"crtr.inspector.dismiss"> | BindingDefinition<"crtr.inspector.retarget"> | BindingDefinition<"crtr.inspector.refresh"> | BindingDefinition<"crtr.inspector.quit"> | BindingDefinition<"crtr.browse.quit"> | BindingDefinition<"crtr.browse.down"> | BindingDefinition<"crtr.browse.up"> | BindingDefinition<"crtr.browse.first"> | BindingDefinition<"crtr.browse.last"> | BindingDefinition<"crtr.browse.expand-or-child"> | BindingDefinition<"crtr.browse.collapse-or-parent"> | BindingDefinition<"crtr.browse.toggle-fold"> | BindingDefinition<"crtr.browse.tab-next"> | BindingDefinition<"crtr.browse.tab-previous"> | BindingDefinition<"crtr.browse.tab.2" | "crtr.browse.tab.5" | "crtr.browse.tab.4" | "crtr.browse.tab.3" | "crtr.browse.tab.1"> | BindingDefinition<"crtr.browse.close-subtree"> | BindingDefinition<"crtr.browse.confirm-close"> | BindingDefinition<"crtr.browse.sort"> | BindingDefinition<"crtr.browse.scope"> | BindingDefinition<"crtr.browse.profile"> | BindingDefinition<"crtr.browse.residents"> | BindingDefinition<"crtr.browse.preview"> | BindingDefinition<"crtr.browse.report"> | BindingDefinition<"crtr.browse.pin"> | BindingDefinition<"crtr.browse.search"> | BindingDefinition<"crtr.browse.revive-now"> | BindingDefinition<"crtr.browse.focus"> | BindingDefinition<"crtr.browse.focus-background"> | BindingDefinition<"crtr.browse.yank-id"> | BindingDefinition<"crtr.browse.search.cancel"> | BindingDefinition<"crtr.browse.search.commit"> | BindingDefinition<"crtr.browse.search.delete"> | BindingDefinition<"crtr.browse.search.quit"> | BindingDefinition<"crtr.dashboard.down"> | BindingDefinition<"crtr.dashboard.up"> | BindingDefinition<"crtr.dashboard.first"> | BindingDefinition<"crtr.dashboard.last"> | BindingDefinition<"crtr.dashboard.expand"> | BindingDefinition<"crtr.dashboard.collapse"> | BindingDefinition<"crtr.dashboard.open"> | BindingDefinition<"crtr.dashboard.pin"> | BindingDefinition<"crtr.dashboard.rename"> | BindingDefinition<"crtr.dashboard.close"> | BindingDefinition<"crtr.dashboard.confirm-close"> | BindingDefinition<"crtr.dashboard.cancel-close"> | BindingDefinition<"crtr.dashboard.profile"> | BindingDefinition<"crtr.dashboard.input"> | BindingDefinition<"crtr.dashboard.input-cancel"> | BindingDefinition<"crtr.dashboard.input-submit"> | BindingDefinition<"crtr.dashboard.directory-next"> | BindingDefinition<"crtr.dashboard.directory-previous"> | BindingDefinition<"crtr.dashboard.help"> | BindingDefinition<"crtr.profile.menu.up"> | BindingDefinition<"crtr.profile.menu.down"> | BindingDefinition<"crtr.profile.menu.select"> | BindingDefinition<"crtr.profile.menu.accept-default"> | BindingDefinition<"crtr.profile.menu.abort"> | BindingDefinition<"crtr.profile.menu.slot.2" | "crtr.profile.menu.slot.5" | "crtr.profile.menu.slot.4" | "crtr.profile.menu.slot.7" | "crtr.profile.menu.slot.3" | "crtr.profile.menu.slot.6" | "crtr.profile.menu.slot.1" | "crtr.profile.menu.slot.8" | "crtr.profile.menu.slot.9">)[], BindingDefinition<"crtr.profile.menu.create">, BindingDefinition<"crtr.profile.menu.search-existing">, BindingDefinition<"crtr.profile.menu.use-root">, BindingDefinition<"crtr.profile.menu.set-default">, BindingDefinition<"crtr.profile.menu.add-directory">, BindingDefinition<"crtr.profile.menu.unpin">, BindingDefinition<"crtr.profile.menu.manage">, BindingDefinition<"crtr.profile.search.up">, BindingDefinition<"crtr.profile.search.down">, BindingDefinition<"crtr.profile.search.pick">, BindingDefinition<"crtr.profile.search.back">, BindingDefinition<"crtr.profile.search.delete">, BindingDefinition<"crtr.profile.search.abort">, BindingDefinition<"crtr.setup.cancel">, BindingDefinition<"crtr.setup.tab-next">, BindingDefinition<"crtr.setup.tab-previous">, BindingDefinition<"crtr.setup.open">, BindingDefinition<"crtr.setup.list-down">, BindingDefinition<"crtr.setup.list-up">, BindingDefinition<"crtr.setup.toggle">, BindingDefinition<"crtr.setup.details">, BindingDefinition<"crtr.setup.advance">, BindingDefinition<"crtr.setup.confirm.accept">, BindingDefinition<"crtr.setup.confirm.back">, BindingDefinition<"crtr.setup.keybindings.edit">, BindingDefinition<"crtr.setup.keybindings.commit-edit">, BindingDefinition<"crtr.setup.keybindings.cancel-edit">, BindingDefinition<"crtr.setup.keybindings.unbind">, BindingDefinition<"crtr.setup.keybindings.reset-row">, BindingDefinition<"crtr.setup.keybindings.reset-all">, BindingDefinition<"crtr.setup.keybindings.save">, BindingDefinition<"crtr.setup.keybindings.discard">, BindingDefinition<"crtr.setup.keybindings.page-up">, BindingDefinition<"crtr.setup.keybindings.page-down">, BindingDefinition<"crtr.setup.keybindings.filter">, BindingDefinition<"crtr.setup.keybindings.filter-delete">, BindingDefinition<"crtr.setup.keybindings.filter-clear">, BindingDefinition<"crtr.setup.cell-previous">, BindingDefinition<"crtr.setup.cell-next">, BindingDefinition<"crtr.setup.models.open">, BindingDefinition<"crtr.setup.models.scope-next">, BindingDefinition<"crtr.setup.models.commit">, BindingDefinition<"crtr.setup.models.cancel">];
|
|
13
14
|
export declare const BINDING_IDS: ReadonlySet<string>;
|
|
14
15
|
/** True for an action whose direct gesture is handled inside an attach viewer.
|
|
15
16
|
* Tmux menu selectors and root shortcuts are chrome, not pane input. */
|
|
@@ -12,12 +12,12 @@ function binding(id, group, name, description, defaults, inputKind, contexts, sa
|
|
|
12
12
|
});
|
|
13
13
|
}
|
|
14
14
|
const b = binding;
|
|
15
|
-
function menuEntry(action, name, description, defaults, contexts) {
|
|
15
|
+
function menuEntry(action, name, description, defaults, contexts, globalDefaults = []) {
|
|
16
16
|
const menuId = `crtr.tmux.menu.${action}`;
|
|
17
17
|
const globalId = `crtr.tmux.menu-global.${action}`;
|
|
18
18
|
return [
|
|
19
19
|
b(menuId, 'Global tmux', name, description, defaults, 'tmux-menu-selector', contexts, undefined, { field: 'menu', pairedId: globalId }),
|
|
20
|
-
b(globalId, 'Global tmux', name, description,
|
|
20
|
+
b(globalId, 'Global tmux', name, description, globalDefaults, 'tmux-global-action', ['tmux.root'], undefined, { field: 'global', pairedId: menuId }),
|
|
21
21
|
];
|
|
22
22
|
}
|
|
23
23
|
function attachEntry(menuId, actionId, name, description,
|
|
@@ -38,6 +38,7 @@ const SETUP_TAB_CONTEXTS = ['setup.login', 'setup.list', 'setup.keybindings', 's
|
|
|
38
38
|
export const BINDING_CATALOG = Object.freeze([
|
|
39
39
|
b('crtr.tmux.menu.open', 'Global tmux', 'Open crouter menu', 'Open the crouter action menu.', ['alt+c'], 'host-global', ['tmux.root']),
|
|
40
40
|
b('crtr.tmux.menu.attach', 'Global tmux', 'Attach actions', 'Open the attach-viewer action submenu.', ['a'], 'tmux-menu-selector', ['tmux.menu']),
|
|
41
|
+
...menuEntry('dashboard', 'Dashboard', 'Show the live root conversations in this pane: which need you, which are running, which are idle.', ['w'], ['tmux.menu'], ['alt+shift+d']),
|
|
41
42
|
...menuEntry('promote', 'Promote to orchestrator', 'Promote the focused node to orchestrator — it holds a roadmap and delegates.', ['o'], ['tmux.menu']),
|
|
42
43
|
...menuEntry('demote-mode', 'Demote to base node', 'Demote the focused orchestrator back to a base node — hands-on again in its own window, no roadmap to drive.', ['shift+o'], ['tmux.menu']),
|
|
43
44
|
...menuEntry('resume', 'Find node', 'Open the canvas navigator and go to the chosen node.', ['/'], ['tmux.menu']),
|
|
@@ -129,6 +130,7 @@ export const BINDING_CATALOG = Object.freeze([
|
|
|
129
130
|
b('crtr.inspector.refresh', 'Inspector', 'Refresh', 'Refresh the Inspector now.', ['g', 'r'], 'terminal', ['inspector']),
|
|
130
131
|
b('crtr.inspector.quit', 'Inspector', 'Quit', 'Leave the Inspector.', ['q'], 'terminal', ['inspector'], 'leave-screen'),
|
|
131
132
|
...browseBindings(),
|
|
133
|
+
...dashboardBindings(),
|
|
132
134
|
...profileBindings(),
|
|
133
135
|
...setupBindings(),
|
|
134
136
|
]);
|
|
@@ -166,6 +168,33 @@ function browseBindings() {
|
|
|
166
168
|
b('crtr.browse.search.quit', 'Browse and pickers', 'Quit browse', 'Leave canvas browse from search.', ['ctrl+c'], 'terminal', ['browse.search'], 'leave-screen'),
|
|
167
169
|
];
|
|
168
170
|
}
|
|
171
|
+
function dashboardBindings() {
|
|
172
|
+
const ctx = 'dashboard';
|
|
173
|
+
const confirm = 'dashboard.confirm';
|
|
174
|
+
const input = 'dashboard.input';
|
|
175
|
+
const g = 'Dashboard';
|
|
176
|
+
return [
|
|
177
|
+
b('crtr.dashboard.down', g, 'Move down', 'Move to the next row.', ['j', 'down'], 'terminal', [ctx]),
|
|
178
|
+
b('crtr.dashboard.up', g, 'Move up', 'Move to the previous row.', ['k', 'up'], 'terminal', [ctx]),
|
|
179
|
+
b('crtr.dashboard.first', g, 'First row', 'Move to the first row.', ['g'], 'terminal', [ctx]),
|
|
180
|
+
b('crtr.dashboard.last', g, 'Last row', 'Move to the last row.', ['shift+g'], 'terminal', [ctx]),
|
|
181
|
+
b('crtr.dashboard.expand', g, 'Expand', 'Show the selected conversation’s children.', ['l', 'right'], 'terminal', [ctx]),
|
|
182
|
+
b('crtr.dashboard.collapse', g, 'Collapse', 'Hide the selected conversation’s children.', ['h', 'left'], 'terminal', [ctx]),
|
|
183
|
+
b('crtr.dashboard.open', g, 'Open', 'Open the selected conversation in this pane.', ['enter'], 'terminal', [ctx]),
|
|
184
|
+
b('crtr.dashboard.pin', g, 'Pin', 'Star or unstar the selected conversation.', ['p'], 'terminal', [ctx]),
|
|
185
|
+
b('crtr.dashboard.rename', g, 'Rename', 'Rename the selected conversation.', ['shift+r'], 'terminal', [ctx]),
|
|
186
|
+
b('crtr.dashboard.close', g, 'Close', 'Finish the selected conversation and remove its row.', ['x'], 'terminal', [ctx]),
|
|
187
|
+
b('crtr.dashboard.confirm-close', g, 'Confirm close', 'Close a conversation that is running.', ['y'], 'terminal', [confirm]),
|
|
188
|
+
b('crtr.dashboard.cancel-close', g, 'Cancel close', 'Keep the running conversation.', ['n', 'escape'], 'terminal', [confirm]),
|
|
189
|
+
b('crtr.dashboard.profile', g, 'Toggle profile', 'Switch between this profile and all profiles.', ['shift+p'], 'terminal', [ctx]),
|
|
190
|
+
b('crtr.dashboard.input', g, 'New conversation', 'Focus the new-conversation input.', ['n'], 'terminal', [ctx]),
|
|
191
|
+
b('crtr.dashboard.input-cancel', g, 'Leave input', 'Leave the input without clearing it.', ['escape'], 'terminal', [input]),
|
|
192
|
+
b('crtr.dashboard.input-submit', g, 'Start conversation', 'Start a root conversation from the input text.', ['enter'], 'terminal', [input]),
|
|
193
|
+
b('crtr.dashboard.directory-next', g, 'Next directory', 'Select the next directory for the new conversation.', ['tab'], 'terminal', [input]),
|
|
194
|
+
b('crtr.dashboard.directory-previous', g, 'Previous directory', 'Select the previous directory for the new conversation.', ['shift+tab'], 'terminal', [input]),
|
|
195
|
+
b('crtr.dashboard.help', g, 'Help', 'Show the dashboard keys.', ['?'], 'terminal', [ctx]),
|
|
196
|
+
];
|
|
197
|
+
}
|
|
169
198
|
function profileBindings() {
|
|
170
199
|
const menu = 'profile.menu';
|
|
171
200
|
const search = 'profile.search';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@north-light/api",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.505",
|
|
4
4
|
"description": "Typed crtrd /v1 API contract — DTOs, route builders, the error contract, the CrtrClient, and the command-plugin manifest format. Zero runtime dependencies.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/api/index.js",
|