@tickernelz/paperclip-pro-adapter-codex-local 2026.1012.0 → 2026.1012.2
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 +3 -3
- package/skills/openwa/SKILL.md +62 -3
- package/skills/paperclip/SKILL.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tickernelz/paperclip-pro-adapter-codex-local",
|
|
3
|
-
"version": "2026.1012.
|
|
3
|
+
"version": "2026.1012.2",
|
|
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.
|
|
43
|
-
"@tickernelz/paperclip-pro-shared": "2026.1012.
|
|
42
|
+
"@tickernelz/paperclip-pro-adapter-utils": "2026.1012.2",
|
|
43
|
+
"@tickernelz/paperclip-pro-shared": "2026.1012.2",
|
|
44
44
|
"picocolors": "^1.1.1"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
package/skills/openwa/SKILL.md
CHANGED
|
@@ -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
|
|
274
|
-
|
|
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,45 @@ 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
|
+
|
|
406
|
+
An issue that shows "Recovery needed" (execution stopped; comments wait behind
|
|
407
|
+
"Waiting for execution recovery") resumes only on a person's explicit request.
|
|
408
|
+
Your own comment there only queues. When the owner's own message explicitly asks
|
|
409
|
+
to continue such an issue, call `paperclipContinueIssueForOwner` with `issueId`
|
|
410
|
+
and `ownerMessageRef` set to that message's `id`. The server posts the owner's
|
|
411
|
+
message as their comment, relayed by you; that resolves the hold and starts a new
|
|
412
|
+
run, and actions with unverified outcomes are not repeated. The message must be
|
|
413
|
+
sent after the run stopped and must not name only other issues; one message
|
|
414
|
+
continues one issue. A 409 `execution_recovery_not_held` means the issue is not
|
|
415
|
+
held: comment normally.
|
|
416
|
+
|
|
358
417
|
## Linked numbers (owner runs only)
|
|
359
418
|
|
|
360
419
|
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. An issue showing "Recovery needed" resumes only on a person's explicit request; an agent comment there only queues. When a board user's own message that started your run explicitly asks to continue such an issue, call `paperclipContinueIssueForOwner` with `issueId` and `ownerMessageRef`: the server posts it as their comment (relayed by you), which resolves the hold and starts a new run without repeating actions whose outcomes are unverified.
|
|
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
|
|