@ordewell/core 0.7.2 → 0.8.1
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 +9 -6
- package/dist/{IFileSystem-B5asBRDa.d.mts → IFileSystem-D96mT-bm.d.ts} +1 -1
- package/dist/{IFileSystem-CbCmUDBn.d.ts → IFileSystem-DXJCRw5x.d.mts} +1 -1
- package/dist/IRunner-CGCihlGQ.d.ts +1165 -0
- package/dist/IRunner-XVUddYVX.d.mts +1165 -0
- package/dist/{ModeResolver-DtfhWeVL.d.ts → ModeResolver-DE-o2lRF.d.mts} +2 -2
- package/dist/{ModeResolver-DcqAho4y.d.mts → ModeResolver-EWlpmVAy.d.ts} +2 -2
- package/dist/Task-1Q19y7sZ.d.mts +1122 -0
- package/dist/Task-1Q19y7sZ.d.ts +1122 -0
- package/dist/{chunk-OUIQWNS3.mjs → chunk-2M4X3VB7.mjs} +15 -5
- package/dist/chunk-2M4X3VB7.mjs.map +1 -0
- package/dist/{chunk-AJ5KDO6V.mjs → chunk-BLLIBCCS.mjs} +117 -198
- package/dist/chunk-BLLIBCCS.mjs.map +1 -0
- package/dist/{chunk-MZYZS7B3.mjs → chunk-UUU46PVQ.mjs} +68 -8
- package/dist/chunk-UUU46PVQ.mjs.map +1 -0
- package/dist/index.d.mts +517 -714
- package/dist/index.d.ts +517 -714
- package/dist/index.js +5013 -6371
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3276 -4590
- package/dist/index.mjs.map +1 -1
- package/dist/order-labels.d.mts +1 -4
- package/dist/order-labels.d.ts +1 -4
- package/dist/{parsing-COFGUEWx.d.ts → parsing-CZdp2p_n.d.ts} +5 -3
- package/dist/{parsing-D0uo-Icd.d.mts → parsing-GgUJoYKs.d.mts} +5 -3
- package/dist/parsing.d.mts +3 -6
- package/dist/parsing.d.ts +3 -6
- package/dist/parsing.js +25 -4
- package/dist/parsing.js.map +1 -1
- package/dist/parsing.mjs +2 -2
- package/dist/{plan-utils-CdW3mxt5.d.mts → plan-utils-BMayhGBj.d.mts} +89 -12
- package/dist/{plan-utils-D4Z8UyLL.d.ts → plan-utils-Cv48fe7r.d.ts} +89 -12
- package/dist/plan-utils.d.mts +4 -4
- package/dist/plan-utils.d.ts +4 -4
- package/dist/plan-utils.js +120 -65
- package/dist/plan-utils.js.map +1 -1
- package/dist/plan-utils.mjs +7 -3
- package/dist/testing.d.mts +12 -24
- package/dist/testing.d.ts +12 -24
- package/dist/testing.js +24 -28
- package/dist/testing.js.map +1 -1
- package/dist/testing.mjs +17 -27
- package/dist/testing.mjs.map +1 -1
- package/package.json +1 -1
- package/skills/tdd/SKILL.md +19 -0
- package/dist/Task-BpzIbunq.d.mts +0 -2599
- package/dist/Task-BpzIbunq.d.ts +0 -2599
- package/dist/chunk-AJ5KDO6V.mjs.map +0 -1
- package/dist/chunk-MZYZS7B3.mjs.map +0 -1
- package/dist/chunk-OUIQWNS3.mjs.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { R as RunnerModeInfo } from './ModeResolver-
|
|
1
|
+
import { ag as TaskSkillSnapshot, af as TaskSkillNotice, a8 as SubagentOutcome, ao as UsageRecord, W as RunnerId, c as DiscoveredModel, a9 as Task, L as LegacyPlanState, C as ConversationMessage, a0 as SkillLoadNotice, Q as QueuedMessage, ap as UsageTotals, av as Verdict, aa as TaskIsolation, a as AwaitingReason, g as IsolationHandoff, n as IsolationMergeResult, T as ResearchStep, z as PlanState, ah as TaskSnapshot, U as ResearchStepOutcome, O as ResearchLogEntry, G as PlannerUsage, ab as TaskIsolationState } from './Task-1Q19y7sZ.mjs';
|
|
2
|
+
import { R as RunnerModeInfo } from './ModeResolver-DE-o2lRF.mjs';
|
|
3
|
+
import { a5 as StructuredTurnEnd, h as ApprovalDecision, a4 as StructuredEvent, Y as QueuedTaskMessage, i as ApprovalKind, n as ApprovalSource } from './IRunner-XVUddYVX.mjs';
|
|
3
4
|
import './order-labels.mjs';
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -12,8 +13,17 @@ import './order-labels.mjs';
|
|
|
12
13
|
* without a format version.
|
|
13
14
|
*/
|
|
14
15
|
type TaskLogEvent =
|
|
15
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* The task skills this attempt's prompt carried, as read at its spawn
|
|
18
|
+
* (ADR-0024): first in its log. The file keeps their bodies; a surface is
|
|
19
|
+
* sent notices ({@link taskLogForSurface}).
|
|
20
|
+
*/
|
|
16
21
|
{
|
|
22
|
+
type: 'task_skills';
|
|
23
|
+
skills: TaskSkillSnapshot[] | TaskSkillNotice[];
|
|
24
|
+
}
|
|
25
|
+
/** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
|
|
26
|
+
| {
|
|
17
27
|
type: 'turn_start';
|
|
18
28
|
message: string;
|
|
19
29
|
messageId?: string;
|
|
@@ -142,6 +152,8 @@ declare function trimToolOutput(output: string): {
|
|
|
142
152
|
* keep: background-agent launches, which the subagent's own events already show.
|
|
143
153
|
*/
|
|
144
154
|
declare function toTaskLogEvent(event: StructuredEvent): TaskLogEvent | null;
|
|
155
|
+
/** A log as a surface is sent it, live or read back: everything but the skills' bodies. */
|
|
156
|
+
declare function taskLogForSurface(events: readonly TaskLogEvent[]): TaskLogEvent[];
|
|
145
157
|
/**
|
|
146
158
|
* Merge runs of deltas into one event each. Deltas arrive a few characters at
|
|
147
159
|
* a time; merged, a batch is one message on the wire and one line on disk,
|
|
@@ -285,8 +297,6 @@ type SerializedTaskStatus = {
|
|
|
285
297
|
idleSince?: string | null;
|
|
286
298
|
/** Absent unless the plan has an isolation run, so a shared-root plan's updates are unchanged. */
|
|
287
299
|
isolation?: TaskIsolation;
|
|
288
|
-
/** Absent unless the task's plan asked for the structured transport (ADR-0018): what it ran on, or why it fell back. */
|
|
289
|
-
transport?: Pick<TaskTransport, 'kind' | 'fallback'>;
|
|
290
300
|
/** What an `awaiting_user` task waits on, when it was saved (ADR-0018, W1). */
|
|
291
301
|
awaitingReason?: AwaitingReason;
|
|
292
302
|
/** The whole question of the checkpoint the task waits at; absent when it waits at none. */
|
|
@@ -339,14 +349,49 @@ type SerializedTask = {
|
|
|
339
349
|
userStoriesCovered: Task['userStoriesCovered'];
|
|
340
350
|
/** Set only on an ops task (ADR-0020). */
|
|
341
351
|
ops?: true;
|
|
352
|
+
/** Task skills attached by name; absent when none. */
|
|
353
|
+
skills?: string[];
|
|
354
|
+
};
|
|
355
|
+
/** Skill loads go out as notices: their bodies are for the planner, and stay in the session. */
|
|
356
|
+
type SerializedConversationMessage = Omit<ConversationMessage, 'skill'> & {
|
|
357
|
+
skill?: SkillLoadNotice;
|
|
358
|
+
};
|
|
359
|
+
type SerializedQueuedMessage = Omit<QueuedMessage, 'skills'> & {
|
|
360
|
+
skills?: SkillLoadNotice[];
|
|
361
|
+
};
|
|
362
|
+
/**
|
|
363
|
+
* A task as a surface is sent it: its attempt's skills are notices, whole in
|
|
364
|
+
* the session only, and its runner session id stays there too — no surface shows it,
|
|
365
|
+
* and only a continue reads the runner's own session id.
|
|
366
|
+
*/
|
|
367
|
+
type SurfaceTask<T extends Task = Task> = Omit<T, 'attemptSkills' | 'subtasks' | 'runnerSessionId'> & {
|
|
368
|
+
attemptSkills?: TaskSkillNotice[];
|
|
369
|
+
subtasks: SurfaceTask[];
|
|
342
370
|
};
|
|
371
|
+
/** A plan as the daemon and the VS Code webview are sent it: the session's own state, minus every skill body. */
|
|
372
|
+
type SurfacePlan = Omit<LegacyPlanState, 'tasks' | 'conversationHistory' | 'queuedMessages'> & {
|
|
373
|
+
tasks: SurfaceTask[];
|
|
374
|
+
conversationHistory?: SerializedConversationMessage[];
|
|
375
|
+
queuedMessages?: SerializedQueuedMessage[];
|
|
376
|
+
};
|
|
377
|
+
/** The phase-tagged shape of {@link SurfacePlan}. */
|
|
378
|
+
type SurfacePlanState = (Omit<Extract<PlanState, {
|
|
379
|
+
phase: 'planning';
|
|
380
|
+
}>, 'pendingTasks'> & {
|
|
381
|
+
pendingTasks: SurfaceTask[];
|
|
382
|
+
}) | (Omit<Extract<PlanState, {
|
|
383
|
+
phase: 'executing';
|
|
384
|
+
}>, 'pendingTasks' | 'executionLog'> & {
|
|
385
|
+
pendingTasks: SurfaceTask[];
|
|
386
|
+
executionLog: SurfaceTask<TaskSnapshot>[];
|
|
387
|
+
});
|
|
343
388
|
type SerializedPlan = {
|
|
344
389
|
tasks: SerializedTask[];
|
|
345
390
|
runners: RunnerId[];
|
|
346
391
|
generatedAt: string;
|
|
347
|
-
conversationHistory?:
|
|
392
|
+
conversationHistory?: SerializedConversationMessage[];
|
|
348
393
|
prdMarkdown?: string;
|
|
349
|
-
queuedMessages?:
|
|
394
|
+
queuedMessages?: SerializedQueuedMessage[];
|
|
350
395
|
};
|
|
351
396
|
/** How a planner turn ended: the reply kind it settled on, a user stop, or a failure. */
|
|
352
397
|
type PlannerTurnOutcome = 'message' | 'plan' | 'task_ops' | 'stopped' | 'error';
|
|
@@ -392,12 +437,18 @@ type SessionMessage =
|
|
|
392
437
|
/**
|
|
393
438
|
* A planner turn began. Emitted once per turn by whoever runs the turn,
|
|
394
439
|
* before any other message carrying its `turnId`. `prompt` is the user's
|
|
395
|
-
* message when the turn answers one
|
|
440
|
+
* message, as typed, when the turn answers one; `skills` are what its
|
|
441
|
+
* `/name` tokens loaded, absent when none did.
|
|
396
442
|
*/
|
|
397
443
|
| {
|
|
398
444
|
type: 'planner_turn_started';
|
|
399
445
|
turnId: string;
|
|
400
446
|
prompt?: string;
|
|
447
|
+
skills?: SkillLoadNotice[];
|
|
448
|
+
} | {
|
|
449
|
+
type: 'planner_skill_loaded';
|
|
450
|
+
turnId: string;
|
|
451
|
+
skill: SkillLoadNotice;
|
|
401
452
|
}
|
|
402
453
|
/**
|
|
403
454
|
* A planner turn is over; nothing more carries its `turnId`. Emitted exactly
|
|
@@ -531,7 +582,7 @@ type SessionMessage =
|
|
|
531
582
|
* A structured task's log as it happens (ADR-0018, P1): the next events of
|
|
532
583
|
* the task's attempt `attempt`, in order — the same ones appended to that
|
|
533
584
|
* attempt's file, so a surface folding these and one replaying the file
|
|
534
|
-
* draw the same blocks.
|
|
585
|
+
* draw the same blocks.
|
|
535
586
|
*/
|
|
536
587
|
| {
|
|
537
588
|
type: 'task_log';
|
|
@@ -605,6 +656,9 @@ type SessionNotice = {
|
|
|
605
656
|
type SessionBroadcaster = (msg: SessionMessage) => void;
|
|
606
657
|
declare function serializeTask(t: Task): SerializedTask;
|
|
607
658
|
declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[], checkpoint?: string): SerializedTaskStatus;
|
|
659
|
+
/** The one place a plan's skill bodies come off before it leaves the session: every wire path that carries plan state goes through here. */
|
|
660
|
+
declare function surfacePlan(plan: LegacyPlanState): SurfacePlan;
|
|
661
|
+
declare function surfacePlanState(state: PlanState): SurfacePlanState;
|
|
608
662
|
declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
|
|
609
663
|
declare function executionSummary(tasks: readonly Task[]): {
|
|
610
664
|
total: number;
|
|
@@ -639,7 +693,7 @@ declare function classifyOutcome(success: boolean, output: string): ResearchStep
|
|
|
639
693
|
* the block exists, so a surface can key its own UI state on it — whether a
|
|
640
694
|
* block is expanded is that UI state, and deliberately not part of a block.
|
|
641
695
|
*/
|
|
642
|
-
type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | UsageBlock;
|
|
696
|
+
type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | SkillLoadBlock | UsageBlock;
|
|
643
697
|
/** `agent` is a task runner speaking in a structured task's log (ADR-0018); the planner is `planner`. */
|
|
644
698
|
type MessageRole = 'user' | 'planner' | 'agent' | 'system' | 'error';
|
|
645
699
|
interface MessageBlock {
|
|
@@ -656,6 +710,8 @@ interface MessageBlock {
|
|
|
656
710
|
* it is the final segment, and never saved to the transcript.
|
|
657
711
|
*/
|
|
658
712
|
segmentId?: string;
|
|
713
|
+
/** A user's message: the skills its `/name` tokens loaded, for a surface to mark those tokens (see `loadedSkillTokens`). */
|
|
714
|
+
skills?: readonly string[];
|
|
659
715
|
}
|
|
660
716
|
interface ThinkingDisplayBlock {
|
|
661
717
|
type: 'thinking';
|
|
@@ -756,6 +812,12 @@ interface PlanBlock {
|
|
|
756
812
|
/** While building: the segment whose envelope is streaming, which a retraction of that segment takes back. */
|
|
757
813
|
segmentId?: string;
|
|
758
814
|
}
|
|
815
|
+
/** A skill loaded into the conversation: one line naming it and the SKILL.md that won. Its body is never shown. */
|
|
816
|
+
interface SkillLoadBlock extends SkillLoadNotice {
|
|
817
|
+
type: 'skill_load';
|
|
818
|
+
id: string;
|
|
819
|
+
turnId?: string;
|
|
820
|
+
}
|
|
759
821
|
/** The token line. There is at most one, and it is always the last block. */
|
|
760
822
|
interface UsageBlock {
|
|
761
823
|
type: 'usage';
|
|
@@ -811,7 +873,7 @@ declare function reduceConversation(view: ConversationView, input: ConversationI
|
|
|
811
873
|
* The research log interleaves with the transcript by time. Entries older than
|
|
812
874
|
* a compaction's first kept message went with the turns it condensed.
|
|
813
875
|
*/
|
|
814
|
-
declare function fromTranscript(conversationHistory: readonly
|
|
876
|
+
declare function fromTranscript(conversationHistory: readonly SerializedConversationMessage[] | undefined, researchLog: readonly ResearchLogEntry[] | undefined, plannerUsage?: PlannerUsage): ConversationView;
|
|
815
877
|
|
|
816
878
|
/**
|
|
817
879
|
* What a surface draws for one attempt of a structured task (ADR-0018, O1b):
|
|
@@ -951,6 +1013,21 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
|
|
|
951
1013
|
/** The conversation line for a task starting, worded the same on every surface. */
|
|
952
1014
|
declare function taskStartedNotice(title: string, runner?: string): string;
|
|
953
1015
|
|
|
1016
|
+
/** Where a skill name is invoked: `start` is its `/`, `end` is just past the name, before any punctuation. */
|
|
1017
|
+
interface SkillToken {
|
|
1018
|
+
name: string;
|
|
1019
|
+
start: number;
|
|
1020
|
+
end: number;
|
|
1021
|
+
}
|
|
1022
|
+
/**
|
|
1023
|
+
* The first `/name` token for each name in `text`, names lower-cased. Only
|
|
1024
|
+
* the first counts because a skill loads once per message however often it is
|
|
1025
|
+
* named, so a later repeat is plain text.
|
|
1026
|
+
*/
|
|
1027
|
+
declare function skillTokens(text: string): SkillToken[];
|
|
1028
|
+
/** The tokens in a sent message that loaded one of `loaded` — what a surface highlights in the user's bubble. */
|
|
1029
|
+
declare function loadedSkillTokens(text: string, loaded: readonly string[]): SkillToken[];
|
|
1030
|
+
|
|
954
1031
|
/**
|
|
955
1032
|
* What a row's status means to a reader, before any surface picks a word,
|
|
956
1033
|
* icon or colour for it. `quiet` is a running task whose runner has printed
|
|
@@ -1142,4 +1219,4 @@ interface NewTaskFields {
|
|
|
1142
1219
|
*/
|
|
1143
1220
|
declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
|
|
1144
1221
|
|
|
1145
|
-
export { type
|
|
1222
|
+
export { type TaskRowView as $, type ApplyTaskOpsResult as A, type SubagentChild as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type SubagentStatus as F, type GatedConversation as G, type SurfacePlan as H, type SurfacePlanState as I, type SurfaceTask as J, type TaskLogEvent as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskLogView as Q, type TaskOp as R, type SerializedConversationMessage as S, type TakenPrompt as T, type TaskRef as U, type TaskRowAction as V, type TaskRowContext as W, type TaskRowIsolation as X, type TaskRowKind as Y, type TaskRowPlacement as Z, type TaskRowSubject as _, type ApprovalBlock as a, truncateCheckpointSummary as a$, type TaskStatusKind as a0, type ThinkingDisplayBlock as a1, type ToolBlock as a2, type ToolHeadline as a3, type ToolStatus as a4, type TurnGate as a5, type UsageBlock as a6, aheadOfDraft as a7, applyTaskOps as a8, approvalLabel as a9, opsEditable as aA, outputLines as aB, outputPreview as aC, parseTaskOpsJson as aD, pastGateConfirmation as aE, reduceConversation as aF, reduceTaskLog as aG, replayTaskLog as aH, runnerToolSubject as aI, serializePlan as aJ, serializeTask as aK, serializeTaskStatus as aL, skillTokens as aM, stopTurn as aN, summarizeToolCall as aO, surfacePlan as aP, surfacePlanState as aQ, taskLogForSurface as aR, taskRowActions as aS, taskRowView as aT, taskStartedNotice as aU, taskStatusKind as aV, textHasTaskOps as aW, titledRefs as aX, toTaskLogEvent as aY, toolHeadline as aZ, trimToolOutput as a_, awaitingLabel as aa, canMergeTasks as ab, canSetDependencies as ac, canSplitTask as ad, capConflictFiles as ae, classifyOutcome as af, coalesceTaskLog as ag, dependencyCandidates as ah, dependentsNotice as ai, dependentsOf as aj, diffRows as ak, diffStat as al, diffSummary as am, digestTaskLog as an, drainNext as ao, executionSummary as ap, followTurn as aq, fromTranscript as ar, hasHiddenDetail as as, holdPrompt as at, isTaskRunning as au, loadedSkillTokens as av, markAction as aw, markRequestFor as ax, namedRepos as ay, newTaskFields as az, type ApprovalStatus as b, unsendAll as b0, unsendLatest as b1, type ConversationInput as c, type ConversationView as d, type DiffRowKind as e, type DiffStat as f, type DisplayBlock as g, EMPTY_HOLD as h, EMPTY_TASK_LOG as i, type EditCatalog as j, type MessageBlock as k, type MessageRole as l, NO_TURN as m, type NewTaskFields as n, type PlanMarkerStatus as o, type PromptHold as p, type SerializedPlan as q, type SerializedQueuedMessage as r, type SerializedTask as s, type SerializedTaskStatus as t, type SessionBroadcaster as u, type SessionMessage as v, type SessionNotice as w, type SkillLoadBlock as x, type SkillToken as y, type SubagentBlock as z };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { R as RunnerModeInfo } from './ModeResolver-
|
|
1
|
+
import { ag as TaskSkillSnapshot, af as TaskSkillNotice, a8 as SubagentOutcome, ao as UsageRecord, W as RunnerId, c as DiscoveredModel, a9 as Task, L as LegacyPlanState, C as ConversationMessage, a0 as SkillLoadNotice, Q as QueuedMessage, ap as UsageTotals, av as Verdict, aa as TaskIsolation, a as AwaitingReason, g as IsolationHandoff, n as IsolationMergeResult, T as ResearchStep, z as PlanState, ah as TaskSnapshot, U as ResearchStepOutcome, O as ResearchLogEntry, G as PlannerUsage, ab as TaskIsolationState } from './Task-1Q19y7sZ.js';
|
|
2
|
+
import { R as RunnerModeInfo } from './ModeResolver-EWlpmVAy.js';
|
|
3
|
+
import { a5 as StructuredTurnEnd, h as ApprovalDecision, a4 as StructuredEvent, Y as QueuedTaskMessage, i as ApprovalKind, n as ApprovalSource } from './IRunner-CGCihlGQ.js';
|
|
3
4
|
import './order-labels.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
@@ -12,8 +13,17 @@ import './order-labels.js';
|
|
|
12
13
|
* without a format version.
|
|
13
14
|
*/
|
|
14
15
|
type TaskLogEvent =
|
|
15
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* The task skills this attempt's prompt carried, as read at its spawn
|
|
18
|
+
* (ADR-0024): first in its log. The file keeps their bodies; a surface is
|
|
19
|
+
* sent notices ({@link taskLogForSurface}).
|
|
20
|
+
*/
|
|
16
21
|
{
|
|
22
|
+
type: 'task_skills';
|
|
23
|
+
skills: TaskSkillSnapshot[] | TaskSkillNotice[];
|
|
24
|
+
}
|
|
25
|
+
/** A turn began by delivering `message`; `messageId` names it when it had been queued, `forced` when it was force sent. */
|
|
26
|
+
| {
|
|
17
27
|
type: 'turn_start';
|
|
18
28
|
message: string;
|
|
19
29
|
messageId?: string;
|
|
@@ -142,6 +152,8 @@ declare function trimToolOutput(output: string): {
|
|
|
142
152
|
* keep: background-agent launches, which the subagent's own events already show.
|
|
143
153
|
*/
|
|
144
154
|
declare function toTaskLogEvent(event: StructuredEvent): TaskLogEvent | null;
|
|
155
|
+
/** A log as a surface is sent it, live or read back: everything but the skills' bodies. */
|
|
156
|
+
declare function taskLogForSurface(events: readonly TaskLogEvent[]): TaskLogEvent[];
|
|
145
157
|
/**
|
|
146
158
|
* Merge runs of deltas into one event each. Deltas arrive a few characters at
|
|
147
159
|
* a time; merged, a batch is one message on the wire and one line on disk,
|
|
@@ -285,8 +297,6 @@ type SerializedTaskStatus = {
|
|
|
285
297
|
idleSince?: string | null;
|
|
286
298
|
/** Absent unless the plan has an isolation run, so a shared-root plan's updates are unchanged. */
|
|
287
299
|
isolation?: TaskIsolation;
|
|
288
|
-
/** Absent unless the task's plan asked for the structured transport (ADR-0018): what it ran on, or why it fell back. */
|
|
289
|
-
transport?: Pick<TaskTransport, 'kind' | 'fallback'>;
|
|
290
300
|
/** What an `awaiting_user` task waits on, when it was saved (ADR-0018, W1). */
|
|
291
301
|
awaitingReason?: AwaitingReason;
|
|
292
302
|
/** The whole question of the checkpoint the task waits at; absent when it waits at none. */
|
|
@@ -339,14 +349,49 @@ type SerializedTask = {
|
|
|
339
349
|
userStoriesCovered: Task['userStoriesCovered'];
|
|
340
350
|
/** Set only on an ops task (ADR-0020). */
|
|
341
351
|
ops?: true;
|
|
352
|
+
/** Task skills attached by name; absent when none. */
|
|
353
|
+
skills?: string[];
|
|
354
|
+
};
|
|
355
|
+
/** Skill loads go out as notices: their bodies are for the planner, and stay in the session. */
|
|
356
|
+
type SerializedConversationMessage = Omit<ConversationMessage, 'skill'> & {
|
|
357
|
+
skill?: SkillLoadNotice;
|
|
358
|
+
};
|
|
359
|
+
type SerializedQueuedMessage = Omit<QueuedMessage, 'skills'> & {
|
|
360
|
+
skills?: SkillLoadNotice[];
|
|
361
|
+
};
|
|
362
|
+
/**
|
|
363
|
+
* A task as a surface is sent it: its attempt's skills are notices, whole in
|
|
364
|
+
* the session only, and its runner session id stays there too — no surface shows it,
|
|
365
|
+
* and only a continue reads the runner's own session id.
|
|
366
|
+
*/
|
|
367
|
+
type SurfaceTask<T extends Task = Task> = Omit<T, 'attemptSkills' | 'subtasks' | 'runnerSessionId'> & {
|
|
368
|
+
attemptSkills?: TaskSkillNotice[];
|
|
369
|
+
subtasks: SurfaceTask[];
|
|
342
370
|
};
|
|
371
|
+
/** A plan as the daemon and the VS Code webview are sent it: the session's own state, minus every skill body. */
|
|
372
|
+
type SurfacePlan = Omit<LegacyPlanState, 'tasks' | 'conversationHistory' | 'queuedMessages'> & {
|
|
373
|
+
tasks: SurfaceTask[];
|
|
374
|
+
conversationHistory?: SerializedConversationMessage[];
|
|
375
|
+
queuedMessages?: SerializedQueuedMessage[];
|
|
376
|
+
};
|
|
377
|
+
/** The phase-tagged shape of {@link SurfacePlan}. */
|
|
378
|
+
type SurfacePlanState = (Omit<Extract<PlanState, {
|
|
379
|
+
phase: 'planning';
|
|
380
|
+
}>, 'pendingTasks'> & {
|
|
381
|
+
pendingTasks: SurfaceTask[];
|
|
382
|
+
}) | (Omit<Extract<PlanState, {
|
|
383
|
+
phase: 'executing';
|
|
384
|
+
}>, 'pendingTasks' | 'executionLog'> & {
|
|
385
|
+
pendingTasks: SurfaceTask[];
|
|
386
|
+
executionLog: SurfaceTask<TaskSnapshot>[];
|
|
387
|
+
});
|
|
343
388
|
type SerializedPlan = {
|
|
344
389
|
tasks: SerializedTask[];
|
|
345
390
|
runners: RunnerId[];
|
|
346
391
|
generatedAt: string;
|
|
347
|
-
conversationHistory?:
|
|
392
|
+
conversationHistory?: SerializedConversationMessage[];
|
|
348
393
|
prdMarkdown?: string;
|
|
349
|
-
queuedMessages?:
|
|
394
|
+
queuedMessages?: SerializedQueuedMessage[];
|
|
350
395
|
};
|
|
351
396
|
/** How a planner turn ended: the reply kind it settled on, a user stop, or a failure. */
|
|
352
397
|
type PlannerTurnOutcome = 'message' | 'plan' | 'task_ops' | 'stopped' | 'error';
|
|
@@ -392,12 +437,18 @@ type SessionMessage =
|
|
|
392
437
|
/**
|
|
393
438
|
* A planner turn began. Emitted once per turn by whoever runs the turn,
|
|
394
439
|
* before any other message carrying its `turnId`. `prompt` is the user's
|
|
395
|
-
* message when the turn answers one
|
|
440
|
+
* message, as typed, when the turn answers one; `skills` are what its
|
|
441
|
+
* `/name` tokens loaded, absent when none did.
|
|
396
442
|
*/
|
|
397
443
|
| {
|
|
398
444
|
type: 'planner_turn_started';
|
|
399
445
|
turnId: string;
|
|
400
446
|
prompt?: string;
|
|
447
|
+
skills?: SkillLoadNotice[];
|
|
448
|
+
} | {
|
|
449
|
+
type: 'planner_skill_loaded';
|
|
450
|
+
turnId: string;
|
|
451
|
+
skill: SkillLoadNotice;
|
|
401
452
|
}
|
|
402
453
|
/**
|
|
403
454
|
* A planner turn is over; nothing more carries its `turnId`. Emitted exactly
|
|
@@ -531,7 +582,7 @@ type SessionMessage =
|
|
|
531
582
|
* A structured task's log as it happens (ADR-0018, P1): the next events of
|
|
532
583
|
* the task's attempt `attempt`, in order — the same ones appended to that
|
|
533
584
|
* attempt's file, so a surface folding these and one replaying the file
|
|
534
|
-
* draw the same blocks.
|
|
585
|
+
* draw the same blocks.
|
|
535
586
|
*/
|
|
536
587
|
| {
|
|
537
588
|
type: 'task_log';
|
|
@@ -605,6 +656,9 @@ type SessionNotice = {
|
|
|
605
656
|
type SessionBroadcaster = (msg: SessionMessage) => void;
|
|
606
657
|
declare function serializeTask(t: Task): SerializedTask;
|
|
607
658
|
declare function serializeTaskStatus(t: Task, idleSince?: string | null, isolation?: TaskIsolation | null, queued?: readonly QueuedTaskMessage[], awaitingApproval?: number, mergeGate?: readonly string[], checkpoint?: string): SerializedTaskStatus;
|
|
659
|
+
/** The one place a plan's skill bodies come off before it leaves the session: every wire path that carries plan state goes through here. */
|
|
660
|
+
declare function surfacePlan(plan: LegacyPlanState): SurfacePlan;
|
|
661
|
+
declare function surfacePlanState(state: PlanState): SurfacePlanState;
|
|
608
662
|
declare function serializePlan(plan: LegacyPlanState): SerializedPlan;
|
|
609
663
|
declare function executionSummary(tasks: readonly Task[]): {
|
|
610
664
|
total: number;
|
|
@@ -639,7 +693,7 @@ declare function classifyOutcome(success: boolean, output: string): ResearchStep
|
|
|
639
693
|
* the block exists, so a surface can key its own UI state on it — whether a
|
|
640
694
|
* block is expanded is that UI state, and deliberately not part of a block.
|
|
641
695
|
*/
|
|
642
|
-
type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | UsageBlock;
|
|
696
|
+
type DisplayBlock = MessageBlock | ThinkingDisplayBlock | ToolBlock | SubagentBlock | ApprovalBlock | PlanBlock | SkillLoadBlock | UsageBlock;
|
|
643
697
|
/** `agent` is a task runner speaking in a structured task's log (ADR-0018); the planner is `planner`. */
|
|
644
698
|
type MessageRole = 'user' | 'planner' | 'agent' | 'system' | 'error';
|
|
645
699
|
interface MessageBlock {
|
|
@@ -656,6 +710,8 @@ interface MessageBlock {
|
|
|
656
710
|
* it is the final segment, and never saved to the transcript.
|
|
657
711
|
*/
|
|
658
712
|
segmentId?: string;
|
|
713
|
+
/** A user's message: the skills its `/name` tokens loaded, for a surface to mark those tokens (see `loadedSkillTokens`). */
|
|
714
|
+
skills?: readonly string[];
|
|
659
715
|
}
|
|
660
716
|
interface ThinkingDisplayBlock {
|
|
661
717
|
type: 'thinking';
|
|
@@ -756,6 +812,12 @@ interface PlanBlock {
|
|
|
756
812
|
/** While building: the segment whose envelope is streaming, which a retraction of that segment takes back. */
|
|
757
813
|
segmentId?: string;
|
|
758
814
|
}
|
|
815
|
+
/** A skill loaded into the conversation: one line naming it and the SKILL.md that won. Its body is never shown. */
|
|
816
|
+
interface SkillLoadBlock extends SkillLoadNotice {
|
|
817
|
+
type: 'skill_load';
|
|
818
|
+
id: string;
|
|
819
|
+
turnId?: string;
|
|
820
|
+
}
|
|
759
821
|
/** The token line. There is at most one, and it is always the last block. */
|
|
760
822
|
interface UsageBlock {
|
|
761
823
|
type: 'usage';
|
|
@@ -811,7 +873,7 @@ declare function reduceConversation(view: ConversationView, input: ConversationI
|
|
|
811
873
|
* The research log interleaves with the transcript by time. Entries older than
|
|
812
874
|
* a compaction's first kept message went with the turns it condensed.
|
|
813
875
|
*/
|
|
814
|
-
declare function fromTranscript(conversationHistory: readonly
|
|
876
|
+
declare function fromTranscript(conversationHistory: readonly SerializedConversationMessage[] | undefined, researchLog: readonly ResearchLogEntry[] | undefined, plannerUsage?: PlannerUsage): ConversationView;
|
|
815
877
|
|
|
816
878
|
/**
|
|
817
879
|
* What a surface draws for one attempt of a structured task (ADR-0018, O1b):
|
|
@@ -951,6 +1013,21 @@ declare function hasHiddenDetail(blocks: readonly DisplayBlock[]): boolean;
|
|
|
951
1013
|
/** The conversation line for a task starting, worded the same on every surface. */
|
|
952
1014
|
declare function taskStartedNotice(title: string, runner?: string): string;
|
|
953
1015
|
|
|
1016
|
+
/** Where a skill name is invoked: `start` is its `/`, `end` is just past the name, before any punctuation. */
|
|
1017
|
+
interface SkillToken {
|
|
1018
|
+
name: string;
|
|
1019
|
+
start: number;
|
|
1020
|
+
end: number;
|
|
1021
|
+
}
|
|
1022
|
+
/**
|
|
1023
|
+
* The first `/name` token for each name in `text`, names lower-cased. Only
|
|
1024
|
+
* the first counts because a skill loads once per message however often it is
|
|
1025
|
+
* named, so a later repeat is plain text.
|
|
1026
|
+
*/
|
|
1027
|
+
declare function skillTokens(text: string): SkillToken[];
|
|
1028
|
+
/** The tokens in a sent message that loaded one of `loaded` — what a surface highlights in the user's bubble. */
|
|
1029
|
+
declare function loadedSkillTokens(text: string, loaded: readonly string[]): SkillToken[];
|
|
1030
|
+
|
|
954
1031
|
/**
|
|
955
1032
|
* What a row's status means to a reader, before any surface picks a word,
|
|
956
1033
|
* icon or colour for it. `quiet` is a running task whose runner has printed
|
|
@@ -1142,4 +1219,4 @@ interface NewTaskFields {
|
|
|
1142
1219
|
*/
|
|
1143
1220
|
declare function newTaskFields(title: string, prompt?: string): NewTaskFields | null;
|
|
1144
1221
|
|
|
1145
|
-
export { type
|
|
1222
|
+
export { type TaskRowView as $, type ApplyTaskOpsResult as A, type SubagentChild as B, CHECKPOINT_TRUNCATE_LENGTH as C, type DiffRow as D, EMPTY_CONVERSATION as E, type SubagentStatus as F, type GatedConversation as G, type SurfacePlan as H, type SurfacePlanState as I, type SurfaceTask as J, type TaskLogEvent as K, type LocalEntry as L, type MergeGateView as M, NOT_STARTED as N, type OutputPreview as O, type PlanBlock as P, type TaskLogView as Q, type TaskOp as R, type SerializedConversationMessage as S, type TakenPrompt as T, type TaskRef as U, type TaskRowAction as V, type TaskRowContext as W, type TaskRowIsolation as X, type TaskRowKind as Y, type TaskRowPlacement as Z, type TaskRowSubject as _, type ApprovalBlock as a, truncateCheckpointSummary as a$, type TaskStatusKind as a0, type ThinkingDisplayBlock as a1, type ToolBlock as a2, type ToolHeadline as a3, type ToolStatus as a4, type TurnGate as a5, type UsageBlock as a6, aheadOfDraft as a7, applyTaskOps as a8, approvalLabel as a9, opsEditable as aA, outputLines as aB, outputPreview as aC, parseTaskOpsJson as aD, pastGateConfirmation as aE, reduceConversation as aF, reduceTaskLog as aG, replayTaskLog as aH, runnerToolSubject as aI, serializePlan as aJ, serializeTask as aK, serializeTaskStatus as aL, skillTokens as aM, stopTurn as aN, summarizeToolCall as aO, surfacePlan as aP, surfacePlanState as aQ, taskLogForSurface as aR, taskRowActions as aS, taskRowView as aT, taskStartedNotice as aU, taskStatusKind as aV, textHasTaskOps as aW, titledRefs as aX, toTaskLogEvent as aY, toolHeadline as aZ, trimToolOutput as a_, awaitingLabel as aa, canMergeTasks as ab, canSetDependencies as ac, canSplitTask as ad, capConflictFiles as ae, classifyOutcome as af, coalesceTaskLog as ag, dependencyCandidates as ah, dependentsNotice as ai, dependentsOf as aj, diffRows as ak, diffStat as al, diffSummary as am, digestTaskLog as an, drainNext as ao, executionSummary as ap, followTurn as aq, fromTranscript as ar, hasHiddenDetail as as, holdPrompt as at, isTaskRunning as au, loadedSkillTokens as av, markAction as aw, markRequestFor as ax, namedRepos as ay, newTaskFields as az, type ApprovalStatus as b, unsendAll as b0, unsendLatest as b1, type ConversationInput as c, type ConversationView as d, type DiffRowKind as e, type DiffStat as f, type DisplayBlock as g, EMPTY_HOLD as h, EMPTY_TASK_LOG as i, type EditCatalog as j, type MessageBlock as k, type MessageRole as l, NO_TURN as m, type NewTaskFields as n, type PlanMarkerStatus as o, type PromptHold as p, type SerializedPlan as q, type SerializedQueuedMessage as r, type SerializedTask as s, type SerializedTaskStatus as t, type SessionBroadcaster as u, type SessionMessage as v, type SessionNotice as w, type SkillLoadBlock as x, type SkillToken as y, type SubagentBlock as z };
|
package/dist/plan-utils.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, k as MessageBlock, l as MessageRole, N as NOT_STARTED, m as NO_TURN, n as NewTaskFields, O as OutputPreview, P as PlanBlock, o as PlanMarkerStatus, p as PromptHold,
|
|
1
|
+
export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, k as MessageBlock, l as MessageRole, N as NOT_STARTED, m as NO_TURN, n as NewTaskFields, O as OutputPreview, P as PlanBlock, o as PlanMarkerStatus, p as PromptHold, x as SkillLoadBlock, y as SkillToken, z as SubagentBlock, B as SubagentChild, F as SubagentStatus, T as TakenPrompt, Q as TaskLogView, U as TaskRef, V as TaskRowAction, W as TaskRowContext, X as TaskRowIsolation, Y as TaskRowKind, Z as TaskRowPlacement, _ as TaskRowSubject, $ as TaskRowView, a0 as TaskStatusKind, a1 as ThinkingDisplayBlock, a2 as ToolBlock, a3 as ToolHeadline, a4 as ToolStatus, a5 as TurnGate, a6 as UsageBlock, a7 as aheadOfDraft, a9 as approvalLabel, aa as awaitingLabel, ab as canMergeTasks, ac as canSetDependencies, ad as canSplitTask, ae as capConflictFiles, ah as dependencyCandidates, ai as dependentsNotice, aj as dependentsOf, ak as diffRows, al as diffStat, am as diffSummary, ao as drainNext, aq as followTurn, ar as fromTranscript, as as hasHiddenDetail, at as holdPrompt, au as isTaskRunning, av as loadedSkillTokens, aw as markAction, ax as markRequestFor, ay as namedRepos, az as newTaskFields, aA as opsEditable, aB as outputLines, aC as outputPreview, aE as pastGateConfirmation, aF as reduceConversation, aG as reduceTaskLog, aH as replayTaskLog, aI as runnerToolSubject, aM as skillTokens, aN as stopTurn, aO as summarizeToolCall, aS as taskRowActions, aT as taskRowView, aU as taskStartedNotice, aV as taskStatusKind, aX as titledRefs, aZ as toolHeadline, a$ as truncateCheckpointSummary, b0 as unsendAll, b1 as unsendLatest } from './plan-utils-BMayhGBj.mjs';
|
|
2
2
|
export { taskOrderLabel, taskRef, titledTaskRef } from './order-labels.mjs';
|
|
3
|
-
export { D as DEFAULT_RUNNERS } from './Task-
|
|
4
|
-
import './ModeResolver-
|
|
3
|
+
export { D as DEFAULT_RUNNERS } from './Task-1Q19y7sZ.mjs';
|
|
4
|
+
import './ModeResolver-DE-o2lRF.mjs';
|
|
5
|
+
import './IRunner-XVUddYVX.mjs';
|
|
5
6
|
import 'child_process';
|
|
6
|
-
import 'events';
|
|
7
7
|
import 'zod/v4';
|
package/dist/plan-utils.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, k as MessageBlock, l as MessageRole, N as NOT_STARTED, m as NO_TURN, n as NewTaskFields, O as OutputPreview, P as PlanBlock, o as PlanMarkerStatus, p as PromptHold,
|
|
1
|
+
export { a as ApprovalBlock, b as ApprovalStatus, C as CHECKPOINT_TRUNCATE_LENGTH, c as ConversationInput, d as ConversationView, D as DiffRow, e as DiffRowKind, f as DiffStat, g as DisplayBlock, E as EMPTY_CONVERSATION, h as EMPTY_HOLD, i as EMPTY_TASK_LOG, G as GatedConversation, L as LocalEntry, k as MessageBlock, l as MessageRole, N as NOT_STARTED, m as NO_TURN, n as NewTaskFields, O as OutputPreview, P as PlanBlock, o as PlanMarkerStatus, p as PromptHold, x as SkillLoadBlock, y as SkillToken, z as SubagentBlock, B as SubagentChild, F as SubagentStatus, T as TakenPrompt, Q as TaskLogView, U as TaskRef, V as TaskRowAction, W as TaskRowContext, X as TaskRowIsolation, Y as TaskRowKind, Z as TaskRowPlacement, _ as TaskRowSubject, $ as TaskRowView, a0 as TaskStatusKind, a1 as ThinkingDisplayBlock, a2 as ToolBlock, a3 as ToolHeadline, a4 as ToolStatus, a5 as TurnGate, a6 as UsageBlock, a7 as aheadOfDraft, a9 as approvalLabel, aa as awaitingLabel, ab as canMergeTasks, ac as canSetDependencies, ad as canSplitTask, ae as capConflictFiles, ah as dependencyCandidates, ai as dependentsNotice, aj as dependentsOf, ak as diffRows, al as diffStat, am as diffSummary, ao as drainNext, aq as followTurn, ar as fromTranscript, as as hasHiddenDetail, at as holdPrompt, au as isTaskRunning, av as loadedSkillTokens, aw as markAction, ax as markRequestFor, ay as namedRepos, az as newTaskFields, aA as opsEditable, aB as outputLines, aC as outputPreview, aE as pastGateConfirmation, aF as reduceConversation, aG as reduceTaskLog, aH as replayTaskLog, aI as runnerToolSubject, aM as skillTokens, aN as stopTurn, aO as summarizeToolCall, aS as taskRowActions, aT as taskRowView, aU as taskStartedNotice, aV as taskStatusKind, aX as titledRefs, aZ as toolHeadline, a$ as truncateCheckpointSummary, b0 as unsendAll, b1 as unsendLatest } from './plan-utils-Cv48fe7r.js';
|
|
2
2
|
export { taskOrderLabel, taskRef, titledTaskRef } from './order-labels.js';
|
|
3
|
-
export { D as DEFAULT_RUNNERS } from './Task-
|
|
4
|
-
import './ModeResolver-
|
|
3
|
+
export { D as DEFAULT_RUNNERS } from './Task-1Q19y7sZ.js';
|
|
4
|
+
import './ModeResolver-EWlpmVAy.js';
|
|
5
|
+
import './IRunner-CGCihlGQ.js';
|
|
5
6
|
import 'child_process';
|
|
6
|
-
import 'events';
|
|
7
7
|
import 'zod/v4';
|