@lensmcp/protocol-types 1.25.39 → 1.25.41
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/lib/team-design.d.ts +76 -1
- package/lib/team.d.ts +335 -1
- package/lib/workspace-actions.d.ts +7 -0
- package/package.json +1 -1
package/lib/team-design.d.ts
CHANGED
|
@@ -90,7 +90,12 @@ export interface TeamDesignHandOff {
|
|
|
90
90
|
description: string;
|
|
91
91
|
};
|
|
92
92
|
}
|
|
93
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Keep the flow the repository has, or tune LensMCP's (planning/team/08 TH-D2): a design keeps every default step —
|
|
95
|
+
* build → test → review, a fix → review, changes back to whoever did the work, one QA run per goal, docs after QA — and
|
|
96
|
+
* `handOffs` are only what it ADDS to them (a path-triggered specialist review, an announcement when a goal is done).
|
|
97
|
+
* Accepted, they are written as `flow.json` `{ "extends": "default", "handOffs": [...] }`, so later defaults reach it.
|
|
98
|
+
*/
|
|
94
99
|
export type TeamDesignFlow = {
|
|
95
100
|
keep: true;
|
|
96
101
|
why?: string;
|
|
@@ -194,6 +199,44 @@ export interface DashTeamDesignAccept {
|
|
|
194
199
|
/** Overwrite files the repository already has (they are listed to the person first). */
|
|
195
200
|
force: boolean;
|
|
196
201
|
}
|
|
202
|
+
/**
|
|
203
|
+
* Roles left taking the same work once a design is accepted as chosen (planning/team/08 S4): a default role the accept
|
|
204
|
+
* keeps as it is — `builder`, `bug-fixer` — takes kinds the design's own roles take, on paths they own (a role that owns
|
|
205
|
+
* nothing takes them anywhere). A task of those kinds with no role goes to whichever owns most of its paths, else the
|
|
206
|
+
* first: the default competes with the roles meant to replace it. `canOff`: the page may offer to switch it off — never
|
|
207
|
+
* for a role whose flow step LensMCP keeps (tester, reviewer, qa, docs).
|
|
208
|
+
*/
|
|
209
|
+
export interface DashTeamDesignOverlap {
|
|
210
|
+
/** The default role kept as it is. */
|
|
211
|
+
role: string;
|
|
212
|
+
/** The kinds it takes that the others take too. */
|
|
213
|
+
kinds: DashTeamKind[];
|
|
214
|
+
/** The roles of the design (or the repository) taking them on overlapping paths. */
|
|
215
|
+
with: string[];
|
|
216
|
+
canOff: boolean;
|
|
217
|
+
/** Its tasks still open, claimed or in recovery on the board — to re-route before it is switched off (at most 20). */
|
|
218
|
+
open: Array<{
|
|
219
|
+
id: string;
|
|
220
|
+
title: string;
|
|
221
|
+
kind?: DashTeamKind;
|
|
222
|
+
state: string;
|
|
223
|
+
}>;
|
|
224
|
+
/** Its open tasks past the ones listed. */
|
|
225
|
+
moreOpen?: number;
|
|
226
|
+
/** In words, for the person. */
|
|
227
|
+
text: string;
|
|
228
|
+
}
|
|
229
|
+
/** `POST /api/team/design/preview`: the files accepting would write, what it would not and why, and the roles it would leave overlapping. */
|
|
230
|
+
export interface DashTeamDesignPreview {
|
|
231
|
+
files: Array<{
|
|
232
|
+
path: string;
|
|
233
|
+
exists: boolean;
|
|
234
|
+
action: 'write' | 'overwrite' | 'keep';
|
|
235
|
+
same?: true;
|
|
236
|
+
}>;
|
|
237
|
+
problems: string[];
|
|
238
|
+
overlaps?: DashTeamDesignOverlap[];
|
|
239
|
+
}
|
|
197
240
|
/** What accepting wrote, and what it kept because a file was already there and `force` was not given. */
|
|
198
241
|
export interface DashTeamDesignAccepted {
|
|
199
242
|
written: string[];
|
|
@@ -225,4 +268,36 @@ export interface DashTeamDesignState {
|
|
|
225
268
|
/** Newest first, at most 20, without their designs. */
|
|
226
269
|
runs: DashTeamDesignRun[];
|
|
227
270
|
fits?: DashTeamDesignFit;
|
|
271
|
+
/**
|
|
272
|
+
* The team the repository runs now: its own (`.lensmcp/team/` — team-init, the Roles tab, an accepted design, by hand)
|
|
273
|
+
* or only LensMCP's defaults; how many roles, and how many of them name their own model, effort, paths, rules or cap.
|
|
274
|
+
* A repository with its own team is offered a design, never asked for one.
|
|
275
|
+
*/
|
|
276
|
+
team?: {
|
|
277
|
+
own: boolean;
|
|
278
|
+
roles: number;
|
|
279
|
+
tuned: number;
|
|
280
|
+
};
|
|
281
|
+
/**
|
|
282
|
+
* What a design started now may spend and research (planning/team/08 TH-D1): Settings › Features «Team design
|
|
283
|
+
* ceiling» ($50 unless set), and the tool calls that buys — its own, apart from the click and agent allowances.
|
|
284
|
+
*/
|
|
285
|
+
ceiling?: {
|
|
286
|
+
usd: number;
|
|
287
|
+
toolCalls: number;
|
|
288
|
+
source: 'workspace' | 'default';
|
|
289
|
+
/**
|
|
290
|
+
* The day's design allowance (Settings › Features «Team designs per day», $100 unless set; UTC): what today's
|
|
291
|
+
* designs spent, what is left — a design started now runs on the smaller of its ceiling and what is left, with the
|
|
292
|
+
* tool calls that buys (`runUsd`, `runToolCalls`).
|
|
293
|
+
*/
|
|
294
|
+
day?: {
|
|
295
|
+
usd: number;
|
|
296
|
+
spent: number;
|
|
297
|
+
left: number;
|
|
298
|
+
source: 'workspace' | 'default';
|
|
299
|
+
};
|
|
300
|
+
runUsd?: number;
|
|
301
|
+
runToolCalls?: number;
|
|
302
|
+
};
|
|
228
303
|
}
|
package/lib/team.d.ts
CHANGED
|
@@ -77,6 +77,21 @@ export interface DashTeamTask {
|
|
|
77
77
|
};
|
|
78
78
|
/** What its holder's tool calls did in its newest claim, as the hooks saw them (the drawer). */
|
|
79
79
|
work?: DashTeamTaskWork;
|
|
80
|
+
/** The paths its holder reserved to edit (agent_task_reserve) — held while it is claimed. */
|
|
81
|
+
reserved?: string[];
|
|
82
|
+
/** A goal's word for the roles that work under it (agent_goal_team, the drawer). */
|
|
83
|
+
team?: DashTeamGoalRole[];
|
|
84
|
+
/** The open blocking question (`q-…`) it waits for (agent_ask): no one claims it until it is answered. */
|
|
85
|
+
waitingOn?: string;
|
|
86
|
+
}
|
|
87
|
+
/** A goal's word for one role: its rules for this goal (after the role's own), what its agents launch with, the paths it reviews too. */
|
|
88
|
+
export interface DashTeamGoalRole {
|
|
89
|
+
role: string;
|
|
90
|
+
rules: string;
|
|
91
|
+
model?: string;
|
|
92
|
+
effort?: string;
|
|
93
|
+
client?: 'codex' | 'claude';
|
|
94
|
+
reviews?: string[];
|
|
80
95
|
}
|
|
81
96
|
/** One claim's work, from its holder's hooks: the files edited, commits, the checks and the whole suites run, workspace actions. */
|
|
82
97
|
export interface DashTeamTaskWork {
|
|
@@ -96,7 +111,7 @@ export interface DashTeamTaskWork {
|
|
|
96
111
|
* change completed with no commit or no check, a QA pass naming no run, a claim with no line in ten minutes, a holder
|
|
97
112
|
* whose process ended. Hints, never verdicts.
|
|
98
113
|
*/
|
|
99
|
-
export type DashTeamConductKind = 'checker-edited' | 'whole-suite' | 'outside-paths' | 'no-commit' | 'unchecked' | 'qa-unrun' | 'quiet-claim' | 'host-gone';
|
|
114
|
+
export type DashTeamConductKind = 'checker-edited' | 'whole-suite' | 'outside-paths' | 'no-commit' | 'unchecked' | 'qa-unrun' | 'quiet-claim' | 'host-gone' | 'edited-reserved';
|
|
100
115
|
export interface DashTeamFlag {
|
|
101
116
|
kind: DashTeamConductKind;
|
|
102
117
|
severity: 'info' | 'warn';
|
|
@@ -246,6 +261,18 @@ export interface DashTeamBoard {
|
|
|
246
261
|
flags?: DashTeamFlag[];
|
|
247
262
|
/** More sessions or tasks than the board carries. */
|
|
248
263
|
truncated: boolean;
|
|
264
|
+
/**
|
|
265
|
+
* Set on a worktree's board: its tasks (and their flags, and the roles' task counts) are that worktree's only — the
|
|
266
|
+
* ones it is to do, claimed or completed there, or made there. Absent on the main checkout's board, which holds every
|
|
267
|
+
* worktree's tasks. The agents, worktrees and notes are the whole team's either way.
|
|
268
|
+
*/
|
|
269
|
+
scope?: DashTeamBoardScope;
|
|
270
|
+
}
|
|
271
|
+
export interface DashTeamBoardScope {
|
|
272
|
+
worktreeId: string;
|
|
273
|
+
/** The worktree's branch and folder, when it has reported them. */
|
|
274
|
+
branch?: string;
|
|
275
|
+
root?: string;
|
|
249
276
|
}
|
|
250
277
|
export type DashTeamBoardAnswer = DashTeamBoard | {
|
|
251
278
|
same: true;
|
|
@@ -259,6 +286,8 @@ export interface DashTeamTaskWhole {
|
|
|
259
286
|
/** More tasks under it than the answer carries. */
|
|
260
287
|
treeTruncated?: boolean;
|
|
261
288
|
blockers: DashTeamTaskRef[];
|
|
289
|
+
/** Its agents' questions, oldest first (planning/team/09) — absent when it has none. */
|
|
290
|
+
questions?: DashTeamQuestion[];
|
|
262
291
|
}
|
|
263
292
|
/** `POST /api/team/task` — a task from the person at the machine. `requestId`: one per submit; a retry sends it again. */
|
|
264
293
|
export interface DashTeamNewTask {
|
|
@@ -630,3 +659,308 @@ export interface DashTeamLaunchesAnswer {
|
|
|
630
659
|
running: number;
|
|
631
660
|
launches: DashTeamLaunch[];
|
|
632
661
|
}
|
|
662
|
+
/** `progress.json` beside an archive while it is written, and after: what the writer is doing, or how it ended. */
|
|
663
|
+
export interface DashTeamArchiveProgress {
|
|
664
|
+
state: 'writing' | 'done' | 'failed';
|
|
665
|
+
startedAt: number;
|
|
666
|
+
/** What it is on now (`events`, `AI calls`…), or the last step it reached. */
|
|
667
|
+
step: string;
|
|
668
|
+
finishedAt?: number;
|
|
669
|
+
/** Why it failed. */
|
|
670
|
+
error?: string;
|
|
671
|
+
/** The writer's process: a `writing` archive whose process is gone failed. */
|
|
672
|
+
pid: number;
|
|
673
|
+
goalId?: string;
|
|
674
|
+
}
|
|
675
|
+
/**
|
|
676
|
+
* `summary.json` — inside the zip and beside it: a small, stable record to compare goals without unzipping them.
|
|
677
|
+
* Versioned: a field changes meaning only with a new `schema`.
|
|
678
|
+
*/
|
|
679
|
+
export interface DashTeamArchiveSummary {
|
|
680
|
+
schema: 1;
|
|
681
|
+
/** The workspace's key: the archive's folder is under it. */
|
|
682
|
+
workspace: string;
|
|
683
|
+
goal: {
|
|
684
|
+
id: string;
|
|
685
|
+
title: string;
|
|
686
|
+
kind?: string;
|
|
687
|
+
state: string;
|
|
688
|
+
outcome?: string;
|
|
689
|
+
createdAt: number;
|
|
690
|
+
completedAt?: number;
|
|
691
|
+
};
|
|
692
|
+
/** The events' window: from 5 minutes before the goal was created to a minute after it completed (or was archived). */
|
|
693
|
+
window: {
|
|
694
|
+
from: number;
|
|
695
|
+
to: number;
|
|
696
|
+
};
|
|
697
|
+
/** The checkout the goal worked in: its worktree's instance name, else `main`. */
|
|
698
|
+
checkout: {
|
|
699
|
+
name: string;
|
|
700
|
+
branch?: string;
|
|
701
|
+
root?: string;
|
|
702
|
+
worktree: boolean;
|
|
703
|
+
};
|
|
704
|
+
tasks: {
|
|
705
|
+
total: number;
|
|
706
|
+
byKind: Record<string, number>;
|
|
707
|
+
byOutcome: Record<string, number>;
|
|
708
|
+
byState: Record<string, number>;
|
|
709
|
+
};
|
|
710
|
+
/** Agents with a session, and spawned agents that never joined. */
|
|
711
|
+
agents: {
|
|
712
|
+
joined: number;
|
|
713
|
+
unjoined: number;
|
|
714
|
+
};
|
|
715
|
+
durations: {
|
|
716
|
+
elapsedMs: number;
|
|
717
|
+
goalOpenMs: number;
|
|
718
|
+
heldMs: number;
|
|
719
|
+
idleMs: number;
|
|
720
|
+
waitMedianMs?: number;
|
|
721
|
+
waitMaxMs?: number;
|
|
722
|
+
};
|
|
723
|
+
performance: {
|
|
724
|
+
verdict: 'pass' | 'fail' | 'unmeasured';
|
|
725
|
+
events: number;
|
|
726
|
+
breaches: number;
|
|
727
|
+
breachesByKind: Record<string, number>;
|
|
728
|
+
waived: number;
|
|
729
|
+
routes: number;
|
|
730
|
+
statements: number;
|
|
731
|
+
pages: number;
|
|
732
|
+
limits: Record<string, number>;
|
|
733
|
+
};
|
|
734
|
+
/** Each QA run's measured verdict (the QA gate's `performance`), and its outcome. */
|
|
735
|
+
qaRuns: Array<{
|
|
736
|
+
taskId: string;
|
|
737
|
+
title: string;
|
|
738
|
+
state: string;
|
|
739
|
+
outcome?: string;
|
|
740
|
+
verdict?: 'pass' | 'fail' | 'unmeasured';
|
|
741
|
+
breaches?: number;
|
|
742
|
+
checkout?: string;
|
|
743
|
+
}>;
|
|
744
|
+
events: {
|
|
745
|
+
/** Where they were read: the event history, the worktree's bus files (no row in the history), or nowhere. */
|
|
746
|
+
source: 'history' | 'bus-files' | 'none';
|
|
747
|
+
written: number;
|
|
748
|
+
bytes: number;
|
|
749
|
+
parts: number;
|
|
750
|
+
/** Read in the window, whether written or not (past the cut they still feed the performance and flows). */
|
|
751
|
+
read: number;
|
|
752
|
+
cut: boolean;
|
|
753
|
+
note?: string;
|
|
754
|
+
};
|
|
755
|
+
flows: {
|
|
756
|
+
count: number;
|
|
757
|
+
cut: boolean;
|
|
758
|
+
};
|
|
759
|
+
aiCalls: {
|
|
760
|
+
count: number;
|
|
761
|
+
bytes: number;
|
|
762
|
+
cut: boolean;
|
|
763
|
+
};
|
|
764
|
+
testRuns: {
|
|
765
|
+
count: number;
|
|
766
|
+
passed: number;
|
|
767
|
+
failed: number;
|
|
768
|
+
other: number;
|
|
769
|
+
byAction: Record<string, number>;
|
|
770
|
+
};
|
|
771
|
+
lensmcp: string;
|
|
772
|
+
writtenAt: number;
|
|
773
|
+
}
|
|
774
|
+
/** `GET|POST /api/team/archive?id=` and `team_archive` — a task's archive: where it is, how far, what it holds. */
|
|
775
|
+
export interface DashTeamArchive {
|
|
776
|
+
taskId: string;
|
|
777
|
+
/** `~/.lensmcp/team-archive/<workspace>/<goal-slug>-<id8>/` */
|
|
778
|
+
folder: string;
|
|
779
|
+
/** The zip in it, once written. */
|
|
780
|
+
zip: string;
|
|
781
|
+
/** `none`: never written here. */
|
|
782
|
+
state: 'none' | 'writing' | 'done' | 'failed';
|
|
783
|
+
/** A POST (or `team_archive` without `check`) started this one. */
|
|
784
|
+
started?: boolean;
|
|
785
|
+
progress?: DashTeamArchiveProgress;
|
|
786
|
+
/** Once done. */
|
|
787
|
+
summary?: DashTeamArchiveSummary;
|
|
788
|
+
/** The zip's size, once done. */
|
|
789
|
+
bytes?: number;
|
|
790
|
+
next?: string;
|
|
791
|
+
}
|
|
792
|
+
/** A team health check's verdict: within its expected range, worth a look, against how the team must work, or not measurable here. */
|
|
793
|
+
export type DashTeamHealthStatus = 'ok' | 'warn' | 'bad' | 'n/a';
|
|
794
|
+
/** One task or agent a check names — what to open. */
|
|
795
|
+
export interface DashTeamHealthExample {
|
|
796
|
+
text: string;
|
|
797
|
+
taskId?: string;
|
|
798
|
+
sessionId?: string;
|
|
799
|
+
}
|
|
800
|
+
/**
|
|
801
|
+
* One measure of how the team works against how it must (planning/team/08-team-health-and-grounded-design.md), with
|
|
802
|
+
* the range it is held to — a hint to look, never a verdict on an agent.
|
|
803
|
+
*/
|
|
804
|
+
export interface DashTeamHealthCheck {
|
|
805
|
+
/** `flow.rework`, `roles.switches`, `proof.fast-reviews`… */
|
|
806
|
+
id: string;
|
|
807
|
+
group: 'flow' | 'roles' | 'proof' | 'agents';
|
|
808
|
+
title: string;
|
|
809
|
+
status: DashTeamHealthStatus;
|
|
810
|
+
/** The measure: a count, or the part of `of`. */
|
|
811
|
+
value: number;
|
|
812
|
+
of?: number;
|
|
813
|
+
/** What it should be, in words: «none», «at most 3 per change», «under 10 % of reviews». */
|
|
814
|
+
expected: string;
|
|
815
|
+
/** What was measured and what it means, in one or two sentences. */
|
|
816
|
+
detail: string;
|
|
817
|
+
/** At most five, worst first. */
|
|
818
|
+
examples: DashTeamHealthExample[];
|
|
819
|
+
}
|
|
820
|
+
/** How one role worked in the window — what the design reads as «how we work». */
|
|
821
|
+
export interface DashTeamHealthRole {
|
|
822
|
+
role: string;
|
|
823
|
+
/** The sessions that held the role in the window, by client (claude, codex, mcp…). */
|
|
824
|
+
agents: Record<string, number>;
|
|
825
|
+
/** Its agents within their lease now. */
|
|
826
|
+
live: number;
|
|
827
|
+
claimed: number;
|
|
828
|
+
completed: number;
|
|
829
|
+
/** The median minutes from claim to completion of its tasks. */
|
|
830
|
+
medianMinutes?: number;
|
|
831
|
+
/** Work sent back to its owner: a failed test, a changes-requested review. */
|
|
832
|
+
reworked: number;
|
|
833
|
+
/** Its tasks open, claimed or in recovery now. */
|
|
834
|
+
open: number;
|
|
835
|
+
}
|
|
836
|
+
/** One kind of task in the window. */
|
|
837
|
+
export interface DashTeamHealthKind {
|
|
838
|
+
kind: string;
|
|
839
|
+
created: number;
|
|
840
|
+
/** Of `created`, the ones LensMCP made from the flow. */
|
|
841
|
+
handOffs: number;
|
|
842
|
+
completed: number;
|
|
843
|
+
cancelled: number;
|
|
844
|
+
open: number;
|
|
845
|
+
outcomes: Record<string, number>;
|
|
846
|
+
}
|
|
847
|
+
/**
|
|
848
|
+
* `GET /api/team/health`, `team_health`, `lensmcp agent health` — how the team works, measured from its store: the
|
|
849
|
+
* window's tasks (a worktree's own, as its board's; the main checkout's all), its agents, their joins and messages.
|
|
850
|
+
*/
|
|
851
|
+
export interface DashTeamHealth {
|
|
852
|
+
window: {
|
|
853
|
+
from: number;
|
|
854
|
+
to: number;
|
|
855
|
+
};
|
|
856
|
+
scope?: DashTeamBoardScope;
|
|
857
|
+
/** The worst check's. */
|
|
858
|
+
status: DashTeamHealthStatus;
|
|
859
|
+
totals: {
|
|
860
|
+
tasks: number;
|
|
861
|
+
handOffs: number;
|
|
862
|
+
/** Builds and bug fixes completed. */
|
|
863
|
+
changes: number;
|
|
864
|
+
goals: number;
|
|
865
|
+
sessions: number;
|
|
866
|
+
/** Sessions that claimed, logged, created or wrote anything. */
|
|
867
|
+
actingSessions: number;
|
|
868
|
+
messages: number;
|
|
869
|
+
};
|
|
870
|
+
checks: DashTeamHealthCheck[];
|
|
871
|
+
roles: DashTeamHealthRole[];
|
|
872
|
+
kinds: DashTeamHealthKind[];
|
|
873
|
+
/** The flow's steps the checks were held to: `build→test`, `test→review`, `review→qa`… */
|
|
874
|
+
flow: string[];
|
|
875
|
+
/** More tasks in the window than one report reads. */
|
|
876
|
+
truncated?: {
|
|
877
|
+
tasks?: number;
|
|
878
|
+
joins?: number;
|
|
879
|
+
messages?: number;
|
|
880
|
+
};
|
|
881
|
+
observedAt: number;
|
|
882
|
+
}
|
|
883
|
+
/**
|
|
884
|
+
* Where an agent's question is (planning/team/09): with its manager, with the person (escalated, or no manager to take
|
|
885
|
+
* it), answered, or withdrawn (by its asker, or with its task).
|
|
886
|
+
*/
|
|
887
|
+
export type DashTeamQuestionState = 'manager' | 'person' | 'answered' | 'withdrawn';
|
|
888
|
+
export interface DashTeamQuestionOption {
|
|
889
|
+
label: string;
|
|
890
|
+
detail?: string;
|
|
891
|
+
}
|
|
892
|
+
/** Who answered: the manager it went to, the person (Team › Inbox, the CLI), or the person's delegate — their inbox session. */
|
|
893
|
+
export interface DashTeamQuestionAnswer {
|
|
894
|
+
text: string;
|
|
895
|
+
/** The option picked, 1-based. */
|
|
896
|
+
option?: number;
|
|
897
|
+
/** A session id, or `user` for the person and their delegate. */
|
|
898
|
+
by: string;
|
|
899
|
+
byName?: string;
|
|
900
|
+
as: 'manager' | 'person' | 'delegate';
|
|
901
|
+
at: number;
|
|
902
|
+
}
|
|
903
|
+
/**
|
|
904
|
+
* One agent's question (agent_ask, the store's `CoordinationQuestion`): its asker, the task and goal it is about, the
|
|
905
|
+
* choices it gives with its own pick, what it found — and where it is now.
|
|
906
|
+
*/
|
|
907
|
+
export interface DashTeamQuestion {
|
|
908
|
+
/** `q-` and 12 hex characters — unique across the machine's repositories. */
|
|
909
|
+
id: string;
|
|
910
|
+
/** The asker's session id. */
|
|
911
|
+
asker: string;
|
|
912
|
+
askerName?: string;
|
|
913
|
+
askerRole?: string;
|
|
914
|
+
/** The checkout it was asked in. */
|
|
915
|
+
worktreeId: string;
|
|
916
|
+
taskId?: string;
|
|
917
|
+
taskTitle?: string;
|
|
918
|
+
goalId?: string;
|
|
919
|
+
question: string;
|
|
920
|
+
/** 2–4 choices, or none. */
|
|
921
|
+
options?: DashTeamQuestionOption[];
|
|
922
|
+
/** The asker's pick: the number (1…) of one of `options`. */
|
|
923
|
+
recommended?: number;
|
|
924
|
+
/** What the asker found and tried. */
|
|
925
|
+
context?: string;
|
|
926
|
+
links?: DashTeamLink[];
|
|
927
|
+
/** Its task waits for the answer. */
|
|
928
|
+
blocking: boolean;
|
|
929
|
+
state: DashTeamQuestionState;
|
|
930
|
+
/** The manager it is with, while `manager`. */
|
|
931
|
+
to?: string;
|
|
932
|
+
toName?: string;
|
|
933
|
+
/** Why it went to the person — `by` its manager, or `lensmcp` (no manager to take it, its manager gone or silent). */
|
|
934
|
+
escalation?: {
|
|
935
|
+
at: number;
|
|
936
|
+
by: string;
|
|
937
|
+
why: string;
|
|
938
|
+
};
|
|
939
|
+
answer?: DashTeamQuestionAnswer;
|
|
940
|
+
withdrawn?: {
|
|
941
|
+
at: number;
|
|
942
|
+
why: string;
|
|
943
|
+
};
|
|
944
|
+
createdAt: number;
|
|
945
|
+
updatedAt: number;
|
|
946
|
+
}
|
|
947
|
+
/** `GET /api/team/questions[?state=open|answered|all&all=1&limit=]` — newest first, scoped as the checkout's board. */
|
|
948
|
+
export interface DashTeamQuestionsAnswer {
|
|
949
|
+
questions: DashTeamQuestion[];
|
|
950
|
+
/** The open questions in scope, whatever `state` asked: with the person, with a manager. */
|
|
951
|
+
counts: {
|
|
952
|
+
person: number;
|
|
953
|
+
manager: number;
|
|
954
|
+
};
|
|
955
|
+
/** Set on a worktree's page, unless `all=1`: its own questions only. */
|
|
956
|
+
scope?: DashTeamBoardScope;
|
|
957
|
+
observedAt: number;
|
|
958
|
+
}
|
|
959
|
+
/** `POST /api/team/questions/<id>/answer` — the person answers: an option, their own words, or both. Answered: `{ question }`. */
|
|
960
|
+
export interface DashTeamAnswerQuestion {
|
|
961
|
+
answer?: string;
|
|
962
|
+
/** 1-based, of the question's options. */
|
|
963
|
+
option?: number;
|
|
964
|
+
/** One per submit; a retry sends it again. */
|
|
965
|
+
requestId?: string;
|
|
966
|
+
}
|
|
@@ -65,10 +65,17 @@ export interface WorkspaceActionStep {
|
|
|
65
65
|
omittedData?: number;
|
|
66
66
|
branch?: string;
|
|
67
67
|
};
|
|
68
|
+
/** `env`: a restart of a worktree instance's service — which instance variables its new tree was given, read again
|
|
69
|
+
* from the instance's files: a print of them all, the print before, and the names that changed. Never a value. */
|
|
68
70
|
service?: {
|
|
69
71
|
name: string;
|
|
70
72
|
state: string;
|
|
71
73
|
ready: boolean;
|
|
74
|
+
env?: {
|
|
75
|
+
fingerprint: string;
|
|
76
|
+
fromFingerprint: string;
|
|
77
|
+
changed: string[];
|
|
78
|
+
};
|
|
72
79
|
};
|
|
73
80
|
evidence: {
|
|
74
81
|
log: string;
|