@awesomate/hosting-mcp 0.142.0 → 0.151.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/README.md +31 -0
- package/dist/index.js +2623 -2395
- package/package.json +2 -2
- package/skill/CHANGELOG.json +86 -0
- package/skill/awesomate-email/SKILL.md +22 -2
- package/skill/awesomate-funnels/SKILL.md +11 -8
- package/skill/awesomate-funnels/references/lead-magnet.md +6 -4
- package/skill/awesomate-knowledge/SKILL.md +3 -3
- package/skill/awesomate-knowledge/references/faqs.md +1 -1
- package/skill/awesomate-knowledge/references/from-your-files.md +2 -2
- package/skill/awesomate-knowledge/references/ingestion-sources.md +3 -1
- package/skill/awesomate-knowledge/references/quotas-and-packs.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awesomate/hosting-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.151.1",
|
|
4
4
|
"description": "Awesomate MCP server — lets Claude manage your Awesomate WordPress hosting, plan, limits, n8n automations, and build Node/static apps + databases",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"scripts": {
|
|
20
20
|
"build": "esbuild src/index.ts --bundle --platform=node --target=node18 --format=esm --outfile=dist/index.js --banner:js='#!/usr/bin/env node\nimport { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:*",
|
|
21
21
|
"typecheck": "tsc --noEmit",
|
|
22
|
-
"test": "npm run build && esbuild src/config.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/config.mjs --external:node:* && esbuild src/knowledge.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/knowledge.mjs --banner:js='import { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:* && esbuild src/skills.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/skills.mjs --external:node:* && esbuild src/features.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/features.mjs --external:node:* && esbuild src/scopes.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/scopes.mjs --external:node:* && esbuild src/http.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/http.mjs --banner:js='import { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:* && esbuild src/files.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/files.mjs --banner:js='import { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:* && node --test test/*.test.mjs",
|
|
22
|
+
"test": "npm run build && esbuild src/config.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/config.mjs --external:node:* && esbuild src/knowledge.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/knowledge.mjs --banner:js='import { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:* && esbuild src/skills.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/skills.mjs --external:node:* && esbuild src/features.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/features.mjs --external:node:* && esbuild src/scopes.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/scopes.mjs --external:node:* && esbuild src/http.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/http.mjs --banner:js='import { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:* && esbuild src/files.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/files.mjs --banner:js='import { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:* && esbuild test/registrar.entry.ts --bundle --platform=node --target=node18 --format=esm --outfile=test/.build/registrar.mjs --banner:js='import { createRequire as __awmCreateRequire } from \"node:module\"; const require = __awmCreateRequire(import.meta.url);' --external:node:* && node --test test/*.test.mjs",
|
|
23
23
|
"prepublishOnly": "npm run typecheck && npm run test"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
package/skill/CHANGELOG.json
CHANGED
|
@@ -1,5 +1,91 @@
|
|
|
1
1
|
{
|
|
2
2
|
"versions": [
|
|
3
|
+
{
|
|
4
|
+
"version": "0.151.1",
|
|
5
|
+
"highlights": [
|
|
6
|
+
"No change in what Claude can do: the Knowledge Base and Files tools moved into their own file in the MCP's source, ready for the Claude chat connector. Every tool keeps its name, description and inputs."
|
|
7
|
+
]
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"version": "0.151.0",
|
|
11
|
+
"highlights": [
|
|
12
|
+
"awesomate_crm_email can throw a draft away when you ask ({action:'discard', id}). A draft only: an approved, sending or sent email is refused and stays, and stopping one is the owner's, in the hub. Nothing is deleted: the draft drops off the list of emails, and a person can bring its words back from the hub. Thrown-away drafts are left out of 'list'"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"version": "0.150.1",
|
|
17
|
+
"highlights": [
|
|
18
|
+
"Claude can look through a connected Vimeo or Wistia library with you (awesomate_knowledge_sources, video_library): its folders with counts, hours and sizes, and its videos by folder, part of a name or upload date, newest, oldest, by name or longest first, each with its length, size and whether it has captions. Read only: choosing videos, the quote, Start and asking our team to bring a big library in stay in the hub at Knowledge, Video library.",
|
|
19
|
+
"video_imports for one import now says where it is in one sentence (progress_words, including why it is waiting), what was chosen (choice), and the videos that can't come in grouped by reason (problems)."
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"version": "0.150.0",
|
|
24
|
+
"highlights": [
|
|
25
|
+
"awesomate_crm_email can ask the account's own writing agent for an email (action brief): it writes in the business's voice from its details, lists and past results, may ask a question or two first, and saves a draft for a person to approve in the hub. brief_status picks up a draft that takes longer."
|
|
26
|
+
]
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"version": "0.149.0",
|
|
30
|
+
"highlights": [
|
|
31
|
+
"awesomate_crm_series choices: what a series' four answers can pick from, by name (forms, lists, tags people have with counts only, the four stages, and the events something sends), so a change to who a series is for uses real names"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"version": "0.148.1",
|
|
36
|
+
"highlights": [
|
|
37
|
+
"No change in what Claude can do: the n8n automation tools moved into their own file inside the package, the next step to offering the same tools in Claude and ChatGPT chat."
|
|
38
|
+
]
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"version": "0.148.0",
|
|
42
|
+
"highlights": [
|
|
43
|
+
"awesomate_crm_series draft takes form: Welcome new subscribers or the lead magnet follow-up, started from one of the business's sign-up forms (its id or slug). It starts when someone who sent the form joins one of its lists (their own yes, so double opt-in starts on their click), and the lead magnet follow-up sends two emails and no second copy of the file, since the form's own email already sent it. A form with no list can start only a service series. Series now read forms by name (\"They sent the Ski week guide form\"), and templates says which ones take a form (takesForm)",
|
|
44
|
+
"awesomate-funnels and awesomate-email: the form follow-up recipe uses form on the template instead of rewriting the lead magnet series by hand"
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"version": "0.147.1",
|
|
49
|
+
"highlights": [
|
|
50
|
+
"No change in what Claude can do: the website, hosting and app tools moved into their own files inside the package, the next step to offering the same tools in Claude and ChatGPT chat."
|
|
51
|
+
]
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"version": "0.147.0",
|
|
55
|
+
"highlights": [
|
|
56
|
+
"New awesomate_numbers_sql: Claude queries the business's own numbers with one read-only SQLite SELECT over the tables awesomate_numbers_tables lists, and gets plain rows back for a chart or a Claude Dashboard: contacts by month, KPIs by light, leads per 100 visits week by week. Totals only, refreshed at most every 5 minutes, and a team member's key sees only their own KPIs. Needs Your numbers in Claude (numbers_query)."
|
|
57
|
+
]
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"version": "0.146.1",
|
|
61
|
+
"highlights": [
|
|
62
|
+
"No change in what Claude can do: the account, plan, business, task and notification tools moved into their own file inside the package, the first step to offering the same tools in Claude and ChatGPT chat."
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"version": "0.146.0",
|
|
67
|
+
"highlights": [
|
|
68
|
+
"awesomate_knowledge_sources has a new refresh action: Claude reads one web page in your Knowledge Base again so it holds the page's current text, keeping its visibility, tags and collections, and tells you whether anything changed. A file is brought up to date by uploading it again. Adding a page that is already there no longer claims it became private: it keeps its own visibility unless you choose one."
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
"version": "0.145.0",
|
|
73
|
+
"highlights": [
|
|
74
|
+
"awesomate_numbers_tables lists many more of the business's numbers to chart: Contacts counts by month, day and tag, each kind of record by month and day (bookings and support tickets among them), website visits and leads, Google search, Shopify sales, automation runs and errors by day, and to-dos week by week. Totals only, and a team member gets business-wide tables only when their access covers the whole business."
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"version": "0.144.0",
|
|
79
|
+
"highlights": [
|
|
80
|
+
"New awesomate_numbers_tables: Claude lists the business's own numbers it can chart or put on a dashboard (KPIs with their lights and targets, each KPI's recent periods, the business's figures), with stable table and column names, and says why any other table is not there. Read only, totals only, and a team member's key gets only their own KPIs. Needs Your numbers in Claude (numbers_query)."
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"version": "0.143.0",
|
|
85
|
+
"highlights": [
|
|
86
|
+
"A public website chat and the questions it couldn't answer (the Questions inbox, its daily email and the visitor test) are on every plan, Essentials included; answers still count against the month's Knowledge answers. Claude no longer tells an Essentials owner these need Support Plus."
|
|
87
|
+
]
|
|
88
|
+
},
|
|
3
89
|
{
|
|
4
90
|
"version": "0.142.0",
|
|
5
91
|
"highlights": [
|
|
@@ -239,7 +239,17 @@ to a booking, pricing or upgrade page.
|
|
|
239
239
|
|
|
240
240
|
## 5. Draft it, and hand it to the owner to approve
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
When the account has its own writing agent, ask it first rather than writing
|
|
243
|
+
the doc yourself: `{action:'brief', brief, topic}` (or `id` to write over a
|
|
244
|
+
draft). Its words are the business's own voice. If it answers `questions`, put
|
|
245
|
+
them to the user in plain words and call `brief` again with the same `brief`,
|
|
246
|
+
its `session_id` and `answers: [{q, a}]`. A `pending` answer means call
|
|
247
|
+
`brief_status {job_id}` in about 20 seconds. You then review its draft with
|
|
248
|
+
the user like any other (steps 2 and 3 below); a person still approves it in
|
|
249
|
+
the hub. `409 no_copywriter` means there is no writing agent: say the owner
|
|
250
|
+
can add one in the hub (Contacts, Emails), and write the doc yourself.
|
|
251
|
+
|
|
252
|
+
Otherwise, with `awesomate_crm_email`:
|
|
243
253
|
|
|
244
254
|
1. `{action:'draft', topic, doc}`, where `topic` is a list key from `lists`.
|
|
245
255
|
The answer has the email's `id`, its `checks`, who it would reach, the
|
|
@@ -256,6 +266,12 @@ With `awesomate_crm_email`:
|
|
|
256
266
|
sending, but copies already sent can't be recalled.
|
|
257
267
|
5. Once someone has approved an email you can't change it (`409
|
|
258
268
|
not_a_draft`). Any change after that is the owner's, in the hub.
|
|
269
|
+
6. If the owner asks you to throw a draft away, `{action:'discard', id}`.
|
|
270
|
+
Only a draft: an approved, sending or sent email answers `409
|
|
271
|
+
not_a_draft` (its `reason` says which), and stopping one is the owner's,
|
|
272
|
+
in the hub. Nothing is deleted: the draft drops off the list of emails,
|
|
273
|
+
and the owner can bring its words back from the hub. Never throw a draft
|
|
274
|
+
away unless they asked.
|
|
259
275
|
|
|
260
276
|
If the draft answers `409 sending_not_set_up`, sending isn't set up for this
|
|
261
277
|
account yet and nothing was saved. Give the owner the email as text, and
|
|
@@ -305,7 +321,9 @@ because you drafted it.
|
|
|
305
321
|
yes it relies on). Its emails hold gaps in [square brackets] that block
|
|
306
322
|
approval: write each one with the owner in their voice (section 4), then
|
|
307
323
|
`{action:'update', id, email, doc}` one at a time. Write your own with
|
|
308
|
-
`{action:'draft', spec, emails}` when nothing fits.
|
|
324
|
+
`{action:'draft', spec, emails}` when nothing fits. To follow up one of
|
|
325
|
+
the business's sign-up forms, pass `form` (its id) with `welcome` or
|
|
326
|
+
`lead-magnet`: the awesomate-funnels skill covers it.
|
|
309
327
|
3. Say the series back in the owner's words before handing it over. `get`
|
|
310
328
|
answers `in_words`: what starts it, who it is for, when people come off,
|
|
311
329
|
each step. Fix everything in `problems` and every email's
|
|
@@ -321,6 +339,8 @@ What starts a series, in plain words:
|
|
|
321
339
|
a guide downloaded): an event, from the owner's automations or
|
|
322
340
|
`awesomate_crm_write {action:'event'}`. Agree the event's name with the
|
|
323
341
|
owner; it must match what their automations send.
|
|
342
|
+
- **Someone sends one of the business's forms** and joins its list (with
|
|
343
|
+
`form` on a template), or, for a service series, just sends it.
|
|
324
344
|
- **They're tagged**, or **they become** new, a customer, a regular or quiet.
|
|
325
345
|
|
|
326
346
|
Every series needs its way out: under `comes_off_when`, stop people who
|
|
@@ -142,15 +142,18 @@ Drafts only, with `awesomate_crm_series` (Support Plus and above; relay `upgrade
|
|
|
142
142
|
comes). Offer one, not several:
|
|
143
143
|
|
|
144
144
|
- **A sign-up form, or a lead magnet whose owner just wants a warm hello:**
|
|
145
|
-
`{action:'draft', template:'welcome',
|
|
146
|
-
|
|
145
|
+
`{action:'draft', template:'welcome', form:<the form's id>}`. It starts when someone who sent the
|
|
146
|
+
form joins its list (their own yes), so it works with single and double opt-in.
|
|
147
147
|
- **A lead magnet with follow-ups about the guide's topic:**
|
|
148
|
-
`{action:'draft', template:'lead-magnet',
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
148
|
+
`{action:'draft', template:'lead-magnet', form:<the form's id>}`. With the form it starts on the
|
|
149
|
+
form's list, only for people who sent it, and has no file email: the form's own email already
|
|
150
|
+
sent the guide. Two emails follow (a tip, then an offer). Never draft `lead-magnet` without the
|
|
151
|
+
form for a hub form: it would wait for a `downloaded` event nothing sends.
|
|
152
|
+
|
|
153
|
+
A form that offers several lists takes `list` too (one of the form's). A form with no list can start
|
|
154
|
+
only a service series; say so, and offer to add a list to the form. Someone already on the list when
|
|
155
|
+
they send the form gets the download but no series: that is the consent rule, and the form's page
|
|
156
|
+
says so.
|
|
154
157
|
|
|
155
158
|
Write each email with the owner (gaps in [square brackets] block approval until written), then
|
|
156
159
|
give them `reviewUrl`: nobody gets anything until an approver approves it and switches it on.
|
|
@@ -131,7 +131,9 @@ Once the page is published, `awesomate_site_audit` on it and fix what it flags (
|
|
|
131
131
|
|
|
132
132
|
## 9. The follow-up
|
|
133
133
|
|
|
134
|
-
Offer one series, as SKILL.md section 7 says: `welcome
|
|
135
|
-
`lead-magnet
|
|
136
|
-
|
|
137
|
-
|
|
134
|
+
Offer one series, as SKILL.md section 7 says: `{action:'draft', template:'welcome', form}` or
|
|
135
|
+
`{action:'draft', template:'lead-magnet', form}`, with the form's id. With the form, the lead magnet
|
|
136
|
+
follow-up starts on the form's list, only for people who sent it, and sends no second copy of the
|
|
137
|
+
file. Write the emails with the owner, then give them the series' `reviewUrl`: nobody gets anything
|
|
138
|
+
until they approve it and switch it on in the hub. The form's page in the hub lists it under
|
|
139
|
+
**Follow up with an email series**.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: awesomate-knowledge
|
|
3
|
-
description: Turn the user's own content into a verified Knowledge Base their AI agents answer from, with citations. Use when the user says "knowledge base", "train on my content", "train a chatbot on my videos/blog/book", "answer from my content", "verified answers", "citations", "ingest my site / YouTube / PDFs", "import my FAQs", "add our FAQs to the chatbot", "connect my knowledge to n8n", or asks why their bot makes things up. The Knowledge Base and text ingest work on every plan; video, audio and scanned-document OCR need Pro
|
|
3
|
+
description: Turn the user's own content into a verified Knowledge Base their AI agents answer from, with citations. Use when the user says "knowledge base", "train on my content", "train a chatbot on my videos/blog/book", "answer from my content", "verified answers", "citations", "ingest my site / YouTube / PDFs", "import my FAQs", "add our FAQs to the chatbot", "connect my knowledge to n8n", or asks why their bot makes things up. The Knowledge Base and text ingest work on every plan; video, audio and scanned-document OCR need Pro; a public website chat is on every plan. Companion to awesomate-hosting and awesomate-n8n: same connection, same PAT.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Awesomate Knowledge Base — verified answers from Claude Code
|
|
@@ -163,8 +163,8 @@ confirm:true}`, both after the owner's yes.
|
|
|
163
163
|
| Business-data warehouse (what `awesomate_knowledge_data` calls: metrics, datasets, `dataset`, `dataset_update`, imports, `import`, `import_action`, query) | `GET /api/knowledge/data/{metrics,datasets,datasets/:id,imports,imports/:id}` · `PATCH /api/knowledge/data/datasets/:id` · `POST /api/knowledge/data/imports/:id/:action` · `POST /api/knowledge/data/query` (read-only SQL) |
|
|
164
164
|
| Agent builder (what `awesomate_knowledge_agents` calls) | `GET\|POST /api/knowledge/agents` · `GET\|PATCH\|DELETE /api/knowledge/agents/:agent_id` · `POST /api/knowledge/agents/:agent_id/{publish,suspend,resume}` · `GET /api/knowledge/agents/{logs,answer-rates,where-used}` · `GET\|POST /api/knowledge/agents/policies` · `GET\|PATCH\|DELETE /api/knowledge/agents/policies/:policy_id` · `POST /api/knowledge/agents/policies/:policy_id/{suspend,resume}` |
|
|
165
165
|
| **Test a DRAFT agent** (`action:'test'`) | `POST /api/knowledge/agents/:agent_id/chat` `{message, session_id?}`. There is **no** `/test` endpoint — guessing one returns 404. It ignores the agent's audience. |
|
|
166
|
-
| **Ask the PUBLISHED agent as a visitor** (`action:'visitor_test'`) | `POST /api/knowledge/agents/:agent_id/visitor-chat` `{message (max 2000), session_id?}`.
|
|
167
|
-
| **Website chat key** (`action:'website_key'`, `website_keys`, `revoke_website_key`; owner only,
|
|
166
|
+
| **Ask the PUBLISHED agent as a visitor** (`action:'visitor_test'`) | `POST /api/knowledge/agents/:agent_id/visitor-chat` `{message (max 2000), session_id?}`. Every plan; an unanswered question lands in the Questions inbox. |
|
|
167
|
+
| **Website chat key** (`action:'website_key'`, `website_keys`, `revoke_website_key`; owner only, every plan) | `POST /api/knowledge/agents/keys` `{class:'p', agent_id, allowed_origins (https only, no path or wildcard), label?, request_id?, monthly_answer_cap?}` returns the key ONCE with its `monthly_answer_cap`; with no cap the hub sets half the account's monthly answers at that moment, and a key's cap cannot be changed later (a new limit is a new key). The tool refuses an agent that is not published, not public-audience, or paused. List with `GET /api/knowledge/agents/keys` (class `p`), revoke with `DELETE /api/knowledge/agents/keys/:key_id`. Every one only after the owner's yes. |
|
|
168
168
|
| **The website chat's code: every attribute it reads** | `<script src="…/widget/v1.js" data-key="amk_p_…" data-agent="<agent id>" …>` before `</body>`. Required: `data-key` (the website key; or `data-token` for a short-lived u token your own server mints for a signed-in member) and `data-agent`. Optional: `data-title` (the header, "Ask us" when left out), `data-sub` (one line under the title; offer it only where `features.website_subtitle` is available), `data-greeting` (first message), `data-placeholder` (the hint in the box), `data-accent` (#hex), `data-position` (`right`\|`left`), `data-mode` (`bubble`\|`inline`), `data-target` (CSS selector the inline panel goes in), `data-height` (inline height, e.g. `620px`), `data-theme` (`auto`\|`light`\|`dark`), `data-sources` (`on` shows numbered sources; hidden otherwise), `data-media` (`off` stops players), `data-session-suffix` (two chats on one page). Never set `data-api`. The hub's look editor writes title, sub, accent, greeting, position, theme and sources; `website_key` writes title and sub (`title`, `subtitle`). |
|
|
169
169
|
| Entity layer probe (`available` false = not enabled yet, stop) | `GET /api/knowledge/entities` |
|
|
170
170
|
| People list / detail | `GET /api/knowledge/people?status=named\|unknown\|hidden\|all` · `GET /api/knowledge/people/:id` — returns `{people, next_cursor}` and **no `counts` key**. |
|
|
@@ -144,7 +144,7 @@ Fixing one answer later is `list {setId, q: "<words from the question>"}` to fin
|
|
|
144
144
|
`update {entryId, answer}` (a live public answer needs the owner's yes again). `archive` takes
|
|
145
145
|
an entry out of every answer without deleting it.
|
|
146
146
|
|
|
147
|
-
## Questions the assistant couldn't answer (
|
|
147
|
+
## Questions the assistant couldn't answer (every plan)
|
|
148
148
|
|
|
149
149
|
A public assistant keeps the questions it could not answer, grouped so every way of asking
|
|
150
150
|
shows as one. Clearing them is the fastest way to make the assistant better, and it is the
|
|
@@ -148,8 +148,8 @@ audience, so a public-audience draft can quote internal or private sources
|
|
|
148
148
|
password). After publishing a customer-facing agent, ask the same awkward
|
|
149
149
|
questions with `{action:'visitor_test', agentId, message}`: it runs the
|
|
150
150
|
PUBLISHED agent through the real public visitor path, which is what a website
|
|
151
|
-
visitor actually gets (the published agent refused the door code). It
|
|
152
|
-
|
|
151
|
+
visitor actually gets (the published agent refused the door code). It works on
|
|
152
|
+
every plan, and a question it cannot answer lands
|
|
153
153
|
in the owner's Questions inbox, so say so before using it.
|
|
154
154
|
|
|
155
155
|
Access policies (the customer groups an agent narrows to: a policy named
|
|
@@ -11,7 +11,7 @@ estimating BEFORE asking approval.
|
|
|
11
11
|
| Web page / blog post | `add {url}` | One page per URL. A page that can't be reached, or has under 200 characters of readable text, fails the job with the reason (`error_code` `page_unreachable` or `page_unreadable`) rather than succeeding empty |
|
|
12
12
|
| Whole site / blog | `add {sitemap, since?}` | A `sitemap.xml`, or a sitemap index that points to other sitemaps. Only pages on the sitemap's own site are read. Up to 500 pages per job: a sitemap listing more adds the first 500 and carries on in a follow-on job (`result_summary.remaining` and `continued_as`), so nothing is cut off silently. The one exception: when the workspace's allowance has run out (`paused: "credit_exhausted"`), no follow-on job is made and nothing resumes by itself; say how many pages were not read, and add the sitemap again after a top-up (pages already in are skipped as unchanged). `since` skips entries whose `<lastmod>` is older; when every entry is older, the job succeeds having added nothing. A sitemap that lists no pages to read fails with a plain reason: the address is a web page rather than a sitemap, it lists no page addresses, its pages are all on another site, or the sitemaps it points to couldn't be opened |
|
|
13
13
|
| Link to one Vimeo or Wistia video | `add {url}` | **Copied and transcribed**, with playback, when that provider's library is connected (hub, Knowledge, Video library) and the plan includes audio and video (Pro and above, within the month's media hours): the job's `kind` is `video-link`. Not connected yet, or a channel, showcase or folder rather than one video: read as a web page, which often has too little text and fails (`page_unreadable`); once the library is connected, add the link again. Below Pro, or in a trial, it is refused (403 `upgrade_required`, `capability: "media_ingest"`) |
|
|
14
|
-
| A whole Vimeo or Wistia library | hub, Knowledge, Video library | Pro and above. Anyone with full access connects the account with a token that can read the videos, not only the account (Vimeo: a personal access token with Private and Video Files; Wistia: a token with "Read all folder and media data"). The hub lists the library and shows what bringing it in involves before anything is copied or charged: videos with captions come in free, the rest are transcribed at A$15 per 10 hours or brought in without transcription. Only the account owner starts an import. Read progress with `awesomate_knowledge_sources {action:'video_imports'}`; connecting, starting, pausing and
|
|
14
|
+
| A whole Vimeo or Wistia library | hub, Knowledge, Video library | Pro and above. Anyone with full access connects the account with a token that can read the videos, not only the account (Vimeo: a personal access token with Private and Video Files; Wistia: a token with "Read all folder and media data"). The hub lists the library and shows what bringing it in involves before anything is copied or charged: videos with captions come in free, the rest are transcribed at A$15 per 10 hours or brought in without transcription. Only the account owner starts an import. Where the account has the video picker, the owner chooses part of the library instead (one video to try first, a folder, the newest few) and is quoted for just that; a library too big to do alone has "Have our team bring it in" in the hub, which raises a ticket and charges nothing. Read progress with `awesomate_knowledge_sources {action:'video_imports'}` (it carries `progress_words`, the `choice` and the `problems` grouped by reason) and browse with `{action:'video_library', importId, view:'folders'|'videos', folderId?, q?, from?, to?}`; connecting, choosing, the quote, starting, pausing, stopping and asking our team stay in the hub, so never say a video is chosen or coming in from what you read |
|
|
15
15
|
| YouTube link | `add {url}` | Refused on every plan (400): "YouTube links are not supported yet". No upgrade changes that, so never offer one for it. Uploading the business's own video files works on Pro and above, or add the page that embeds the video |
|
|
16
16
|
| Any other link to a recording (Loom, podcast audio, a file address) | `add {url}` | **Not transcribed.** Read as a web page, which gives at most its title and description; a link straight to an audio or video file has no page to read and fails (`page_unreadable`). Pro and above; below Pro, or in a trial, it is refused (403 `upgrade_required`, `capability: "media_ingest"`). To transcribe the recording, upload the file |
|
|
17
17
|
| PDF / book / document / markdown | hub upload page | Text layer used; scanned pages OCR'd automatically (`auto` mode, capped at 300 OCR pages per job — over that the job fails BEFORE any vision spend) |
|
|
@@ -38,6 +38,8 @@ media are skipped by content hash (`unchanged` / `transcript_cached` in the
|
|
|
38
38
|
job summary). Typical time-to-searchable: minutes for pages; media takes
|
|
39
39
|
longer (roughly the media's own duration as a worst case).
|
|
40
40
|
|
|
41
|
+
To bring a web page up to date, use `refresh` {sourceId}, or `add` the same address again: both update it in place (same source, visibility, tags and collections kept; without `visibility`, an existing source keeps its own). A refresh job's `summary_text` reads "Read again: updated" or "Read again: no change since <date>"; a plain re-add reads as an add ("1 already up to date"). A video or recording link is refused by `refresh`: sent again it would come in as the video. `refresh` on anything but a web page answers `not_a_web_page`: upload the file again instead.
|
|
42
|
+
|
|
41
43
|
## Cost expectations (for the approval conversation)
|
|
42
44
|
|
|
43
45
|
- Text (pages, posts, books): cents to a few dollars for a typical corpus.
|
|
@@ -15,7 +15,7 @@ from `awesomate_get_plan_features` for another plan.
|
|
|
15
15
|
| What it is for | Trying it out: your FAQs and an agent that answers from them | Day-to-day use | Everything, at the highest usage |
|
|
16
16
|
| FAQs | Yes | Yes | Yes |
|
|
17
17
|
| Documents, spreadsheets, web pages, pasted text | A small allowance | More | The most |
|
|
18
|
-
| Website chat widget, unanswered-questions inbox |
|
|
18
|
+
| Website chat widget, unanswered-questions inbox | Yes | Yes | Yes |
|
|
19
19
|
| Audio and video, scanned documents and images | No | No | Yes |
|
|
20
20
|
| Ingestion Packs (below) | No: the answer is an upgrade | Yes | Yes |
|
|
21
21
|
|