@zibby/skills 0.2.22 → 0.2.24
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/dist/browser.js +3 -10
- package/dist/code-scan.d.ts +1 -1
- package/dist/index.js +81 -88
- package/dist/jira.d.ts +75 -9
- package/dist/jira.js +4 -4
- package/dist/package.json +1 -1
- package/dist/report.d.ts +51 -276
- package/dist/trackers/index.js +12 -12
- package/dist/trackers/jira-adapter.js +11 -11
- package/package.json +1 -1
- package/docs/analysis.md +0 -109
- package/docs/apps/agent-ops.md +0 -130
- package/docs/apps/auth.md +0 -158
- package/docs/apps/deploy.md +0 -207
- package/docs/apps/goal-mode.md +0 -175
- package/docs/apps/index.md +0 -149
- package/docs/apps/managing.md +0 -121
- package/docs/cli-reference.md +0 -494
- package/docs/cloning-repositories.md +0 -285
- package/docs/cloud/bundles.md +0 -92
- package/docs/cloud/dedicated-egress.md +0 -140
- package/docs/cloud/editing-prompts.md +0 -79
- package/docs/cloud/env-vars.md +0 -144
- package/docs/cloud/limits.md +0 -81
- package/docs/cloud/logs.md +0 -104
- package/docs/cloud/triggering.md +0 -128
- package/docs/concepts/agents.md +0 -112
- package/docs/concepts/designing-agents.md +0 -247
- package/docs/concepts/graph.md +0 -83
- package/docs/concepts/sessions.md +0 -70
- package/docs/concepts/skills.md +0 -86
- package/docs/concepts/state.md +0 -106
- package/docs/concepts/sub-graphs.md +0 -227
- package/docs/custom-workflows.md +0 -358
- package/docs/get-started/deploy.md +0 -75
- package/docs/get-started/install.md +0 -60
- package/docs/get-started/run-locally.md +0 -94
- package/docs/get-started/trigger-and-logs.md +0 -90
- package/docs/get-started/use-from-agents.md +0 -153
- package/docs/get-started/your-first-workflow.md +0 -69
- package/docs/getting-started.md +0 -108
- package/docs/installation.md +0 -127
- package/docs/integrations/github.md +0 -73
- package/docs/integrations/gitlab.md +0 -43
- package/docs/integrations/jira.md +0 -71
- package/docs/integrations/lark.md +0 -41
- package/docs/integrations/linear.md +0 -43
- package/docs/integrations/notion.md +0 -33
- package/docs/integrations/plane.md +0 -46
- package/docs/integrations/sentry.md +0 -42
- package/docs/integrations/slack.md +0 -33
- package/docs/intro.md +0 -86
- package/docs/legacy/test-automation.md +0 -111
- package/docs/packages/agent-workflow.md +0 -88
- package/docs/packages/cli.md +0 -73
- package/docs/packages/core.md +0 -72
- package/docs/packages/mcp-browser.md +0 -110
- package/docs/packages/mcp-cli.md +0 -176
- package/docs/packages/memory.md +0 -223
- package/docs/packages/skills.md +0 -218
- package/docs/packages/ui-memory.md +0 -245
- package/docs/recipes/bug-autofix.md +0 -85
- package/docs/recipes/github-ai-scout.md +0 -61
- package/docs/recipes/index.md +0 -68
- package/docs/recipes/pipeline-supervisor.md +0 -57
- package/docs/recipes/sentry-triage.md +0 -93
- package/docs/recipes/test.md +0 -190
- package/docs/reviewing-results.md +0 -114
- package/docs/running-tests.md +0 -134
- package/docs/self-host/backup-restore.md +0 -53
- package/docs/self-host/custom-sidecars.md +0 -136
- package/docs/self-host/index.md +0 -75
- package/docs/self-host/storage.md +0 -50
- package/docs/self-host/troubleshooting.md +0 -48
- package/docs/self-host/upgrade.md +0 -81
- package/docs/skills/browser.md +0 -97
- package/docs/skills/chat-memory.md +0 -122
- package/docs/skills/core-tools.md +0 -80
- package/docs/skills/function-skill.md +0 -93
- package/docs/skills/github.md +0 -91
- package/docs/skills/index.md +0 -46
- package/docs/skills/jira.md +0 -99
- package/docs/skills/lark.md +0 -85
- package/docs/skills/memory.md +0 -92
- package/docs/skills/sentry.md +0 -80
- package/docs/skills/slack.md +0 -89
- package/docs/tests/memory.md +0 -131
- package/docs/triggering-workflows.md +0 -552
- package/docs/workflow-artifact-layout-evaluation.md +0 -119
- package/docs/workflow.md +0 -558
package/docs/skills/lark.md
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 3
|
|
3
|
-
title: Lark
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Lark skill
|
|
7
|
-
|
|
8
|
-
Send messages, reply in threads, list chats, and read chat history on Lark / Feishu.
|
|
9
|
-
|
|
10
|
-
- **ID:** `lark`
|
|
11
|
-
- **MCP server:** `lark` (tools exposed as `mcp__lark__*`)
|
|
12
|
-
|
|
13
|
-
## Tools provided
|
|
14
|
-
|
|
15
|
-
| Tool | What it does |
|
|
16
|
-
|---|---|
|
|
17
|
-
| `lark_send_message` | Send a text message. `receive_id` accepts chat_id (`oc_*`), open_id (`ou_*`), union_id (`on_*`), or email — the receive id type is inferred from the prefix |
|
|
18
|
-
| `lark_reply` | Reply to a specific `message_id` (creates a thread) |
|
|
19
|
-
| `lark_list_chats` | List chats the bot is a member of |
|
|
20
|
-
| `lark_get_chat_history` | Fetch recent messages in a `chat_id` (newest first), default `page_size: 20` |
|
|
21
|
-
|
|
22
|
-
## Setup
|
|
23
|
-
|
|
24
|
-
Lark bots authenticate with App ID + App Secret. The bot needs `im:message` and `im:chat:readonly` (or wider) permissions, and must be added to any chat it should read or post into.
|
|
25
|
-
|
|
26
|
-
1. Create a custom app at [open.feishu.cn](https://open.feishu.cn/) (or Lark's open platform).
|
|
27
|
-
2. Enable **Bot** capability and grant the IM permissions above.
|
|
28
|
-
3. In the Zibby dashboard, **Settings → Integrations → Connect Lark**, paste your `App ID` and `App Secret`.
|
|
29
|
-
4. The backend exchanges them for a `tenant_access_token` on demand and caches it (TTL ~100 min, just under Lark's 2h).
|
|
30
|
-
|
|
31
|
-
For self-hosted Lark deployments, set `host` on the integration config; the default is the standard Feishu host.
|
|
32
|
-
|
|
33
|
-
## Use in an agent
|
|
34
|
-
|
|
35
|
-
```js
|
|
36
|
-
import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
|
|
37
|
-
import { SKILLS } from '@zibby/skills';
|
|
38
|
-
|
|
39
|
-
export class IncidentNotifier extends WorkflowAgent {
|
|
40
|
-
buildGraph() {
|
|
41
|
-
const graph = new WorkflowGraph();
|
|
42
|
-
graph.addNode('notify', {
|
|
43
|
-
agent: 'claude',
|
|
44
|
-
skills: [SKILLS.LARK],
|
|
45
|
-
prompt: (state) => `Post a summary of incident ${state.incidentId} to the on-call
|
|
46
|
-
chat (chat_id: oc_xxxxx). If a previous thread exists in state.threadMessageId,
|
|
47
|
-
use lark_reply instead of lark_send_message.`,
|
|
48
|
-
});
|
|
49
|
-
return graph;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
## Output example
|
|
55
|
-
|
|
56
|
-
`lark_send_message`:
|
|
57
|
-
|
|
58
|
-
```json
|
|
59
|
-
{ "ok": true, "message_id": "om_d2e6e3a1f24c9d3..." }
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
`lark_get_chat_history`:
|
|
63
|
-
|
|
64
|
-
```json
|
|
65
|
-
{
|
|
66
|
-
"messages": [
|
|
67
|
-
{
|
|
68
|
-
"message_id": "om_abc...",
|
|
69
|
-
"sender_id": "ou_xyz...",
|
|
70
|
-
"sender_type": "user",
|
|
71
|
-
"msg_type": "text",
|
|
72
|
-
"content": "{\"text\":\"deploy is green\"}",
|
|
73
|
-
"create_time": "1715839203000"
|
|
74
|
-
}
|
|
75
|
-
]
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Implementation notes
|
|
80
|
-
|
|
81
|
-
Spawns `packages/skills/bin/mcp-lark.mjs`. Like Sentry, auth is fetched through the backend's `resolveIntegrationToken('lark')` endpoint and the tenant access token is cached in-process.
|
|
82
|
-
|
|
83
|
-
`receive_id_type` is required by Lark and is inferred from the id prefix (`oc_` → chat_id, `ou_` → open_id, `on_` → union_id, `cli_` → app_id, anything with `@` → email). Callers pass whichever id they have.
|
|
84
|
-
|
|
85
|
-
The MCP server uses `alwaysLoad: true` so tools land in the system prompt — same fix as Sentry. The `assistant` agent strategy can call the in-process `handleToolCall` for OpenAI Assistant API runs.
|
package/docs/skills/memory.md
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 7
|
|
3
|
-
title: Memory (test)
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Memory skill
|
|
7
|
-
|
|
8
|
-
Query the test memory database — prior test runs, known selectors with stability metrics, page models, navigation transitions — and save insights for future runs. Dolt-backed (git-style versioned SQL).
|
|
9
|
-
|
|
10
|
-
- **ID:** `memory`
|
|
11
|
-
- **MCP server:** `memory` (tools exposed as `mcp__memory__*`)
|
|
12
|
-
- **Underlying server:** `@zibby/ui-memory/mcp-server`
|
|
13
|
-
|
|
14
|
-
For persistent **chat** memory (not test history) see [Chat memory](./chat-memory.md).
|
|
15
|
-
|
|
16
|
-
## Tools provided
|
|
17
|
-
|
|
18
|
-
| Tool | What it does |
|
|
19
|
-
|---|---|
|
|
20
|
-
| `memory_get_test_history` | Recent test runs with pass/fail + timing. Filter by `specPath` substring |
|
|
21
|
-
| `memory_get_selectors` | Known selectors for a page with stability metrics. Filter by `pageUrl` substring |
|
|
22
|
-
| `memory_get_page_model` | Page structure — elements, roles, selectors. Filter by `url` substring |
|
|
23
|
-
| `memory_get_navigation` | Known page-to-page transitions. Filter by `fromUrl` substring |
|
|
24
|
-
| `memory_save_insight` | Save an observation. Categories: `selector_tip`, `timing`, `navigation`, `workaround`, `flaky`, `general` |
|
|
25
|
-
|
|
26
|
-
## Setup
|
|
27
|
-
|
|
28
|
-
Requires [Dolt](https://docs.dolthub.com/introduction/installation) and an initialized memory database in your workspace.
|
|
29
|
-
|
|
30
|
-
```bash
|
|
31
|
-
# macOS
|
|
32
|
-
brew install dolt
|
|
33
|
-
# then, in your agent workspace:
|
|
34
|
-
zibby init --mem
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
`zibby init --mem` creates `.zibby/memory/` (a Dolt repo). The memory tools only activate after at least one completed test run — until then the skill returns `null` from `resolve()` and is skipped.
|
|
38
|
-
|
|
39
|
-
Override the bin location for development with `MCP_MEMORY_PATH`.
|
|
40
|
-
|
|
41
|
-
See [Tests → Memory](../tests/memory.md) for the full memory lifecycle.
|
|
42
|
-
|
|
43
|
-
## Use in an agent
|
|
44
|
-
|
|
45
|
-
```js
|
|
46
|
-
import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
|
|
47
|
-
import { SKILLS } from '@zibby/skills';
|
|
48
|
-
|
|
49
|
-
export class FlakyTestInvestigator extends WorkflowAgent {
|
|
50
|
-
buildGraph() {
|
|
51
|
-
const graph = new WorkflowGraph();
|
|
52
|
-
graph.addNode('investigate', {
|
|
53
|
-
agent: 'claude',
|
|
54
|
-
skills: [SKILLS.MEMORY, SKILLS.BROWSER],
|
|
55
|
-
prompt: (state) => `Before running the test:
|
|
56
|
-
1. Call memory_get_test_history with specPath="${state.specPath}" — review prior failures.
|
|
57
|
-
2. Call memory_get_selectors with pageUrl matching the target page.
|
|
58
|
-
Then run the test using the browser tools. When done, save a memory_save_insight
|
|
59
|
-
capturing any selectors that worked when an older one failed.`,
|
|
60
|
-
});
|
|
61
|
-
return graph;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
The skill's prompt fragment auto-instructs the agent to consult prior runs and call `memory_save_insight` mid-run when a fallback selector works, and at minimum once at end-of-run.
|
|
67
|
-
|
|
68
|
-
## Output example
|
|
69
|
-
|
|
70
|
-
`memory_get_selectors`:
|
|
71
|
-
|
|
72
|
-
```json
|
|
73
|
-
{
|
|
74
|
-
"selectors": [
|
|
75
|
-
{
|
|
76
|
-
"pageUrl": "/dashboard",
|
|
77
|
-
"role": "button",
|
|
78
|
-
"stableId": "e7a1",
|
|
79
|
-
"selector": "[data-testid='new-project']",
|
|
80
|
-
"successCount": 42,
|
|
81
|
-
"failureCount": 1,
|
|
82
|
-
"lastSeen": "2026-05-15T14:00:00Z"
|
|
83
|
-
}
|
|
84
|
-
]
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## Implementation notes
|
|
89
|
-
|
|
90
|
-
`resolve({ workspace })` resolves `@zibby/ui-memory/mcp-server` and spawns it with `--db-path .zibby/memory`. Before spawning it sanity-checks Dolt is on the PATH and the database has at least one `test_runs` row; if not, returns `null` (skill skipped silently) or throws a clear "install Dolt" error.
|
|
91
|
-
|
|
92
|
-
The skill also exports `middleware()` that loads `createMemoryMiddleware()` from `@zibby/ui-memory` when the package is present — this runs before/after each node to inject test history into the prompt and persist new insights.
|
package/docs/skills/sentry.md
DELETED
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 2
|
|
3
|
-
title: Sentry
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Sentry skill
|
|
7
|
-
|
|
8
|
-
Read-only access to a connected Sentry organization — list projects, list issues, fetch issue details.
|
|
9
|
-
|
|
10
|
-
- **ID:** `sentry`
|
|
11
|
-
- **MCP server:** `sentry` (tools exposed as `mcp__sentry__*`)
|
|
12
|
-
|
|
13
|
-
## Tools provided
|
|
14
|
-
|
|
15
|
-
| Tool | What it does |
|
|
16
|
-
|---|---|
|
|
17
|
-
| `sentry_list_projects` | List projects in the connected organization (slug, name, platform) |
|
|
18
|
-
| `sentry_list_issues` | List issues. Supports `project`, `query` (Sentry search syntax, default `is:unresolved`), `sort` (`date`/`new`/`priority`/`freq`/`user`), `limit` |
|
|
19
|
-
| `sentry_get_issue` | Detailed info for one issue by `issueId` — title, culprit, counts, first/last seen, level, status |
|
|
20
|
-
|
|
21
|
-
## Setup
|
|
22
|
-
|
|
23
|
-
Sentry uses OAuth 2.0 with PKCE (public client — no client secret).
|
|
24
|
-
|
|
25
|
-
1. In the Zibby dashboard, go to **Settings → Integrations**.
|
|
26
|
-
2. Click **Connect Sentry**.
|
|
27
|
-
3. Approve the organization in the Sentry consent screen.
|
|
28
|
-
4. You're redirected back; the access token + organization slug are stored encrypted on the project.
|
|
29
|
-
|
|
30
|
-
The backend (`/integrations/sentry/connect` and `/integrations/sentry/callback`) handles the PKCE exchange. Tokens auto-refresh on use; if refresh fails, click **Reconnect** in the same settings panel.
|
|
31
|
-
|
|
32
|
-
## Use in an agent
|
|
33
|
-
|
|
34
|
-
```js
|
|
35
|
-
import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
|
|
36
|
-
import { SKILLS } from '@zibby/skills';
|
|
37
|
-
|
|
38
|
-
export class SentryTriage extends WorkflowAgent {
|
|
39
|
-
buildGraph() {
|
|
40
|
-
const graph = new WorkflowGraph();
|
|
41
|
-
graph.addNode('triage', {
|
|
42
|
-
agent: 'claude',
|
|
43
|
-
skills: [SKILLS.SENTRY],
|
|
44
|
-
prompt: () => `Use sentry_list_issues with query "is:unresolved level:error" to find the
|
|
45
|
-
top 10 unresolved errors. Then call sentry_get_issue for the highest-frequency one
|
|
46
|
-
and summarize what's failing.`,
|
|
47
|
-
});
|
|
48
|
-
return graph;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Output example
|
|
54
|
-
|
|
55
|
-
`sentry_list_issues`:
|
|
56
|
-
|
|
57
|
-
```json
|
|
58
|
-
{
|
|
59
|
-
"issues": [
|
|
60
|
-
{
|
|
61
|
-
"id": "5712345678",
|
|
62
|
-
"title": "TypeError: Cannot read properties of undefined (reading 'id')",
|
|
63
|
-
"culprit": "src/handlers/checkout.ts in handleSubmit",
|
|
64
|
-
"count": 1247,
|
|
65
|
-
"firstSeen": "2026-05-01T14:22:10Z",
|
|
66
|
-
"lastSeen": "2026-05-16T09:11:03Z",
|
|
67
|
-
"level": "error",
|
|
68
|
-
"status": "unresolved"
|
|
69
|
-
}
|
|
70
|
-
]
|
|
71
|
-
}
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Implementation notes
|
|
75
|
-
|
|
76
|
-
Spawns `packages/skills/bin/mcp-sentry.mjs` via `node`. Auth is delegated: the bin calls the Zibby backend's `resolveIntegrationToken('sentry')` endpoint using `PROJECT_API_TOKEN` + `PROGRESS_API_URL` (passed through from the Fargate environment).
|
|
77
|
-
|
|
78
|
-
`alwaysLoad: true` is set on the MCP server config so Sentry tools land in the initial system prompt instead of behind the Claude SDK's lazy `ToolSearch` (which misses MCP-served tools by keyword).
|
|
79
|
-
|
|
80
|
-
The skill also implements `handleToolCall` for the `assistant` agent strategy (OpenAI Assistant API), which doesn't speak MCP — same Sentry API, dispatched in-process.
|
package/docs/skills/slack.md
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 5
|
|
3
|
-
title: Slack
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Slack skill
|
|
7
|
-
|
|
8
|
-
Read/write a Slack workspace — list channels, post messages, reply in threads, react, read history, list users.
|
|
9
|
-
|
|
10
|
-
- **ID:** `slack`
|
|
11
|
-
- **MCP server:** `slack` (tools exposed as `mcp__slack__*`)
|
|
12
|
-
- **Underlying server:** `npx @modelcontextprotocol/server-slack@latest`
|
|
13
|
-
|
|
14
|
-
## Tools provided
|
|
15
|
-
|
|
16
|
-
| Tool | What it does |
|
|
17
|
-
|---|---|
|
|
18
|
-
| `slack_list_channels` | List public channels (id, name, topic) |
|
|
19
|
-
| `slack_post_message` | Post a top-level message. Requires `channel` and `text` |
|
|
20
|
-
| `slack_reply_to_thread` | Post a reply with `thread_ts` |
|
|
21
|
-
| `slack_add_reaction` | Add an emoji reaction to a message |
|
|
22
|
-
| `slack_get_channel_history` | Recent messages in a channel (`limit` default 20) |
|
|
23
|
-
| `slack_get_thread_replies` | All replies in a thread |
|
|
24
|
-
| `slack_get_users` | Workspace members (excludes bots and deleted) |
|
|
25
|
-
| `slack_get_user_profile` | Detailed profile for a `user_id` |
|
|
26
|
-
|
|
27
|
-
## Setup
|
|
28
|
-
|
|
29
|
-
Slack uses a bot token + workspace team id.
|
|
30
|
-
|
|
31
|
-
1. Create (or reuse) a Slack app at [api.slack.com/apps](https://api.slack.com/apps).
|
|
32
|
-
2. Add Bot Token Scopes — the full set this skill's tools need:
|
|
33
|
-
`chat:write`, `channels:read`, `channels:history`, `groups:read`, `groups:history`,
|
|
34
|
-
`reactions:write`, `users:read`, `users:read.email`, `users.profile:read`, `usergroups:read`.
|
|
35
|
-
(`users:read.email` backs `slack_find_user_by_email`; `usergroups:read` backs
|
|
36
|
-
`slack_list_usergroups` / `slack_get_usergroup_members` — omit either and those
|
|
37
|
-
tools fail with `missing_scope`.)
|
|
38
|
-
3. Install the app to your workspace; copy the **Bot User OAuth Token** (`xoxb-…`) and **Team ID**.
|
|
39
|
-
4. Set them on the agent's env (locally) or via **Cloud → Env vars**:
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
SLACK_BOT_TOKEN=xoxb-...
|
|
43
|
-
SLACK_TEAM_ID=T01234567
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
The skill declares `envKeys: ['SLACK_BOT_TOKEN', 'SLACK_TEAM_ID']` and the official `@modelcontextprotocol/server-slack` consumes them.
|
|
47
|
-
|
|
48
|
-
## Use in an agent
|
|
49
|
-
|
|
50
|
-
```js
|
|
51
|
-
import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
|
|
52
|
-
import { SKILLS } from '@zibby/skills';
|
|
53
|
-
|
|
54
|
-
export class DeployAnnouncer extends WorkflowAgent {
|
|
55
|
-
buildGraph() {
|
|
56
|
-
const graph = new WorkflowGraph();
|
|
57
|
-
graph.addNode('announce', {
|
|
58
|
-
agent: 'claude',
|
|
59
|
-
skills: [SKILLS.SLACK],
|
|
60
|
-
prompt: (state) => `Post to #deploys: "v${state.version} deployed to ${state.env}".
|
|
61
|
-
If state.threadTs is set, use slack_reply_to_thread instead of slack_post_message.`,
|
|
62
|
-
});
|
|
63
|
-
return graph;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Output example
|
|
69
|
-
|
|
70
|
-
`slack_post_message`:
|
|
71
|
-
|
|
72
|
-
```json
|
|
73
|
-
{ "ok": true, "ts": "1715839203.000400", "channel": "C0123ABC" }
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
`slack_list_channels`:
|
|
77
|
-
|
|
78
|
-
```json
|
|
79
|
-
{
|
|
80
|
-
"channels": [
|
|
81
|
-
{ "id": "C0123ABC", "name": "deploys", "topic": "Release announcements" },
|
|
82
|
-
{ "id": "C0456DEF", "name": "incidents", "topic": "P0/P1 coordination" }
|
|
83
|
-
]
|
|
84
|
-
}
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Implementation notes
|
|
88
|
-
|
|
89
|
-
`resolve()` spawns the official `@modelcontextprotocol/server-slack` via `npx` and passes through `SLACK_BOT_TOKEN` + `SLACK_TEAM_ID`. The in-process `handleToolCall` (used by the `assistant` strategy) talks directly to `https://slack.com/api/<method>` with the same bot token resolved via the backend's integration token service.
|
package/docs/tests/memory.md
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 1
|
|
3
|
-
title: Test memory
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Test memory
|
|
7
|
-
|
|
8
|
-
Zibby's `zibby test` runner has a local-first **memory database** at `.zibby/memory/.dolt/` that learns from every run — selectors that worked, page-element fingerprints, navigation transitions, timing quirks, recorded insights. Cross-spec via per-domain keying, optionally synced across the team.
|
|
9
|
-
|
|
10
|
-
The package powering this is [`@zibby/ui-memory`](../packages/ui-memory) — read that for the schema and SDK. This page is a **usage walkthrough**.
|
|
11
|
-
|
|
12
|
-
## What's in the box
|
|
13
|
-
|
|
14
|
-
- **Local DB** — `.zibby/memory/.dolt/` (Dolt SQL, version-controlled like git)
|
|
15
|
-
- **5 MCP tools** auto-exposed when `zibby test` runs and the DB exists
|
|
16
|
-
- **Auto-pull / auto-push** before and after each test run when a remote is configured
|
|
17
|
-
- **CLI** — `zibby memory <verb>` for stats, cost, compact, reset, pull, push, remote management
|
|
18
|
-
|
|
19
|
-
## Why per-domain keying matters
|
|
20
|
-
|
|
21
|
-
Memory is keyed on the **domain**, not the spec file. Selectors learned by `login.txt` for `myapp.com/login` are immediately available when `checkout.txt` lands on `myapp.com/checkout` and asks "what's a stable selector for the email field on this site?"
|
|
22
|
-
|
|
23
|
-
In practice this means a multi-spec suite gets sharper with every run — the agent's Nth run on a domain is meaningfully cheaper and more reliable than its first.
|
|
24
|
-
|
|
25
|
-
## The 5 MCP tools
|
|
26
|
-
|
|
27
|
-
When `zibby test` runs and `.zibby/memory/.dolt/` exists, the agent gets these auto-exposed:
|
|
28
|
-
|
|
29
|
-
| Tool | What it does |
|
|
30
|
-
|---|---|
|
|
31
|
-
| `memory_get_test_history` | Recent runs (filter by spec-path substring) — pass/fail and timing |
|
|
32
|
-
| `memory_get_selectors` | Known selectors per page with success/fail counts |
|
|
33
|
-
| `memory_get_page_model` | Page elements (URL, ARIA role, accessible name, best-known selector) |
|
|
34
|
-
| `memory_get_navigation` | Known transitions (from URL → to URL via what trigger) |
|
|
35
|
-
| `memory_save_insight` | Save an observation: `selector_tip | timing | navigation | workaround | flaky | general` |
|
|
36
|
-
|
|
37
|
-
> **The agent must call `memory_save_insight` at least once per run.** It's required by the memory skill's prompt fragment. Without insights, only the structural data (selectors / runs) compounds; insights are how the system learns "the site shows a banner on Tuesdays" or "this button needs a 200ms wait after focus".
|
|
38
|
-
|
|
39
|
-
## CLI commands
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
zibby memory init # initialize (auto-runs on first `zibby test -m`)
|
|
43
|
-
zibby memory stats # row counts, last commit, per-spec breakdown
|
|
44
|
-
zibby memory cost # real LLM token spend per spec / per domain (input/output/cache)
|
|
45
|
-
zibby memory compact # prune old runs + Dolt GC (--max-runs 50, --max-age 90d)
|
|
46
|
-
zibby memory reset -f # wipe the DB (destructive — confirm)
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
`compact` is the maintenance lever once the DB grows. `cost` is the most-asked-after view — it answers "which spec is the expensive one?" with real numbers.
|
|
50
|
-
|
|
51
|
-
## Team sync
|
|
52
|
-
|
|
53
|
-
Memory is local-first by default. Opt into a shared remote so teammates' learnings flow back to you:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
# Option A: bring your own bucket
|
|
57
|
-
zibby memory remote add aws://my-bucket/team/proj/main # S3
|
|
58
|
-
zibby memory remote add gs://bucket/team/proj/main # GCS
|
|
59
|
-
zibby memory remote add https://www.dolthub.com/repositories/<owner>/<repo>
|
|
60
|
-
zibby memory remote add file:///abs/path/to/local-shared # filesystem
|
|
61
|
-
|
|
62
|
-
# Option B: Zibby-managed S3 (signed-in users only)
|
|
63
|
-
zibby memory remote use --hosted
|
|
64
|
-
|
|
65
|
-
# Inspect / disconnect
|
|
66
|
-
zibby memory remote info
|
|
67
|
-
zibby memory remote remove [name] # default: origin
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
Once a remote is configured:
|
|
71
|
-
|
|
72
|
-
- `zibby test` auto-pulls before each run
|
|
73
|
-
- `zibby test` auto-pushes after each **passing** run (failing runs don't pollute team memory)
|
|
74
|
-
- `zibby memory pull` / `zibby memory push` for manual override
|
|
75
|
-
|
|
76
|
-
### Auto-wire teammates with `memorySync.remote`
|
|
77
|
-
|
|
78
|
-
Drop this into `.zibby.config.mjs` and commit it:
|
|
79
|
-
|
|
80
|
-
```js
|
|
81
|
-
export default {
|
|
82
|
-
agent: { claude: { model: 'auto' } },
|
|
83
|
-
memorySync: {
|
|
84
|
-
remote: 'hosted', // or 'aws://my-bucket/team/proj/main' or null
|
|
85
|
-
},
|
|
86
|
-
};
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Now when a teammate clones the repo and runs `zibby init`, the CLI reads `memorySync.remote` and auto-configures the matching remote. For `'hosted'`, init prompts for `zibby login` if they're not signed in but never blocks the init itself.
|
|
90
|
-
|
|
91
|
-
### Hosted vs BYO at a glance
|
|
92
|
-
|
|
93
|
-
| | Hosted (`--hosted`) | BYO |
|
|
94
|
-
|---|---|---|
|
|
95
|
-
| Setup time | One command | Provision bucket + IAM (+ KMS if you want) |
|
|
96
|
-
| Where data lives | Zibby-managed AWS account | Your account |
|
|
97
|
-
| Access | Anyone with Zibby project access | Whoever your IAM grants |
|
|
98
|
-
| Compliance / data residency | Limited regions | Wherever you want |
|
|
99
|
-
| Cost | Included in plan | Your S3 bill |
|
|
100
|
-
|
|
101
|
-
If you have any data-residency requirement or a regulated workload, prefer BYO. Otherwise hosted is the path of least resistance.
|
|
102
|
-
|
|
103
|
-
## Run-level controls
|
|
104
|
-
|
|
105
|
-
`zibby test` exposes one memory-relevant flag:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
zibby test test-specs/login.txt -m # enable test memory (auto-init if needed)
|
|
109
|
-
zibby test test-specs/login.txt --no-sync # don't push to cloud (does not affect memory remote)
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Memory is independent of the cloud-results sync (`--sync` / `--no-sync` controls run upload to the Zibby dashboard; memory sync is its own remote).
|
|
113
|
-
|
|
114
|
-
## Inspecting the DB by hand
|
|
115
|
-
|
|
116
|
-
It's just Dolt:
|
|
117
|
-
|
|
118
|
-
```bash
|
|
119
|
-
cd .zibby/memory
|
|
120
|
-
dolt log
|
|
121
|
-
dolt sql -q "SELECT spec_path, passed, duration_ms FROM test_runs ORDER BY created_at DESC LIMIT 20"
|
|
122
|
-
dolt diff HEAD~1 HEAD
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
Branching works too — `dolt branch experiment` to try out a memory mutation in isolation.
|
|
126
|
-
|
|
127
|
-
## See also
|
|
128
|
-
|
|
129
|
-
- [`@zibby/ui-memory` package](../packages/ui-memory) — schema, SDK, middleware
|
|
130
|
-
- [`zibby test` recipe](../recipes/test) — the primary consumer
|
|
131
|
-
- [CLI reference: memory](../cli-reference#memory) — full command list
|