@inetafrica/open-claudia 3.5.68 → 3.5.69

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/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.5.69
4
+
5
+ 3.5.68 plus the card fixes from Sumeet's 17 Oct review of the test cards (Sumeet, 20 Oct 07:43 EAT: "Why don't you just push them out now?"): a bare date did not say what it was, and the board's side-by-side columns are cramped on a phone.
6
+
7
+ - **Due dates say "Due"** (`bin/cards.js`): `card example due-dates` sets dateLabel "Due" on its rows question, so Kazee Chat draws "Due Tue 20 Oct" (chat-central f20b993, phone 4.6.3, web e25a670).
8
+ - **Status list instead of the board**: new `card example status`, a rows question with To do / Doing / Done chips, each row starting where it is. `card pieces` marks board "old cards only" and points to it; the card coach no longer suggests a board. Old board cards still draw and wake as before.
9
+
10
+ Tests: `test-card-blocks.js` (the due-dates label, the status example, board marked old cards only).
11
+
3
12
  ## 3.5.68
4
13
 
5
14
  3.5.67 plus a guard on test runs (Sumeet, 19 Oct 11:47 EAT, card "Mac: stop parallel threads from running it out of memory": "Both: checker rule and safety net"). The Mac froze twice that morning (power button held at 10:51 and 11:09 EAT): parallel conversations' test runs wanted about 26 GB on the 16 GB Mac, 12 of those GB from one helper's `npx jest` with no worker cap. The same morning the Chat Spaces bot pod was OOM-killed twice by `jest --maxWorkers=4` under its 3 Gi limit. The rule in lessons.md never reached helpers; the tool hook does.
package/bin/cards.js CHANGED
@@ -67,7 +67,7 @@ const EXAMPLES = {
67
67
  body: "Tick the ones that are fine. Tap a date to change it.",
68
68
  input: {
69
69
  fields: [
70
- { id: "tasks", type: "rows", label: "Tasks", tick: true, checked: true,
70
+ { id: "tasks", type: "rows", label: "Tasks", tick: true, checked: true, dateLabel: "Due",
71
71
  options: [{ id: "close", label: "Close it" }],
72
72
  rows: [
73
73
  { id: "clickhouse", label: "ClickHouse public access", detail: "Remove it, or office/VPN only", date: "2026-10-20" },
@@ -83,6 +83,29 @@ const EXAMPLES = {
83
83
  },
84
84
  policy: { responders: ["<kazeeUserId>"], mode: "first", results: "hidden" },
85
85
  },
86
+ // Where things stand: a list with a status chip per row (Sumeet, 17 Oct:
87
+ // the board's side-by-side columns are cramped on a phone). Use this, not
88
+ // a board, to ask where items are.
89
+ status: {
90
+ v: 1, kind: "form", kicker: "Spaces · this week", tag: "3 tasks",
91
+ title: "Where do these stand?",
92
+ body: "Tap where each one really is, then press Send once.",
93
+ input: {
94
+ fields: [
95
+ { id: "week", type: "rows", label: "This week", tick: false, dates: false,
96
+ options: [{ id: "todo", label: "To do" }, { id: "doing", label: "Doing" }, { id: "done", label: "Done" }],
97
+ rows: [
98
+ { id: "dog-06", label: "Clean iNet's CRM data", detail: "DOG-06 · due 23 Oct", option: "todo" },
99
+ { id: "dog-14", label: "Stop old Zoho history going out as new", detail: "DOG-14 · due 20 Oct", option: "todo" },
100
+ { id: "dog-04", label: "Fix the nightly Zoho import", detail: "DOG-04", option: "done" },
101
+ ] },
102
+ ],
103
+ submitLabel: "Send",
104
+ },
105
+ policy: { responders: ["<kazeeUserId>"], mode: "first", results: "hidden" },
106
+ },
107
+ // Old cards only: phones and the web still draw a board, but a new card
108
+ // asks where things stand with `status` above.
86
109
  board: {
87
110
  v: 1, kind: "form", kicker: "Spaces · this week", tag: "3 tasks",
88
111
  title: "Where do these stand?",
@@ -161,8 +184,8 @@ const PIECES = [
161
184
  { name: "tick", where: "question", use: "one yes/no tick box, a confirmation", example: "checks" },
162
185
  { name: "date", where: "question", use: "one date picker, optional min and max", example: "checks" },
163
186
  { name: "slots", where: "question", use: "pick meeting times from a day x time grid; busy slots can't be picked", example: "meeting" },
164
- { name: "rows", where: "question", use: "a list where each row gets a tick, a date and/or option chips (approve, re-date, close items)", example: "due-dates" },
165
- { name: "board", where: "question", use: "move items between columns (to do, doing, done)", example: "board" },
187
+ { name: "rows", where: "question", use: "a list where each row gets a tick, a date (dateLabel names it: \"Due\") and/or option chips (approve, re-date, close items; To do / Doing / Done)", example: "due-dates, status" },
188
+ { name: "board", where: "question", use: "old cards only: to ask where things stand use rows with To do / Doing / Done options", example: "status" },
166
189
  ];
167
190
 
168
191
  function piecesText() {
@@ -204,13 +227,13 @@ const CARD_USAGE = `Usage:
204
227
  open-claudia card send <spec.json | '{json}' | -> [--wake each|first|none] [--content "plain text"]
205
228
  open-claudia card update <messageId> [--close | --open] [--note "text"] [--spec <file|json>]
206
229
  open-claudia card show <messageId>
207
- open-claudia card example <decision|choice|rating|slider|form|report|due-dates|board|meeting|table|checks>
230
+ open-claudia card example <decision|choice|rating|slider|form|report|due-dates|status|meeting|table|checks>
208
231
  open-claudia card pieces
209
232
  Cards are Kazee Chat only. Answers wake this conversation when --wake is each
210
233
  (default for a card a few named people answer) or first; polls anyone answers
211
234
  default to none. Spec: chat-central CARDS-V1 (v:1, kind, title, input, policy...).
212
235
  Pieces (card pieces lists them): blocks text, stats, bars, facts, table; form
213
- questions choice, rating, text, tick, date, slots, rows, board.`;
236
+ questions choice, rating, text, tick, date, slots, rows (board: old cards only).`;
214
237
 
215
238
  async function runCard(args) {
216
239
  const sub = args.shift();
@@ -47,7 +47,7 @@ function detect(text) {
47
47
  }
48
48
 
49
49
  function hintLine(items) {
50
- return `Card coach: your last message listed ${items} items for the reader to decide in plain text. One card built from pieces (rows with ticks, dates or options; board; time slots; table) lets them answer with one Send. See open-claudia card pieces.`;
50
+ return `Card coach: your last message listed ${items} items for the reader to decide in plain text. One card built from pieces (rows with ticks, dates or options such as To do / Doing / Done; time slots; table) lets them answer with one Send. See open-claudia card pieces.`;
51
51
  }
52
52
 
53
53
  function conversationKey({ adapterId, channelId, threadId }) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inetafrica/open-claudia",
3
- "version": "3.5.68",
3
+ "version": "3.5.69",
4
4
  "description": "An always-on, provider-agnostic coding-agent harness for Claude Code and OpenAI Codex via chat",
5
5
  "main": "bot.js",
6
6
  "bin": {
@@ -653,7 +653,10 @@ assert.match(pkg.description, /provider-agnostic coding-agent harness/i);
653
653
  // 3.5.68 = 3.5.67 + test-run guard (jest/vitest: 2 workers, one run at a time,
654
654
  // 40% free memory) in the tool hook, after the Mac froze twice on 19 Oct.
655
655
  // Sumeet, 19 Oct 11:47 EAT card: "Both: checker rule and safety net".
656
- assert.strictEqual(pkg.version, "3.5.68", "release version must remain unchanged without explicit approval");
656
+ // 3.5.69 = 3.5.68 + card fixes from the 17 Oct review: due dates say "Due",
657
+ // a status list (rows with To do / Doing / Done) instead of the board.
658
+ // Sumeet, 20 Oct 07:43 EAT: "Why don't you just push them out now?"
659
+ assert.strictEqual(pkg.version, "3.5.69", "release version must remain unchanged without explicit approval");
657
660
  for (const keyword of ["claude", "codex", "coding-agent", "provider-agnostic"]) {
658
661
  assert.ok(pkg.keywords.includes(keyword), `package keyword missing: ${keyword}`);
659
662
  }