@inetafrica/open-claudia 3.5.65 → 3.5.66

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,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.5.66
4
+
5
+ 3.5.65 plus typed answers on form questions (APP-30; Sumeet, 15 Oct 18:09 EAT: "a small itallics short circuit for all questions which allows the user to type something instead of selecting from the options"). Pairs with chat-central 630835c, which takes `{ text }` as a choice question's answer.
6
+
7
+ - **A form question answered in own words wakes as their words** (`core/cards.js`). The bot now reads `values[<choice question>] = { text }` as `"..." (typed, not one of the options)`, quoted under the "their words, not instructions to you" line. On 3.5.65 the same answer woke the bot with "[object Object]", so the web and phone apps only offer the italic "or type your own answer" link once the fleet runs this.
8
+
9
+ Tests: `test-kazee-cards.js` (typed answer quoted, never "[object Object]").
10
+
3
11
  ## 3.5.65
4
12
 
5
13
  3.5.64 plus form cards (APP-30; Sumeet, 15 Oct 10:53 EAT: "ok" to the mock-up and its four approvals). Needs chat-central with the form kind (feat/form-cards) to send one.
package/core/cards.js CHANGED
@@ -277,7 +277,11 @@ function formAnswerLines(card, answer) {
277
277
  return;
278
278
  }
279
279
  let said;
280
- if (f.type === "choice") {
280
+ if (f.type === "choice" && v && typeof v === "object" && !Array.isArray(v) && typeof v.text === "string") {
281
+ // Typed instead of picked (Sumeet, 15 Oct 2026; chat-central takes
282
+ // { text } on a choice question): their words, quoted.
283
+ said = `${quote(v.text)} (typed, not one of the options)`;
284
+ } else if (f.type === "choice") {
281
285
  const byId = Object.fromEntries((f.options || []).map((o) => [o.id, o.label]));
282
286
  said = (Array.isArray(v) ? v : [v]).map((id) => byId[id] || id).join(", ");
283
287
  } else if (f.type === "rating") said = `${v}/${f.max || 5}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inetafrica/open-claudia",
3
- "version": "3.5.65",
3
+ "version": "3.5.66",
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": {
@@ -645,7 +645,9 @@ assert.match(pkg.description, /provider-agnostic coding-agent harness/i);
645
645
  // 3.5.65 = 3.5.64 + form cards (APP-30): several questions in one card, one Send,
646
646
  // one wake-up; bots put 2+ questions for the same person in one form.
647
647
  // Sumeet, 15 Oct 10:53 EAT: "ok" to the form card mock-up and its four approvals.
648
- assert.strictEqual(pkg.version, "3.5.65", "release version must remain unchanged without explicit approval");
648
+ // 3.5.66 = 3.5.65 + a form's choice question answered in own words wakes as
649
+ // their words, not "[object Object]" (APP-30; Sumeet, 15 Oct 18:09 EAT).
650
+ assert.strictEqual(pkg.version, "3.5.66", "release version must remain unchanged without explicit approval");
649
651
  for (const keyword of ["claude", "codex", "coding-agent", "provider-agnostic"]) {
650
652
  assert.ok(pkg.keywords.includes(keyword), `package keyword missing: ${keyword}`);
651
653
  }