@tickernelz/paperclip-pro-adapter-codex-local 2026.1012.0 → 2026.1012.1

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.1012.0",
3
+ "version": "2026.1012.1",
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.1012.0",
43
- "@tickernelz/paperclip-pro-shared": "2026.1012.0",
42
+ "@tickernelz/paperclip-pro-adapter-utils": "2026.1012.1",
43
+ "@tickernelz/paperclip-pro-shared": "2026.1012.1",
44
44
  "picocolors": "^1.1.1"
45
45
  },
46
46
  "devDependencies": {
@@ -270,8 +270,10 @@ anew.
270
270
  either put the items in one task with a checklist or ask once with scope
271
271
  `requester` and say the count in `proposedAction`; never ask again after the
272
272
  first call. You write `messageToOwners`;
273
- it goes as one WhatsApp bubble to each owner approval chat. Then tell the
274
- requester you asked.
273
+ it goes as one WhatsApp bubble to each owner approval chat, or to the
274
+ chat's owner report group when the guidance names one. Then tell the
275
+ requester you asked. Never ask for approval by writing in a team or project
276
+ group: this tool is the only way to ask.
275
277
  2. Owners answer by replying to that bubble (quoting it) or in the OpenWA
276
278
  Approvals tab. A quoted owner reply starts an `approval_reply` run of class
277
279
  `owner`. Treat it as a conversation: when the owner asks a question, objects
@@ -315,6 +317,19 @@ anew.
315
317
  A gated call without approval fails with `approval_required` and its
316
318
  `category`; do not retry it. Live grants are listed in the wake `policy.grants`.
317
319
 
320
+ ## Reporting to the owner
321
+
322
+ A chat may have an owner report group (Settings, Chats, **Report to owner
323
+ via**), shown in the guidance as "Owner reports for this chat go to the group
324
+ ...". Then approval requests, owner_absent questions, reminders, any
325
+ `openwa_send` to an owner's number and completion reports owed to the owner go
326
+ to that group automatically: keep using the same tools and never pick the
327
+ group or the owner's direct chat yourself. The receipt of a routed send has
328
+ `ownerReportChat: true`. Owners answer there by quoting the bubble or with an
329
+ unquoted ok/ya/jangan for the newest pending request; that starts the
330
+ `approval_reply` run in the group, and the approved action runs in the origin
331
+ chat. Replies meant for the origin chat stay in it.
332
+
318
333
  ## Owner-only configuration
319
334
 
320
335
  `openwa_endpoint_config` works only in owner-triggered runs; every other run gets
@@ -323,12 +338,17 @@ A gated call without approval fails with `approval_required` and its
323
338
  - `senders: {add?: [{list, number, label?}], remove?: [{list, number}]}` with
324
339
  `list` `allow` or `deny` and an E.164 `number`. A denylisted number is ignored
325
340
  from its next message on.
326
- - `chat` plus `chatSettings: {activation?, triggers?, absenceSeconds?, replyPolicy?, note?}`
341
+ - `chat` plus `chatSettings: {activation?, triggers?, absenceSeconds?, replyPolicy?, note?, ownerReportChat?}`
327
342
  for one chat (default: the origin chat). `activation` is `auto`, `on` or
328
343
  `off`; `replyPolicy` is `allowed`, `ask_owner` or `owner_absent_only`; `null`
329
344
  clears an override. `triggers` replaces the chat's trigger overrides, so keep
330
345
  the ones it has. A dedicated group, where you handle every message without a
331
346
  mention, is `chatSettings: {activation: "on", triggers: {allMessages: true}}`.
347
+ `ownerReportChat` (a group chatRef or id, found with `openwa_find`) sends the
348
+ chat's owner reports and approval requests to that group, for example when
349
+ the owner says "laporan grup ini ke [BOT] DCM"; `null` returns to the owner's
350
+ direct chat. The group must have an owner as member and this number active in
351
+ it, otherwise the call fails with `invalid_arguments`.
332
352
  - `approvals: {createTask?, externalTools?, crossChatSend?, waAdmin?, gatewayAdmin?, reminderMinutes?, maxReminders?, pendingTtlHours?}`:
333
353
  approval toggles, reminders and the pending request lifetime in hours (1 to 168).
334
354
  - `burstWindowSeconds`: 0 to 10 (default 3, 0 = off); messages of one chat sent
@@ -355,6 +375,34 @@ accepted and audited; questions, verdicts, governed approvals and cards marked
355
375
  call `{operation: "close", idempotencyKey}` (optionally with `issues`); `list` shows the
356
376
  live windows. Other runs get `owner_only`.
357
377
 
378
+ ## Paperclip cards for the owner (owner runs only)
379
+
380
+ A Paperclip card that waits for a person (confirmation, plan approval, question,
381
+ checkbox or verdict card, human-only included) is never "only answerable in
382
+ Paperclip" when the owner is talking to you here. When an owner asks what is
383
+ waiting on them, call `paperclipListPendingDecisions` and summarize each item:
384
+ issue, what it asks, its options. When the owner's own message explicitly
385
+ approves, rejects or answers one specific card, call
386
+ `paperclipAnswerDecisionForOwner` with `issueId`, `interactionId`, the answer
387
+ (`decision` approve or reject with `optionIds` or `reason`, `answers` for
388
+ questions, `verdicts` for verdict cards) and `ownerMessageRef` set to that
389
+ message's `id` from this run's `messages`. The server checks that this run was
390
+ started by that owner's own message and records the answer as theirs, relayed by
391
+ you, through the same path as the Paperclip button; the requester wakes as usual.
392
+ Then confirm in the chat exactly what you submitted.
393
+
394
+ - Never answer a card without the owner's explicit words for that card. A
395
+ general "ok" answers the one card you just presented; ask when it could mean
396
+ more than one. One message answers one card unless it names each card
397
+ (issue identifier or card id).
398
+ - `owner_confirmation_required` (403) means this run was not started by the
399
+ owner's own message, the owner is not linked to a Paperclip user, or that
400
+ message was already used; ask the owner to answer here again or in Paperclip.
401
+ A 409 means the card is already resolved. Items marked not relayable (board
402
+ approvals, agent decisions, governed tool/secret/connection cards, OpenWA
403
+ approval requests) stay with their own controls; say so and link them.
404
+ - Members and non-owner runs cannot relay; tell them the owner must answer.
405
+
358
406
  ## Linked numbers (owner runs only)
359
407
 
360
408
  The board may link other WhatsApp numbers on the same gateway, such as an
@@ -761,7 +761,7 @@ For detailed API tables, JSON response schemas, worked examples (IC and Manager
761
761
 
762
762
  ### Conversational confirmation answers
763
763
 
764
- When the user answers a pending confirmation in a message, record the answer before acting. Read current cards and comments with `paperclipListIssueInteractions` and `paperclipListComments`, then call `paperclipApiRequest` with `method: "POST"`, `path: "/issues/{issueId}/interactions/{interactionId}/resolve-from-comment"`, and a `jsonBody` carrying `commentId`, `decision: "accept" | "reject"`, and explicit `selectedOptionIds` for checkbox acceptance (native runners use `call_api`). Ambiguous replies among proposals require clarification. Revisions are not acceptance. Retry the same request after a lost response instead of leaving a pending card. Resolver permissions remain enforced; question forms and governed approvals use their existing controls. See the API reference for scope and retry rules.
764
+ When the user answers a pending confirmation in a message, record the answer before acting. Read current cards and comments with `paperclipListIssueInteractions` and `paperclipListComments`, then call `paperclipApiRequest` with `method: "POST"`, `path: "/issues/{issueId}/interactions/{interactionId}/resolve-from-comment"`, and a `jsonBody` carrying `commentId`, `decision: "accept" | "reject"`, and explicit `selectedOptionIds` for checkbox acceptance (native runners use `call_api`). Ambiguous replies among proposals require clarification. Revisions are not acceptance. Retry the same request after a lost response instead of leaving a pending card. Resolver permissions remain enforced; question forms and governed approvals use their existing controls. See the API reference for scope and retry rules. Human-only cards are answered by a person, but that person does not have to open Paperclip. When a board user's own message started your run (an owner WhatsApp message in an OpenWA run, or their comment that woke you) and it explicitly approves, rejects or answers one specific pending card, call `paperclipAnswerDecisionForOwner` with `issueId`, `interactionId`, the answer (`decision` with `optionIds` or `reason`, `answers`, or `verdicts`) and `ownerMessageRef` set to that message's id. The server verifies the message, records the answer as that user's (relayed by you) through the board answer path, and wakes the requester. List what is waiting with `paperclipListPendingDecisions`. Never answer without the person's explicit words for that card, never reuse one message for several cards unless it names each, and confirm back what you submitted. `owner_confirmation_required` (403) means the run lacks that authority; a 409 means the card is already resolved. Board approvals, agent decisions and governed tool, secret or connection cards are listed read-only and keep their own controls.
765
765
 
766
766
  In Agent Chat, a question is optional: if the user moves on to another topic, answer that message without requiring them to answer or resolve the earlier question. Leave its card unanswered so they can reopen it later. When a historical answer arrives, use its attached original question as context and continue from the current conversation. Unrelated messages are never approval.
767
767