@wokuapp/ai-toolkit 0.5.0 → 0.6.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/CHANGELOG.md +4 -0
- package/README.md +9 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/skills/woku/SKILL.md +2 -1
- package/skills/woku-sdk-javascript/SKILL.md +11 -1
- package/skills/woku-sdk-python/SKILL.md +12 -1
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"name": "woku",
|
|
12
12
|
"source": "./",
|
|
13
13
|
"description": "Design a listening program for your customer journey, run the VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server.",
|
|
14
|
-
"version": "0.
|
|
14
|
+
"version": "0.6.0",
|
|
15
15
|
"author": { "name": "woku" },
|
|
16
16
|
"license": "MIT",
|
|
17
17
|
"homepage": "https://woku.app",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "woku",
|
|
3
3
|
"description": "Voice-of-customer for Claude Code. Design a listening program for your customer journey, run the fast VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server. Bundles the woku method so the agent acts as a CX consultant.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "woku"
|
|
7
7
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "woku",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Voice-of-customer for OpenAI Codex. Design a listening program, run the VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "woku"
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.6.0
|
|
4
|
+
|
|
5
|
+
Support and plans by folder. The woku skill documents `scopeKind: "folder"` with `folderId` on `create_ticket_destination`, `update_ticket_destination`, `create_action_plan_group` and `update_action_plan_group` (the destination or group listens to every tool inside the folder, at any depth, never mixed with tracker rows), the `folderId` filter on `list_ticket_destinations`, `list_action_plan_groups` and `list_tickets`, and the `FOLDER_HAS_DEPENDENTS` confirmation (`confirmDependents: true`) of `delete_folder`. The SDK skills add the same options (`scopeKind`/`folderId`, `folderId` filters, `confirmDependents` / `confirm_dependents`). Requires the server and SDK releases that ship them.
|
|
6
|
+
|
|
3
7
|
## 0.5.0
|
|
4
8
|
|
|
5
9
|
The woku skill documents folder participants (`get_folder_participants`, `set_folder_participants`, `remove_folder_participant`, `resend_to_missing_participants`), scheduled report emails (`list_scheduled_reports`, `schedule_report`, `update_scheduled_report`, `delete_scheduled_report`, `send_scheduled_report_now`), the period on the folder CSV and the `lastResponse` sort of `search_voc_tools`. The SDK skills add `folderParticipants` / `folder_participants`, `reportSubscriptions` / `report_subscriptions`, the CSV period and the sort. Requires the server and SDK releases that ship them.
|
package/README.md
CHANGED
|
@@ -100,6 +100,15 @@ Every connection is bound to one company, chosen when you approve access. Read t
|
|
|
100
100
|
|
|
101
101
|
MIT. See [LICENSE](./LICENSE).
|
|
102
102
|
|
|
103
|
+
### Support and plans by folder update (0.6.0)
|
|
104
|
+
|
|
105
|
+
Support destinations and action plan groups can listen to one tool folder instead
|
|
106
|
+
of tracker rows (`scopeKind: "folder"` with `folderId`; every tool inside it, at
|
|
107
|
+
any depth). Destination, group and ticket lists filter by `folderId`, and
|
|
108
|
+
`delete_folder` asks for `confirmDependents: true` before deleting the destinations
|
|
109
|
+
and groups configured on the folder (with their tickets and plans). The SDK skills
|
|
110
|
+
cover the same options. Verify the server and SDK releases before using them.
|
|
111
|
+
|
|
103
112
|
### Participants, scheduled reports and survey settings update (0.5.0)
|
|
104
113
|
|
|
105
114
|
The woku skill covers folder participant lists (`get_folder_participants`,
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "woku-ai-toolkit",
|
|
3
3
|
"name": "woku AI Toolkit",
|
|
4
4
|
"description": "Voice-of-customer for your agent. Design a listening program, run the VoC instruments (NPS, CSAT, CES, wokus), and turn every signal into a support ticket or an action plan, through woku's MCP server.",
|
|
5
|
-
"version": "0.
|
|
5
|
+
"version": "0.6.0",
|
|
6
6
|
"skills": [
|
|
7
7
|
"./skills"
|
|
8
8
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wokuapp/ai-toolkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "woku AI Toolkit: connect your agent to woku's voice-of-customer platform. Design VoC programs and turn customer feedback into support tickets and action plans, through woku's MCP server.",
|
|
5
5
|
"author": "woku",
|
|
6
6
|
"license": "MIT",
|
package/skills/woku/SKILL.md
CHANGED
|
@@ -73,7 +73,8 @@ One folder tree holds wokus and NPS, CSAT and CES tools together. Call `woku_gui
|
|
|
73
73
|
- Journeys can live in folders (`Viajes > journey > moment`): `get_journey_folders_status` shows whether the company organizes them and what is pending, and `organize_journey_folders` switches it on and runs a background pass that only moves tools without a folder (propose it and wait for approval; it returns a conflict while a pass is running). `get_journey` and `list_journeys` show `folderId` and `momentFolders`, and folders created by woku carry an `origin` (`journeys-root`, `journey`, `journey-moment`, `integration`; integration folders also carry `integrationProvider`, for example `shopify`); read `origin`, `integrationProvider` and the stats of a folder with `search_voc_tools`, not with `get_folder` or `list_folders`, which only count wokus.
|
|
74
74
|
- A folder can keep a participant list (a program's enrolled): `get_folder_participants` returns it and, per tool of the subtree, the indexes of who answered (`responded`), who did not (`missing`) and who answered more than once (`repeated`), plus `outsideList` and `anonymousAllowed` (anonymous responses cannot be matched). `set_folder_participants` replaces the list (`mode: "replace"`) or adds to it (`mode: "add"`) from text, one person per line with a name, an email and/or a phone; `remove_folder_participant` removes one person or the whole list; `resend_to_missing_participants` sends a tool again to the missing by email or WhatsApp. Removing and resending need `confirm: true`; propose them and wait for approval.
|
|
75
75
|
- `schedule_report` emails the PDF report of a folder or a tool on a schedule (`monthly`, `biweekly`, `weekly` at 12:00 UTC with the previous complete period, or `once` with `periodFrom`/`periodTo`) to up to 10 recipients; `list_scheduled_reports`, `update_scheduled_report` (edit, pause, resume), `delete_scheduled_report` and `send_scheduled_report_now` manage them. Scheduling, sending now and deleting need `confirm: true`: they email real people.
|
|
76
|
-
- `delete_folder` needs `confirm: true`;
|
|
76
|
+
- `delete_folder` needs `confirm: true`; the content moves up to the parent. Support destinations and action plan groups configured ON that folder are deleted with it, with their tickets and plans: the call then fails with `FOLDER_HAS_DEPENDENTS` and the list; show it and repeat with `confirmDependents: true` only if the user agrees. Moving or deleting folders is a user decision: propose the new structure and wait for approval.
|
|
77
|
+
- Support and plans by folder: `create_ticket_destination` and `create_action_plan_group` (and their `update_*`) take `scopeKind: "folder"` with a `folderId` instead of tracker rows: the destination or group then listens to every tool inside that folder, at any depth, resolved when each review arrives (moving a tool out stops it counting). Never both. A ticket reaches every enabled destination that matches it (trackers, a folder and its subfolders), as one ticket with `destinationIds` (`destinationId` is the highest-priority one); all its email destinations share one email to each address once, listing who got it. `list_ticket_destinations`, `list_action_plan_groups` and `list_tickets` accept `folderId`. When the company already organizes its tools in folders by store, team or moment, propose a folder scope before designing trackers.
|
|
77
78
|
|
|
78
79
|
## Periods and text search
|
|
79
80
|
|
|
@@ -114,7 +114,17 @@ const metrics = await woku.folders.metrics(folder.id, { days: 30 }); // per tool
|
|
|
114
114
|
await woku.tools.move({ items: [{ type: 'csat', id: toolId }], folderId: null }); // null = root
|
|
115
115
|
const csv: string = await woku.folders.csv(folder.id);
|
|
116
116
|
const pdf: Uint8Array = await woku.folders.pdf(folder.id, { lang: 'en' }); // folder report as PDF bytes
|
|
117
|
-
await woku.folders.delete(folder.id); // content moves up
|
|
117
|
+
await woku.folders.delete(folder.id); // content moves up; 409 FOLDER_HAS_DEPENDENTS if destinations or groups are configured on it
|
|
118
|
+
await woku.folders.delete(folder.id, { confirmDependents: true }); // also deletes those destinations and groups (tickets and plans)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Support and plans by folder: a destination or plan group listens to tracker rows or to one folder (every tool inside it, at any depth), never both.
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
await woku.ticketDestinations.create({ name: 'Store support', kind: 'email', config: { emails: ['support@acme.com'] }, scopeKind: 'folder', folderId: folder.id });
|
|
125
|
+
await woku.actionPlanGroups.create({ name: 'Stores', scopeKind: 'folder', folderId: folder.id, members: [{ userId, role: 'admin' }] });
|
|
126
|
+
const listening = await woku.ticketDestinations.list({ folderId: folder.id }); // on the folder or an ancestor
|
|
127
|
+
for await (const ticket of await woku.tickets.list({ folderId: folder.id })) console.log(ticket.origin?.folder?.path);
|
|
118
128
|
```
|
|
119
129
|
|
|
120
130
|
Journeys in folders: `await woku.journeyFolders.status()` and `await woku.journeyFolders.organize()` (background pass, 409 while running); `journeys.get` returns `folderId` and `momentFolders`, and folders expose `origin`.
|
|
@@ -135,7 +135,18 @@ metrics = woku.folders.metrics(folder["id"], {"days": 30}) # per tool, period v
|
|
|
135
135
|
woku.tools.move({"items": [{"type": "csat", "id": tool_id}], "folderId": None}) # None = root
|
|
136
136
|
csv_text = woku.folders.csv(folder["id"])
|
|
137
137
|
pdf_bytes = woku.folders.pdf(folder["id"], {"lang": "en"}) # folder report as PDF bytes
|
|
138
|
-
woku.folders.delete(folder["id"]) # content moves up
|
|
138
|
+
woku.folders.delete(folder["id"]) # content moves up; 409 FOLDER_HAS_DEPENDENTS if destinations or groups are configured on it
|
|
139
|
+
woku.folders.delete(folder["id"], confirm_dependents=True) # also deletes those destinations and groups (tickets and plans)
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Support and plans by folder: a destination or plan group listens to tracker rows or to one folder (every tool inside it, at any depth), never both.
|
|
143
|
+
|
|
144
|
+
```python
|
|
145
|
+
woku.ticket_destinations.create({"name": "Store support", "kind": "email", "config": {"emails": ["support@acme.com"]}, "scopeKind": "folder", "folderId": folder["id"]})
|
|
146
|
+
woku.action_plan_groups.create({"name": "Stores", "scopeKind": "folder", "folderId": folder["id"], "members": [{"userId": user_id, "role": "admin"}]})
|
|
147
|
+
listening = woku.ticket_destinations.list(params={"folderId": folder["id"]}) # on the folder or an ancestor
|
|
148
|
+
for ticket in woku.tickets.list({"folderId": folder["id"]}):
|
|
149
|
+
print(ticket.get("origin", {}).get("folder", {}).get("path"))
|
|
139
150
|
```
|
|
140
151
|
|
|
141
152
|
Journeys in folders: `woku.journey_folders.status()` and `woku.journey_folders.organize()` (background pass, `ConflictError` while running); `journeys.get` returns `folderId` and `momentFolders`, and folders expose `origin`.
|