@sagmans/dsh-tui 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +158 -6
  2. package/cordis.patch.yml +14 -0
  3. package/lib/agent/projections.d.ts +22 -6
  4. package/lib/agent/projections.d.ts.map +1 -1
  5. package/lib/agent/projections.js +21 -10
  6. package/lib/agent/projections.js.map +1 -1
  7. package/lib/agent/prompt-history.d.ts +89 -0
  8. package/lib/agent/prompt-history.d.ts.map +1 -0
  9. package/lib/agent/prompt-history.js +380 -0
  10. package/lib/agent/prompt-history.js.map +1 -0
  11. package/lib/agent/status.d.ts +6 -0
  12. package/lib/agent/status.d.ts.map +1 -1
  13. package/lib/agent/status.js +1 -0
  14. package/lib/agent/status.js.map +1 -1
  15. package/lib/herdr/client.d.ts +57 -0
  16. package/lib/herdr/client.d.ts.map +1 -0
  17. package/lib/herdr/client.js +218 -0
  18. package/lib/herdr/client.js.map +1 -0
  19. package/lib/herdr/constants.d.ts +93 -0
  20. package/lib/herdr/constants.d.ts.map +1 -0
  21. package/lib/herdr/constants.js +79 -0
  22. package/lib/herdr/constants.js.map +1 -0
  23. package/lib/herdr/reporter.d.ts +60 -0
  24. package/lib/herdr/reporter.d.ts.map +1 -0
  25. package/lib/herdr/reporter.js +217 -0
  26. package/lib/herdr/reporter.js.map +1 -0
  27. package/lib/herdr/state.d.ts +57 -0
  28. package/lib/herdr/state.d.ts.map +1 -0
  29. package/lib/herdr/state.js +62 -0
  30. package/lib/herdr/state.js.map +1 -0
  31. package/lib/index.d.ts.map +1 -1
  32. package/lib/index.js +252 -20
  33. package/lib/index.js.map +1 -1
  34. package/lib/input/actions.d.ts +1 -1
  35. package/lib/input/actions.d.ts.map +1 -1
  36. package/lib/input/actions.js +3 -0
  37. package/lib/input/actions.js.map +1 -1
  38. package/lib/input/ghost.d.ts +46 -0
  39. package/lib/input/ghost.d.ts.map +1 -0
  40. package/lib/input/ghost.js +58 -0
  41. package/lib/input/ghost.js.map +1 -0
  42. package/lib/input/keymap.d.ts.map +1 -1
  43. package/lib/input/keymap.js +2 -0
  44. package/lib/input/keymap.js.map +1 -1
  45. package/lib/input/submission.d.ts +24 -1
  46. package/lib/input/submission.d.ts.map +1 -1
  47. package/lib/input/submission.js +28 -1
  48. package/lib/input/submission.js.map +1 -1
  49. package/lib/stash/lock.d.ts +72 -0
  50. package/lib/stash/lock.d.ts.map +1 -0
  51. package/lib/stash/lock.js +374 -0
  52. package/lib/stash/lock.js.map +1 -0
  53. package/lib/stash/paths.d.ts +22 -0
  54. package/lib/stash/paths.d.ts.map +1 -0
  55. package/lib/stash/paths.js +83 -0
  56. package/lib/stash/paths.js.map +1 -0
  57. package/lib/stash/private-fs.d.ts +61 -0
  58. package/lib/stash/private-fs.d.ts.map +1 -0
  59. package/lib/stash/private-fs.js +379 -0
  60. package/lib/stash/private-fs.js.map +1 -0
  61. package/lib/stash/schema.d.ts +57 -0
  62. package/lib/stash/schema.d.ts.map +1 -0
  63. package/lib/stash/schema.js +127 -0
  64. package/lib/stash/schema.js.map +1 -0
  65. package/lib/stash/store.d.ts +92 -0
  66. package/lib/stash/store.d.ts.map +1 -0
  67. package/lib/stash/store.js +262 -0
  68. package/lib/stash/store.js.map +1 -0
  69. package/lib/stash.d.ts +91 -0
  70. package/lib/stash.d.ts.map +1 -0
  71. package/lib/stash.js +296 -0
  72. package/lib/stash.js.map +1 -0
  73. package/lib/theme-settings.d.ts +37 -8
  74. package/lib/theme-settings.d.ts.map +1 -1
  75. package/lib/theme-settings.js +60 -3
  76. package/lib/theme-settings.js.map +1 -1
  77. package/lib/theme-tokens.d.ts +1 -1
  78. package/lib/theme-tokens.d.ts.map +1 -1
  79. package/lib/theme-tokens.js +8 -0
  80. package/lib/theme-tokens.js.map +1 -1
  81. package/lib/todo-guard.d.ts +116 -0
  82. package/lib/todo-guard.d.ts.map +1 -0
  83. package/lib/todo-guard.js +259 -0
  84. package/lib/todo-guard.js.map +1 -0
  85. package/lib/ui/editor.d.ts +41 -1
  86. package/lib/ui/editor.d.ts.map +1 -1
  87. package/lib/ui/editor.js +98 -4
  88. package/lib/ui/editor.js.map +1 -1
  89. package/lib/ui/history-picker.d.ts +15 -0
  90. package/lib/ui/history-picker.d.ts.map +1 -0
  91. package/lib/ui/history-picker.js +26 -0
  92. package/lib/ui/history-picker.js.map +1 -0
  93. package/lib/ui/picker.d.ts +11 -1
  94. package/lib/ui/picker.d.ts.map +1 -1
  95. package/lib/ui/picker.js +17 -2
  96. package/lib/ui/picker.js.map +1 -1
  97. package/lib/ui/prompt.d.ts +2 -0
  98. package/lib/ui/prompt.d.ts.map +1 -1
  99. package/lib/ui/prompt.js +4 -0
  100. package/lib/ui/prompt.js.map +1 -1
  101. package/lib/ui/stash-picker.d.ts +43 -0
  102. package/lib/ui/stash-picker.d.ts.map +1 -0
  103. package/lib/ui/stash-picker.js +78 -0
  104. package/lib/ui/stash-picker.js.map +1 -0
  105. package/lib/ui/status.d.ts +2 -0
  106. package/lib/ui/status.d.ts.map +1 -1
  107. package/lib/ui/status.js +7 -0
  108. package/lib/ui/status.js.map +1 -1
  109. package/lib/work.d.ts +3 -1
  110. package/lib/work.d.ts.map +1 -1
  111. package/lib/work.js +9 -1
  112. package/lib/work.js.map +1 -1
  113. package/package.json +5 -1
@@ -160,12 +160,14 @@ export const TUI_TOKENS = [
160
160
  'status.permission',
161
161
  'status.context',
162
162
  'status.cache',
163
+ 'status.stash',
163
164
  'status.cwd',
164
165
  'status.separator',
165
166
  // Editor
166
167
  'editor.border',
167
168
  'editor.queued',
168
169
  'editor.queued.more',
170
+ 'editor.ghost',
169
171
  'editor.selectList.selectedPrefix',
170
172
  'editor.selectList.selectedText',
171
173
  'editor.selectList.description',
@@ -322,6 +324,9 @@ export const DEFAULT_TOKENS = {
322
324
  'status.permission': muted,
323
325
  'status.context': muted,
324
326
  'status.cache': muted,
327
+ // Accented, unlike the facts around it: a parked draft is something the
328
+ // reader left behind and may want back, not another measurement.
329
+ 'status.stash': { fg: 'accent' },
325
330
  'status.cwd': muted,
326
331
  'status.separator': muted,
327
332
  'editor.border': muted,
@@ -329,6 +334,9 @@ export const DEFAULT_TOKENS = {
329
334
  // what makes queued text read as not-yet-sent rather than as being typed.
330
335
  'editor.queued': { dim: true, italic: true },
331
336
  'editor.queued.more': muted,
337
+ // Faint only: the ghost is a suggestion, and a named colour would drop the
338
+ // faint that makes it read as not-yet-typed.
339
+ 'editor.ghost': { dim: true },
332
340
  'editor.selectList.selectedPrefix': { fg: 'accent' },
333
341
  'editor.selectList.selectedText': { bold: true },
334
342
  'editor.selectList.description': muted,
@@ -1 +1 @@
1
- {"version":3,"file":"theme-tokens.js","sourceRoot":"","sources":["../src/theme-tokens.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme-tokens.js","sourceRoot":"","sources":["../src/theme-tokens.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import z from '@deepseek-ai/schemastery';
3
+ import type { UserMessage } from '@deepseek-ai/dsh-session';
4
+ import type { PostToolDecision } from '@deepseek-ai/dsh-tools';
5
+ import type { TodoEntry } from './work.ts';
6
+ /**
7
+ * Advisory todo discipline.
8
+ *
9
+ * The model already owns a whole-list todo tool; what it lacks is a reason to
10
+ * keep the list current over a long turn. This guard watches the harness's own
11
+ * projections and, when a plan ages past a threshold, rides the next tool
12
+ * result with a model-visible reminder — the same `additionalContexts` channel
13
+ * the repeat-tool reminder uses. It never vetoes a call and never steers a
14
+ * stopped turn, so it cannot loop; the per-turn cap bounds the one extra step
15
+ * each injected reminder costs the loop.
16
+ */
17
+ export declare const name = "tui-todo-guard";
18
+ /** The tool registry is read through the injected property, so Cordis must provide it first. */
19
+ export declare const inject: string[];
20
+ /** The tool this guard exists to keep honest, as the registry publishes it. */
21
+ export declare const TODO_WRITE_TOOL = "todo_write";
22
+ /** Defaults every deployment inherits; the bundle patch states them again for readers. */
23
+ export declare const TODO_GUARD_DEFAULTS: {
24
+ readonly staleSteps: 6;
25
+ readonly missingListSteps: 12;
26
+ readonly maxRemindersPerTurn: 3;
27
+ readonly previewItems: 5;
28
+ };
29
+ /** The knobs a deployment may tune; the whole object is validated fail-loud. */
30
+ export interface TodoGuardConfig {
31
+ /** Model steps a non-empty open list may age before a reminder. */
32
+ readonly staleSteps: number;
33
+ /** Steps in a turn before the guard suggests a first list at all. */
34
+ readonly missingListSteps: number;
35
+ /** Hard cap on reminders, and so on the extra steps they cost, per turn. */
36
+ readonly maxRemindersPerTurn: number;
37
+ /** Open items quoted in a reminder; the rest become a count. */
38
+ readonly previewItems: number;
39
+ }
40
+ /** The loader validates the row against this schema before `apply` sees it. */
41
+ export declare const Config: z<TodoGuardConfig>;
42
+ /**
43
+ * Apply defaults and validate. The loader normally fills the defaults, but a
44
+ * direct `apply` call (a test, or a composition that bypasses schemastery)
45
+ * must fail loud rather than silently guard nothing.
46
+ */
47
+ export declare function resolveTodoGuardConfig(config?: Partial<TodoGuardConfig>): TodoGuardConfig;
48
+ /** A todo still owed to the reader; the dock draws the same two states. */
49
+ type OpenTodoStatus = Exclude<TodoEntry['status'], 'completed'>;
50
+ export type OpenTodo = TodoEntry & {
51
+ readonly status: OpenTodoStatus;
52
+ };
53
+ /** The model-visible text and the source summary that labels it. */
54
+ export interface TodoReminder {
55
+ readonly text: string;
56
+ readonly summary: string;
57
+ }
58
+ /** The stale-list reminder: the plan aged, so it is now describing earlier work. */
59
+ export declare function staleReminder(open: readonly OpenTodo[], steps: number, previewItems: number): TodoReminder;
60
+ /** The reminder for a long turn that has produced no list at all. */
61
+ export declare function missingListReminder(steps: number): TodoReminder;
62
+ /**
63
+ * What one read of the `todos` projection found.
64
+ *
65
+ * `absent` is the tool's own "nothing written yet"; `unavailable` is a registry
66
+ * that cannot answer at all. The guard promises silence for the second, so the
67
+ * two must not collapse into one.
68
+ */
69
+ export type TodoListRead = {
70
+ readonly kind: 'listed';
71
+ readonly todos: readonly TodoEntry[];
72
+ } | {
73
+ readonly kind: 'absent';
74
+ } | {
75
+ readonly kind: 'unavailable';
76
+ };
77
+ /** What the guard reads about one agent before deciding whether to speak. */
78
+ export interface TodoObservation {
79
+ readonly toolName: string;
80
+ readonly hasTodoTool: boolean;
81
+ /** Plan mode suppresses the guard; `undefined` is a plan read that cannot answer. */
82
+ readonly planActive: boolean | undefined;
83
+ readonly todos: TodoListRead;
84
+ }
85
+ /**
86
+ * The decision core, free of Cordis so it can be tested directly.
87
+ *
88
+ * It counts model steps rather than tool calls: a plan ages by how much the
89
+ * agent has thought and acted since its last write, and a parallel batch of
90
+ * calls is one step, so one batch can never spend the whole reminder budget.
91
+ */
92
+ export declare class TodoGuard {
93
+ private readonly config;
94
+ private readonly counters;
95
+ constructor(config: TodoGuardConfig);
96
+ /** Follow the durable events that open a turn or a step. */
97
+ onEvent(session: object, type: string): void;
98
+ /** The reminder this tool result should carry, or undefined to stay silent. */
99
+ observe(session: object, observation: TodoObservation): TodoReminder | undefined;
100
+ private countersFor;
101
+ }
102
+ /**
103
+ * Prepend the guard's context while preserving every downstream context's own
104
+ * source, and carry it on a block as well so a denied call still reads it.
105
+ */
106
+ export declare function foldReminder(reminder: UserMessage, downstream: PostToolDecision): PostToolDecision;
107
+ /**
108
+ * Install the guard's listeners.
109
+ *
110
+ * The list and plan come from the host projections rather than a private fold,
111
+ * so this reads exactly the lifetime every other surface shows. Absent
112
+ * projections mean silence, never an error, because the guard is decoration.
113
+ */
114
+ export declare function apply(ctx: Context, config?: Partial<TodoGuardConfig>): void;
115
+ export {};
116
+ //# sourceMappingURL=todo-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-guard.d.ts","sourceRoot":"","sources":["../src/todo-guard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,259 @@
1
+ import z from '@deepseek-ai/schemastery';
2
+ import { createUserMessage } from '@deepseek-ai/dsh-llm';
3
+ import { projectionRead } from "./agent/projections.js";
4
+ /**
5
+ * Advisory todo discipline.
6
+ *
7
+ * The model already owns a whole-list todo tool; what it lacks is a reason to
8
+ * keep the list current over a long turn. This guard watches the harness's own
9
+ * projections and, when a plan ages past a threshold, rides the next tool
10
+ * result with a model-visible reminder — the same `additionalContexts` channel
11
+ * the repeat-tool reminder uses. It never vetoes a call and never steers a
12
+ * stopped turn, so it cannot loop; the per-turn cap bounds the one extra step
13
+ * each injected reminder costs the loop.
14
+ */
15
+ export const name = 'tui-todo-guard';
16
+ /** The tool registry is read through the injected property, so Cordis must provide it first. */
17
+ export const inject = ['tools'];
18
+ /** The tool this guard exists to keep honest, as the registry publishes it. */
19
+ export const TODO_WRITE_TOOL = 'todo_write';
20
+ /** The durable events the counter follows. */
21
+ const TURN_START = 'turn/start';
22
+ const STEP_START = 'step/start';
23
+ /** The tool's own snapshot event, appended only once a write is committed. */
24
+ const TODO_WRITE_EVENT = 'todo/write';
25
+ /** Projection keys the harness registers for the tool and for plan mode. */
26
+ const TODOS_KEY = 'todos';
27
+ const PLAN_KEY = 'plan';
28
+ /** The reminder source; unlabeled context would read as a user prompt in derived history. */
29
+ const PLUGIN_SOURCE = { kind: 'plugin', plugin: 'tui-todo-guard' };
30
+ /** Defaults every deployment inherits; the bundle patch states them again for readers. */
31
+ export const TODO_GUARD_DEFAULTS = {
32
+ staleSteps: 6,
33
+ missingListSteps: 12,
34
+ maxRemindersPerTurn: 3,
35
+ previewItems: 5,
36
+ };
37
+ /** The loader validates the row against this schema before `apply` sees it. */
38
+ export const Config = z.object({
39
+ staleSteps: z.number().default(TODO_GUARD_DEFAULTS.staleSteps),
40
+ missingListSteps: z.number().default(TODO_GUARD_DEFAULTS.missingListSteps),
41
+ maxRemindersPerTurn: z.number().default(TODO_GUARD_DEFAULTS.maxRemindersPerTurn),
42
+ previewItems: z.number().default(TODO_GUARD_DEFAULTS.previewItems),
43
+ });
44
+ /** One field that must be a positive whole number, or a load-time failure. */
45
+ function positiveInteger(field, value) {
46
+ if (!Number.isInteger(value) || value < 1) {
47
+ throw new Error(`todo-guard: \`${field}\` must be an integer >= 1 (got ${String(value)})`);
48
+ }
49
+ return value;
50
+ }
51
+ /**
52
+ * Apply defaults and validate. The loader normally fills the defaults, but a
53
+ * direct `apply` call (a test, or a composition that bypasses schemastery)
54
+ * must fail loud rather than silently guard nothing.
55
+ */
56
+ export function resolveTodoGuardConfig(config = {}) {
57
+ return {
58
+ staleSteps: positiveInteger('staleSteps', config.staleSteps ?? TODO_GUARD_DEFAULTS.staleSteps),
59
+ missingListSteps: positiveInteger('missingListSteps', config.missingListSteps ?? TODO_GUARD_DEFAULTS.missingListSteps),
60
+ maxRemindersPerTurn: positiveInteger('maxRemindersPerTurn', config.maxRemindersPerTurn ?? TODO_GUARD_DEFAULTS.maxRemindersPerTurn),
61
+ previewItems: positiveInteger('previewItems', config.previewItems ?? TODO_GUARD_DEFAULTS.previewItems),
62
+ };
63
+ }
64
+ const OPEN_GLYPHS = { pending: '☐', in_progress: '▸' };
65
+ const isOpenTodo = (todo) => todo.status !== 'completed';
66
+ /** The stale-list reminder: the plan aged, so it is now describing earlier work. */
67
+ export function staleReminder(open, steps, previewItems) {
68
+ const shown = open.slice(0, previewItems);
69
+ const omitted = open.length - shown.length;
70
+ return {
71
+ text: [
72
+ `Your todo list is stale: ${steps} step${steps === 1 ? '' : 's'} have passed without a todo_write, and ${open.length} item${open.length === 1 ? '' : 's'} ${open.length === 1 ? 'is' : 'are'} still open:`,
73
+ ...shown.map(todo => ` ${OPEN_GLYPHS[todo.status]} ${todo.content}`),
74
+ ...(omitted > 0 ? [` … ${omitted} more`] : []),
75
+ 'Update it now: mark finished items completed, mark the item you are working on in_progress, and add work you discovered. Do not leave the list describing earlier work.',
76
+ ].join('\n'),
77
+ summary: `todos stale · ${steps} steps`,
78
+ };
79
+ }
80
+ /** The reminder for a long turn that has produced no list at all. */
81
+ export function missingListReminder(steps) {
82
+ return {
83
+ text: `${steps} steps have run in this turn without a todo list. If this work has more than one step, call todo_write now to record the concrete remaining steps and mark the one you are on in_progress.`,
84
+ summary: `todos missing · ${steps} steps`,
85
+ };
86
+ }
87
+ /**
88
+ * The decision core, free of Cordis so it can be tested directly.
89
+ *
90
+ * It counts model steps rather than tool calls: a plan ages by how much the
91
+ * agent has thought and acted since its last write, and a parallel batch of
92
+ * calls is one step, so one batch can never spend the whole reminder budget.
93
+ */
94
+ export class TodoGuard {
95
+ config;
96
+ counters = new WeakMap();
97
+ constructor(config) {
98
+ this.config = config;
99
+ }
100
+ /** Follow the durable events that open a turn or a step. */
101
+ onEvent(session, type) {
102
+ const counters = this.countersFor(session);
103
+ if (type === TURN_START) {
104
+ counters.steps = 0;
105
+ counters.reminders = 0;
106
+ counters.remindedThisStep = false;
107
+ return;
108
+ }
109
+ if (type === STEP_START) {
110
+ counters.steps += 1;
111
+ counters.remindedThisStep = false;
112
+ return;
113
+ }
114
+ // Only a committed write restarts the age. An attempt the tool rejected
115
+ // never reaches this event, so it cannot buy the stale list quiet steps.
116
+ if (type === TODO_WRITE_EVENT)
117
+ counters.steps = 0;
118
+ }
119
+ /** The reminder this tool result should carry, or undefined to stay silent. */
120
+ observe(session, observation) {
121
+ const counters = this.countersFor(session);
122
+ // Never speak on the write's own result; the committed event restarts the
123
+ // count, so a rejected attempt does not silence the guard either.
124
+ if (observation.toolName === TODO_WRITE_TOOL)
125
+ return undefined;
126
+ if (!observation.hasTodoTool)
127
+ return undefined;
128
+ // Plan mode suppresses the guard, and an unreadable plan projection is not
129
+ // a `false` answer, so only a definite "not in plan mode" lets it speak.
130
+ if (observation.planActive !== false)
131
+ return undefined;
132
+ if (observation.todos.kind === 'unavailable')
133
+ return undefined;
134
+ if (counters.remindedThisStep || counters.reminders >= this.config.maxRemindersPerTurn)
135
+ return undefined;
136
+ const open = observation.todos.kind === 'listed' ? observation.todos.todos.filter(isOpenTodo) : [];
137
+ const reminder = open.length > 0
138
+ ? counters.steps >= this.config.staleSteps
139
+ ? staleReminder(open, counters.steps, this.config.previewItems)
140
+ : undefined
141
+ : observation.todos.kind === 'absent' && counters.steps >= this.config.missingListSteps
142
+ ? missingListReminder(counters.steps)
143
+ : undefined;
144
+ if (reminder === undefined)
145
+ return undefined;
146
+ counters.steps = 0;
147
+ counters.remindedThisStep = true;
148
+ counters.reminders += 1;
149
+ return reminder;
150
+ }
151
+ countersFor(session) {
152
+ let counters = this.counters.get(session);
153
+ if (counters === undefined) {
154
+ counters = { steps: 0, reminders: 0, remindedThisStep: false };
155
+ this.counters.set(session, counters);
156
+ }
157
+ return counters;
158
+ }
159
+ }
160
+ /**
161
+ * Prepend the guard's context while preserving every downstream context's own
162
+ * source, and carry it on a block as well so a denied call still reads it.
163
+ */
164
+ export function foldReminder(reminder, downstream) {
165
+ const contexts = [reminder, ...downstream.additionalContexts ?? []];
166
+ if (downstream.kind === 'block') {
167
+ return { kind: 'block', feedback: downstream.feedback, additionalContexts: contexts };
168
+ }
169
+ return { ...downstream, additionalContexts: contexts };
170
+ }
171
+ function asRecord(value) {
172
+ return typeof value === 'object' && value !== null ? value : undefined;
173
+ }
174
+ const TODO_STATUSES = new Set(['pending', 'in_progress', 'completed']);
175
+ /** The current whole list from the harness projection. */
176
+ function readTodos(ctx, session) {
177
+ const read = projectionRead(ctx, session, TODOS_KEY);
178
+ // The projection is an array once the tool has written and `null` before
179
+ // that; an unregistered or unreadable unit silences us instead.
180
+ if (read.kind !== 'state')
181
+ return { kind: 'unavailable' };
182
+ const state = read.state;
183
+ if (state === null)
184
+ return { kind: 'absent' };
185
+ if (!Array.isArray(state))
186
+ return { kind: 'unavailable' };
187
+ const todos = [];
188
+ for (const item of state) {
189
+ const record = asRecord(item);
190
+ const content = record?.content;
191
+ const status = record?.status;
192
+ if (typeof content !== 'string')
193
+ continue;
194
+ if (typeof status !== 'string' || !TODO_STATUSES.has(status))
195
+ continue;
196
+ todos.push({ content, status: status });
197
+ }
198
+ return { kind: 'listed', todos };
199
+ }
200
+ /** Whether this session is in plan mode; `undefined` when that cannot be read. */
201
+ function readPlanActive(ctx, session) {
202
+ const read = projectionRead(ctx, session, PLAN_KEY);
203
+ // An unregistered key means plan mode is not composed for this agent, which is
204
+ // a definite "not in plan mode". A registered unit that cannot answer is not a
205
+ // definite anything, so it keeps the guard silent.
206
+ if (read.kind === 'unregistered')
207
+ return false;
208
+ if (read.kind !== 'state')
209
+ return undefined;
210
+ return asRecord(read.state)?.active === true;
211
+ }
212
+ /** Whether `todo_write` is reachable from this agent, so a tool-less preset stays silent. */
213
+ function todoToolAvailable(ctx, agent) {
214
+ try {
215
+ // `get` is presentation-agnostic: under PTC the model sees only `run_code`,
216
+ // but the sub-dispatch it programs still reaches `todo_write`, so a scan of
217
+ // the wire schemas would wrongly silence the guard in the default mode.
218
+ // Read live: a cached answer would outlive a registry that changed.
219
+ return ctx.tools.get(TODO_WRITE_TOOL, agent) !== undefined;
220
+ }
221
+ catch {
222
+ // A torn-down scope answers nothing; the next call asks again rather than
223
+ // remembering a transient failure as a permanent silence.
224
+ return false;
225
+ }
226
+ }
227
+ /**
228
+ * Install the guard's listeners.
229
+ *
230
+ * The list and plan come from the host projections rather than a private fold,
231
+ * so this reads exactly the lifetime every other surface shows. Absent
232
+ * projections mean silence, never an error, because the guard is decoration.
233
+ */
234
+ export function apply(ctx, config = {}) {
235
+ const resolved = resolveTodoGuardConfig(config);
236
+ const guard = new TodoGuard(resolved);
237
+ ctx.on('session/event', (session, event) => { guard.onEvent(session, event.type); });
238
+ ctx.on('tools/post-execute', async (exec, result, next) => {
239
+ const agent = exec.agent;
240
+ // Observe before delegating so a downstream block cannot hide the fact that
241
+ // the step happened; the reminder then rides whatever decision comes back.
242
+ // A concluding result ends the turn at this step, so a context here would
243
+ // only buy one more step after the tools have already wound down.
244
+ const reminder = agent === undefined || result.concludesTurn === true ? undefined : guard.observe(agent.session, {
245
+ toolName: exec.name,
246
+ hasTodoTool: todoToolAvailable(ctx, agent),
247
+ planActive: readPlanActive(ctx, agent.session),
248
+ todos: readTodos(ctx, agent.session),
249
+ });
250
+ const downstream = await next();
251
+ if (reminder === undefined)
252
+ return downstream;
253
+ return foldReminder(createUserMessage({
254
+ content: [{ type: 'text', text: reminder.text }],
255
+ source: { ...PLUGIN_SOURCE, form: 'notice', summary: reminder.summary },
256
+ }), downstream);
257
+ });
258
+ }
259
+ //# sourceMappingURL=todo-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todo-guard.js","sourceRoot":"","sources":["../src/todo-guard.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,29 @@
1
1
  import { Editor, type EditorTheme, type TUI, type TuiMouseEvent, type TuiMouseEventResult } from '@earendil-works/pi-tui';
2
2
  import { type Keymap } from '../input/actions.ts';
3
+ import { type EditorCursor } from '../input/ghost.ts';
4
+ /** Which run of a ghost is being drawn: the cursor cell, or the text after it. */
5
+ export type GhostCell = 'cursor' | 'rest';
6
+ /** What the bar knows when it asks for a suggestion. */
7
+ export interface GhostRequest {
8
+ readonly text: string;
9
+ readonly lines: readonly string[];
10
+ readonly cursor: EditorCursor;
11
+ }
12
+ /**
13
+ * The recorded-prompt suggestion the bar offers, and how to draw it.
14
+ *
15
+ * Kept as a collaborator rather than built in: the editor owns where the text
16
+ * goes, while the surface owns where the entries come from and which shade they
17
+ * are drawn in, so neither has to know the other's world.
18
+ */
19
+ export interface GhostBrush {
20
+ /** Whether the affordance may draw at all; colour and settings decide this. */
21
+ enabled(): boolean;
22
+ /** The suffix to offer after the typed text, or undefined for none. */
23
+ suggestion(input: GhostRequest): string | undefined;
24
+ /** Paint one run of the suffix; '' leaves the run undrawn. */
25
+ paint(text: string, cell: GhostCell): string;
26
+ }
3
27
  /**
4
28
  * The input bar drawn as a box, with its completion menu above it.
5
29
  *
@@ -10,13 +34,14 @@ import { type Keymap } from '../input/actions.ts';
10
34
  */
11
35
  export declare class BoxedEditor extends Editor {
12
36
  private readonly keymap;
37
+ private readonly ghost?;
13
38
  /** Rows the menu took in the last render; a click there belongs to the list. */
14
39
  private menuRows;
15
40
  /** Rows between the rules in the last render; how the base editor counts its own. */
16
41
  private textRows;
17
42
  /** Whether the last render drew a frame, which is what a click is mapped through. */
18
43
  private boxed;
19
- constructor(tui: TUI, theme: EditorTheme, keymap?: () => Keymap);
44
+ constructor(tui: TUI, theme: EditorTheme, keymap?: () => Keymap, ghost?: GhostBrush | undefined);
20
45
  /**
21
46
  * Read the two presses the base class cannot place on its own.
22
47
  *
@@ -36,6 +61,21 @@ export declare class BoxedEditor extends Editor {
36
61
  * what it collects without hiding the box the reader types inside.
37
62
  */
38
63
  protected decorateText(row: string): string;
64
+ /** The suggestion to draw this paint, or undefined when the brush offers none. */
65
+ private currentGhostSuffix;
66
+ /**
67
+ * Replace the end-of-text cursor cell with the offered suffix.
68
+ *
69
+ * The base draws the cursor as one reverse-video cell and pads the rest of the
70
+ * row; the suffix takes that cell plus the padding after it, so the row keeps
71
+ * exactly its width and the cursor stays where the reader is typing.
72
+ */
73
+ private ghostRow;
74
+ /**
75
+ * Take a ghost-accepting key before the base sees it, so the key returns to
76
+ * its own meaning the moment nothing is offered.
77
+ */
78
+ private acceptGhost;
39
79
  render(width: number): string[];
40
80
  /**
41
81
  * Map a click back through the frame and the lifted menu.
@@ -1 +1 @@
1
- {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/ui/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAIN,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAuC3E;;;;;;;GAOG;AACH,qBAAa,WAAY,SAAQ,MAAM;IAQK,OAAO,CAAC,QAAQ,CAAC,MAAM;IAPjE,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAI;IACpB,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAI;IACpB,qFAAqF;IACrF,OAAO,CAAC,KAAK,CAAQ;gBAET,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAmB,MAAM,GAAE,MAAM,MAAsB;IAI/F;;;;;;;;OAQG;IACM,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAiCxC,0EAA0E;cACvD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IAIrF,kFAAkF;IAClF,OAAO,CAAC,IAAI;IAIZ;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIlC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA2BxC;;;;;;;;OAQG;IACM,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,mBAAmB,GAAG,SAAS;CAQ5E"}
1
+ {"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../../src/ui/editor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAMN,KAAK,WAAW,EAChB,KAAK,GAAG,EACR,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACzB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAsE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAmDzH,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAA;AAEzC,wDAAwD;AACxD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC9B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,+EAA+E;IAC/E,OAAO,IAAI,OAAO,CAAA;IAClB,uEAAuE;IACvE,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAAA;IACnD,8DAA8D;IAC9D,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;CAC7C;AAED;;;;;;;GAOG;AACH,qBAAa,WAAY,SAAQ,MAAM;IAWnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAXzB,gFAAgF;IAChF,OAAO,CAAC,QAAQ,CAAI;IACpB,qFAAqF;IACrF,OAAO,CAAC,QAAQ,CAAI;IACpB,qFAAqF;IACrF,OAAO,CAAC,KAAK,CAAQ;gBAGnB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,WAAW,EACD,MAAM,GAAE,MAAM,MAAsB,EACpC,KAAK,CAAC,EAAE,UAAU,YAAA;IAKrC;;;;;;;;OAQG;IACM,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkCxC,0EAA0E;cACvD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM;IAIrF,kFAAkF;IAClF,OAAO,CAAC,IAAI;IAIZ;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI3C,kFAAkF;IAClF,OAAO,CAAC,kBAAkB;IAiB1B;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ;IA0BhB;;;OAGG;IACH,OAAO,CAAC,WAAW;IAgBV,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA4BxC;;;;;;;;OAQG;IACM,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,mBAAmB,GAAG,SAAS;CAQ5E"}