@hailer/mcp 1.1.11 → 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.
- package/dist/app.js +18 -5
- package/dist/bot/bot-config.d.ts +12 -1
- package/dist/bot/bot-config.js +98 -14
- package/dist/bot/bot-manager.d.ts +13 -3
- package/dist/bot/bot-manager.js +80 -25
- package/dist/bot/bot.d.ts +46 -0
- package/dist/bot/bot.js +542 -166
- package/dist/bot/services/message-classifier.js +17 -0
- package/dist/bot/services/permission-guard.d.ts +52 -0
- package/dist/bot/services/permission-guard.js +149 -0
- package/dist/bot/services/types.d.ts +5 -0
- package/dist/bot/services/typing-indicator.d.ts +6 -1
- package/dist/bot/services/typing-indicator.js +19 -3
- package/dist/config.d.ts +6 -1
- package/dist/config.js +43 -0
- package/dist/core.js +3 -6
- package/dist/mcp/UserContextCache.d.ts +5 -0
- package/dist/mcp/UserContextCache.js +51 -19
- package/dist/mcp/hailer-clients.d.ts +19 -1
- package/dist/mcp/hailer-clients.js +157 -20
- package/dist/mcp/session-store.d.ts +68 -0
- package/dist/mcp/session-store.js +169 -0
- package/dist/mcp/signal-handler.js +12 -12
- package/dist/mcp/tool-registry.d.ts +17 -4
- package/dist/mcp/tool-registry.js +37 -7
- package/dist/mcp/tools/activity.js +99 -7
- package/dist/mcp/tools/app-scaffold.js +304 -336
- package/dist/mcp/tools/company.d.ts +9 -0
- package/dist/mcp/tools/company.js +88 -0
- package/dist/mcp/tools/discussion.js +68 -0
- package/dist/mcp/tools/workflow-permissions.d.ts +15 -0
- package/dist/mcp/tools/workflow-permissions.js +204 -0
- package/dist/mcp/tools/workflow.js +57 -18
- package/dist/mcp/utils/index.d.ts +2 -0
- package/dist/mcp/utils/index.js +12 -1
- package/dist/mcp/utils/role-utils.d.ts +74 -0
- package/dist/mcp/utils/role-utils.js +151 -0
- package/dist/mcp/utils/types.d.ts +43 -1
- package/dist/mcp/utils/types.js +14 -0
- package/dist/mcp/webhook-handler.d.ts +6 -0
- package/dist/mcp/webhook-handler.js +11 -0
- package/dist/mcp-server.d.ts +23 -2
- package/dist/mcp-server.js +639 -111
- package/dist/plugins/vipunen/client.d.ts +150 -0
- package/dist/plugins/vipunen/client.js +535 -0
- package/dist/plugins/vipunen/config/schema-config.json +19 -0
- package/dist/plugins/vipunen/config/schema-doc.json +22 -0
- package/dist/plugins/vipunen/index.d.ts +41 -0
- package/dist/plugins/vipunen/index.js +88 -0
- package/dist/plugins/vipunen/tools.d.ts +26 -0
- package/dist/plugins/vipunen/tools.js +501 -0
- package/package.json +2 -1
- package/.claude/.context-watchdog.json +0 -1
- package/.claude/.session-checked +0 -1
- package/.claude/CLAUDE.md +0 -370
- package/.claude/agents/agent-ada-skill-builder.md +0 -94
- package/.claude/agents/agent-alejandro-function-fields.md +0 -342
- package/.claude/agents/agent-bjorn-config-audit.md +0 -103
- package/.claude/agents/agent-builder-agent-creator.md +0 -130
- package/.claude/agents/agent-code-simplifier.md +0 -53
- package/.claude/agents/agent-dmitri-activity-crud.md +0 -159
- package/.claude/agents/agent-giuseppe-app-builder.md +0 -247
- package/.claude/agents/agent-gunther-mcp-tools.md +0 -39
- package/.claude/agents/agent-helga-workflow-config.md +0 -204
- package/.claude/agents/agent-igor-activity-mover-automation.md +0 -125
- package/.claude/agents/agent-ingrid-doc-templates.md +0 -261
- package/.claude/agents/agent-ivan-monolith.md +0 -154
- package/.claude/agents/agent-kenji-data-reader.md +0 -86
- package/.claude/agents/agent-lars-code-inspector.md +0 -102
- package/.claude/agents/agent-marco-mockup-builder.md +0 -110
- package/.claude/agents/agent-marcus-api-documenter.md +0 -323
- package/.claude/agents/agent-marketplace-publisher.md +0 -280
- package/.claude/agents/agent-marketplace-reviewer.md +0 -309
- package/.claude/agents/agent-permissions-handler.md +0 -208
- package/.claude/agents/agent-simple-writer.md +0 -48
- package/.claude/agents/agent-svetlana-code-review.md +0 -171
- package/.claude/agents/agent-tanya-test-runner.md +0 -333
- package/.claude/agents/agent-ui-designer.md +0 -100
- package/.claude/agents/agent-viktor-sql-insights.md +0 -212
- package/.claude/agents/agent-web-search.md +0 -55
- package/.claude/agents/agent-yevgeni-discussions.md +0 -45
- package/.claude/agents/agent-zara-zapier.md +0 -159
- package/.claude/commands/app-squad.md +0 -135
- package/.claude/commands/audit-squad.md +0 -158
- package/.claude/commands/autoplan.md +0 -563
- package/.claude/commands/cleanup-squad.md +0 -98
- package/.claude/commands/config-squad.md +0 -106
- package/.claude/commands/crud-squad.md +0 -87
- package/.claude/commands/data-squad.md +0 -97
- package/.claude/commands/debug-squad.md +0 -303
- package/.claude/commands/doc-squad.md +0 -65
- package/.claude/commands/handoff.md +0 -137
- package/.claude/commands/health.md +0 -49
- package/.claude/commands/help.md +0 -29
- package/.claude/commands/help:agents.md +0 -151
- package/.claude/commands/help:commands.md +0 -78
- package/.claude/commands/help:faq.md +0 -79
- package/.claude/commands/help:plugins.md +0 -50
- package/.claude/commands/help:skills.md +0 -93
- package/.claude/commands/help:tools.md +0 -75
- package/.claude/commands/hotfix-squad.md +0 -112
- package/.claude/commands/integration-squad.md +0 -82
- package/.claude/commands/janitor-squad.md +0 -167
- package/.claude/commands/learn-auto.md +0 -120
- package/.claude/commands/learn.md +0 -120
- package/.claude/commands/mcp-list.md +0 -27
- package/.claude/commands/onboard-squad.md +0 -140
- package/.claude/commands/plan-workspace.md +0 -732
- package/.claude/commands/prd.md +0 -130
- package/.claude/commands/project-status.md +0 -82
- package/.claude/commands/publish.md +0 -138
- package/.claude/commands/recap.md +0 -69
- package/.claude/commands/restore.md +0 -64
- package/.claude/commands/review-squad.md +0 -152
- package/.claude/commands/save.md +0 -24
- package/.claude/commands/stats.md +0 -19
- package/.claude/commands/swarm.md +0 -210
- package/.claude/commands/tool-builder.md +0 -39
- package/.claude/commands/ws-pull.md +0 -44
- package/.claude/hooks/_shared-memory.cjs +0 -305
- package/.claude/hooks/_utils.cjs +0 -108
- package/.claude/hooks/agent-failure-detector.cjs +0 -383
- package/.claude/hooks/agent-usage-logger.cjs +0 -204
- package/.claude/hooks/app-edit-guard.cjs +0 -494
- package/.claude/hooks/auto-learn.cjs +0 -304
- package/.claude/hooks/bash-guard.cjs +0 -272
- package/.claude/hooks/builder-mode-manager.cjs +0 -354
- package/.claude/hooks/bulk-activity-guard.cjs +0 -271
- package/.claude/hooks/context-watchdog.cjs +0 -230
- package/.claude/hooks/delegation-reminder.cjs +0 -465
- package/.claude/hooks/design-system-lint.cjs +0 -271
- package/.claude/hooks/post-scaffold-hook.cjs +0 -181
- package/.claude/hooks/prompt-guard.cjs +0 -354
- package/.claude/hooks/publish-template-guard.cjs +0 -147
- package/.claude/hooks/session-start.cjs +0 -35
- package/.claude/hooks/shared-memory-writer.cjs +0 -147
- package/.claude/hooks/skill-injector.cjs +0 -140
- package/.claude/hooks/skill-usage-logger.cjs +0 -258
- package/.claude/hooks/src-edit-guard.cjs +0 -240
- package/.claude/hooks/sync-marketplace-agents.cjs +0 -346
- package/.claude/settings.json +0 -257
- package/.claude/skills/SDK-activity-patterns/SKILL.md +0 -428
- package/.claude/skills/SDK-document-templates/SKILL.md +0 -1033
- package/.claude/skills/SDK-function-fields/SKILL.md +0 -542
- package/.claude/skills/SDK-generate-skill/SKILL.md +0 -92
- package/.claude/skills/SDK-init-skill/SKILL.md +0 -127
- package/.claude/skills/SDK-insight-queries/SKILL.md +0 -787
- package/.claude/skills/SDK-ws-config-skill/SKILL.md +0 -1139
- package/.claude/skills/agent-structure/SKILL.md +0 -98
- package/.claude/skills/api-documentation-patterns/SKILL.md +0 -474
- package/.claude/skills/chrome-mcp-reference/SKILL.md +0 -370
- package/.claude/skills/delegation-routing/SKILL.md +0 -202
- package/.claude/skills/frontend-design/SKILL.md +0 -254
- package/.claude/skills/hailer-activity-mover/SKILL.md +0 -213
- package/.claude/skills/hailer-api-client/SKILL.md +0 -518
- package/.claude/skills/hailer-app-builder/SKILL.md +0 -1434
- package/.claude/skills/hailer-apps-pictures/SKILL.md +0 -269
- package/.claude/skills/hailer-design-system/SKILL.md +0 -235
- package/.claude/skills/hailer-monolith-automations/SKILL.md +0 -686
- package/.claude/skills/hailer-permissions-system/SKILL.md +0 -121
- package/.claude/skills/hailer-project-protocol/SKILL.md +0 -488
- package/.claude/skills/hailer-rest-api/SKILL.md +0 -61
- package/.claude/skills/hailer-rest-api/hailer-activities.md +0 -184
- package/.claude/skills/hailer-rest-api/hailer-admin.md +0 -473
- package/.claude/skills/hailer-rest-api/hailer-calendar.md +0 -256
- package/.claude/skills/hailer-rest-api/hailer-feed.md +0 -249
- package/.claude/skills/hailer-rest-api/hailer-insights.md +0 -195
- package/.claude/skills/hailer-rest-api/hailer-messaging.md +0 -276
- package/.claude/skills/hailer-rest-api/hailer-workflows.md +0 -283
- package/.claude/skills/insight-join-patterns/SKILL.md +0 -174
- package/.claude/skills/integration-patterns/SKILL.md +0 -421
- package/.claude/skills/json-only-output/SKILL.md +0 -72
- package/.claude/skills/lsp-setup/SKILL.md +0 -160
- package/.claude/skills/mcp-direct-tools/SKILL.md +0 -153
- package/.claude/skills/optional-parameters/SKILL.md +0 -72
- package/.claude/skills/publish-hailer-app/SKILL.md +0 -244
- package/.claude/skills/testing-patterns/SKILL.md +0 -630
- package/.claude/skills/tool-builder/SKILL.md +0 -250
- package/.claude/skills/tool-parameter-usage/SKILL.md +0 -126
- package/.claude/skills/tool-response-verification/SKILL.md +0 -92
- package/.claude/skills/zapier-hailer-patterns/SKILL.md +0 -581
- package/.hailer-mcp-port +0 -1
- package/.mcp.json +0 -13
- package/.opencode/agent/agent-ada-skill-builder.md +0 -35
- package/.opencode/agent/agent-alejandro-function-fields.md +0 -39
- package/.opencode/agent/agent-bjorn-config-audit.md +0 -36
- package/.opencode/agent/agent-builder-agent-creator.md +0 -39
- package/.opencode/agent/agent-code-simplifier.md +0 -31
- package/.opencode/agent/agent-dmitri-activity-crud.md +0 -40
- package/.opencode/agent/agent-giuseppe-app-builder.md +0 -37
- package/.opencode/agent/agent-gunther-mcp-tools.md +0 -39
- package/.opencode/agent/agent-helga-workflow-config.md +0 -204
- package/.opencode/agent/agent-igor-activity-mover-automation.md +0 -46
- package/.opencode/agent/agent-ingrid-doc-templates.md +0 -39
- package/.opencode/agent/agent-ivan-monolith.md +0 -46
- package/.opencode/agent/agent-kenji-data-reader.md +0 -53
- package/.opencode/agent/agent-lars-code-inspector.md +0 -28
- package/.opencode/agent/agent-marco-mockup-builder.md +0 -42
- package/.opencode/agent/agent-marcus-api-documenter.md +0 -53
- package/.opencode/agent/agent-marketplace-publisher.md +0 -44
- package/.opencode/agent/agent-marketplace-reviewer.md +0 -42
- package/.opencode/agent/agent-permissions-handler.md +0 -50
- package/.opencode/agent/agent-simple-writer.md +0 -45
- package/.opencode/agent/agent-svetlana-code-review.md +0 -39
- package/.opencode/agent/agent-tanya-test-runner.md +0 -57
- package/.opencode/agent/agent-ui-designer.md +0 -56
- package/.opencode/agent/agent-viktor-sql-insights.md +0 -34
- package/.opencode/agent/agent-web-search.md +0 -42
- package/.opencode/agent/agent-yevgeni-discussions.md +0 -37
- package/.opencode/agent/agent-zara-zapier.md +0 -53
- package/.opencode/commands/app-squad.md +0 -135
- package/.opencode/commands/audit-squad.md +0 -158
- package/.opencode/commands/autoplan.md +0 -563
- package/.opencode/commands/cleanup-squad.md +0 -98
- package/.opencode/commands/config-squad.md +0 -106
- package/.opencode/commands/crud-squad.md +0 -87
- package/.opencode/commands/data-squad.md +0 -97
- package/.opencode/commands/debug-squad.md +0 -303
- package/.opencode/commands/doc-squad.md +0 -65
- package/.opencode/commands/handoff.md +0 -137
- package/.opencode/commands/health.md +0 -49
- package/.opencode/commands/help-agents.md +0 -151
- package/.opencode/commands/help-commands.md +0 -32
- package/.opencode/commands/help-faq.md +0 -29
- package/.opencode/commands/help-plugins.md +0 -28
- package/.opencode/commands/help-skills.md +0 -7
- package/.opencode/commands/help-tools.md +0 -40
- package/.opencode/commands/help.md +0 -28
- package/.opencode/commands/hotfix-squad.md +0 -112
- package/.opencode/commands/integration-squad.md +0 -82
- package/.opencode/commands/janitor-squad.md +0 -167
- package/.opencode/commands/learn-auto.md +0 -120
- package/.opencode/commands/learn.md +0 -120
- package/.opencode/commands/mcp-list.md +0 -27
- package/.opencode/commands/onboard-squad.md +0 -140
- package/.opencode/commands/plan-workspace.md +0 -732
- package/.opencode/commands/prd.md +0 -131
- package/.opencode/commands/project-status.md +0 -82
- package/.opencode/commands/publish.md +0 -138
- package/.opencode/commands/recap.md +0 -69
- package/.opencode/commands/restore.md +0 -64
- package/.opencode/commands/review-squad.md +0 -152
- package/.opencode/commands/save.md +0 -24
- package/.opencode/commands/stats.md +0 -19
- package/.opencode/commands/swarm.md +0 -210
- package/.opencode/commands/tool-builder.md +0 -39
- package/.opencode/commands/ws-pull.md +0 -44
- package/.opencode/opencode.json +0 -21
- package/inbox/failures.log +0 -1
- package/inbox/usage.jsonl +0 -4
- package/scripts/postinstall.cjs +0 -64
- 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
|