@tickernelz/paperclip-pro-adapter-codex-local 2026.1006.2 → 2026.1006.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tickernelz/paperclip-pro-adapter-codex-local",
3
- "version": "2026.1006.2",
3
+ "version": "2026.1006.4",
4
4
  "license": "MIT",
5
5
  "homepage": "https://github.com/tickernelz/paperclip-pro",
6
6
  "bugs": {
@@ -39,8 +39,8 @@
39
39
  ],
40
40
  "dependencies": {
41
41
  "@agentclientprotocol/codex-acp": "^1.6.2",
42
- "@tickernelz/paperclip-pro-adapter-utils": "2026.1006.2",
43
- "@tickernelz/paperclip-pro-shared": "2026.1006.2",
42
+ "@tickernelz/paperclip-pro-adapter-utils": "2026.1006.4",
43
+ "@tickernelz/paperclip-pro-shared": "2026.1006.4",
44
44
  "picocolors": "^1.1.1"
45
45
  },
46
46
  "devDependencies": {
@@ -132,6 +132,15 @@ act beyond the run's facts. Silence never approves anything.
132
132
  `quoteDropped: true`. Do not resend.
133
133
  - A message steered into a running run names its `Message id`; quote that id
134
134
  when you answer it, not the id of an earlier message in the run.
135
+ - A steered message may carry attachments of any type (documents of every
136
+ file type, images, video, voice notes, stickers, contact cards, locations):
137
+ the frame then ends with a JSON list of `{messageId, media[], location?,
138
+ contact?}` in the wake shape (`filename`, `mime`, `size`, `attachmentId`
139
+ and `localPath` when stored). Read every file before you answer, including
140
+ ones that arrive while you are already working on earlier files. Never say a
141
+ file was received without reading it. An item that is `pending`,
142
+ `unavailable` or has no `localPath` needs `openwa_get_media` with that
143
+ `messageId`; `too_large` items exceeded `limitBytes` and cannot be fetched.
135
144
 
136
145
  ## WhatsApp formatting
137
146
 
@@ -149,7 +158,8 @@ of the person you answer.
149
158
  newest first; continue with `nextCursor`. `source: "live"` reads WhatsApp
150
159
  directly; `deep: true` reaches up to 2000 messages. Results stay under 16 KB.
151
160
  - Trigger media is already stored as task attachments: each `media[]` item has
152
- `attachmentId`, `kind`, `mime`, `size` and, for voice notes, `transcript` or
161
+ `attachmentId`, `kind`, `filename`, `mime` (`application/octet-stream` when
162
+ unknown), `size` and, for voice notes, `transcript` or
153
163
  `transcriptPending`. A `pending` or `unavailable` item was not stored yet; an
154
164
  item `unavailable: "too_large"` carries `limitBytes`, the size cap it exceeded.
155
165
  - Files of every type are stored, including executables, scripts and archives.
@@ -218,13 +228,24 @@ of the person you answer.
218
228
  first call. You write `messageToOwners`;
219
229
  it goes as one WhatsApp bubble to each owner approval chat. Then tell the
220
230
  requester you asked.
221
- 2. Owners answer by replying to that bubble (quoting it) or in Paperclip. A
222
- quoted owner reply starts an `approval_reply` run of class `owner`: interpret
223
- the free text and call `openwa_approval_resolve({requestId, decision, conditions?})`
224
- with `decision` `approve`, `reject` or `clarify` (keeps it pending). Only that
225
- run may resolve that request. After approve or reject, end the run without a
226
- reply: its final output is not published to the owner, and the server reacts
227
- to the owner's message with ✅.
231
+ 2. Owners answer by replying to that bubble (quoting it) or in the OpenWA
232
+ Approvals tab. A quoted owner reply starts an `approval_reply` run of class
233
+ `owner`. Treat it as a conversation: when the owner asks a question, objects
234
+ or wants more detail, answer them in that chat (your final output is sent)
235
+ and keep the request pending (`decision` `clarify`). Their later messages in
236
+ the same chat, quoting or not, wake normal owner runs whose wake lists the
237
+ request under `approvalDiscussions`; those runs may resolve it too. Call
238
+ `openwa_approval_resolve({requestId, decision, conditions?})` with `approve` or
239
+ `reject` only once the owner's own words clearly decide. The server answers
240
+ 409 `owner_decision_unclear` unless the owner's latest decisive message about
241
+ that request opens with an approval word (ok, oke, ya, iya, yes, boleh,
242
+ setuju, acc, gas, lanjut, silakan, sip, 👍, ✅) or a refusal word (jangan,
243
+ tidak, nggak, gak, no, tolak, batal, stop, reject, 👎) matching your decision.
244
+ Later words are conditions ("boleh, tapi jangan sebut harga" approves; pass
245
+ them in `conditions`). With several requests under discussion, an unquoted
246
+ "ok" decides none of them. Member messages never count. After approve or reject, end
247
+ the run without a reply: its final output is not published to the owner, and
248
+ the server reacts to the owner's message with ✅.
228
249
  3. The result arrives as an `approval_resolved` wake in the origin chat. When
229
250
  approved, the run is class `grant` and holds the grants: carry out only the
230
251
  approved action, respecting any `conditions`, and tell the requester.
@@ -312,8 +333,9 @@ Errors carry a typed `code`:
312
333
  `chat_inactive`, `gateway_admin_disabled`, `self_session_requires_confirmation`,
313
334
  `secret_issuing_operation`, `ui_only_setting`, `linked_chat_not_allowed`.
314
335
  Do not retry without approval.
315
- - Approvals: `approval_not_authorized`, `approval_not_needed` (owner runs need
316
- none), `approval_action_pending` (an `approval_reply` run sent to the
336
+ - Approvals: `approval_not_authorized`, `owner_decision_unclear` (the owner's
337
+ words did not clearly approve or reject; use `clarify` and keep discussing),
338
+ `approval_not_needed` (owner runs need none), `approval_action_pending` (an `approval_reply` run sent to the
317
339
  request's chat; resolve instead, the `approval_resolved` run acts),
318
340
  `already_resolved`, `no_owner_chat`, `message_too_long`,
319
341
  `requester_unknown`.