pi-kanban 0.1.3 → 0.3.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.
package/lib/task-store.js CHANGED
@@ -24,8 +24,8 @@ function readTask(sessionId, taskId) {
24
24
  } catch { return null; }
25
25
  }
26
26
 
27
- function listSessionIds() {
28
- try { return fs.readdirSync(TASKS_DIR); }
27
+ async function listSessionIdsAsync() {
28
+ try { return await fs.promises.readdir(TASKS_DIR); }
29
29
  catch { return []; }
30
30
  }
31
31
 
@@ -45,6 +45,21 @@ function listTasks(sessionId) {
45
45
  return out;
46
46
  }
47
47
 
48
+ async function listTasksAsync(sessionId) {
49
+ const dir = sessionDir(sessionId);
50
+ let entries;
51
+ try { entries = await fs.promises.readdir(dir); }
52
+ catch { return []; }
53
+ const jsons = entries.filter((n) => n.endsWith('.json'));
54
+ const tasks = await Promise.all(jsons.map(async (name) => {
55
+ try {
56
+ const raw = await fs.promises.readFile(path.join(dir, name), 'utf8');
57
+ return JSON.parse(raw);
58
+ } catch { return null; }
59
+ }));
60
+ return tasks.filter(Boolean);
61
+ }
62
+
48
63
  function writeTask(sessionId, task) {
49
64
  const dir = sessionDir(sessionId);
50
65
  fs.mkdirSync(dir, { recursive: true });
@@ -86,7 +101,9 @@ function cleanupIfAllCompleted(sessionId) {
86
101
  if (!sessionId) return false;
87
102
  const tasks = listTasks(sessionId);
88
103
  if (!tasks.length) return false;
89
- if (!tasks.every((t) => t.status === 'completed')) return false;
104
+ const live = tasks.filter((t) => t.status !== 'deleted');
105
+ if (!live.length) return false;
106
+ if (!live.every((t) => t.status === 'completed')) return false;
90
107
  const dir = sessionDir(sessionId);
91
108
  for (const t of tasks) {
92
109
  try { fs.unlinkSync(path.join(dir, `${t.id}.json`)); } catch {}
@@ -124,8 +141,9 @@ function reconcileFromSnapshot(sessionId, snapshot) {
124
141
  module.exports = {
125
142
  getTasksDir,
126
143
  sessionDir,
127
- listSessionIds,
144
+ listSessionIdsAsync,
128
145
  listTasks,
146
+ listTasksAsync,
129
147
  readTask,
130
148
  writeTask,
131
149
  deleteTask,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-kanban",
3
- "version": "0.1.3",
3
+ "version": "0.3.0",
4
4
  "description": "Workspace for the pi coding agent — sessions, todos, subagents, and more.",
5
5
  "main": "server.js",
6
6
  "bin": {
@@ -10,7 +10,13 @@
10
10
  "start": "node server.js",
11
11
  "dev": "node --watch server.js",
12
12
  "build:demo": "node scripts/build-demo.js",
13
- "preview:demo": "npm run build:demo && npx --yes http-server dist -p 8765 -c-1"
13
+ "preview:demo": "npm run build:demo && npx --yes http-server dist -p 8765 -c-1",
14
+ "docs:dev": "vitepress dev docs",
15
+ "docs:build": "vitepress build docs",
16
+ "docs:preview": "vitepress preview docs"
17
+ },
18
+ "devDependencies": {
19
+ "vitepress": "^1.6.4"
14
20
  },
15
21
  "keywords": [
16
22
  "pi-package",
@@ -47,7 +53,9 @@
47
53
  "@mariozechner/pi-coding-agent": "*"
48
54
  },
49
55
  "pi": {
50
- "extensions": ["./extensions"],
56
+ "extensions": [
57
+ "./extensions"
58
+ ],
51
59
  "video": "https://raw.githubusercontent.com/NikiforovAll/pi-kanban/main/assets/pi-kanban-demo.mp4",
52
60
  "image": "https://raw.githubusercontent.com/NikiforovAll/pi-kanban/main/assets/pi-kanban-poster.png"
53
61
  },