opencode-backlog 0.1.1 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tui.js CHANGED
@@ -1,163 +1,367 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "@opentui/solid/jsx-runtime";
1
+ import { insert as _$insert } from "@opentui/solid";
2
+ import { setProp as _$setProp } from "@opentui/solid";
3
+ import { effect as _$effect } from "@opentui/solid";
4
+ import { memo as _$memo } from "@opentui/solid";
5
+ import { createComponent as _$createComponent } from "@opentui/solid";
6
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
7
+ import { insertNode as _$insertNode } from "@opentui/solid";
8
+ import { createElement as _$createElement } from "@opentui/solid";
9
+ import { randomUUID } from "node:crypto";
2
10
  import { watch } from "node:fs";
3
11
  import { join } from "node:path";
4
12
  import { Plugin } from "@opencode-ai/plugin/tui";
5
- import { createMemo, For, Show } from "solid-js";
6
- import { BACKLOG_FILE, EMPTY_BACKLOG, STATUSES, moveItem, } from "./backlog.js";
13
+ import { createMemo, createSignal, For, onCleanup, Show } from "solid-js";
14
+ import { BACKLOG_FILE, EMPTY_BACKLOG, STATUSES, moveItem } from "./backlog.js";
7
15
  import { readBacklog, readBacklogSync, updateBacklog } from "./store.js";
8
- const EMPTY_SNAPSHOT = { backlog: EMPTY_BACKLOG };
9
16
  function statusLabel(status) {
10
- if (status === "todo")
11
- return "Todo";
12
- if (status === "doing")
13
- return "Doing";
14
- return "Done";
17
+ if (status === "todo") return "Todo";
18
+ if (status === "doing") return "Doing";
19
+ return "Done";
15
20
  }
16
- function BacklogView(props) {
17
- const theme = props.context.theme;
18
- const snapshot = createMemo(() => props.view.directories[props.directory] ?? EMPTY_SNAPSHOT);
19
- const backlog = createMemo(() => snapshot().backlog);
20
- const error = createMemo(() => snapshot().error);
21
- const color = (status) => {
22
- if (status === "doing")
23
- return theme.text.feedback.warning.default;
24
- if (status === "done")
25
- return theme.text.feedback.success.default;
26
- return theme.text.subdued;
21
+ function readSnapshot(directory) {
22
+ try {
23
+ return {
24
+ backlog: readBacklogSync(join(directory, BACKLOG_FILE))
25
+ };
26
+ } catch (cause) {
27
+ return {
28
+ backlog: EMPTY_BACKLOG,
29
+ error: cause instanceof Error ? cause.message : String(cause)
27
30
  };
28
- return (_jsxs("box", { children: [_jsx("text", { fg: theme.text.default, children: _jsx("b", { children: "Backlog" }) }), _jsx(Show, { when: error(), children: (message) => _jsx("text", { fg: theme.text.feedback.error.default, children: message() }) }), _jsx(Show, { when: !error() && backlog().items.length === 0, children: _jsx("text", { fg: theme.text.subdued, children: "No tasks" }) }), _jsx(For, { each: STATUSES, children: (status) => {
29
- const items = createMemo(() => backlog().items.filter((item) => item.status === status));
30
- return (_jsx(Show, { when: items().length > 0, children: _jsxs("box", { marginTop: 1, children: [_jsxs("text", { fg: color(status), children: [_jsx("b", { children: statusLabel(status) }), " (", items().length, ")"] }), _jsx(For, { each: items(), children: (item) => (_jsxs("box", { flexDirection: "row", gap: 1, minWidth: 0, children: [_jsx("text", { fg: color(status), flexShrink: 0, children: status === "done" ? "✓" : status === "doing" ? "●" : "○" }), _jsx("text", { fg: theme.text.default, wrapMode: "none", truncate: true, flexGrow: 1, minWidth: 0, children: item.title })] })) })] }) }));
31
- } })] }));
31
+ }
32
+ }
33
+ function BacklogView(props) {
34
+ const theme = props.context.theme;
35
+ const [snapshot, setSnapshot] = createSignal(readSnapshot(props.directory));
36
+ const backlog = createMemo(() => snapshot().backlog);
37
+ const error = createMemo(() => snapshot().error);
38
+ let refresh;
39
+ const watcher = watch(props.directory, {
40
+ persistent: false
41
+ }, () => {
42
+ clearTimeout(refresh);
43
+ refresh = setTimeout(() => {
44
+ setSnapshot(readSnapshot(props.directory));
45
+ }, 50);
46
+ });
47
+ onCleanup(() => {
48
+ clearTimeout(refresh);
49
+ watcher.close();
50
+ });
51
+ const color = status => {
52
+ if (status === "doing") return theme.text.feedback.warning.default;
53
+ if (status === "done") return theme.text.feedback.success.default;
54
+ return theme.text.subdued;
55
+ };
56
+ return (() => {
57
+ var _el$ = _$createElement("box"),
58
+ _el$2 = _$createElement("text"),
59
+ _el$3 = _$createElement("b");
60
+ _$insertNode(_el$, _el$2);
61
+ _$insertNode(_el$2, _el$3);
62
+ _$insertNode(_el$3, _$createTextNode(`Backlog`));
63
+ _$insert(_el$, _$createComponent(Show, {
64
+ get when() {
65
+ return error();
66
+ },
67
+ children: message => (() => {
68
+ var _el$7 = _$createElement("text");
69
+ _$insert(_el$7, message);
70
+ _$effect(_$p => _$setProp(_el$7, "fg", theme.text.feedback.error.default, _$p));
71
+ return _el$7;
72
+ })()
73
+ }), null);
74
+ _$insert(_el$, _$createComponent(Show, {
75
+ get when() {
76
+ return _$memo(() => !!!error())() && backlog().items.length === 0;
77
+ },
78
+ get children() {
79
+ var _el$5 = _$createElement("text");
80
+ _$insertNode(_el$5, _$createTextNode(`No tasks`));
81
+ _$effect(_$p => _$setProp(_el$5, "fg", theme.text.subdued, _$p));
82
+ return _el$5;
83
+ }
84
+ }), null);
85
+ _$insert(_el$, _$createComponent(For, {
86
+ each: STATUSES,
87
+ children: status => {
88
+ const items = createMemo(() => backlog().items.filter(item => item.status === status));
89
+ return _$createComponent(Show, {
90
+ get when() {
91
+ return items().length > 0;
92
+ },
93
+ get children() {
94
+ var _el$8 = _$createElement("box"),
95
+ _el$9 = _$createElement("text"),
96
+ _el$0 = _$createElement("b"),
97
+ _el$1 = _$createTextNode(` (`),
98
+ _el$10 = _$createTextNode(`)`);
99
+ _$insertNode(_el$8, _el$9);
100
+ _$setProp(_el$8, "marginTop", 1);
101
+ _$insertNode(_el$9, _el$0);
102
+ _$insertNode(_el$9, _el$1);
103
+ _$insertNode(_el$9, _el$10);
104
+ _$insert(_el$0, () => statusLabel(status));
105
+ _$insert(_el$9, () => items().length, _el$10);
106
+ _$insert(_el$8, _$createComponent(For, {
107
+ get each() {
108
+ return items();
109
+ },
110
+ children: item => (() => {
111
+ var _el$11 = _$createElement("box"),
112
+ _el$12 = _$createElement("text"),
113
+ _el$13 = _$createElement("text");
114
+ _$insertNode(_el$11, _el$12);
115
+ _$insertNode(_el$11, _el$13);
116
+ _$setProp(_el$11, "flexDirection", "row");
117
+ _$setProp(_el$11, "gap", 1);
118
+ _$setProp(_el$11, "minWidth", 0);
119
+ _$setProp(_el$12, "flexShrink", 0);
120
+ _$insert(_el$12, status === "done" ? "✓" : status === "doing" ? "●" : "○");
121
+ _$setProp(_el$13, "wrapMode", "none");
122
+ _$setProp(_el$13, "truncate", true);
123
+ _$setProp(_el$13, "flexGrow", 1);
124
+ _$setProp(_el$13, "minWidth", 0);
125
+ _$insert(_el$13, () => item.title);
126
+ _$effect(_p$ => {
127
+ var _v$ = color(status),
128
+ _v$2 = theme.text.default;
129
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$12, "fg", _v$, _p$.e));
130
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$13, "fg", _v$2, _p$.t));
131
+ return _p$;
132
+ }, {
133
+ e: undefined,
134
+ t: undefined
135
+ });
136
+ return _el$11;
137
+ })()
138
+ }), null);
139
+ _$effect(_$p => _$setProp(_el$9, "fg", color(status), _$p));
140
+ return _el$8;
141
+ }
142
+ });
143
+ }
144
+ }), null);
145
+ _$effect(_$p => _$setProp(_el$2, "fg", theme.text.default, _$p));
146
+ return _el$;
147
+ })();
32
148
  }
33
149
  function taskDetails(item) {
34
- return [`Status: ${statusLabel(item.status)}`, `ID: ${item.id}`, "", item.notes ?? "No notes"].join("\n");
150
+ return [`Status: ${statusLabel(item.status)}`, `ID: ${item.id}`, "", item.notes ?? "No notes"].join("\n");
35
151
  }
36
152
  async function browseBacklog(context) {
37
- const route = context.ui.router.current();
38
- const location = route.type === "session" ? context.data.session.get(route.sessionID)?.location : context.location;
39
- const directory = location?.directory ?? context.data.location.default().directory;
40
- const path = join(directory, BACKLOG_FILE);
41
- const backlog = await readBacklog(path);
42
- if (backlog.items.length === 0) {
43
- await context.ui.dialog.alert({ title: "Backlog", message: "No tasks" });
44
- return;
45
- }
46
- const id = await context.ui.dialog.select({
47
- title: "Backlog",
48
- placeholder: "Select a task",
49
- options: backlog.items.map((item) => ({
50
- title: item.title,
51
- value: item.id,
52
- ...(item.notes === undefined ? {} : { description: item.notes }),
53
- category: statusLabel(item.status),
54
- })),
153
+ return browseBacklogWithState(context, () => {});
154
+ }
155
+ function backlogLocation(context) {
156
+ const route = context.ui.router.current();
157
+ const location = route.type === "session" ? context.data.session.get(route.sessionID)?.location : context.location;
158
+ const directory = location?.directory ?? context.data.location.default().directory;
159
+ return {
160
+ directory,
161
+ path: join(directory, BACKLOG_FILE)
162
+ };
163
+ }
164
+ async function addBacklogItem(context) {
165
+ const title = await context.ui.dialog.prompt({
166
+ title: "New backlog task",
167
+ placeholder: "Task title"
168
+ });
169
+ if (!title?.trim()) return;
170
+ const notes = await context.ui.dialog.prompt({
171
+ title: title.trim(),
172
+ description: "Optional notes",
173
+ placeholder: "Leave empty for no notes"
174
+ });
175
+ if (notes === undefined) return;
176
+ const item = {
177
+ id: randomUUID(),
178
+ title: title.trim(),
179
+ ...(notes.trim() ? {
180
+ notes: notes.trim()
181
+ } : {}),
182
+ status: "todo"
183
+ };
184
+ const {
185
+ path
186
+ } = backlogLocation(context);
187
+ await updateBacklog(path, current => ({
188
+ version: 1,
189
+ items: moveItem([...current.items, item], item.id, "todo", 0)
190
+ }));
191
+ context.ui.toast.show({
192
+ message: `Added "${item.title}".`,
193
+ variant: "success"
194
+ });
195
+ }
196
+ async function moveBacklogItem(context) {
197
+ const {
198
+ path
199
+ } = backlogLocation(context);
200
+ const backlog = await readBacklog(path);
201
+ if (backlog.items.length === 0) {
202
+ await context.ui.dialog.alert({
203
+ title: "Backlog",
204
+ message: "No tasks"
55
205
  });
56
- if (!id)
57
- return;
58
- const item = backlog.items.find((candidate) => candidate.id === id);
59
- if (!item)
60
- return;
61
- await context.ui.dialog.alert({ title: item.title, message: taskDetails(item) });
62
- const status = await context.ui.dialog.select({
63
- title: `Change status: ${item.title}`,
64
- current: item.status,
65
- options: STATUSES.map((candidate) => ({
66
- title: statusLabel(candidate),
67
- value: candidate,
68
- ...(candidate === item.status ? { description: "Current status" } : {}),
69
- })),
206
+ return;
207
+ }
208
+ const id = await context.ui.dialog.select({
209
+ title: "Move backlog task",
210
+ placeholder: "Select a task to move",
211
+ options: backlog.items.map(item => ({
212
+ title: item.title,
213
+ value: item.id,
214
+ ...(item.notes === undefined ? {} : {
215
+ description: item.notes
216
+ }),
217
+ category: statusLabel(item.status)
218
+ }))
219
+ });
220
+ if (!id) return;
221
+ const item = backlog.items.find(candidate => candidate.id === id);
222
+ if (!item) return;
223
+ const status = await context.ui.dialog.select({
224
+ title: `Change status: ${item.title}`,
225
+ current: item.status,
226
+ options: STATUSES.map(candidate => ({
227
+ title: statusLabel(candidate),
228
+ value: candidate,
229
+ ...(candidate === item.status ? {
230
+ description: "Current status"
231
+ } : {})
232
+ }))
233
+ });
234
+ if (!status || status === item.status) return;
235
+ await updateBacklog(path, current => ({
236
+ version: 1,
237
+ items: moveItem(current.items, item.id, status, undefined)
238
+ }));
239
+ context.ui.toast.show({
240
+ message: `Moved "${item.title}" to ${statusLabel(status)}.`,
241
+ variant: "success"
242
+ });
243
+ }
244
+ async function browseBacklogWithState(context, setOpen) {
245
+ const {
246
+ path
247
+ } = backlogLocation(context);
248
+ const backlog = await readBacklog(path);
249
+ if (backlog.items.length === 0) {
250
+ await context.ui.dialog.alert({
251
+ title: "Backlog",
252
+ message: "No tasks"
70
253
  });
71
- if (!status || status === item.status)
72
- return;
73
- await updateBacklog(path, (current) => ({
74
- version: 1,
75
- items: moveItem(current.items, item.id, status, undefined),
76
- }));
77
- context.ui.toast.show({ message: `Moved "${item.title}" to ${statusLabel(status)}.`, variant: "success" });
254
+ return;
255
+ }
256
+ setOpen(true);
257
+ const id = await context.ui.dialog.select({
258
+ title: "Backlog (n: new task)",
259
+ placeholder: "Select a task",
260
+ options: backlog.items.map(item => ({
261
+ title: item.title,
262
+ value: item.id,
263
+ ...(item.notes === undefined ? {} : {
264
+ description: item.notes
265
+ }),
266
+ category: statusLabel(item.status)
267
+ }))
268
+ }).finally(() => setOpen(false));
269
+ if (!id) return;
270
+ const item = backlog.items.find(candidate => candidate.id === id);
271
+ if (!item) return;
272
+ await context.ui.dialog.alert({
273
+ title: item.title,
274
+ message: taskDetails(item)
275
+ });
78
276
  }
79
277
  function Commands(props) {
80
- props.context.keymap.layer(() => ({
81
- mode: "global",
82
- commands: [
83
- {
84
- id: "backlog.browse",
85
- title: "Browse backlog",
86
- description: "View backlog tasks and change their status",
87
- group: "Backlog",
88
- palette: true,
89
- slash: { name: "backlog", aliases: ["tasks"] },
90
- async run() {
91
- try {
92
- await browseBacklog(props.context);
93
- }
94
- catch (cause) {
95
- props.context.ui.toast.show({
96
- message: cause instanceof Error ? cause.message : String(cause),
97
- variant: "error",
98
- });
99
- }
100
- },
101
- },
102
- ],
103
- }));
104
- return null;
278
+ const [browseOpen, setBrowseOpen] = createSignal(false);
279
+ const run = async operation => {
280
+ try {
281
+ await operation();
282
+ } catch (cause) {
283
+ props.context.ui.toast.show({
284
+ message: cause instanceof Error ? cause.message : String(cause),
285
+ variant: "error"
286
+ });
287
+ }
288
+ };
289
+ props.context.keymap.layer(() => ({
290
+ mode: "global",
291
+ commands: [{
292
+ id: "backlog.browse",
293
+ title: "Browse backlog",
294
+ description: "View backlog tasks and change their status",
295
+ group: "Backlog",
296
+ palette: true,
297
+ slash: {
298
+ name: "backlog",
299
+ aliases: ["tasks"]
300
+ },
301
+ run: () => run(() => browseBacklogWithState(props.context, setBrowseOpen))
302
+ }, {
303
+ id: "backlog.add",
304
+ title: "Add backlog task",
305
+ description: "Create a Todo task at the top of the backlog",
306
+ group: "Backlog",
307
+ palette: true,
308
+ slash: {
309
+ name: "backlog-add",
310
+ aliases: ["task-add"]
311
+ },
312
+ run: () => run(() => addBacklogItem(props.context))
313
+ }, {
314
+ id: "backlog.move",
315
+ title: "Move backlog task",
316
+ description: "Change a backlog task state",
317
+ group: "Backlog",
318
+ palette: true,
319
+ slash: {
320
+ name: "backlog-move",
321
+ aliases: ["task-move"]
322
+ },
323
+ run: () => run(() => moveBacklogItem(props.context))
324
+ }]
325
+ }));
326
+ props.context.keymap.layer(() => ({
327
+ mode: "modal",
328
+ enabled: browseOpen,
329
+ priority: 100,
330
+ commands: [{
331
+ bind: "n",
332
+ title: "New backlog task",
333
+ group: "Backlog",
334
+ run() {
335
+ setBrowseOpen(false);
336
+ return run(() => addBacklogItem(props.context));
337
+ }
338
+ }]
339
+ }));
340
+ return null;
105
341
  }
106
342
  export default Plugin.define({
107
- id: "opencode.backlog.tui",
108
- setup(context) {
109
- const watchers = new Map();
110
- const [view, updateView] = context.storage.memory("view", {
111
- initial: { directories: {} },
112
- });
113
- const releaseCommands = context.ui.slot({
114
- append: "app",
115
- render: () => _jsx(Commands, { context: context }),
116
- });
117
- const refreshDirectory = (directory) => {
118
- try {
119
- const backlog = readBacklogSync(join(directory, BACKLOG_FILE));
120
- updateView((draft) => {
121
- draft.directories[directory] = { backlog };
122
- });
123
- }
124
- catch (cause) {
125
- updateView((draft) => {
126
- draft.directories[directory] = {
127
- backlog: EMPTY_BACKLOG,
128
- error: cause instanceof Error ? cause.message : String(cause),
129
- };
130
- });
131
- }
132
- context.renderer.requestRender();
133
- };
134
- const watchDirectory = (directory) => {
135
- if (watchers.has(directory))
136
- return;
137
- refreshDirectory(directory);
138
- const watcher = watch(directory, { persistent: false }, (_event, filename) => {
139
- if (!filename || filename.toString() === BACKLOG_FILE)
140
- refreshDirectory(directory);
141
- });
142
- watchers.set(directory, watcher);
143
- };
144
- const releaseSlot = context.ui.slot({
145
- append: "sidebar.content",
146
- render: (props) => {
147
- const directory = context.data.session.get(props.sessionID)?.location.directory;
148
- if (!directory)
149
- return null;
150
- watchDirectory(directory);
151
- return _jsx(BacklogView, { context: context, directory: directory, view: view });
152
- },
343
+ id: "opencode.backlog.tui",
344
+ setup(context) {
345
+ const releaseCommands = context.ui.slot({
346
+ append: "app",
347
+ render: () => _$createComponent(Commands, {
348
+ context: context
349
+ })
350
+ });
351
+ const releaseSlot = context.ui.slot({
352
+ append: "sidebar.content",
353
+ render: props => {
354
+ const directory = context.data.session.get(props.sessionID)?.location.directory;
355
+ if (!directory) return null;
356
+ return _$createComponent(BacklogView, {
357
+ context: context,
358
+ directory: directory
153
359
  });
154
- return () => {
155
- releaseSlot();
156
- releaseCommands();
157
- for (const watcher of watchers.values())
158
- watcher.close();
159
- watchers.clear();
160
- };
161
- },
162
- });
163
- //# sourceMappingURL=tui.js.map
360
+ }
361
+ });
362
+ return () => {
363
+ releaseSlot();
364
+ releaseCommands();
365
+ };
366
+ }
367
+ });
package/dist/tui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-backlog",
3
- "version": "0.1.1",
3
+ "version": "0.1.4",
4
4
  "description": "Project backlog tools and sidebar for OpenCode 2",
5
5
  "type": "module",
6
6
  "repository": {
@@ -27,7 +27,7 @@
27
27
  "LICENSE"
28
28
  ],
29
29
  "scripts": {
30
- "build": "tsc -p tsconfig.build.json",
30
+ "build": "tsc -p tsconfig.build.json && node script/build-tui.mjs",
31
31
  "check": "tsc -p tsconfig.json --noEmit",
32
32
  "prepack": "npm run build",
33
33
  "test": "npm run build && tsc -p tsconfig.test.json && node --test .test-dist/test/*.test.js"