@hybridaione/hybridclaw 0.9.1 → 0.9.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.
Files changed (270) hide show
  1. package/CHANGELOG.md +73 -27
  2. package/community-skills/datalion/SKILL.md +165 -18
  3. package/community-skills/datalion/references/setup-and-capabilities.md +222 -13
  4. package/community-skills/meme-generation/SKILL.md +164 -0
  5. package/community-skills/meme-generation/scripts/generate_meme.py +838 -0
  6. package/community-skills/meme-generation/scripts/templates.json +280 -0
  7. package/container/dist/extensions.js +12 -0
  8. package/container/dist/extensions.js.map +1 -1
  9. package/container/dist/tools/search-tools.js +694 -0
  10. package/container/dist/tools/search-tools.js.map +1 -0
  11. package/container/dist/tools.js +14 -138
  12. package/container/dist/tools.js.map +1 -1
  13. package/container/package-lock.json +2 -2
  14. package/container/package.json +1 -1
  15. package/container/src/extensions.ts +15 -0
  16. package/container/src/tools/search-tools.ts +869 -0
  17. package/container/src/tools.ts +14 -149
  18. package/container/src/types.ts +38 -39
  19. package/dist/agent/agent.d.ts +1 -1
  20. package/dist/agent/agent.d.ts.map +1 -1
  21. package/dist/agent/agent.js.map +1 -1
  22. package/dist/agent/conversation.d.ts +1 -1
  23. package/dist/agent/conversation.d.ts.map +1 -1
  24. package/dist/agent/executor-types.d.ts +4 -1
  25. package/dist/agent/executor-types.d.ts.map +1 -1
  26. package/dist/agent/prompt-hooks.d.ts.map +1 -1
  27. package/dist/agent/prompt-hooks.js +1 -0
  28. package/dist/agent/prompt-hooks.js.map +1 -1
  29. package/dist/agent/side-effects.d.ts +2 -1
  30. package/dist/agent/side-effects.d.ts.map +1 -1
  31. package/dist/agent/side-effects.js.map +1 -1
  32. package/dist/agents/agent-registry.d.ts +1 -1
  33. package/dist/agents/agent-registry.d.ts.map +1 -1
  34. package/dist/agents/claw-archive.d.ts +1 -0
  35. package/dist/agents/claw-archive.d.ts.map +1 -1
  36. package/dist/agents/claw-archive.js +2 -1
  37. package/dist/agents/claw-archive.js.map +1 -1
  38. package/dist/audit/audit-events.d.ts +1 -1
  39. package/dist/audit/audit-events.d.ts.map +1 -1
  40. package/dist/channels/discord/attachments.d.ts +1 -1
  41. package/dist/channels/discord/attachments.d.ts.map +1 -1
  42. package/dist/channels/discord/delivery.d.ts +1 -1
  43. package/dist/channels/discord/delivery.d.ts.map +1 -1
  44. package/dist/channels/discord/runtime.d.ts +1 -1
  45. package/dist/channels/discord/runtime.d.ts.map +1 -1
  46. package/dist/channels/email/inbound.d.ts +1 -1
  47. package/dist/channels/email/inbound.d.ts.map +1 -1
  48. package/dist/channels/email/runtime.d.ts +1 -1
  49. package/dist/channels/email/runtime.d.ts.map +1 -1
  50. package/dist/channels/msteams/attachments.d.ts +2 -1
  51. package/dist/channels/msteams/attachments.d.ts.map +1 -1
  52. package/dist/channels/msteams/attachments.js.map +1 -1
  53. package/dist/channels/msteams/runtime.d.ts +1 -1
  54. package/dist/channels/msteams/runtime.d.ts.map +1 -1
  55. package/dist/channels/whatsapp/connection.d.ts.map +1 -1
  56. package/dist/channels/whatsapp/connection.js +37 -10
  57. package/dist/channels/whatsapp/connection.js.map +1 -1
  58. package/dist/channels/whatsapp/debounce.d.ts +2 -1
  59. package/dist/channels/whatsapp/debounce.d.ts.map +1 -1
  60. package/dist/channels/whatsapp/debounce.js.map +1 -1
  61. package/dist/channels/whatsapp/delivery.d.ts +7 -2
  62. package/dist/channels/whatsapp/delivery.d.ts.map +1 -1
  63. package/dist/channels/whatsapp/delivery.js +9 -0
  64. package/dist/channels/whatsapp/delivery.js.map +1 -1
  65. package/dist/channels/whatsapp/inbound.d.ts +1 -1
  66. package/dist/channels/whatsapp/inbound.d.ts.map +1 -1
  67. package/dist/channels/whatsapp/inbound.js +13 -1
  68. package/dist/channels/whatsapp/inbound.js.map +1 -1
  69. package/dist/channels/whatsapp/runtime.d.ts +1 -1
  70. package/dist/channels/whatsapp/runtime.d.ts.map +1 -1
  71. package/dist/channels/whatsapp/runtime.js +52 -3
  72. package/dist/channels/whatsapp/runtime.js.map +1 -1
  73. package/dist/cli/agent-command.d.ts.map +1 -1
  74. package/dist/cli/agent-command.js +10 -0
  75. package/dist/cli/agent-command.js.map +1 -1
  76. package/dist/cli/help.d.ts.map +1 -1
  77. package/dist/cli/help.js +3 -1
  78. package/dist/cli/help.js.map +1 -1
  79. package/dist/cli/skill-command.d.ts.map +1 -1
  80. package/dist/cli/skill-command.js +30 -25
  81. package/dist/cli/skill-command.js.map +1 -1
  82. package/dist/command-registry.d.ts.map +1 -1
  83. package/dist/command-registry.js +48 -1
  84. package/dist/command-registry.js.map +1 -1
  85. package/dist/config/runtime-config.d.ts +1 -1
  86. package/dist/config/runtime-config.d.ts.map +1 -1
  87. package/dist/gateway/fullauto.d.ts +2 -1
  88. package/dist/gateway/fullauto.d.ts.map +1 -1
  89. package/dist/gateway/gateway-agent-cards.d.ts +1 -1
  90. package/dist/gateway/gateway-agent-cards.d.ts.map +1 -1
  91. package/dist/gateway/gateway-agent-cards.js.map +1 -1
  92. package/dist/gateway/gateway-http-server.d.ts.map +1 -1
  93. package/dist/gateway/gateway-http-server.js +69 -2
  94. package/dist/gateway/gateway-http-server.js.map +1 -1
  95. package/dist/gateway/gateway-service.d.ts +4 -2
  96. package/dist/gateway/gateway-service.d.ts.map +1 -1
  97. package/dist/gateway/gateway-service.js +138 -45
  98. package/dist/gateway/gateway-service.js.map +1 -1
  99. package/dist/gateway/gateway-types.d.ts +29 -1
  100. package/dist/gateway/gateway-types.d.ts.map +1 -1
  101. package/dist/gateway/gateway-types.js.map +1 -1
  102. package/dist/gateway/gateway-utils.d.ts +1 -1
  103. package/dist/gateway/gateway-utils.d.ts.map +1 -1
  104. package/dist/gateway/gateway.js +87 -69
  105. package/dist/gateway/gateway.js.map +1 -1
  106. package/dist/gateway/show-mode.d.ts +1 -1
  107. package/dist/gateway/show-mode.d.ts.map +1 -1
  108. package/dist/gateway/text-channel-commands.d.ts +1 -1
  109. package/dist/gateway/text-channel-commands.d.ts.map +1 -1
  110. package/dist/infra/container-runner.d.ts +1 -1
  111. package/dist/infra/container-runner.d.ts.map +1 -1
  112. package/dist/infra/container-runner.js +9 -9
  113. package/dist/infra/container-runner.js.map +1 -1
  114. package/dist/infra/host-runner.d.ts +1 -1
  115. package/dist/infra/host-runner.d.ts.map +1 -1
  116. package/dist/infra/host-runner.js +37 -1
  117. package/dist/infra/host-runner.js.map +1 -1
  118. package/dist/infra/ipc.d.ts +1 -1
  119. package/dist/infra/ipc.d.ts.map +1 -1
  120. package/dist/infra/ipc.js +1 -1
  121. package/dist/infra/ipc.js.map +1 -1
  122. package/dist/infra/worker-signature.d.ts +1 -1
  123. package/dist/infra/worker-signature.d.ts.map +1 -1
  124. package/dist/infra/worker-signature.js +1 -1
  125. package/dist/infra/worker-signature.js.map +1 -1
  126. package/dist/media/audio-transcription.d.ts +1 -1
  127. package/dist/media/audio-transcription.d.ts.map +1 -1
  128. package/dist/media/pdf-context.d.ts +2 -1
  129. package/dist/media/pdf-context.d.ts.map +1 -1
  130. package/dist/memory/citation-extractor.d.ts +1 -1
  131. package/dist/memory/citation-extractor.d.ts.map +1 -1
  132. package/dist/memory/compaction-archive.d.ts +2 -1
  133. package/dist/memory/compaction-archive.d.ts.map +1 -1
  134. package/dist/memory/compaction-archive.js.map +1 -1
  135. package/dist/memory/compaction.d.ts +2 -1
  136. package/dist/memory/compaction.d.ts.map +1 -1
  137. package/dist/memory/compaction.js.map +1 -1
  138. package/dist/memory/db.d.ts +10 -2
  139. package/dist/memory/db.d.ts.map +1 -1
  140. package/dist/memory/db.js +565 -415
  141. package/dist/memory/db.js.map +1 -1
  142. package/dist/memory/memory-service.d.ts +13 -2
  143. package/dist/memory/memory-service.d.ts.map +1 -1
  144. package/dist/memory/memory-service.js +24 -4
  145. package/dist/memory/memory-service.js.map +1 -1
  146. package/dist/plugins/plugin-manager.d.ts +1 -1
  147. package/dist/plugins/plugin-manager.d.ts.map +1 -1
  148. package/dist/plugins/plugin-sdk.d.ts +1 -1
  149. package/dist/plugins/plugin-sdk.d.ts.map +1 -1
  150. package/dist/plugins/plugin-types.d.ts +1 -1
  151. package/dist/plugins/plugin-types.d.ts.map +1 -1
  152. package/dist/providers/auxiliary.d.ts +1 -1
  153. package/dist/providers/auxiliary.d.ts.map +1 -1
  154. package/dist/providers/hybridai-bots.d.ts +1 -1
  155. package/dist/providers/hybridai-bots.d.ts.map +1 -1
  156. package/dist/providers/task-routing.d.ts +1 -1
  157. package/dist/providers/task-routing.d.ts.map +1 -1
  158. package/dist/providers/task-routing.js +1 -1
  159. package/dist/providers/task-routing.js.map +1 -1
  160. package/dist/scheduler/model-usage.d.ts +2 -1
  161. package/dist/scheduler/model-usage.d.ts.map +1 -1
  162. package/dist/scheduler/model-usage.js.map +1 -1
  163. package/dist/scheduler/scheduler.d.ts +1 -1
  164. package/dist/scheduler/scheduler.d.ts.map +1 -1
  165. package/dist/security/mount-config.d.ts +1 -1
  166. package/dist/security/mount-config.d.ts.map +1 -1
  167. package/dist/security/mount-security.d.ts +1 -1
  168. package/dist/security/mount-security.d.ts.map +1 -1
  169. package/dist/security/mount-security.js.map +1 -1
  170. package/dist/session/session-export.d.ts +1 -1
  171. package/dist/session/session-export.d.ts.map +1 -1
  172. package/dist/session/session-maintenance.d.ts +1 -1
  173. package/dist/session/session-maintenance.d.ts.map +1 -1
  174. package/dist/session/session-maintenance.js.map +1 -1
  175. package/dist/session/token-efficiency.d.ts +1 -1
  176. package/dist/session/token-efficiency.d.ts.map +1 -1
  177. package/dist/skills/skill-import-args.d.ts +12 -0
  178. package/dist/skills/skill-import-args.d.ts.map +1 -0
  179. package/dist/skills/skill-import-args.js +38 -0
  180. package/dist/skills/skill-import-args.js.map +1 -0
  181. package/dist/skills/skill-import-warnings.d.ts +3 -0
  182. package/dist/skills/skill-import-warnings.d.ts.map +1 -0
  183. package/dist/skills/skill-import-warnings.js +15 -0
  184. package/dist/skills/skill-import-warnings.js.map +1 -0
  185. package/dist/skills/skills-import.d.ts +2 -0
  186. package/dist/skills/skills-import.d.ts.map +1 -1
  187. package/dist/skills/skills-import.js +29 -17
  188. package/dist/skills/skills-import.js.map +1 -1
  189. package/dist/skills/skills-observation.d.ts +1 -1
  190. package/dist/skills/skills-observation.d.ts.map +1 -1
  191. package/dist/skills/skills.d.ts +1 -1
  192. package/dist/skills/skills.d.ts.map +1 -1
  193. package/dist/skills/skills.js +7 -2
  194. package/dist/skills/skills.js.map +1 -1
  195. package/dist/tui-banner.js +1 -1
  196. package/dist/tui-banner.js.map +1 -1
  197. package/dist/tui-slash-command.d.ts.map +1 -1
  198. package/dist/tui-slash-command.js +1 -0
  199. package/dist/tui-slash-command.js.map +1 -1
  200. package/dist/tui-slash-menu.d.ts.map +1 -1
  201. package/dist/tui-slash-menu.js +5 -8
  202. package/dist/tui-slash-menu.js.map +1 -1
  203. package/dist/tui.js +2 -2
  204. package/dist/tui.js.map +1 -1
  205. package/dist/types/api.d.ts +33 -0
  206. package/dist/types/api.d.ts.map +1 -0
  207. package/dist/types/api.js +2 -0
  208. package/dist/types/api.js.map +1 -0
  209. package/dist/types/audit.d.ts +34 -0
  210. package/dist/types/audit.d.ts.map +1 -0
  211. package/dist/types/audit.js +2 -0
  212. package/dist/types/audit.js.map +1 -0
  213. package/dist/types/container.d.ts +72 -0
  214. package/dist/types/container.d.ts.map +1 -0
  215. package/dist/types/container.js +2 -0
  216. package/dist/types/container.js.map +1 -0
  217. package/dist/types/execution.d.ts +61 -0
  218. package/dist/types/execution.d.ts.map +1 -0
  219. package/dist/types/execution.js +2 -0
  220. package/dist/types/execution.js.map +1 -0
  221. package/dist/types/hybridai.d.ts +7 -0
  222. package/dist/types/hybridai.d.ts.map +1 -0
  223. package/dist/types/hybridai.js +2 -0
  224. package/dist/types/hybridai.js.map +1 -0
  225. package/dist/types/knowledge.d.ts +58 -0
  226. package/dist/types/knowledge.d.ts.map +1 -0
  227. package/dist/{types.js → types/knowledge.js} +1 -11
  228. package/dist/types/knowledge.js.map +1 -0
  229. package/dist/types/memory.d.ts +69 -0
  230. package/dist/types/memory.d.ts.map +1 -0
  231. package/dist/types/memory.js +2 -0
  232. package/dist/types/memory.js.map +1 -0
  233. package/dist/types/models.d.ts +37 -0
  234. package/dist/types/models.d.ts.map +1 -0
  235. package/dist/types/models.js +10 -0
  236. package/dist/types/models.js.map +1 -0
  237. package/dist/types/scheduler.d.ts +25 -0
  238. package/dist/types/scheduler.d.ts.map +1 -0
  239. package/dist/types/scheduler.js +2 -0
  240. package/dist/types/scheduler.js.map +1 -0
  241. package/dist/types/security.d.ts +15 -0
  242. package/dist/types/security.d.ts.map +1 -0
  243. package/dist/types/security.js +2 -0
  244. package/dist/types/security.js.map +1 -0
  245. package/dist/types/session.d.ts +82 -0
  246. package/dist/types/session.d.ts.map +1 -0
  247. package/dist/types/session.js +2 -0
  248. package/dist/types/session.js.map +1 -0
  249. package/dist/types/side-effects.d.ts +25 -0
  250. package/dist/types/side-effects.d.ts.map +1 -0
  251. package/dist/types/side-effects.js +2 -0
  252. package/dist/types/side-effects.js.map +1 -0
  253. package/dist/types/usage.d.ts +59 -0
  254. package/dist/types/usage.d.ts.map +1 -0
  255. package/dist/types/usage.js +2 -0
  256. package/dist/types/usage.js.map +1 -0
  257. package/docs/.nojekyll +1 -0
  258. package/docs/chat.html +807 -60
  259. package/docs/development/README.md +16 -0
  260. package/docs/development/extensibility/README.md +3 -3
  261. package/docs/development/extensibility/agent-packages.md +1 -1
  262. package/docs/development/extensibility/skills.md +1 -0
  263. package/docs/development/reference/commands.md +3 -3
  264. package/docs/index.html +35 -1
  265. package/docs/static/development-docs.css +379 -222
  266. package/docs/static/development-docs.js +311 -61
  267. package/package.json +2 -2
  268. package/dist/types.d.ts +0 -538
  269. package/dist/types.d.ts.map +0 -1
  270. package/dist/types.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -2,43 +2,89 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.9.2](https://github.com/HybridAIOne/hybridclaw/tree/v0.9.2)
6
+
7
+ ### Added
8
+
9
+ - **Skill sync and packaged Datalion workflow**: Added `skill sync`, updated
10
+ TUI help/commands, shared import-argument parsing, and the repo-shipped
11
+ Datalion community skill with bundled setup/capabilities docs.
12
+ - **Meme generation community skill**: Added a packaged meme-generation skill
13
+ with reusable scripts, template data, and cached output reuse for community
14
+ image workflows.
15
+ - **Workspace search hardening**: Added stricter workspace `glob` and `grep`
16
+ handling in the container runtime for safer repository searches.
17
+
18
+ ### Changed
19
+
20
+ - **Web chat branching and history flow**: Improved web chat controls,
21
+ branch-aware history routing, paging persistence, and related stdin/history
22
+ handling so browser sessions behave more predictably.
23
+ - **Shared type and search-tool internals**: Split the old shared type barrel
24
+ into focused modules and moved container search logic into a dedicated
25
+ `search-tools` module.
26
+ - **Skill import UX cleanup**: Centralized import warning text, shared the
27
+ skill-import argument parser, removed sync/skip-scan quick entries from
28
+ menus, and simplified optional import-result guard fields.
29
+
30
+ ### Fixed
31
+
32
+ - **WhatsApp restart and ack recovery**: Reduced restart replay failures,
33
+ captured and cleared ack reactions more reliably, dropped timestampless
34
+ append-history writes, and hardened reconnect handling.
35
+ - **TUI history-arrow behavior**: Restored arrow-key prompt history when the
36
+ slash menu has no matches while keeping those keys reserved for history
37
+ navigation.
38
+ - **Agent skill overwrite protection**: `agent install` now requires
39
+ `--force` before overwriting imported skills instead of silently replacing
40
+ existing content.
41
+ - **Static docs publishing and QMD paging stability**: Synced the static docs
42
+ shell with the gateway renderer, added `.nojekyll` for GitHub Pages, and
43
+ persisted branch paging state while quieting QMD timeout noise.
44
+ - **Meme skill runtime hardening**: Tightened meme fetch error handling,
45
+ file-path validation, and cache reuse so the packaged skill is safer and
46
+ cheaper to run repeatedly.
47
+
5
48
  ## [0.9.1](https://github.com/HybridAIOne/hybridclaw/tree/v0.9.1)
6
49
 
7
50
  ### Added
8
51
 
9
- - **Prompt-side context references and current-turn uploads**: Added inline
10
- `@file:`, `@folder:`, `@diff`, `@staged`, `@git:<count>`, and `@url:`
11
- context references so prompts can pull workspace or web context directly,
12
- plus web chat and TUI uploads/paste support for current-turn files.
13
- - **Community skill imports and package-declared skill imports**: Added
14
- `hybridclaw skill import [--force] <source>` and `/skill import` for
15
- packaged `official/<skill>` sources plus `skills-sh`, `clawhub`, `lobehub`,
16
- `claude-marketplace`, `well-known`, and GitHub repo/path refs. `.claw`
17
- agent installs can now resolve manifest-declared skill imports into the
18
- agent workspace.
19
- - **Browsable development docs shell**: Added the built-in `/development` docs
20
- browser with raw-markdown and copy-as-markdown actions for repo-shipped
21
- docs.
52
+ - **Inline prompt context references**: Added `@file:`, `@folder:`, `@diff`,
53
+ `@staged`, `@git:<count>`, and `@url:` so prompts can pull repository or web
54
+ context directly.
55
+ - **Current-turn web chat and TUI attachments**: Added upload/paste support
56
+ for files and clipboard media in the built-in chat UI and TUI, including
57
+ uploaded-media summaries for supported content.
58
+ - **Community skill imports and docs browser**: Added `hybridclaw skill import`
59
+ and `skill learn`, packaged and hub-backed skill sources, manifest-declared
60
+ skill imports during `.claw` install, and the built-in `/development` docs
61
+ browser with raw-markdown views.
22
62
 
23
63
  ### Changed
24
64
 
25
- - **Adaptive skill and agent archive command naming**: Standardized the
26
- adaptive-skill workflow on `skill learn` (`--apply`, `--reject`,
27
- `--rollback`) and promoted `agent export` / `agent install` as the primary
28
- `.claw` archive verbs while keeping `pack` / `unpack` aliases.
29
- - **On-demand gateway/provider health probing**: Gateway status and
30
- `/api/status` now use TTL-cached on-demand probes for HybridAI and local
31
- backends instead of background polling loops.
65
+ - **Gateway/provider health probing**: Status endpoints now use TTL-cached
66
+ on-demand probes for HybridAI and local backends instead of background
67
+ polling loops, with async status flow and better probe-site error handling.
68
+ - **CLI command structure**: Split the large CLI handlers into focused command
69
+ modules with shared lazy-loader and flag-parsing helpers.
70
+ - **Skill import source coverage**: Community imports expanded from packaged
71
+ sources into hub-backed and GitHub-backed skill sources, with web docs
72
+ navigation updated to expose the new workflows.
32
73
 
33
74
  ### Fixed
34
75
 
35
- - **HybridAI base-url reachability reporting**: HybridAI reachability checks,
36
- `/api/status`, and operator hints now honor `HYBRIDAI_BASE_URL`
37
- consistently, including preview or local deployments.
38
- - **Uploaded media and context-reference hardening**: Tightened uploaded-media
39
- cache validation, MIME filtering, per-auth upload quotas, symlink escape
40
- blocking, URL redirect blocking, and bounded remote fetches for attached
41
- prompt context.
76
+ - **HybridAI base-url reachability reporting**: `/api/status` and operator
77
+ hints now honor `HYBRIDAI_BASE_URL` consistently and probe actual backend
78
+ reachability instead of assuming credentials imply connectivity.
79
+ - **Uploaded media hardening**: Tightened cache-dir resolution, path
80
+ validation, MIME filtering, per-auth upload quotas, and filename handling
81
+ for web chat and TUI attachments.
82
+ - **Context-reference safety and command preservation**: Blocked symlink
83
+ escapes, URL redirects, and unbounded URL fetches for attached prompt
84
+ context while preserving skill invocations with injected context.
85
+ - **CLI install output for imported skills**: `agent install` now tolerates
86
+ missing imported skills in the CLI summary instead of failing the output
87
+ path.
42
88
 
43
89
  ## [0.9.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.9.0)
44
90
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: datalion
3
- description: Use this skill when the user wants DataLion workflows such as creating a project, uploading CSV data, reading chart tables, or coordinating report, dashboard, and export work through a configured datalion MCP server and related API or UI paths.
3
+ description: Use this skill when the user wants DataLion workflows such as listing, reading, creating, or editing projects, inspecting data sources, importing Excel or CSV data, working with reports and report tabs and codebooks, reading chart tables, or coordinating dashboard and export work through a configured datalion MCP server and related API or UI paths.
4
4
  user-invocable: true
5
5
  metadata:
6
6
  hybridclaw:
@@ -17,8 +17,11 @@ metadata:
17
17
 
18
18
  # DataLion
19
19
 
20
- Use this skill for DataLion project, data-import, chart-table, report,
21
- dashboard, and export workflows.
20
+ Use this skill for DataLion project, project-settings, data-import, codebook,
21
+ chart-table, report, report-tab, dashboard, and export workflows.
22
+
23
+ In DataLion, "tab" and "dashboard" are used interchangeably for the report
24
+ subpages managed under a report.
22
25
 
23
26
  ## Default Strategy
24
27
 
@@ -34,12 +37,17 @@ dashboard, and export workflows.
34
37
  ## Setup
35
38
 
36
39
  - Run HybridClaw in host sandbox mode for this local Node-based MCP server.
40
+ - Install the bridge dependencies before first use:
41
+ `npm --prefix <path-to-your-datalion-repo>/mcp install`
37
42
  - Keep `DATALION_API_TOKEN` inside MCP server config `env`, never in tracked
38
43
  files or chat.
39
44
  - Use the MCP server name `datalion` so tools appear as `datalion__...`.
45
+ - For `hybridclaw gateway mcp add ...`, pass the JSON config as one quoted
46
+ shell argument. In `zsh`, unquoted `{...}` and `[...]` will be expanded
47
+ before HybridClaw sees them.
40
48
  - See
41
49
  [references/setup-and-capabilities.md](references/setup-and-capabilities.md)
42
- for a ready-to-paste `/mcp add` example, dependency note, and ability
50
+ for ready-to-paste CLI and TUI examples, dependency notes, and ability
43
51
  requirements.
44
52
 
45
53
  ## Working Rules
@@ -47,19 +55,47 @@ dashboard, and export workflows.
47
55
  - Always state whether you are using MCP, REST API, or browser/UI automation.
48
56
  - Resolve the exact project, report, dashboard, export, or chart before
49
57
  mutating anything.
50
- - The current bridge directly supports only project creation, data upload, and
51
- chart-table reads.
58
+ - The current bridge directly supports project listing, project reads, project
59
+ creation, project settings updates, data source listing, CSV upload, full
60
+ Excel/CSV import, report list/create and tab CRUD, chart-table reads, and
61
+ codebook list, download, generation, deletion, and upload.
62
+ - The bridge also exposes 4 browser URL helpers for project/report/dashboard
63
+ opening and widget insertion.
64
+ - The current bridge tool surface has 22 tools total: 18 backend MCP actions
65
+ and 4 browser URL helpers.
66
+ - Prefer `datalion__list_projects` and `datalion__read_project` before writes
67
+ when the exact target project is not already pinned down.
52
68
  - Treat `datalion__upload_data` as a data-import tool, not a generic
53
69
  project-update tool.
54
- - Prefer CSV uploads for MCP. If the source is XLSX/XLS, convert it to CSV
55
- first unless the bridge has been updated to accept binary-safe file content.
70
+ - Treat `datalion__edit_project` as a `defsettings` merge tool. It updates only
71
+ the keys you pass and keeps the existing settings for all other keys.
72
+ - Use `datalion__list_data_sources` to inspect what is already loaded into a
73
+ project before uploading or troubleshooting data.
74
+ - Prefer `datalion__import_excel_data` when the source is an `.xlsx` workbook or
75
+ when you want Datalion's full import pipeline, including optional codebook
76
+ generation during import.
77
+ - Use `datalion__list_codebook` when the user needs a question-level inventory;
78
+ use `datalion__download_codebook` for the tree structure.
79
+ - For workbook imports, prefer an absolute `localPath` so the bridge can read
80
+ the file directly.
56
81
  - For uploads, confirm filename, header and delimiter assumptions, data source
57
82
  name if relevant, and whether existing rows should be truncated.
83
+ - For `import_excel_data`, confirm `projectId`, file path or base64 file
84
+ content, filename if you are not using `localPath`, whether you want the
85
+ default main data source (`useDefaultDataSource=true`) or a named data
86
+ source, and whether `replaceData`, `runCalculations`, `convertComma`,
87
+ `skipLines`, `comment`, and `createCodebook` should be enabled.
88
+ - For project settings edits, confirm the target `projectId` and the exact
89
+ `defsettings` keys and values before calling.
58
90
  - For chart-table reads, confirm `projectId`, `chartId`, and any filter string
59
91
  before calling.
60
- - For report, dashboard, and export tasks without direct MCP coverage, inspect
61
- the local Datalion repo and its OpenAPI or route definitions before choosing a
62
- fallback path.
92
+ - For codebook uploads, confirm `projectId`, CSV filename, import mode, and
93
+ whether any explicit column mapping is needed. The current backend expects
94
+ `columnMapping` as an array aligned to the CSV header order.
95
+ - For reports, prefer direct MCP coverage first.
96
+ - For dashboard and export tasks without direct MCP coverage, inspect the local
97
+ Datalion repo and its OpenAPI or route definitions before choosing a fallback
98
+ path.
63
99
  - Keep tokens, auth headers, and exported files out of logs unless the user
64
100
  explicitly asks for them.
65
101
 
@@ -67,33 +103,123 @@ dashboard, and export workflows.
67
103
 
68
104
  The current `datalion` bridge exposes these direct tools:
69
105
 
106
+ - `datalion__list_projects`
107
+ - `datalion__read_project`
70
108
  - `datalion__create_project`
109
+ - `datalion__edit_project`
110
+ - `datalion__list_data_sources`
71
111
  - `datalion__upload_data`
112
+ - `datalion__import_excel_data`
113
+ - `datalion__list_reports`
114
+ - `datalion__create_report`
115
+ - `datalion__create_report_tab`
116
+ - `datalion__edit_report_tab`
117
+ - `datalion__delete_report_tab`
118
+ - `datalion__open_project_browser`
119
+ - `datalion__open_report_browser`
120
+ - `datalion__open_dashboard_browser`
121
+ - `datalion__open_add_widget_browser`
72
122
  - `datalion__get_chart_table`
123
+ - `datalion__list_codebook`
124
+ - `datalion__download_codebook`
125
+ - `datalion__generate_codebook`
126
+ - `datalion__delete_codebook`
127
+ - `datalion__upload_codebook`
73
128
 
74
129
  That means:
75
130
 
131
+ - project discovery and project detail reads are supported directly
76
132
  - project creation is supported directly
133
+ - project settings updates through `defsettings` merges are supported directly
134
+ - project data sources can be listed directly
77
135
  - CSV-style data import into an existing project is supported directly
136
+ - workbook and full-pipeline Excel/CSV import are supported directly
137
+ - the full-pipeline import path uses DataLion's datasource service rather than
138
+ the raw CSV upload path, so it handles type detection, replace/append mode,
139
+ optional codebook generation, and optional calculations
140
+ - report listing and report creation are supported directly
78
141
  - chart tables can be read directly
79
- - report editing, dashboard editing, and export generation require fallback API
80
- or UI paths until the bridge grows more tools
142
+ - codebooks can be listed, downloaded, generated, deleted, and uploaded
143
+ directly
144
+ - report editing beyond report-tab CRUD, dashboard editing, and export
145
+ generation require fallback API or UI paths until the bridge grows more tools
81
146
 
82
147
  ## Common Workflows
83
148
 
149
+ For explicit TUI testing, prefer `/skill datalion ...`.
150
+
151
+ - `/skill datalion create a project named "MCP Smoke Test"`
152
+ - plain natural-language prompts that mention DataLion also work
153
+ - `/datalion ...` may still be routed as a normal message, but it is not a
154
+ built-in slash-menu command, so do not use slash-menu visibility as the test
155
+ for whether the skill is installed
156
+
84
157
  ### Create a Project
85
158
 
86
- 1. Confirm the project name and any optional metadata.
159
+ 1. Confirm the project name and any optional `identcode` or `defsettings`.
87
160
  2. Call `datalion__create_project`.
88
161
  3. Return the new project ID and recommend the next step, usually data import
89
162
  or report/dashboard setup.
90
163
 
164
+ ### Create a Report
165
+
166
+ 1. Confirm the project ID and report name.
167
+ 2. Call `datalion__create_report`.
168
+ 3. Note that the report is seeded with a first tab and return both the report
169
+ ID and first tab ID.
170
+
171
+ ### Manage Report Tabs
172
+
173
+ 1. Call `datalion__create_report_tab` to add a tab to an existing report.
174
+ 2. Call `datalion__edit_report_tab` to rename or update a tab.
175
+ 3. Call `datalion__delete_report_tab` to remove a tab after confirming the
176
+ report and tab IDs.
177
+ 4. Keep `projectId` aligned with the report or tab/dashboard you are mutating.
178
+
179
+ ### Open In Browser
180
+
181
+ 1. Use `datalion__open_project_browser` for the project screen.
182
+ 2. Use `datalion__open_report_browser` for the report editor or a specific
183
+ report tab/dashboard.
184
+ 3. Use `datalion__open_dashboard_browser` for a specific tab/dashboard view.
185
+ 4. Use `datalion__open_add_widget_browser` to get the modal URL used to add a
186
+ question/widget to a tab/dashboard. The actual insertion still happens in
187
+ the browser UI after the modal is opened.
188
+
189
+ ### Find or Read a Project
190
+
191
+ 1. Call `datalion__list_projects` when the user gives a fuzzy project name or
192
+ identcode.
193
+ 2. Call `datalion__read_project` once you know the `projectId`.
194
+ 3. Use the returned `defsettings`, `categoriesCount`, and `dataSourcesCount` to
195
+ guide the next step.
196
+
197
+ ### Edit Project Settings
198
+
199
+ 1. Confirm `projectId` and the exact `defsettings` keys to merge.
200
+ 2. Call `datalion__edit_project`.
201
+ 3. Return the updated keys and note that untouched settings stay as they were.
202
+
91
203
  ### Upload Data
92
204
 
93
205
  1. Confirm the target project ID.
94
- 2. Prefer CSV text input for the current bridge.
95
- 3. Call `datalion__upload_data`.
96
- 4. Return the job ID and the import assumptions you used.
206
+ 2. Call `datalion__list_data_sources` first if you need to inspect existing
207
+ data sources.
208
+ 3. Prefer CSV text input for the current bridge.
209
+ 4. Call `datalion__upload_data`.
210
+ 5. Return the job ID and the import assumptions you used.
211
+
212
+ ### Import Excel or CSV via Datalion Pipeline
213
+
214
+ 1. Confirm `projectId` and the source file path or file content.
215
+ 2. Prefer `localPath` for `.xlsx` imports when the file exists on disk.
216
+ 3. Use `useDefaultDataSource=true` when you want the workbook imported into
217
+ the main project data table and codebook generation to read from that same
218
+ table. Otherwise confirm `dataSourceName`.
219
+ 4. Confirm whether `createCodebook` should run during import.
220
+ 5. Call `datalion__import_excel_data`.
221
+ 6. Return the data source name, imported row count, and whether codebook
222
+ generation was requested.
97
223
 
98
224
  ### Read a Chart Table
99
225
 
@@ -101,7 +227,28 @@ That means:
101
227
  2. Call `datalion__get_chart_table`.
102
228
  3. Summarize the result and surface obvious caveats.
103
229
 
104
- ### Reports, Dashboards, and Exports
230
+ ### Codebook Workflows
231
+
232
+ 1. For question-level inspection, call `datalion__list_codebook`.
233
+ 2. For tree-structured inspection, call `datalion__download_codebook`.
234
+ 3. For regenerate-from-data workflows, call `datalion__generate_codebook`.
235
+ 4. For destructive cleanup, call `datalion__delete_codebook` and confirm
236
+ whether `includeTextboxes` should be `true`.
237
+ 5. For CSV import, call `datalion__upload_codebook` with the filename, file
238
+ content, import mode, and any index-based `columnMapping` array that should
239
+ align with the CSV header order.
240
+
241
+ ### Reports
242
+
243
+ 1. Call `datalion__list_reports` to inspect existing reports for a project.
244
+ 2. Call `datalion__create_report` to create a new report once the target
245
+ project and report name are confirmed. The new report is seeded with a
246
+ first tab and the response includes both IDs.
247
+ 3. Use the report-tab tools for tab-level create/edit/delete work.
248
+ 4. Treat report edits beyond tab CRUD as fallback work until direct MCP
249
+ coverage exists.
250
+
251
+ ### Dashboards and Exports
105
252
 
106
253
  1. Check current `datalion__*` tool coverage first.
107
254
  2. If no direct tool exists, inspect `openapi.yaml`, `routes/dashboard.php`, and
@@ -9,41 +9,231 @@ hybridclaw gateway start --foreground --sandbox=host
9
9
  hybridclaw tui
10
10
  ```
11
11
 
12
- Add the MCP server from the TUI:
12
+ Add the MCP server from the CLI with the JSON quoted as a single shell
13
+ argument:
14
+
15
+ ```bash
16
+ hybridclaw gateway mcp add datalion '{"transport":"stdio","command":"node","args":["/Users/bkoehler/src/datalion/mcp/mcp-bridge.js"],"env":{"DATALION_API_URL":"https://datalion.test/api/v1/mcp","DATALION_API_TOKEN":"replace-me","DATALION_IGNORE_SSL":"true"},"enabled":true}'
17
+ ```
18
+
19
+ In `zsh`, do not leave the JSON unquoted or the shell will try to expand
20
+ `{...}` and `[...]` before `hybridclaw gateway` receives the config.
21
+
22
+ Add the same MCP server from the TUI with:
13
23
 
14
24
  ```text
15
- /mcp add datalion {"transport":"stdio","command":"node","args":["/absolute/path/to/datalion/mcp/mcp-bridge.js"],"env":{"DATALION_API_URL":"https://datalion.test/api/v1/mcp","DATALION_API_TOKEN":"replace-me","DATALION_IGNORE_SSL":"true"},"enabled":true}
25
+ /mcp add datalion {"transport":"stdio","command":"node","args":["/Users/bkoehler/src/datalion/mcp/mcp-bridge.js"],"env":{"DATALION_API_URL":"https://datalion.test/api/v1/mcp","DATALION_API_TOKEN":"replace-me","DATALION_IGNORE_SSL":"true"},"enabled":true}
16
26
  ```
17
27
 
18
- Replace `/absolute/path/to/datalion` with the real checkout path. Do not use
19
- `~` inside `args`; MCP stdio commands do not run through a shell, so tilde
20
- expansion is not guaranteed.
28
+ Replace `replace-me` with a real token.
29
+
30
+ Do not use `~` inside `args`; MCP stdio commands do not run through a shell, so
31
+ tilde expansion will not happen. Use an absolute path like
32
+ `/Users/bkoehler/src/datalion/mcp/mcp-bridge.js`.
21
33
 
22
- If the bridge dependencies are missing:
34
+ Install the bridge dependencies before first use:
23
35
 
24
36
  ```bash
25
- npm --prefix /absolute/path/to/datalion/mcp install
37
+ npm --prefix /Users/bkoehler/src/datalion/mcp install
26
38
  ```
27
39
 
28
- Verify with:
40
+ Verify the server registration with either:
41
+
42
+ ```bash
43
+ hybridclaw gateway mcp list
44
+ ```
45
+
46
+ or:
29
47
 
30
48
  ```text
31
49
  /mcp list
32
50
  ```
33
51
 
34
- Expected tools are typically:
52
+ `mcp list` shows configured MCP servers, not the discovered tool names.
53
+ HybridClaw merges MCP tools into the active session tool list at runtime, so the
54
+ practical verification path is to run a prompt that should use the server and
55
+ then inspect the response or the Datalion bridge log.
56
+
57
+ In Datalion, "tab" and "dashboard" refer to the same report subpage entity.
58
+
59
+ When the server is healthy, the active tool names are typically:
35
60
 
61
+ - `datalion__list_projects`
62
+ - `datalion__read_project`
36
63
  - `datalion__create_project`
64
+ - `datalion__edit_project`
65
+ - `datalion__list_data_sources`
37
66
  - `datalion__upload_data`
67
+ - `datalion__import_excel_data`
68
+ - `datalion__list_reports`
69
+ - `datalion__create_report`
70
+ - `datalion__create_report_tab`
71
+ - `datalion__edit_report_tab`
72
+ - `datalion__delete_report_tab`
73
+ - `datalion__open_project_browser`
74
+ - `datalion__open_report_browser`
75
+ - `datalion__open_dashboard_browser`
76
+ - `datalion__open_add_widget_browser`
38
77
  - `datalion__get_chart_table`
78
+ - `datalion__list_codebook`
79
+ - `datalion__download_codebook`
80
+ - `datalion__generate_codebook`
81
+ - `datalion__delete_codebook`
82
+ - `datalion__upload_codebook`
83
+
84
+ This is the current 22-tool bridge surface:
85
+
86
+ - `project.list`, `project.read`, `project.create`, `project.edit`
87
+ - `data.sources`, `data.upload`, `data.import.excel`
88
+ - `report.list`, `report.create`, `report.tab.create`, `report.tab.edit`,
89
+ `report.tab.delete`
90
+ - browser URL helpers:
91
+ - `open_project_browser`
92
+ - `open_report_browser`
93
+ - `open_dashboard_browser`
94
+ - `open_add_widget_browser`
95
+ - `chart.table`
96
+ - `codebook.list`, `codebook.download`, `codebook.generate`,
97
+ `codebook.delete`, `codebook.upload`
98
+
99
+ ## Testing the Skill
100
+
101
+ For explicit TUI testing, use:
102
+
103
+ ```text
104
+ /skill datalion create a new project named "MCP Smoke Test 2026-03-25"
105
+ ```
106
+
107
+ That is the safest explicit invocation path in HybridClaw sessions.
108
+ `/datalion ...` is not a built-in slash-menu entry, so it may not appear in
109
+ autocomplete even though the skill itself is installed.
110
+
111
+ ## TUI Smoke Tests
112
+
113
+ Use these in the TUI after `/mcp reconnect datalion`:
114
+
115
+ ```text
116
+ /skill datalion list all projects
117
+ ```
118
+
119
+ ```text
120
+ /skill datalion read project 123 and show its full details and defsettings
121
+ ```
122
+
123
+ ```text
124
+ /skill datalion create a new project named "MCP Smoke Test 2026-03-25" with identcode "mcp-smoke-test-2026-03-25" and defsettings {"language":"en","themeselection":"default"}
125
+ ```
126
+
127
+ ```text
128
+ /skill datalion create a report named "MCP Smoke Test Report" for project 123
129
+ ```
130
+
131
+ ```text
132
+ /skill datalion create a new tab in report 456 for project 123 named "Executive Summary"
133
+ ```
134
+
135
+ ```text
136
+ /skill datalion edit tab 456 in report 456 for project 123 by setting description to "Executive Summary - Revised" and sortorder to 2
137
+ ```
138
+
139
+ ```text
140
+ /skill datalion delete tab 456 from report 456 for project 123
141
+ ```
142
+
143
+ ```text
144
+ /skill datalion open project 123 in browser
145
+ ```
146
+
147
+ ```text
148
+ /skill datalion open report 456 for project 123 in browser
149
+ ```
150
+
151
+ ```text
152
+ /skill datalion open dashboard 789 for project 123 in browser
153
+ ```
154
+
155
+ ```text
156
+ /skill datalion open the add-widget modal for project 123, div 4, and category 321
157
+ ```
158
+
159
+ ```text
160
+ /skill datalion update project 123 by merging these defsettings: {"disp_precision":2,"omit_na":true,"report_instant_export":true}
161
+ ```
162
+
163
+ ```text
164
+ /skill datalion list the data sources for project 123
165
+ ```
166
+
167
+ ```text
168
+ /skill datalion import the workbook at /Users/bkoehler/Downloads/synthclaw_sales.xlsx into project 123 as the main data source using useDefaultDataSource=true and createCodebook=true
169
+ ```
170
+
171
+ ```text
172
+ /skill datalion list the reports for project 123
173
+ ```
174
+
175
+ ```text
176
+ /skill datalion create a report named "MCP Smoke Test Report" for project 123
177
+ ```
178
+
179
+ ```text
180
+ /skill datalion download the codebook for project 123
181
+ ```
182
+
183
+ ```text
184
+ /skill datalion list the question-level codebook categories for project 123
185
+ ```
186
+
187
+ ```text
188
+ /skill datalion generate the codebook for project 123 from the current project data
189
+ ```
190
+
191
+ ```text
192
+ /skill datalion delete the codebook for project 123 but keep textboxes
193
+ ```
194
+
195
+ ```text
196
+ /skill datalion delete the codebook for project 123 and include textboxes
197
+ ```
198
+
199
+ ```text
200
+ /skill datalion upload this codebook CSV to project 123 as "codebook.csv" using importType 2:
201
+ variable,label,short_label,value
202
+ q1,Overall satisfaction,Satisfaction,1
203
+ q2,Recommend to a friend,Recommendation,1
204
+ ```
205
+
206
+ ```text
207
+ /skill datalion upload this codebook CSV to project 123 as "codebook.csv" using importType 3 and columnMapping ["fieldname","label","category","values"]:
208
+ variable,label,short_label,value
209
+ q1,Overall satisfaction,Satisfaction,1
210
+ q2,Recommend to a friend,Recommendation,1
211
+ ```
212
+
213
+ Bridge-side confirmation is written to:
214
+
215
+ - `/Users/bkoehler/src/datalion/mcp/mcp-bridge-debug.log`
216
+
217
+ Look for `Received tools/call request` entries such as `list_projects`,
218
+ `read_project`, `create_project`, `edit_project`, `list_data_sources`,
219
+ `import_excel_data`, `list_reports`, `create_report`, `list_codebook`,
220
+ `download_codebook`, `generate_codebook`, `delete_codebook`, and
221
+ `upload_codebook`.
39
222
 
40
223
  ## Required Token Abilities
41
224
 
42
225
  The current backend checks these abilities:
43
226
 
227
+ - `projects.read` for project listing and reads
44
228
  - `projects.create` for project creation
45
- - `data.upload` for data import
229
+ - `projects.edit` for project settings updates
230
+ - `data.read` for project data source reads
231
+ - `data.upload` for CSV upload and excel import
232
+ - `reports.read` for report listing
233
+ - `reports.write` for report creation
46
234
  - `charts.view-api` for chart table reads
235
+ - `codebook.read` for codebook downloads
236
+ - `codebook.write` for codebook generation, deletion, and upload
47
237
 
48
238
  If a call fails with `403`, check the token abilities before retrying.
49
239
 
@@ -51,12 +241,31 @@ If a call fails with `403`, check the token abilities before retrying.
51
241
 
52
242
  | Task | Best path today | Notes |
53
243
  | --- | --- | --- |
54
- | Create project | `datalion__create_project` | Direct MCP support exists. The current backend creates the project from `name`; do not assume extra descriptive fields are persisted unless you verify it. |
244
+ | List projects | `datalion__list_projects` | Direct MCP support exists. Returns `projectId`, `identcode`, `name`, `description`, `status`, and `source` for accessible projects. |
245
+ | Read project | `datalion__read_project` | Direct MCP support exists. Returns full project details including `defsettings`, `categoriesCount`, and `dataSourcesCount`. |
246
+ | Create project | `datalion__create_project` | Direct MCP support exists. The bridge advertises `name` and optional `identcode` and `defsettings`. DataLion uses `name` for project description and dtitle. |
247
+ | Edit project settings | `datalion__edit_project` | Direct MCP support exists. `defsettings` must be an object and is merged into the existing project settings rather than replacing them wholesale. |
248
+ | List data sources | `datalion__list_data_sources` | Direct MCP support exists. Returns each data source with `id`, `name`, `comment`, row count, and timestamps. |
55
249
  | Upload CSV data | `datalion__upload_data` | Best current MCP path. Confirm header, delimiter, encoding, truncate behavior, and target project ID. |
56
- | Upload Excel workbook | Convert to CSV first, then `datalion__upload_data`, or use UI/API fallback | The current bridge accepts a string payload, so CSV text is the reliable path. |
250
+ | Import Excel or CSV with full pipeline | `datalion__import_excel_data` | Direct MCP support exists. Accepts `localPath` or base64 `file`, plus `filename` when needed; supports `dataSourceName`, `useDefaultDataSource`, `replaceData`, `runCalculations`, `convertComma`, `skipLines`, `createCodebook`, and `comment`. Use `useDefaultDataSource=true` when you want the workbook imported into the main project data table so codebook generation reads the same data table. |
251
+ | Upload Excel workbook | `datalion__import_excel_data` | Preferred direct MCP path for `.xlsx` workbooks. Use `localPath` for a local file or base64 `file` if you already have the workbook bytes. If you want the main/default data source, set `useDefaultDataSource=true`. If you send base64 directly, also provide `filename`. |
252
+ | List reports | `datalion__list_reports` | Direct MCP support exists. Returns report id, name, publish/archive flags, owner, and tab count. |
253
+ | Create report | `datalion__create_report` | Direct MCP support exists. Requires `projectId` and report `name`. The report is seeded with a first tab and the response returns both IDs. |
254
+ | Create report tab | `datalion__create_report_tab` | Direct MCP support exists. Requires `projectId`, `reportId`, and `description`. Optional tab/dashboard settings can be applied at creation time. |
255
+ | Edit report tab | `datalion__edit_report_tab` | Direct MCP support exists. Requires `projectId` and `tabId`, then merges the supplied tab/dashboard fields. |
256
+ | Delete report tab | `datalion__delete_report_tab` | Direct MCP support exists. Requires `projectId` and `tabId`. |
257
+ | Open project in browser | `datalion__open_project_browser` | Bridge-local helper. Returns the project screen URL. |
258
+ | Open report in browser | `datalion__open_report_browser` | Bridge-local helper. Returns the report editor URL, or the tab/dashboard URL when `tabId` is supplied. |
259
+ | Open dashboard in browser | `datalion__open_dashboard_browser` | Bridge-local helper. Returns the tab/dashboard screen URL. |
260
+ | Open add-widget modal | `datalion__open_add_widget_browser` | Bridge-local helper. Returns the chart-add modal URL for adding a question/widget to a tab/dashboard. |
57
261
  | Read chart table | `datalion__get_chart_table` | Requires `projectId` plus `chartId` when the chart ID does not already include the project prefix. Optional filters are passed through. |
262
+ | List codebook categories | `datalion__list_codebook` | Direct MCP support exists. Returns question-level measure/item categories with `categoryImportId`, `label`, and `fieldname`. |
263
+ | Download codebook | `datalion__download_codebook` | Direct MCP support exists. Returns the category tree plus a total count. |
264
+ | Generate codebook | `datalion__generate_codebook` | Direct MCP support exists. Regenerates codebook categories from project data. |
265
+ | Delete codebook | `datalion__delete_codebook` | Direct MCP support exists. Optional `includeTextboxes=true` expands the deletion to textboxes. |
266
+ | Upload codebook CSV | `datalion__upload_codebook` | Direct MCP support exists. The bridge accepts raw CSV `data` or base64 `file`, plus `filename`, optional `importType` (`2` replace, `3` update, `4` append), and optional `columnMapping` as an array aligned to CSV column order. |
58
267
  | Create or update dashboard | REST `/api/v1/dashboards` or Datalion UI | Current MCP bridge does not expose dashboard CRUD. See `openapi.yaml` and `routes/dashboard.php`. |
59
- | Create or update report | REST `/api/v1/reports` or Datalion UI | Current MCP bridge does not expose report CRUD. |
268
+ | Update report after creation | REST `/api/v1/reports` or Datalion UI | Current MCP bridge exposes report list/create and tab CRUD, but not full report CRUD. |
60
269
  | Generate exports | Browser/UI or export web routes | Export flows currently live in `routes/export.php` web routes rather than the MCP bridge. |
61
270
 
62
271
  ## Fallback Inspection Points