@pentoshi/clai 4.14.4 → 4.14.5

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.
Files changed (129) hide show
  1. package/CONTRIBUTING.md +4 -0
  2. package/PROVIDERS.md +2 -0
  3. package/README.md +22 -0
  4. package/dist/agent/subagents/read-only-tools.js +2 -2
  5. package/dist/agent/subagents/read-only-tools.js.map +1 -1
  6. package/dist/app/adapters/current-updates-adapter.d.ts +1 -1
  7. package/dist/app/adapters/current-updates-adapter.js +4 -13
  8. package/dist/app/adapters/current-updates-adapter.js.map +1 -1
  9. package/dist/app/controllers/session-controller.d.ts +5 -0
  10. package/dist/app/controllers/session-controller.js +54 -7
  11. package/dist/app/controllers/session-controller.js.map +1 -1
  12. package/dist/app/ports/updates-port.d.ts +1 -1
  13. package/dist/classic/app/action-handlers.js +7 -0
  14. package/dist/classic/app/action-handlers.js.map +1 -1
  15. package/dist/commands/update/detection.d.ts +20 -0
  16. package/dist/commands/update/detection.js +207 -0
  17. package/dist/commands/update/detection.js.map +1 -0
  18. package/dist/commands/update/download.d.ts +3 -0
  19. package/dist/commands/update/download.js +63 -0
  20. package/dist/commands/update/download.js.map +1 -0
  21. package/dist/commands/update/installers.d.ts +16 -5
  22. package/dist/commands/update/installers.js +12 -513
  23. package/dist/commands/update/installers.js.map +1 -1
  24. package/dist/commands/update/lock.d.ts +6 -0
  25. package/dist/commands/update/lock.js +86 -0
  26. package/dist/commands/update/lock.js.map +1 -0
  27. package/dist/commands/update/metadata.d.ts +6 -0
  28. package/dist/commands/update/metadata.js +36 -0
  29. package/dist/commands/update/metadata.js.map +1 -0
  30. package/dist/commands/update/native.d.ts +3 -0
  31. package/dist/commands/update/native.js +179 -0
  32. package/dist/commands/update/native.js.map +1 -0
  33. package/dist/commands/update/package-managers.d.ts +4 -0
  34. package/dist/commands/update/package-managers.js +158 -0
  35. package/dist/commands/update/package-managers.js.map +1 -0
  36. package/dist/commands/update/process.d.ts +17 -0
  37. package/dist/commands/update/process.js +114 -0
  38. package/dist/commands/update/process.js.map +1 -0
  39. package/dist/commands/update/source-worker.d.ts +2 -0
  40. package/dist/commands/update/source-worker.js +71 -0
  41. package/dist/commands/update/source-worker.js.map +1 -0
  42. package/dist/commands/update/source.d.ts +2 -0
  43. package/dist/commands/update/source.js +79 -0
  44. package/dist/commands/update/source.js.map +1 -0
  45. package/dist/commands/update/verification.d.ts +7 -0
  46. package/dist/commands/update/verification.js +73 -0
  47. package/dist/commands/update/verification.js.map +1 -0
  48. package/dist/commands/update/windows-stage.d.ts +21 -0
  49. package/dist/commands/update/windows-stage.js +186 -0
  50. package/dist/commands/update/windows-stage.js.map +1 -0
  51. package/dist/commands/update-install.d.ts +4 -13
  52. package/dist/commands/update-install.js +20 -152
  53. package/dist/commands/update-install.js.map +1 -1
  54. package/dist/commands/update.d.ts +4 -9
  55. package/dist/commands/update.js +51 -103
  56. package/dist/commands/update.js.map +1 -1
  57. package/dist/index.js +1 -1
  58. package/dist/index.js.map +1 -1
  59. package/dist/llm/responses-error.d.ts +3 -0
  60. package/dist/llm/responses-error.js +37 -0
  61. package/dist/llm/responses-error.js.map +1 -0
  62. package/dist/llm/responses-http.js +5 -2
  63. package/dist/llm/responses-http.js.map +1 -1
  64. package/dist/llm/responses-replay.d.ts +2 -0
  65. package/dist/llm/responses-replay.js +37 -1
  66. package/dist/llm/responses-replay.js.map +1 -1
  67. package/dist/llm/responses-stream-events.js +3 -20
  68. package/dist/llm/responses-stream-events.js.map +1 -1
  69. package/dist/llm/responses-stream.js +2 -0
  70. package/dist/llm/responses-stream.js.map +1 -1
  71. package/dist/os/bun-runtime.js +2 -1
  72. package/dist/os/bun-runtime.js.map +1 -1
  73. package/dist/os/update-origin.d.ts +7 -0
  74. package/dist/os/update-origin.js +30 -0
  75. package/dist/os/update-origin.js.map +1 -0
  76. package/dist/prompts/embedded.js +2 -2
  77. package/dist/prompts/embedded.js.map +1 -1
  78. package/dist/prompts/index.js +2 -2
  79. package/dist/prompts/system.agent.md +1 -1
  80. package/dist/prompts/system.ask.md +1 -1
  81. package/dist/session-runtime/client.js +2 -1
  82. package/dist/session-runtime/client.js.map +1 -1
  83. package/dist/store/history/jsonl-lock.js +10 -7
  84. package/dist/store/history/jsonl-lock.js.map +1 -1
  85. package/dist/store/history/recovery.js +2 -1
  86. package/dist/store/history/recovery.js.map +1 -1
  87. package/dist/store/history.js +4 -2
  88. package/dist/store/history.js.map +1 -1
  89. package/dist/tools/definitions/fs-read.js +1 -1
  90. package/dist/tools/definitions/fs-read.js.map +1 -1
  91. package/dist/tools/fs/read-input.d.ts +1 -1
  92. package/dist/tools/fs/read-input.js +2 -2
  93. package/dist/tools/fs/read-input.js.map +1 -1
  94. package/dist/tui-v2/app/App.js +13 -5
  95. package/dist/tui-v2/app/App.js.map +1 -1
  96. package/dist/tui-v2/components/plan/plan-interaction.d.ts +11 -0
  97. package/dist/tui-v2/components/plan/plan-interaction.js +56 -0
  98. package/dist/tui-v2/components/plan/plan-interaction.js.map +1 -0
  99. package/dist/tui-v2/components/plan/plan-view.d.ts +7 -1
  100. package/dist/tui-v2/components/plan/plan-view.js +78 -175
  101. package/dist/tui-v2/components/plan/plan-view.js.map +1 -1
  102. package/dist/tui-v2/components/plan/task-title.d.ts +9 -0
  103. package/dist/tui-v2/components/plan/task-title.js +17 -0
  104. package/dist/tui-v2/components/plan/task-title.js.map +1 -0
  105. package/dist/tui-v2/components/plan/use-task-disclosure.d.ts +25 -0
  106. package/dist/tui-v2/components/plan/use-task-disclosure.js +125 -0
  107. package/dist/tui-v2/components/plan/use-task-disclosure.js.map +1 -0
  108. package/dist/tui-v2/composer/composer-editor.js +3 -0
  109. package/dist/tui-v2/composer/composer-editor.js.map +1 -1
  110. package/dist/ui-core/actions/action-id.d.ts +1 -1
  111. package/dist/ui-core/actions/action-id.js +7 -0
  112. package/dist/ui-core/actions/action-id.js.map +1 -1
  113. package/dist/ui-core/actions/format-shortcuts.js +7 -0
  114. package/dist/ui-core/actions/format-shortcuts.js.map +1 -1
  115. package/dist/ui-core/commands/config-commands.js +12 -6
  116. package/dist/ui-core/commands/config-commands.js.map +1 -1
  117. package/dist/ui-core/commands/prompt-commands.d.ts +1 -1
  118. package/dist/ui-core/commands/prompt-commands.js +12 -2
  119. package/dist/ui-core/commands/prompt-commands.js.map +1 -1
  120. package/dist/ui-core/controllers/toast-controller.js +4 -4
  121. package/dist/ui-core/controllers/toast-controller.js.map +1 -1
  122. package/dist/ui-core/rendering/plan-view.js +24 -12
  123. package/dist/ui-core/rendering/plan-view.js.map +1 -1
  124. package/dist/ui-core/rendering/task-disclosure.d.ts +19 -0
  125. package/dist/ui-core/rendering/task-disclosure.js +70 -0
  126. package/dist/ui-core/rendering/task-disclosure.js.map +1 -0
  127. package/dist/version.generated.d.ts +2 -2
  128. package/dist/version.generated.js +2 -2
  129. package/package.json +1 -1
@@ -1,16 +1,19 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@opentui/react/jsx-runtime";
2
2
  /** @jsxImportSource @opentui/react */
3
- import { memo, useEffect, useRef } from "react";
3
+ import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { countRender } from "../../perf/render-counters.js";
5
5
  import { TextAttributes } from "@opentui/core";
6
- import { activeTaskId, cleanTaskTitle, planStatusChip, planStatusColor, progressBar, progressView, taskGlyph, taskRowColor, taskOwnerChip, orderPlanTasksForDisplay, wrapPlanText, } from "../../../ui-core/rendering/plan-view.js";
6
+ import { activeTaskId, cleanTaskTitle, planStatusChip, planStatusColor, progressBar, progressView, taskGlyph, taskRowColor, taskOwnerChip, wrapPlanText, } from "../../../ui-core/rendering/plan-view.js";
7
7
  import { discardPlan, implementPlan } from "../../../ui-core/plan/plan-lifecycle.js";
8
+ import { hasTaskDetails, taskDetailText, wrapTaskDisclosureTitle, TASK_DISCLOSURE_BUTTON_WIDTH } from "../../../ui-core/rendering/task-disclosure.js";
9
+ import { revealTaskHeader, useTaskDisclosure } from "./use-task-disclosure.js";
10
+ import "./task-title.js";
8
11
  function tokenFg(theme, token) {
9
12
  return theme[token];
10
13
  }
11
14
  function Chip(props) {
12
15
  const { label, fg, bg } = props;
13
- return (_jsx("text", { content: ` ${label} `, style: {
16
+ return (_jsx("text", { selectable: false, content: ` ${label} `, style: {
14
17
  fg,
15
18
  bg,
16
19
  height: 1,
@@ -19,12 +22,14 @@ function Chip(props) {
19
22
  } }));
20
23
  }
21
24
  function ActionChip(props) {
22
- const { label, fg, bg, onClick } = props;
23
- return (_jsx("box", { onMouseDown: (event) => {
25
+ const { id, label, fg, bg, onClick } = props;
26
+ return (_jsx("box", { id: id, onMouseDown: (event) => {
27
+ if (event.button !== 0)
28
+ return;
24
29
  event.preventDefault();
25
30
  event.stopPropagation();
26
31
  onClick();
27
- }, style: { flexShrink: 0 }, children: _jsx("text", { content: ` ${label} `, style: {
32
+ }, style: { flexShrink: 0 }, children: _jsx("text", { selectable: false, content: ` ${label} `, style: {
28
33
  fg,
29
34
  bg,
30
35
  height: 1,
@@ -33,189 +38,87 @@ function ActionChip(props) {
33
38
  }
34
39
  function PlanViewImpl(props) {
35
40
  countRender("PlanView");
36
- const { theme, plan, services, width: widthProp } = props;
41
+ const { theme, plan, services, width: widthProp, interactionRef } = props;
42
+ const focused = props.focused ?? services.focus.activeContext() === "plan";
37
43
  const scrollRef = useRef(null);
38
44
  const activeId = plan ? activeTaskId(plan) : undefined;
39
- const innerW = Math.max(14, (widthProp ?? 36) - 4);
40
- const displayTasks = plan ? orderPlanTasksForDisplay(plan.tasks) : [];
45
+ const innerW = Math.max(1, (widthProp ?? 36) - 4);
46
+ const disclosure = useTaskDisclosure(plan, scrollRef, interactionRef, props.disclosureBinding);
47
+ const displayTasks = disclosure.tasks;
48
+ const revealedTaskId = focused ? disclosure.selectedId : activeId;
41
49
  useEffect(() => {
42
- if (activeId) {
43
- scrollRef.current?.scrollChildIntoView(`plan-task-${activeId}`);
44
- }
45
- }, [activeId, plan?.tasks.length, plan?.updatedAt]);
50
+ if (revealedTaskId)
51
+ revealTaskHeader(scrollRef.current, revealedTaskId);
52
+ }, [revealedTaskId]);
53
+ const toggleTask = useCallback((id) => {
54
+ if (services.overlay.isOpen())
55
+ return;
56
+ services.focus.focusRegion("plan");
57
+ disclosure.toggleTask(id);
58
+ }, [services.focus, services.overlay, disclosure.toggleTask]);
59
+ function setAllExpanded(expanded) {
60
+ if (services.overlay.isOpen())
61
+ return;
62
+ services.focus.focusRegion("plan");
63
+ disclosure.setAllExpanded(expanded);
64
+ }
46
65
  function trapWheel(event) {
47
66
  if (!event.scroll)
48
67
  return;
49
68
  event.stopPropagation();
69
+ disclosure.hideKeyboardFocus();
50
70
  services.focus.focusRegion("plan");
51
71
  }
52
- if (!plan) {
53
- return (_jsx("box", { style: {
54
- flexDirection: "column",
55
- flexGrow: 1,
56
- width: "100%",
57
- height: "100%",
58
- justifyContent: "center",
59
- alignItems: "center",
60
- backgroundColor: theme.statusBackground,
61
- }, onMouseScroll: trapWheel, onMouseDown: () => services.focus.focusRegion("plan"), children: _jsxs("box", { style: {
62
- flexDirection: "column",
63
- alignItems: "center",
64
- flexShrink: 0,
65
- paddingLeft: 1,
66
- paddingRight: 1,
67
- }, children: [_jsx("text", { content: "\u25C7", style: { fg: theme.magenta, height: 1, attributes: TextAttributes.BOLD } }), _jsx("text", { content: " ", style: { height: 1 } }), _jsx("text", { content: "No tasks yet", style: {
68
- fg: theme.foreground,
69
- height: 1,
70
- attributes: TextAttributes.BOLD,
71
- } }), _jsx("text", { content: " ", style: { height: 1 } }), _jsx("text", { content: "Plan a multi-step job,", style: { fg: theme.muted, height: 1 } }), _jsx("text", { content: "then /implement.", style: { fg: theme.muted, height: 1 } }), _jsx("text", { content: " ", style: { height: 1 } }), _jsx("text", { content: "Ctrl+H toggle \u00B7 Ctrl+P detail", style: { fg: theme.cyan, height: 1 } })] }) }));
72
- }
72
+ return (_jsx("box", { id: "plan-pane", style: { flexDirection: "column", flexGrow: 1, width: "100%", height: "100%", backgroundColor: theme.statusBackground }, onMouseDown: (event) => event.preventDefault(), onMouseScroll: trapWheel, children: plan ? (_jsxs(_Fragment, { children: [_jsx(PlanHeader, { theme: theme, plan: plan, services: services, width: innerW, summary: disclosure.summary, onSetAllExpanded: setAllExpanded }), _jsxs("scrollbox", { id: "plan-tasks", ref: scrollRef, stickyScroll: false, viewportCulling: true, scrollY: true, scrollX: false, scrollbarOptions: { visible: false, showArrows: false }, onMouseScroll: trapWheel, style: { flexGrow: 1, flexShrink: 1, width: "100%", minHeight: 1, backgroundColor: theme.statusBackground, paddingLeft: 1, paddingRight: 1 }, children: [displayTasks.map((task, index) => (_jsx(TaskRow, { task: task, theme: theme, width: innerW, active: task.id === activeId, selected: focused && disclosure.keyboardFocusVisible && task.id === disclosure.selectedId, expanded: disclosure.expanded.has(task.id), index: index, onToggle: toggleTask }, task.id))), displayTasks.length === 0 ? _jsx("text", { selectable: false, content: "No tasks yet", style: { fg: theme.muted, height: 1 } }) : null] })] })) : (_jsxs("box", { style: { flexDirection: "column", flexGrow: 1, justifyContent: "center", alignItems: "center", paddingLeft: 1, paddingRight: 1 }, children: [_jsx("text", { selectable: false, content: "\u25C7", style: { fg: theme.magenta, height: 1, attributes: TextAttributes.BOLD } }), _jsx("text", { selectable: false, content: "No tasks yet", style: { fg: theme.foreground, height: 1, attributes: TextAttributes.BOLD, marginTop: 1 } }), _jsx("text", { selectable: false, content: "Plan a multi-step job,", style: { fg: theme.muted, height: 1, marginTop: 1 } }), _jsx("text", { selectable: false, content: "then /implement.", style: { fg: theme.muted, height: 1 } }), _jsx("text", { selectable: false, content: "Ctrl+H toggle \u00B7 Ctrl+P detail", style: { fg: theme.cyan, height: 1, marginTop: 1 } })] })) }));
73
+ }
74
+ function PlanHeader(props) {
75
+ const { theme, plan, services, width, summary, onSetAllExpanded } = props;
73
76
  const progress = progressView(plan);
74
77
  const statusFg = tokenFg(theme, planStatusColor(plan.status));
75
- const statusBg = plan.status === "completed"
76
- ? theme.diffAddBg
77
- : plan.status === "in_progress" || plan.status === "approved"
78
- ? theme.queued
79
- : plan.status === "draft"
80
- ? theme.chipTeal
81
- : theme.chip;
82
- const goalLines = wrapPlanText(plan.goal, innerW);
83
- const barWidth = Math.max(6, Math.min(14, innerW - 12));
84
- const bar = progressBar(progress.done, progress.total, barWidth);
85
- const countLabel = progress.total === 0
86
- ? "0 tasks"
87
- : `${progress.done}/${progress.total}`;
88
- return (_jsxs("box", { style: {
89
- flexDirection: "column",
90
- flexGrow: 1,
91
- width: "100%",
92
- height: "100%",
93
- backgroundColor: theme.statusBackground,
94
- }, onMouseScroll: trapWheel, onMouseDown: () => services.focus.focusRegion("plan"), children: [_jsxs("box", { style: {
95
- flexDirection: "column",
96
- width: "100%",
97
- flexShrink: 0,
98
- paddingLeft: 1,
99
- paddingRight: 1,
100
- paddingTop: 1,
101
- backgroundColor: theme.statusBackground,
102
- }, children: [goalLines.map((line, i) => (_jsx("text", { content: line, style: {
103
- fg: theme.foreground,
104
- height: 1,
105
- attributes: TextAttributes.BOLD,
106
- } }, `g-${i}`))), _jsx("text", { content: " ", style: { height: 1 } }), _jsxs("box", { style: {
107
- flexDirection: "row",
108
- width: "100%",
109
- height: 1,
110
- alignItems: "center",
111
- flexShrink: 0,
112
- }, children: [_jsx(Chip, { label: planStatusChip(plan.status), fg: theme.white, bg: statusBg, theme: theme }), _jsx("text", { content: " ", style: { height: 1 } }), _jsx("text", { content: plan.kind || "general", style: { fg: theme.muted, height: 1 } })] }), _jsxs("box", { style: {
113
- flexDirection: "row",
114
- width: "100%",
115
- height: 1,
116
- marginTop: 1,
117
- alignItems: "center",
118
- flexShrink: 0,
119
- }, children: [_jsx("text", { content: bar, style: {
120
- fg: progress.done === progress.total && progress.total > 0
121
- ? theme.success
122
- : theme.cyan,
123
- height: 1,
124
- flexShrink: 0,
125
- } }), _jsx("text", { content: " ", style: { height: 1 } }), _jsx("text", { content: countLabel, style: {
126
- fg: statusFg,
127
- height: 1,
128
- attributes: TextAttributes.BOLD,
129
- } })] }), plan.status === "draft" ? (_jsxs("box", { style: {
130
- flexDirection: "row",
131
- width: "100%",
132
- height: 1,
133
- marginTop: 1,
134
- flexShrink: 0,
135
- alignItems: "center",
136
- }, children: [_jsx(ActionChip, { label: "Implement", fg: theme.white, bg: theme.success, onClick: () => void implementPlan(services) }), _jsx("text", { content: " ", style: { height: 1 } }), _jsx(ActionChip, { label: "Discard", fg: theme.foreground, bg: theme.chip, onClick: () => void discardPlan(services) })] })) : null, _jsx("text", { content: "─".repeat(Math.max(8, innerW)), style: { fg: theme.border, height: 1, marginTop: 1 } })] }), _jsxs("scrollbox", { ref: scrollRef, stickyScroll: false, viewportCulling: true, scrollY: true, scrollX: false, scrollbarOptions: { visible: false, showArrows: false }, onMouseScroll: trapWheel, style: {
137
- flexGrow: 1,
138
- flexShrink: 1,
139
- width: "100%",
140
- minHeight: 4,
141
- backgroundColor: theme.statusBackground,
142
- paddingLeft: 1,
143
- paddingRight: 1,
144
- paddingTop: 0,
145
- }, children: [displayTasks.map((task, index) => (_jsx(TaskRow, { task: task, theme: theme, width: innerW, active: task.id === activeId, index: index }, task.id))), _jsx("text", { content: " ", style: { height: 1 } })] })] }));
78
+ const statusBg = plan.status === "completed" ? theme.diffAddBg : plan.status === "draft" ? theme.chipTeal : theme.chip;
79
+ const countLabel = progress.total === 0 ? "0 tasks" : `${progress.done}/${progress.total}`;
80
+ const canExpand = summary.expanded < summary.total;
81
+ const canCollapse = summary.expanded > 0;
82
+ const controlsWidth = (canExpand ? 12 : 0) + (canCollapse ? 14 : 0) + (canExpand && canCollapse ? 1 : 0);
83
+ const inline = width >= controlsWidth + countLabel.length + 7;
84
+ const barWidth = Math.max(4, Math.min(14, width - countLabel.length - (inline ? controlsWidth + 3 : 1)));
85
+ const controls = summary.total > 0 ? (_jsxs("box", { style: { flexDirection: width >= controlsWidth ? "row" : "column", flexShrink: 0, gap: width >= controlsWidth ? 1 : 0 }, children: [canExpand ? _jsx(ActionChip, { id: "plan-expand-all", label: "Expand all", fg: theme.foreground, bg: theme.chip, onClick: () => onSetAllExpanded(true) }) : null, canCollapse ? _jsx(ActionChip, { id: "plan-collapse-all", label: "Collapse all", fg: theme.foreground, bg: theme.chip, onClick: () => onSetAllExpanded(false) }) : null] })) : null;
86
+ return (_jsxs("box", { id: "plan-header", style: { flexDirection: "column", width: "100%", flexShrink: 0, paddingLeft: 1, paddingRight: 1, paddingTop: 1 }, children: [wrapPlanText(plan.goal, width).map((line, index) => (_jsx("text", { selectable: false, content: line, style: { fg: theme.foreground, height: 1, attributes: TextAttributes.BOLD } }, `goal-${index}`))), _jsxs("box", { style: { flexDirection: "row", width: "100%", height: 1, marginTop: 1, flexShrink: 0, gap: 1 }, children: [_jsx(Chip, { label: planStatusChip(plan.status), fg: plan.status === "draft" ? theme.white : theme.foreground, bg: statusBg, theme: theme }), _jsx("text", { selectable: false, content: wrapPlanText(plan.kind || "general", Math.max(1, width - planStatusChip(plan.status).length - 3))[0] ?? "", style: { fg: theme.muted, height: 1, flexShrink: 1 } })] }), _jsxs("box", { id: "plan-progress", style: { flexDirection: "row", width: "100%", height: 1, marginTop: 1, alignItems: "center", flexShrink: 0, gap: 1 }, children: [_jsx("text", { selectable: false, content: progressBar(progress.done, progress.total, barWidth), style: { fg: progress.done === progress.total && progress.total > 0 ? theme.success : theme.cyan, height: 1, flexShrink: 0 } }), _jsx("text", { selectable: false, content: countLabel, style: { fg: statusFg, height: 1, flexShrink: 0, attributes: TextAttributes.BOLD } }), inline && controls ? _jsx("box", { style: { flexGrow: 1 } }) : null, inline ? controls : null] }), !inline && controls ? _jsx("box", { style: { flexShrink: 0, marginTop: 1 }, children: controls }) : null, plan.status === "draft" ? (_jsxs("box", { style: { flexDirection: width >= 21 ? "row" : "column", width: "100%", marginTop: 1, flexShrink: 0, gap: width >= 21 ? 1 : 0 }, children: [_jsx(ActionChip, { id: "plan-implement", label: "Implement", fg: theme.foreground, bg: theme.diffAddBg, onClick: () => void implementPlan(services) }), _jsx(ActionChip, { id: "plan-discard", label: "Discard", fg: theme.foreground, bg: theme.chip, onClick: () => void discardPlan(services) })] })) : null, _jsx("text", { selectable: false, content: "─".repeat(width), style: { fg: theme.border, height: 1, marginTop: 1, marginBottom: 1 } })] }));
146
87
  }
147
- function TaskRow(props) {
148
- const { task, theme, width, active, index } = props;
149
- const state = task.state;
88
+ function TaskDisclosureButton(props) {
89
+ const { taskId, theme, bg, selected, expanded, onToggle } = props;
90
+ const [hovered, setHovered] = useState(false);
91
+ const highlighted = selected || hovered;
92
+ const id = `plan-task-${taskId}-disclosure`;
93
+ return (_jsx("box", { id: id, onMouseOver: () => setHovered(true), onMouseOut: () => setHovered(false), onMouseDown: (event) => {
94
+ if (event.button !== 0)
95
+ return;
96
+ event.preventDefault();
97
+ event.stopPropagation();
98
+ onToggle(taskId);
99
+ }, style: { width: TASK_DISCLOSURE_BUTTON_WIDTH, height: 1, flexShrink: 0, justifyContent: "center", alignItems: "center", backgroundColor: bg }, children: _jsx("text", { selectable: false, id: `${id}-label`, wrapMode: "none", content: expanded ? "−" : "+", style: { fg: highlighted ? theme.cyan : theme.foreground, bg, width: 1, height: 1, flexShrink: 0, attributes: TextAttributes.BOLD } }) }));
100
+ }
101
+ const TaskRow = memo(function TaskRow(props) {
102
+ const { task, theme, width, active, selected, expanded, index, onToggle } = props;
150
103
  const stateColor = tokenFg(theme, taskRowColor(task));
151
- const titleColor = state === "pending" || state === "skipped"
152
- ? theme.foreground
153
- : stateColor;
154
- const glyph = taskGlyph(task);
155
- const bg = active || (state === "in_progress" && !task.responderOwned)
104
+ const titleColor = task.state === "pending" || task.state === "skipped" ? theme.foreground : stateColor;
105
+ const bg = active || (task.state === "in_progress" && !task.responderOwned)
156
106
  ? theme.rowA
157
- : index % 2 === 0
158
- ? theme.rowB
159
- : theme.statusBackground;
107
+ : index % 2 === 0 ? theme.rowB : theme.statusBackground;
160
108
  const ownerChip = taskOwnerChip(task);
161
- const title = `${task.parentTaskId ? "↳ " : ""}` +
162
- `${ownerChip ? `[${ownerChip}] ` : ""}${cleanTaskTitle(task)}`;
163
- const titleBudget = Math.max(8, width - 5);
164
- const titleLines = wrapPlanText(title, titleBudget);
165
- const jobLabel = task.jobId
166
- ? `job=${task.jobId}${task.processId ? ` pid=${task.processId}` : ""}`
167
- : undefined;
168
- const noteText = [jobLabel, task.note?.trim()].filter(Boolean).join(" · ");
169
- const noteLines = noteText
170
- ? wrapPlanText(noteText, Math.max(8, width - 6))
171
- : [];
172
- const firstTitle = titleLines[0] ?? "";
173
- const titleAttributes = state === "in_progress" || active
174
- ? TextAttributes.BOLD
175
- : TextAttributes.NONE;
176
- return (_jsxs("box", { id: `plan-task-${task.id}`, style: {
177
- flexDirection: "column",
178
- width: "100%",
179
- flexShrink: 0,
180
- }, children: [_jsxs("box", { style: {
181
- flexDirection: "row",
182
- width: "100%",
183
- flexShrink: 0,
184
- alignItems: "stretch",
185
- backgroundColor: bg,
186
- }, children: [_jsx("box", { style: {
187
- width: 1,
188
- flexShrink: 0,
189
- alignSelf: "stretch",
190
- backgroundColor: stateColor,
191
- minHeight: 1,
192
- } }), _jsxs("box", { style: {
193
- flexDirection: "column",
194
- flexGrow: 1,
195
- flexShrink: 1,
196
- minWidth: 0,
197
- justifyContent: "center",
198
- paddingLeft: 1,
199
- paddingRight: 1,
200
- paddingTop: 1,
201
- paddingBottom: 1,
202
- backgroundColor: bg,
203
- }, children: [_jsx("text", { content: `${glyph} ${firstTitle}`, style: {
204
- fg: titleColor,
205
- bg,
206
- height: 1,
207
- attributes: titleAttributes,
208
- } }), titleLines.slice(1).map((line, i) => (_jsx("text", { content: ` ${line}`, style: {
209
- fg: titleColor,
210
- bg,
211
- height: 1,
212
- attributes: titleAttributes,
213
- } }, `t-${task.id}-${i}`))), noteLines.map((line, i) => (_jsx("text", { content: line, style: {
214
- fg: theme.muted,
215
- bg,
216
- height: 1,
217
- attributes: TextAttributes.DIM,
218
- } }, `n-${task.id}-${i}`)))] })] }), _jsx("text", { content: " ", style: { bg: theme.statusBackground, height: 1, width: "100%" } })] }));
109
+ const title = `${task.parentTaskId ? "↳ " : ""}${ownerChip ? `[${ownerChip}] ` : ""}${cleanTaskTitle(task)}`;
110
+ const expandable = hasTaskDetails(task);
111
+ const titleLines = wrapTaskDisclosureTitle(title, width, expandable);
112
+ const titleAttributes = task.state === "in_progress" || active ? TextAttributes.BOLD : TextAttributes.NONE;
113
+ return (_jsxs("box", { id: `plan-task-${task.id}`, style: { flexDirection: "column", width: "100%", flexShrink: 0 }, children: [_jsxs("box", { style: { flexDirection: "row", width: "100%", flexShrink: 0, alignItems: "stretch", backgroundColor: bg }, children: [_jsx("box", { style: { width: 1, flexShrink: 0, alignSelf: "stretch", backgroundColor: stateColor, minHeight: 1 } }), _jsxs("box", { style: { flexDirection: "column", flexGrow: 1, flexShrink: 1, minWidth: 0, justifyContent: "center", paddingLeft: 1, paddingRight: 1, paddingTop: 1, paddingBottom: 1, backgroundColor: bg }, children: [_jsx("task-title", { id: `plan-task-${task.id}-header`, style: { flexDirection: "column", width: "100%", flexShrink: 0 }, children: titleLines.map((line, lineIndex) => {
114
+ const last = lineIndex === titleLines.length - 1;
115
+ return (_jsxs("box", { style: { flexDirection: "row", flexShrink: 0 }, children: [_jsx("text", { selectable: false, id: `plan-task-${task.id}-title-${last ? "end" : lineIndex}`, wrapMode: "none", content: `${lineIndex === 0 ? taskGlyph(task) : " "} ${line}`, style: { fg: titleColor, bg, height: 1, flexShrink: 0, attributes: titleAttributes } }), last && expandable ? (_jsxs(_Fragment, { children: [_jsx("text", { selectable: false, content: " ", style: { bg, height: 1, flexShrink: 0 } }), _jsx(TaskDisclosureButton, { taskId: task.id, theme: theme, bg: bg, selected: selected, expanded: expanded, onToggle: onToggle })] })) : null] }, `title-${lineIndex}`));
116
+ }) }), expanded && expandable ? _jsx(TaskDetails, { task: task, theme: theme, width: Math.max(1, width - 6), bg: bg }) : null] })] }), _jsx("text", { selectable: false, content: " ", style: { bg: theme.statusBackground, height: 1, width: "100%" } })] }));
117
+ });
118
+ function TaskDetails(props) {
119
+ const { task, theme, width, bg } = props;
120
+ const lines = useMemo(() => wrapPlanText(taskDetailText(task), width), [task, width]);
121
+ return (_jsx("box", { id: `plan-task-${task.id}-details`, style: { flexDirection: "column", flexShrink: 0, width: "100%" }, children: lines.map((line, index) => _jsx("text", { selectable: false, content: line, style: { fg: theme.muted, bg, height: 1, attributes: TextAttributes.DIM } }, `body-${index}`)) }));
219
122
  }
220
123
  export const PlanView = memo(PlanViewImpl);
221
124
  //# sourceMappingURL=plan-view.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-view.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/plan/plan-view.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-view.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/plan/plan-view.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { BoxRenderable } from "@opentui/core";
2
+ export declare class TaskTitleRenderable extends BoxRenderable {
3
+ protected _getVisibleChildren(): number[];
4
+ }
5
+ declare module "@opentui/react" {
6
+ interface OpenTUIComponents {
7
+ "task-title": typeof TaskTitleRenderable;
8
+ }
9
+ }
@@ -0,0 +1,17 @@
1
+ import { BoxRenderable, ScrollBoxRenderable } from "@opentui/core";
2
+ import { extend } from "@opentui/react";
3
+ export class TaskTitleRenderable extends BoxRenderable {
4
+ _getVisibleChildren() {
5
+ let ancestor = this.parent;
6
+ while (ancestor && !(ancestor instanceof ScrollBoxRenderable))
7
+ ancestor = ancestor.parent;
8
+ if (!ancestor)
9
+ return super._getVisibleChildren();
10
+ const viewport = ancestor.viewport;
11
+ const fits = this.height <= viewport.height;
12
+ const clipped = this.y < viewport.y || this.y + this.height > viewport.y + viewport.height;
13
+ return fits && clipped ? [] : super._getVisibleChildren();
14
+ }
15
+ }
16
+ extend({ "task-title": TaskTitleRenderable });
17
+ //# sourceMappingURL=task-title.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-title.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/plan/task-title.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAmB,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,MAAM,OAAO,mBAAoB,SAAQ,aAAa;IACjC,mBAAmB;QACpC,IAAI,QAAQ,GAAsB,IAAI,CAAC,MAAM,CAAC;QAC9C,OAAO,QAAQ,IAAI,CAAC,CAAC,QAAQ,YAAY,mBAAmB,CAAC;YAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC1F,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAClD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC3F,OAAO,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;IAC5D,CAAC;CACF;AAQD,MAAM,CAAC,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type Dispatch, type Ref, type RefObject, type SetStateAction } from "react";
2
+ import type { ScrollBoxRenderable } from "@opentui/core";
3
+ import type { PlanTask, SessionPlan } from "../../../store/plan.js";
4
+ import { type TaskDisclosureState } from "../../../ui-core/rendering/task-disclosure.js";
5
+ import type { PlanInteractionPort } from "./plan-interaction.js";
6
+ export interface TaskDisclosureBinding {
7
+ readonly state: TaskDisclosureState;
8
+ readonly tasks: readonly PlanTask[];
9
+ readonly setState: Dispatch<SetStateAction<TaskDisclosureState>>;
10
+ }
11
+ export declare function useTaskDisclosureBinding(plan: SessionPlan | undefined, inherited?: TaskDisclosureBinding): TaskDisclosureBinding;
12
+ export declare function revealTaskHeader(scroll: ScrollBoxRenderable | null, taskId: string): void;
13
+ export declare function useTaskDisclosure(plan: SessionPlan | undefined, scrollRef: RefObject<ScrollBoxRenderable | null>, interactionRef: Ref<PlanInteractionPort> | undefined, inherited?: TaskDisclosureBinding): {
14
+ tasks: readonly PlanTask[];
15
+ expanded: ReadonlySet<string>;
16
+ selectedId: string | undefined;
17
+ keyboardFocusVisible: boolean;
18
+ summary: {
19
+ readonly total: number;
20
+ readonly expanded: number;
21
+ };
22
+ toggleTask: (id: string) => void;
23
+ setAllExpanded: (expanded: boolean, keyboardFocusVisible?: boolean) => void;
24
+ hideKeyboardFocus: () => void;
25
+ };
@@ -0,0 +1,125 @@
1
+ import { useCallback, useEffect, useImperativeHandle, useMemo, useState } from "react";
2
+ import { moveTaskSelection, reconcileTaskDisclosure, setAllTaskDisclosure, setTaskDisclosure, taskDisclosureSummary, } from "../../../ui-core/rendering/task-disclosure.js";
3
+ import { orderPlanTasksForDisplay } from "../../../ui-core/rendering/plan-view.js";
4
+ export function useTaskDisclosureBinding(plan, inherited) {
5
+ const tasks = useMemo(() => inherited?.tasks ?? (plan ? orderPlanTasksForDisplay(plan.tasks) : []), [inherited?.tasks, plan?.tasks]);
6
+ const [stored, setStored] = useState(() => reconcileTaskDisclosure({ planKey: "", selectedId: undefined, expanded: new Set() }, plan, tasks));
7
+ const state = inherited?.state ?? reconcileTaskDisclosure(stored, plan, tasks);
8
+ if (!inherited && state !== stored)
9
+ setStored(state);
10
+ const setState = inherited?.setState ?? setStored;
11
+ return useMemo(() => ({ state, tasks, setState }), [state, tasks, setState]);
12
+ }
13
+ function taskHeaderBounds(scroll, taskId) {
14
+ const header = scroll.content.findDescendantById(`plan-task-${taskId}-header`);
15
+ if (!header)
16
+ return undefined;
17
+ let top = 0;
18
+ let current = header;
19
+ while (current && current !== scroll.content) {
20
+ top += current.getLayoutNode().getComputedTop();
21
+ current = current.parent;
22
+ }
23
+ return { top, height: header.getLayoutNode().getComputedHeight() };
24
+ }
25
+ export function revealTaskHeader(scroll, taskId) {
26
+ if (!scroll)
27
+ return;
28
+ const header = taskHeaderBounds(scroll, taskId);
29
+ if (!header)
30
+ return;
31
+ const bottom = header.top + Math.min(header.height, scroll.viewport.height);
32
+ if (header.top < scroll.scrollTop)
33
+ scroll.scrollTo(header.top);
34
+ else if (bottom > scroll.scrollTop + scroll.viewport.height)
35
+ scroll.scrollTo(bottom - scroll.viewport.height);
36
+ }
37
+ export function useTaskDisclosure(plan, scrollRef, interactionRef, inherited) {
38
+ const { state, tasks, setState } = useTaskDisclosureBinding(plan, inherited);
39
+ useEffect(() => {
40
+ const scroll = scrollRef.current;
41
+ if (!scroll || state.expanded.size > 0)
42
+ return;
43
+ let previous = scroll.scrollTop;
44
+ let aligning = false;
45
+ const alignTitle = () => {
46
+ const position = scroll.scrollTop;
47
+ const down = position >= previous;
48
+ previous = position;
49
+ if (aligning || scroll.viewport.height <= 0)
50
+ return;
51
+ const headers = tasks.flatMap((task) => {
52
+ const header = taskHeaderBounds(scroll, task.id);
53
+ return header && header.height > 0 ? [header] : [];
54
+ });
55
+ const bottom = position + scroll.viewport.height;
56
+ if (headers.some((header) => header.height <= scroll.viewport.height
57
+ ? header.top >= position && header.top + header.height <= bottom
58
+ : header.top < bottom && header.top + header.height > position))
59
+ return;
60
+ const target = down ? headers.find((header) => header.top >= position) ?? headers.at(-1)
61
+ : [...headers].reverse().find((header) => header.top < position) ?? headers[0];
62
+ if (!target)
63
+ return;
64
+ aligning = true;
65
+ scroll.scrollTo(target.top);
66
+ previous = scroll.scrollTop;
67
+ aligning = false;
68
+ };
69
+ scroll.verticalScrollBar.on("change", alignTitle);
70
+ scroll.viewport.on("resized", alignTitle);
71
+ scroll.content.on("resized", alignTitle);
72
+ alignTitle();
73
+ return () => {
74
+ scroll.verticalScrollBar.off("change", alignTitle);
75
+ scroll.viewport.off("resized", alignTitle);
76
+ scroll.content.off("resized", alignTitle);
77
+ };
78
+ }, [scrollRef, tasks, state.expanded.size]);
79
+ const update = useCallback((operation, keyboardFocusVisible) => {
80
+ setState((current) => {
81
+ const next = operation(reconcileTaskDisclosure(current, plan, tasks));
82
+ return next.keyboardFocusVisible === keyboardFocusVisible ? next : { ...next, keyboardFocusVisible };
83
+ });
84
+ }, [plan, tasks, setState]);
85
+ const toggleTask = useCallback((id) => {
86
+ const task = tasks.find((candidate) => candidate.id === id);
87
+ if (task)
88
+ update((current) => setTaskDisclosure(current, task), false);
89
+ }, [tasks, update]);
90
+ const setAllExpanded = useCallback((expanded, keyboardFocusVisible = false) => {
91
+ update((current) => setAllTaskDisclosure(current, tasks, expanded), keyboardFocusVisible);
92
+ }, [tasks, update]);
93
+ const hideKeyboardFocus = useCallback(() => update((current) => current, false), [update]);
94
+ useImperativeHandle(interactionRef, () => ({
95
+ moveSelection(delta) {
96
+ update((current) => moveTaskSelection(current, tasks, delta), true);
97
+ },
98
+ setSelectedExpanded(expanded) {
99
+ update((current) => {
100
+ const task = tasks.find((candidate) => candidate.id === current.selectedId);
101
+ return task ? setTaskDisclosure(current, task, expanded) : current;
102
+ }, true);
103
+ },
104
+ setAllExpanded(expanded) {
105
+ setAllExpanded(expanded, true);
106
+ },
107
+ page(delta) {
108
+ update((current) => current, true);
109
+ const scroll = scrollRef.current;
110
+ if (scroll)
111
+ scroll.scrollBy(delta * Math.max(1, scroll.viewport.height - 2));
112
+ },
113
+ }), [scrollRef, setAllExpanded, tasks, update]);
114
+ return {
115
+ tasks,
116
+ expanded: state.expanded,
117
+ selectedId: state.selectedId,
118
+ keyboardFocusVisible: state.keyboardFocusVisible === true,
119
+ summary: taskDisclosureSummary(tasks, state.expanded),
120
+ toggleTask,
121
+ setAllExpanded,
122
+ hideKeyboardFocus,
123
+ };
124
+ }
125
+ //# sourceMappingURL=use-task-disclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-task-disclosure.js","sourceRoot":"","sources":["../../../../src/tui-v2/components/plan/use-task-disclosure.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,7 @@ import { formatAttachmentReference } from "../../ui/mentions.js";
10
10
  import { getConfig, getProviderModel } from "../../store/config.js";
11
11
  import { effectiveThinkingEffort } from "../../llm/capabilities.js";
12
12
  import { chordFromKeyEvent } from "../input/chord-from-opentui-key.js";
13
+ import { resolvePlanInteraction } from "../components/plan/plan-interaction.js";
13
14
  import { PromptHistory } from "../../ui-core/composer/prompt-history.js";
14
15
  import { ARROW_BURST_WINDOW_MS, resolveArrowIntent, } from "../../ui-core/composer/arrow-intent.js";
15
16
  import { isLargePaste, pastePlaceholderRanges, PasteRegistry, samePastePlaceholderEntries, } from "../../ui-core/composer/paste-placeholder.js";
@@ -133,6 +134,8 @@ export const ComposerEditor = memo(function ComposerEditor(props) {
133
134
  return;
134
135
  if (overlay.kind !== "none")
135
136
  return;
137
+ if (services.focus.activeContext() === "plan" && resolvePlanInteraction(chord))
138
+ return;
136
139
  if (menuKindRef.current !== "none" && !shouldOwnKeyboard) {
137
140
  if (chord === "up" ||
138
141
  chord === "down" ||