@hailer/mcp 1.1.12 → 1.1.13

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 (271) hide show
  1. package/CHANGELOG.md +0 -7
  2. package/{.claude → dist}/CLAUDE.md +2 -2
  3. package/dist/app.js +18 -5
  4. package/dist/bot/bot-config.d.ts +10 -1
  5. package/dist/bot/bot-config.js +64 -3
  6. package/dist/bot/bot-manager.d.ts +2 -0
  7. package/dist/bot/bot-manager.js +9 -2
  8. package/dist/bot/bot.d.ts +33 -0
  9. package/dist/bot/bot.js +461 -160
  10. package/dist/bot/services/message-classifier.js +17 -0
  11. package/dist/bot/services/permission-guard.d.ts +52 -0
  12. package/dist/bot/services/permission-guard.js +149 -0
  13. package/dist/bot/services/types.d.ts +5 -0
  14. package/dist/bot/services/typing-indicator.d.ts +6 -1
  15. package/dist/bot/services/typing-indicator.js +19 -3
  16. package/dist/cli.js +0 -0
  17. package/dist/config.d.ts +6 -1
  18. package/dist/config.js +43 -0
  19. package/dist/core.js +3 -6
  20. package/dist/lib/discussion-lock.d.ts +42 -0
  21. package/dist/lib/discussion-lock.js +110 -0
  22. package/dist/mcp/UserContextCache.d.ts +5 -0
  23. package/dist/mcp/UserContextCache.js +51 -19
  24. package/dist/mcp/hailer-clients.d.ts +19 -1
  25. package/dist/mcp/hailer-clients.js +158 -24
  26. package/dist/mcp/session-store.d.ts +68 -0
  27. package/dist/mcp/session-store.js +169 -0
  28. package/dist/mcp/signal-handler.js +2 -0
  29. package/dist/mcp/tool-registry.d.ts +17 -4
  30. package/dist/mcp/tool-registry.js +37 -7
  31. package/dist/mcp/tools/activity.js +99 -7
  32. package/dist/mcp/tools/app-scaffold.js +304 -336
  33. package/dist/mcp/tools/bot-config/constants.d.ts +23 -0
  34. package/dist/mcp/tools/bot-config/constants.js +94 -0
  35. package/dist/mcp/tools/bot-config/core.d.ts +253 -0
  36. package/dist/mcp/tools/bot-config/core.js +2456 -0
  37. package/dist/mcp/tools/bot-config/index.d.ts +10 -0
  38. package/dist/mcp/tools/bot-config/index.js +59 -0
  39. package/dist/mcp/tools/bot-config/tools.d.ts +7 -0
  40. package/dist/mcp/tools/bot-config/tools.js +15 -0
  41. package/dist/mcp/tools/bot-config/types.d.ts +50 -0
  42. package/dist/mcp/tools/bot-config/types.js +6 -0
  43. package/dist/mcp/tools/bug-fixer-tools.d.ts +45 -0
  44. package/dist/mcp/tools/bug-fixer-tools.js +1096 -0
  45. package/dist/mcp/tools/company.d.ts +9 -0
  46. package/dist/mcp/tools/company.js +88 -0
  47. package/dist/mcp/tools/discussion.js +68 -0
  48. package/dist/mcp/tools/document.d.ts +11 -0
  49. package/dist/mcp/tools/document.js +741 -0
  50. package/dist/mcp/tools/investigate.d.ts +9 -0
  51. package/dist/mcp/tools/investigate.js +254 -0
  52. package/dist/mcp/tools/workflow-permissions.d.ts +15 -0
  53. package/dist/mcp/tools/workflow-permissions.js +204 -0
  54. package/dist/mcp/tools/workflow.js +57 -18
  55. package/dist/mcp/utils/index.d.ts +2 -0
  56. package/dist/mcp/utils/index.js +12 -1
  57. package/dist/mcp/utils/role-utils.d.ts +74 -0
  58. package/dist/mcp/utils/role-utils.js +151 -0
  59. package/dist/mcp/utils/types.d.ts +43 -1
  60. package/dist/mcp/utils/types.js +14 -0
  61. package/dist/mcp/webhook-handler.d.ts +4 -0
  62. package/dist/mcp/webhook-handler.js +8 -0
  63. package/dist/mcp-server.d.ts +23 -2
  64. package/dist/mcp-server.js +639 -127
  65. package/dist/plugins/vipunen/client.d.ts +150 -0
  66. package/dist/plugins/vipunen/client.js +535 -0
  67. package/dist/plugins/vipunen/config/schema-config.json +19 -0
  68. package/dist/plugins/vipunen/config/schema-doc.json +22 -0
  69. package/dist/plugins/vipunen/index.d.ts +41 -0
  70. package/dist/plugins/vipunen/index.js +88 -0
  71. package/dist/plugins/vipunen/tools.d.ts +26 -0
  72. package/dist/plugins/vipunen/tools.js +501 -0
  73. package/dist/stdio-server.d.ts +14 -0
  74. package/dist/stdio-server.js +101 -0
  75. package/package.json +2 -1
  76. package/.claude/agents/agent-ada-skill-builder.md +0 -94
  77. package/.claude/agents/agent-alejandro-function-fields.md +0 -342
  78. package/.claude/agents/agent-bjorn-config-audit.md +0 -103
  79. package/.claude/agents/agent-builder-agent-creator.md +0 -130
  80. package/.claude/agents/agent-code-simplifier.md +0 -53
  81. package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
  82. package/.claude/agents/agent-giuseppe-app-builder.md +0 -247
  83. package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
  84. package/.claude/agents/agent-helga-workflow-config.md +0 -204
  85. package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
  86. package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
  87. package/.claude/agents/agent-ivan-monolith.md +0 -154
  88. package/.claude/agents/agent-kenji-data-reader.md +0 -86
  89. package/.claude/agents/agent-lars-code-inspector.md +0 -102
  90. package/.claude/agents/agent-marco-mockup-builder.md +0 -110
  91. package/.claude/agents/agent-marcus-api-documenter.md +0 -323
  92. package/.claude/agents/agent-marketplace-publisher.md +0 -280
  93. package/.claude/agents/agent-marketplace-reviewer.md +0 -309
  94. package/.claude/agents/agent-permissions-handler.md +0 -208
  95. package/.claude/agents/agent-simple-writer.md +0 -48
  96. package/.claude/agents/agent-svetlana-code-review.md +0 -171
  97. package/.claude/agents/agent-tanya-test-runner.md +0 -333
  98. package/.claude/agents/agent-ui-designer.md +0 -100
  99. package/.claude/agents/agent-viktor-sql-insights.md +0 -212
  100. package/.claude/agents/agent-web-search.md +0 -55
  101. package/.claude/agents/agent-yevgeni-discussions.md +0 -45
  102. package/.claude/agents/agent-zara-zapier.md +0 -159
  103. package/.claude/commands/app-squad.md +0 -135
  104. package/.claude/commands/audit-squad.md +0 -158
  105. package/.claude/commands/autoplan.md +0 -563
  106. package/.claude/commands/cleanup-squad.md +0 -98
  107. package/.claude/commands/config-squad.md +0 -106
  108. package/.claude/commands/crud-squad.md +0 -87
  109. package/.claude/commands/data-squad.md +0 -97
  110. package/.claude/commands/debug-squad.md +0 -303
  111. package/.claude/commands/doc-squad.md +0 -65
  112. package/.claude/commands/handoff.md +0 -137
  113. package/.claude/commands/health.md +0 -49
  114. package/.claude/commands/help.md +0 -29
  115. package/.claude/commands/help:agents.md +0 -151
  116. package/.claude/commands/help:commands.md +0 -78
  117. package/.claude/commands/help:faq.md +0 -79
  118. package/.claude/commands/help:plugins.md +0 -50
  119. package/.claude/commands/help:skills.md +0 -93
  120. package/.claude/commands/help:tools.md +0 -75
  121. package/.claude/commands/hotfix-squad.md +0 -112
  122. package/.claude/commands/integration-squad.md +0 -82
  123. package/.claude/commands/janitor-squad.md +0 -167
  124. package/.claude/commands/learn-auto.md +0 -120
  125. package/.claude/commands/learn.md +0 -120
  126. package/.claude/commands/mcp-list.md +0 -27
  127. package/.claude/commands/onboard-squad.md +0 -140
  128. package/.claude/commands/plan-workspace.md +0 -732
  129. package/.claude/commands/prd.md +0 -130
  130. package/.claude/commands/project-status.md +0 -82
  131. package/.claude/commands/publish.md +0 -138
  132. package/.claude/commands/recap.md +0 -69
  133. package/.claude/commands/restore.md +0 -64
  134. package/.claude/commands/review-squad.md +0 -152
  135. package/.claude/commands/save.md +0 -24
  136. package/.claude/commands/stats.md +0 -19
  137. package/.claude/commands/swarm.md +0 -210
  138. package/.claude/commands/tool-builder.md +0 -39
  139. package/.claude/commands/ws-pull.md +0 -44
  140. package/.claude/hooks/_shared-memory.cjs +0 -305
  141. package/.claude/hooks/_utils.cjs +0 -108
  142. package/.claude/hooks/agent-failure-detector.cjs +0 -383
  143. package/.claude/hooks/agent-usage-logger.cjs +0 -204
  144. package/.claude/hooks/app-edit-guard.cjs +0 -494
  145. package/.claude/hooks/auto-learn.cjs +0 -304
  146. package/.claude/hooks/bash-guard.cjs +0 -272
  147. package/.claude/hooks/builder-mode-manager.cjs +0 -354
  148. package/.claude/hooks/bulk-activity-guard.cjs +0 -271
  149. package/.claude/hooks/context-watchdog.cjs +0 -230
  150. package/.claude/hooks/delegation-reminder.cjs +0 -465
  151. package/.claude/hooks/design-system-lint.cjs +0 -271
  152. package/.claude/hooks/post-scaffold-hook.cjs +0 -181
  153. package/.claude/hooks/prompt-guard.cjs +0 -354
  154. package/.claude/hooks/publish-template-guard.cjs +0 -147
  155. package/.claude/hooks/session-start.cjs +0 -35
  156. package/.claude/hooks/shared-memory-writer.cjs +0 -147
  157. package/.claude/hooks/skill-injector.cjs +0 -140
  158. package/.claude/hooks/skill-usage-logger.cjs +0 -258
  159. package/.claude/hooks/src-edit-guard.cjs +0 -240
  160. package/.claude/hooks/sync-marketplace-agents.cjs +0 -346
  161. package/.claude/settings.json +0 -257
  162. package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
  163. package/.claude/skills/SDK-document-templates/SKILL.md +0 -1033
  164. package/.claude/skills/SDK-function-fields/SKILL.md +0 -542
  165. package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
  166. package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
  167. package/.claude/skills/SDK-insight-queries/SKILL.md +0 -787
  168. package/.claude/skills/SDK-ws-config-skill/SKILL.md +0 -1139
  169. package/.claude/skills/agent-structure/SKILL.md +0 -98
  170. package/.claude/skills/api-documentation-patterns/SKILL.md +0 -474
  171. package/.claude/skills/chrome-mcp-reference/SKILL.md +0 -370
  172. package/.claude/skills/delegation-routing/SKILL.md +0 -202
  173. package/.claude/skills/frontend-design/SKILL.md +0 -254
  174. package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
  175. package/.claude/skills/hailer-api-client/SKILL.md +0 -518
  176. package/.claude/skills/hailer-app-builder/SKILL.md +0 -1434
  177. package/.claude/skills/hailer-apps-pictures/SKILL.md +0 -269
  178. package/.claude/skills/hailer-design-system/SKILL.md +0 -235
  179. package/.claude/skills/hailer-monolith-automations/SKILL.md +0 -686
  180. package/.claude/skills/hailer-permissions-system/SKILL.md +0 -121
  181. package/.claude/skills/hailer-project-protocol/SKILL.md +0 -488
  182. package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
  183. package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
  184. package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
  185. package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
  186. package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
  187. package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
  188. package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
  189. package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
  190. package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
  191. package/.claude/skills/integration-patterns/SKILL.md +0 -421
  192. package/.claude/skills/json-only-output/SKILL.md +0 -72
  193. package/.claude/skills/lsp-setup/SKILL.md +0 -160
  194. package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
  195. package/.claude/skills/optional-parameters/SKILL.md +0 -72
  196. package/.claude/skills/publish-hailer-app/SKILL.md +0 -244
  197. package/.claude/skills/testing-patterns/SKILL.md +0 -630
  198. package/.claude/skills/tool-builder/SKILL.md +0 -250
  199. package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
  200. package/.claude/skills/tool-response-verification/SKILL.md +0 -92
  201. package/.claude/skills/zapier-hailer-patterns/SKILL.md +0 -581
  202. package/.mcp.json +0 -13
  203. package/.opencode/agent/agent-ada-skill-builder.md +0 -35
  204. package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
  205. package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
  206. package/.opencode/agent/agent-builder-agent-creator.md +0 -39
  207. package/.opencode/agent/agent-code-simplifier.md +0 -31
  208. package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
  209. package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
  210. package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
  211. package/.opencode/agent/agent-helga-workflow-config.md +0 -203
  212. package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
  213. package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
  214. package/.opencode/agent/agent-ivan-monolith.md +0 -46
  215. package/.opencode/agent/agent-kenji-data-reader.md +0 -53
  216. package/.opencode/agent/agent-lars-code-inspector.md +0 -28
  217. package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
  218. package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
  219. package/.opencode/agent/agent-marketplace-publisher.md +0 -44
  220. package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
  221. package/.opencode/agent/agent-permissions-handler.md +0 -50
  222. package/.opencode/agent/agent-simple-writer.md +0 -45
  223. package/.opencode/agent/agent-svetlana-code-review.md +0 -39
  224. package/.opencode/agent/agent-tanya-test-runner.md +0 -57
  225. package/.opencode/agent/agent-ui-designer.md +0 -56
  226. package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
  227. package/.opencode/agent/agent-web-search.md +0 -42
  228. package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
  229. package/.opencode/agent/agent-zara-zapier.md +0 -53
  230. package/.opencode/commands/app-squad.md +0 -135
  231. package/.opencode/commands/audit-squad.md +0 -158
  232. package/.opencode/commands/autoplan.md +0 -563
  233. package/.opencode/commands/cleanup-squad.md +0 -98
  234. package/.opencode/commands/config-squad.md +0 -106
  235. package/.opencode/commands/crud-squad.md +0 -87
  236. package/.opencode/commands/data-squad.md +0 -97
  237. package/.opencode/commands/debug-squad.md +0 -303
  238. package/.opencode/commands/doc-squad.md +0 -65
  239. package/.opencode/commands/handoff.md +0 -137
  240. package/.opencode/commands/health.md +0 -49
  241. package/.opencode/commands/help-agents.md +0 -151
  242. package/.opencode/commands/help-commands.md +0 -32
  243. package/.opencode/commands/help-faq.md +0 -29
  244. package/.opencode/commands/help-plugins.md +0 -28
  245. package/.opencode/commands/help-skills.md +0 -7
  246. package/.opencode/commands/help-tools.md +0 -40
  247. package/.opencode/commands/help.md +0 -28
  248. package/.opencode/commands/hotfix-squad.md +0 -112
  249. package/.opencode/commands/integration-squad.md +0 -82
  250. package/.opencode/commands/janitor-squad.md +0 -167
  251. package/.opencode/commands/learn-auto.md +0 -120
  252. package/.opencode/commands/learn.md +0 -120
  253. package/.opencode/commands/mcp-list.md +0 -27
  254. package/.opencode/commands/onboard-squad.md +0 -140
  255. package/.opencode/commands/plan-workspace.md +0 -732
  256. package/.opencode/commands/prd.md +0 -131
  257. package/.opencode/commands/project-status.md +0 -82
  258. package/.opencode/commands/publish.md +0 -138
  259. package/.opencode/commands/recap.md +0 -69
  260. package/.opencode/commands/restore.md +0 -64
  261. package/.opencode/commands/review-squad.md +0 -152
  262. package/.opencode/commands/save.md +0 -24
  263. package/.opencode/commands/stats.md +0 -19
  264. package/.opencode/commands/swarm.md +0 -210
  265. package/.opencode/commands/tool-builder.md +0 -39
  266. package/.opencode/commands/ws-pull.md +0 -44
  267. package/.opencode/opencode.json +0 -28
  268. package/SESSION-HANDOFF.md +0 -68
  269. package/inbox/2026-03-04-bot-config-patterns.md +0 -24
  270. package/scripts/postinstall.cjs +0 -64
  271. package/scripts/test-hal-tools.ts +0 -154
@@ -1,98 +0,0 @@
1
- ---
2
- name: agent-structure
3
- description: Template for creating new Hailer SDK agents
4
- version: 1.1.0
5
- triggers: create agent, new agent, agent template
6
- ---
7
-
8
- # Agent Structure Template
9
-
10
- Use this template when creating new agents.
11
-
12
- ## File Location
13
-
14
- `.claude/agents/agent-{name}-{role}.md`
15
-
16
- ## Template
17
-
18
- ```markdown
19
- ---
20
- name: agent-{name}-{role}
21
- description: What it does.\n\n<example>\nuser: "request"\nassistant: {"status":"success","result":{},"summary":"Done"}\n</example>
22
- model: haiku|sonnet
23
- tools: tool_1, tool_2
24
- ---
25
-
26
- <identity>
27
- I am {Name}, {nationality} {role} specialist. {Philosophy}. Output JSON. Full stop.
28
- </identity>
29
-
30
- <handles>
31
- - Task 1
32
- - Task 2
33
- </handles>
34
-
35
- <skills>
36
- Load `skill-name` before complex tasks.
37
- </skills>
38
-
39
- <rules>
40
- 1. **NEVER FABRICATE** - Must call tools.
41
- 2. Rule 2
42
- 3. Rule 3
43
- </rules>
44
-
45
- <protocol>
46
- Input: JSON task spec
47
- Output: JSON only
48
- Schema: { "status": "success|error", "result": {}, "summary": "max 50 chars" }
49
- </protocol>
50
- ```
51
-
52
- ## Identity Shapes Behavior
53
-
54
- **The `<identity>` section is the most powerful lever for agent behavior** - more than rules.
55
-
56
- Rules tell agents what NOT to do. Identity tells them WHO they are and HOW they work. When an agent fabricates results despite having "NEVER FABRICATE" as rule 1, the fix is usually to rewrite identity to emphasize tool-first behavior.
57
-
58
- **Good identity (tool-centric):**
59
- ```
60
- I am Kenji. I read files. I query APIs. I verify data. Every answer comes from a tool call. Output JSON. Full stop.
61
- ```
62
-
63
- **Weak identity (role-centric only):**
64
- ```
65
- I am Kenji, a data reader specialist.
66
- ```
67
-
68
- **Additionally:** Give explicit step-by-step commands in the Task prompt, not just "do X". Agents follow concrete instructions better than abstract goals.
69
-
70
- ## Model Selection
71
-
72
- | Model | Use for | Cost |
73
- |-------|---------|------|
74
- | `haiku` | Procedural/checklist work, CRUD, simple lookups | Cheap, fast |
75
- | `sonnet` | Complex reasoning, code generation, validation logic | More expensive |
76
-
77
- ## Status Values
78
-
79
- | Status | Meaning | Orchestrator Action |
80
- |--------|---------|---------------------|
81
- | `success` | Task completed | Report to user |
82
- | `error` | Task failed | Report error, maybe retry |
83
- | `ready_to_push` | Files edited, needs push | Run commands in `commands` array |
84
- | `needs_confirmation` | Destructive action | Ask user, then run `safe_command` |
85
-
86
- ## Naming Convention
87
-
88
- - `agent-kenji-data-reader` - Kenji reads data
89
- - `agent-helga-workflow-config` - Helga configures workflows
90
- - `agent-igor-activity-mover-automation` - Igor builds activity movers
91
-
92
- Pattern: `agent-{firstname}-{domain}`
93
-
94
- ## Customization
95
-
96
- - **CREATE:** Add to `.claude/agents/`
97
- - **MODIFY:** Edit `.claude/agents/*.md`
98
- - **DISABLE:** Move to `docs/agents/`
@@ -1,474 +0,0 @@
1
- ---
2
- name: api-documentation-patterns
3
- description: Hailer API documentation standards - research workflow, section structure, example patterns
4
- version: 1.0.0
5
- triggers: Document endpoint, API documentation, @hailer/cli examples, Socket.IO signals
6
- ---
7
-
8
- # API Documentation Patterns
9
-
10
- ## Research Workflow
11
-
12
- Before documenting any endpoint, follow this research sequence:
13
-
14
- ### 1. Find Test Usage
15
-
16
- ```bash
17
- # Search test files for endpoint usage
18
- grep -n -A 10 -B 5 "endpoint.name" test/test-*.ts
19
-
20
- # Example
21
- grep -n -A 10 "v3.activity.archive" test/test-api-activities.ts
22
- ```
23
-
24
- ### 2. Find Implementation
25
-
26
- ```bash
27
- # RPC endpoints (v2, v3)
28
- grep -n -A 30 "_endpointName.*{" src/api/v3/
29
- grep -n -A 30 "endpointName: async" src/modules/
30
-
31
- # REST endpoints
32
- grep -n -A 30 "router\.(get|post|put|delete)" src/route-*.ts
33
- ```
34
-
35
- ### 3. Extract Validation Schemas
36
-
37
- ```bash
38
- # Find Joi validation
39
- grep -n -A 15 "validate.*req.*context" src/api/v3/
40
- grep -n -A 10 "Joi.object" src/api/v3/
41
- ```
42
-
43
- ### 4. Find Socket.IO Signals
44
-
45
- ```bash
46
- # Find signal broadcasts
47
- grep -n "broadcastCompany\|broadcastUsers" src/
48
- grep -n -A 5 "sig.*:" src/modules/
49
- ```
50
-
51
- ### 5. Check Permissions
52
-
53
- ```bash
54
- # Find permission checks
55
- grep -n "permission\|requireAuth\|checkAccess" src/api/v3/
56
- ```
57
-
58
- ---
59
-
60
- ## Required Documentation Structure
61
-
62
- Every endpoint MUST have these 10 sections in order:
63
-
64
- ### Section 1: Title and Description
65
-
66
- ```markdown
67
- # v3.activity.archive
68
-
69
- Archives one or more activities, removing them from active workflow views while preserving all data for compliance, reporting, and potential restoration.
70
-
71
- **Use Cases:**
72
- - Clean up completed project activities
73
- - Archive old records for compliance
74
- - Remove activities from active views without data loss
75
- ```
76
-
77
- ### Section 2: Understanding Context
78
-
79
- ```markdown
80
- ## Understanding Activity Archiving
81
-
82
- Archiving is a **soft-delete** operation in Hailer:
83
-
84
- - **Preserved**: All activity data, field values, history, and attachments remain intact
85
- - **Hidden**: Archived activities don't appear in standard workflow views
86
- - **Restorable**: Admin users can restore archived activities at any time
87
- - **Queryable**: Archived activities can still be included in insights with special filters
88
-
89
- ### Archive vs Delete
90
-
91
- | Operation | Data Preserved | Restorable | Appears in Views |
92
- |-----------|---------------|------------|------------------|
93
- | Archive | Yes | Yes | No (by default) |
94
- | Delete | No | No | No |
95
- ```
96
-
97
- ### Section 3: Prerequisites
98
-
99
- ```markdown
100
- ## Prerequisites
101
-
102
- ### Authentication
103
- - Valid session token required
104
- - User must be logged in
105
-
106
- ### Permissions
107
- One of the following:
108
- - `admin` workflow permission
109
- - `any` workflow permission
110
- - `own` permission AND activity owner
111
-
112
- ### Activity State
113
- - Activity must exist
114
- - Activity must not already be archived
115
- ```
116
-
117
- ### Section 4: Request Parameters
118
-
119
- ```markdown
120
- ## Request Parameters
121
-
122
- | Parameter | Type | Required | Description |
123
- |-----------|------|----------|-------------|
124
- | `activityIds` | string[] | Yes | Array of activity IDs to archive (max 100) |
125
- | `options` | object | No | Additional options |
126
- | `options.archiveLinked` | boolean | No | Also archive linked activities (default: false) |
127
- | `options.reason` | string | No | Archive reason for audit log |
128
-
129
- ### Parameter Details
130
-
131
- **activityIds**
132
- - Must be valid MongoDB ObjectIds
133
- - Maximum 100 activities per request
134
- - All activities must be in same workspace
135
-
136
- **options.archiveLinked**
137
- - When true, also archives activities linked TO these activities
138
- - Does not archive activities that link FROM these activities
139
- ```
140
-
141
- ### Section 5: Response Structure
142
-
143
- ```markdown
144
- ## Response Structure
145
-
146
- ### Success Response
147
-
148
- ```json
149
- {
150
- "archived": ["64a1b2c3d4e5f6a7b8c9d0e1", "64a1b2c3d4e5f6a7b8c9d0e2"],
151
- "failed": [],
152
- "count": 2
153
- }
154
- ```
155
-
156
- ### Partial Success Response
157
-
158
- ```json
159
- {
160
- "archived": ["64a1b2c3d4e5f6a7b8c9d0e1"],
161
- "failed": [
162
- {
163
- "activityId": "64a1b2c3d4e5f6a7b8c9d0e2",
164
- "reason": "Permission denied"
165
- }
166
- ],
167
- "count": 1
168
- }
169
- ```
170
-
171
- | Field | Type | Description |
172
- |-------|------|-------------|
173
- | `archived` | string[] | IDs of successfully archived activities |
174
- | `failed` | object[] | Activities that failed with reasons |
175
- | `count` | number | Number of successfully archived activities |
176
- ```
177
-
178
- ### Section 6: Examples (ALL 4 REQUIRED)
179
-
180
- ```markdown
181
- ## Examples
182
-
183
- ### Basic Usage
184
-
185
- ```javascript
186
- // Archive single activity
187
- const result = await client.request('v3.activity.archive', [
188
- ['64a1b2c3d4e5f6a7b8c9d0e1']
189
- ]);
190
- console.log(`Archived ${result.count} activities`);
191
-
192
- // Archive multiple activities
193
- const result = await client.request('v3.activity.archive', [
194
- ['64a1b2c3d4e5f6a7b8c9d0e1', '64a1b2c3d4e5f6a7b8c9d0e2']
195
- ]);
196
- ```
197
-
198
- ### Simplified Function
199
-
200
- ```javascript
201
- // Direct call syntax
202
- const result = v3.activity.archive(['activity_id_1', 'activity_id_2']);
203
- ```
204
-
205
- ### Complete Implementation
206
-
207
- ```javascript
208
- class ActivityArchiver {
209
- constructor(client) {
210
- this.client = client;
211
- }
212
-
213
- async archiveActivities(activityIds, options = {}) {
214
- // Validate input
215
- if (!activityIds || activityIds.length === 0) {
216
- throw new Error('At least one activity ID required');
217
- }
218
-
219
- if (activityIds.length > 100) {
220
- throw new Error('Maximum 100 activities per request');
221
- }
222
-
223
- try {
224
- const result = await this.client.request('v3.activity.archive', [
225
- activityIds,
226
- options
227
- ]);
228
-
229
- // Log results
230
- console.log(`Archived: ${result.archived.length}`);
231
-
232
- if (result.failed.length > 0) {
233
- console.warn('Some activities failed to archive:');
234
- result.failed.forEach(f => {
235
- console.warn(` - ${f.activityId}: ${f.reason}`);
236
- });
237
- }
238
-
239
- return result;
240
- } catch (error) {
241
- this.handleError(error);
242
- throw error;
243
- }
244
- }
245
-
246
- handleError(error) {
247
- switch (error.code) {
248
- case 'NotFound':
249
- console.error('One or more activities not found');
250
- break;
251
- case 'PermissionDenied':
252
- console.error('Insufficient permissions to archive');
253
- break;
254
- case 'InvalidArguments':
255
- console.error('Invalid activity IDs provided');
256
- break;
257
- default:
258
- console.error('Archive operation failed:', error.message);
259
- }
260
- }
261
- }
262
-
263
- // Usage
264
- const archiver = new ActivityArchiver(client);
265
- await archiver.archiveActivities(['id1', 'id2'], { reason: 'Project completed' });
266
- ```
267
-
268
- ### Integration Example
269
-
270
- ```javascript
271
- // Archive all completed activities older than 90 days
272
- async function archiveOldCompletedActivities(client, workflowId, completedPhaseId) {
273
- const ninetyDaysAgo = Date.now() - (90 * 24 * 60 * 60 * 1000);
274
-
275
- // Get old completed activities
276
- const activities = await client.request('v3.activity.list', [{
277
- processId: workflowId,
278
- phaseId: completedPhaseId,
279
- filter: {
280
- updated: { $lt: ninetyDaysAgo }
281
- },
282
- limit: 100
283
- }]);
284
-
285
- if (activities.length === 0) {
286
- console.log('No activities to archive');
287
- return;
288
- }
289
-
290
- // Archive them
291
- const ids = activities.map(a => a._id);
292
- const result = await client.request('v3.activity.archive', [
293
- ids,
294
- { reason: 'Auto-archive: >90 days in completed phase' }
295
- ]);
296
-
297
- console.log(`Archived ${result.count} old activities`);
298
- return result;
299
- }
300
- ```
301
- ```
302
-
303
- ### Section 7: Error Responses
304
-
305
- ```markdown
306
- ## Error Responses
307
-
308
- ### Activity Not Found
309
-
310
- ```json
311
- {
312
- "code": "NotFound",
313
- "message": "Activity not found: 64a1b2c3d4e5f6a7b8c9d0e1"
314
- }
315
- ```
316
-
317
- ### Permission Denied
318
-
319
- ```json
320
- {
321
- "code": "PermissionDenied",
322
- "message": "Insufficient permissions to archive activity"
323
- }
324
- ```
325
-
326
- ### Invalid Arguments
327
-
328
- ```json
329
- {
330
- "code": "InvalidArguments",
331
- "message": "activityIds must be an array of valid ObjectIds"
332
- }
333
- ```
334
-
335
- ### Already Archived
336
-
337
- ```json
338
- {
339
- "code": "Failed",
340
- "message": "Activity is already archived"
341
- }
342
- ```
343
- ```
344
-
345
- ### Section 8: Technical Sections
346
-
347
- ```markdown
348
- ## Socket.IO Signals
349
-
350
- This endpoint emits the following real-time signals:
351
-
352
- ### activities.archived
353
-
354
- Emitted to all workspace members with view access.
355
-
356
- ```json
357
- {
358
- "sig": "activities.archived",
359
- "meta": {
360
- "activityIds": ["64a1b2c3d4e5f6a7b8c9d0e1"],
361
- "processId": "64a1b2c3d4e5f6a7b8c9d0e3",
362
- "archivedBy": "64a1b2c3d4e5f6a7b8c9d0e4",
363
- "timestamp": 1730937600000
364
- }
365
- }
366
- ```
367
-
368
- ## Performance Considerations
369
-
370
- - **Batch size**: Maximum 100 activities per request
371
- - **Large archives**: Use pagination for >1000 activities
372
- - **Linked activities**: `archiveLinked: true` may increase processing time
373
- - **Indexes**: Archive queries are optimized via `archived` field index
374
-
375
- ## Security Considerations
376
-
377
- - All archive operations are logged in activity history
378
- - Archive reason is stored for audit purposes
379
- - Only admin users can restore archived activities
380
- - Archived data remains subject to data retention policies
381
- ```
382
-
383
- ### Section 9: Notes
384
-
385
- ```markdown
386
- ## Notes
387
-
388
- - Archived activities are **excluded from insights by default** - use `includeArchived: true` filter
389
- - The `activities.archived` signal is emitted to update connected clients
390
- - Archiving is **reversible** via `v3.activity.restore` (admin only)
391
- - Archive operations are **atomic** - partial failures don't affect successful archives
392
- - Archived activities still count toward workspace storage limits
393
- ```
394
-
395
- ### Section 10: Related Endpoints
396
-
397
- ```markdown
398
- ## Related Endpoints
399
-
400
- - [v3.activity.restore](v3.activity.restore.md) - Restore archived activities
401
- - [v3.activity.delete](v3.activity.delete.md) - Permanently delete activities
402
- - [v3.activity.list](v3.activity.list.md) - List activities (supports archive filter)
403
- - [v3.activity.get](v3.activity.get.md) - Get single activity (works on archived)
404
- ```
405
-
406
- ---
407
-
408
- ## Forbidden Patterns
409
-
410
- NEVER include these in documentation:
411
-
412
- ### Raw Socket.io
413
-
414
- ```javascript
415
- // WRONG - Never show raw socket calls
416
- socket.emit('v3.activity.archive', [ids], callback);
417
- ```
418
-
419
- ### Raw HTTP/Fetch
420
-
421
- ```javascript
422
- // WRONG - Never show raw HTTP
423
- fetch('/api/v3.activity.archive', {
424
- method: 'POST',
425
- body: JSON.stringify({ args: [ids] })
426
- });
427
- ```
428
-
429
- ### Framework-Specific Code
430
-
431
- ```javascript
432
- // WRONG - No React, Vue, Angular examples
433
- function useArchive() {
434
- const [loading, setLoading] = useState(false);
435
- // ...
436
- }
437
- ```
438
-
439
- ### Raw JSON-RPC
440
-
441
- ```json
442
- // WRONG - No raw protocol format
443
- {
444
- "method": "v3.activity.archive",
445
- "args": [["id1", "id2"]]
446
- }
447
- ```
448
-
449
- ---
450
-
451
- ## Quality Checklist
452
-
453
- Before marking documentation complete:
454
-
455
- **Content:**
456
- - [ ] All 10 sections present in correct order
457
- - [ ] All 4 example patterns included
458
- - [ ] Socket.IO signals documented (if applicable)
459
- - [ ] Complete parameter table with types
460
- - [ ] Error responses with JSON examples
461
- - [ ] Related endpoints listed
462
-
463
- **Research:**
464
- - [ ] Found test file usage examples
465
- - [ ] Located implementation code
466
- - [ ] Extracted Joi validation schemas
467
- - [ ] Identified Socket.IO signals
468
- - [ ] Documented permission requirements
469
-
470
- **Quality:**
471
- - [ ] Uses ONLY @hailer/cli patterns
472
- - [ ] No framework-specific examples
473
- - [ ] No raw Socket.io or HTTP examples
474
- - [ ] Consistent formatting throughout