@hailer/mcp 1.3.14 → 1.3.23
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/.claude/skills/create-and-publish-app/SKILL.md +44 -56
- package/.claude/skills/hailer-app-builder/SKILL.md +414 -970
- package/.claude/skills/hailer-app-primitives/SKILL.md +742 -0
- package/.claude/skills/hailer-apps-pictures/SKILL.md +191 -87
- package/.claude/skills/hailer-design-patterns/SKILL.md +317 -0
- package/.claude/skills/hailer-design-system/SKILL.md +202 -149
- package/.claude/skills/hailer-workflow-archetypes/SKILL.md +301 -0
- package/.claude/skills/insight-join-patterns/SKILL.md +313 -0
- package/.claude/skills/publish-hailer-app/SKILL.md +211 -0
- package/.claude/skills/sdk-activity-patterns/SKILL.md +257 -105
- package/.claude/skills/sdk-function-fields/SKILL.md +253 -492
- package/.claude/skills/sdk-insight-calculations/SKILL.md +364 -0
- package/.claude/skills/sdk-insight-queries/SKILL.md +192 -397
- package/.claude/skills/sdk-ws-config-skill/SKILL.md +265 -720
- package/.claude/skills/tool-response-verification/SKILL.md +143 -0
- package/CLAUDE.md +50 -19
- package/dist/bot/bot.d.ts.map +1 -1
- package/dist/bot/bot.js +26 -34
- package/dist/bot/bot.js.map +1 -1
- package/dist/bot/services/helper-prompt.d.ts +1 -1
- package/dist/bot/services/helper-prompt.d.ts.map +1 -1
- package/dist/bot/services/helper-prompt.js +62 -82
- package/dist/bot/services/helper-prompt.js.map +1 -1
- package/dist/bot/services/system-prompt.js +4 -4
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +6 -0
- package/dist/config.js.map +1 -1
- package/dist/mcp/hailer-rpc.d.ts +1 -0
- package/dist/mcp/hailer-rpc.d.ts.map +1 -1
- package/dist/mcp/hailer-rpc.js +4 -0
- package/dist/mcp/hailer-rpc.js.map +1 -1
- package/dist/mcp/tools/activity.d.ts.map +1 -1
- package/dist/mcp/tools/activity.js +8 -2
- package/dist/mcp/tools/activity.js.map +1 -1
- package/dist/mcp/tools/app-core.d.ts.map +1 -1
- package/dist/mcp/tools/app-core.js +6 -3
- package/dist/mcp/tools/app-core.js.map +1 -1
- package/dist/mcp/tools/app-marketplace.d.ts.map +1 -1
- package/dist/mcp/tools/app-marketplace.js +5 -1
- package/dist/mcp/tools/app-marketplace.js.map +1 -1
- package/dist/mcp/webhook-handler.d.ts.map +1 -1
- package/dist/mcp/webhook-handler.js +27 -0
- package/dist/mcp/webhook-handler.js.map +1 -1
- package/dist/public-chat/graduate.d.ts.map +1 -1
- package/dist/public-chat/graduate.js +153 -53
- package/dist/public-chat/graduate.js.map +1 -1
- package/dist/public-chat/rate-limit.js +1 -1
- package/dist/public-chat/rate-limit.js.map +1 -1
- package/dist/public-chat/studio-prewarm.js +2 -2
- package/dist/public-chat/studio-prewarm.js.map +1 -1
- package/dist/public-chat/system-prompt.d.ts.map +1 -1
- package/dist/public-chat/system-prompt.js +41 -25
- package/dist/public-chat/system-prompt.js.map +1 -1
- package/package.json +1 -1
- package/.claude/skills/hailer-project-protocol/SKILL.md +0 -398
- package/.opencode/package-lock.json +0 -117
|
@@ -85,26 +85,16 @@ Confidence with humility. "I think this would help because X" — never "you nee
|
|
|
85
85
|
Every reply:
|
|
86
86
|
- 1-3 sentences (the answer)
|
|
87
87
|
- 2-3 numbered options (what to do next)
|
|
88
|
+
- Options are written FROM THE VISITOR'S perspective — as if the visitor is saying it. "I want to see pricing", "Show me sales templates", "I need a project tracker" — NOT "Tell me what you need" or "I'll find templates for you" (that's the bot talking, not the visitor).
|
|
88
89
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
- "Walk me through a typical [deal / project / case / ticket] right now, start to finish. What's painful enough that you're looking?"
|
|
98
|
-
- "How is your team running [sales / projects / support] today? What's the tool stack, and where does it leak?"
|
|
99
|
-
- DO NOT offer a demo, tour, slide deck, or "next move" on turn 1. You don't know enough yet to show them anything specific. Discovery first; demonstration after.
|
|
100
|
-
- DO NOT list multiple options. One reflection + one open discovery question, that's it.
|
|
101
|
-
- DO NOT mention the "Continue in Hailer" button in your first reply. The button is right there in the UI; the first reply earns the visitor's trust by listening, not by selling.
|
|
102
|
-
|
|
103
|
-
1. Show me how it works
|
|
104
|
-
2. I have a specific business need
|
|
105
|
-
3. What makes Hailer different?"
|
|
106
|
-
|
|
107
|
-
NEVER write a reply without numbered options.
|
|
90
|
+
EVERY reply — including the very first one — MUST end with 2-3 numbered options. No exceptions.
|
|
91
|
+
|
|
92
|
+
If the visitor says something generic like "hi", "hello", "hey" — respond with a short welcome and options:
|
|
93
|
+
"Welcome! Hailer is a workspace where your team manages processes, communication, and data in one place. What would you like to do?
|
|
94
|
+
|
|
95
|
+
1. Tell me more about Hailer
|
|
96
|
+
2. I already know what I need
|
|
97
|
+
3. Show me the marketplace"
|
|
108
98
|
|
|
109
99
|
═══ CONVERSATION FLOW ═══
|
|
110
100
|
|
|
@@ -112,6 +102,27 @@ Your goal: introduce Hailer, walk the visitor through key features, discover wha
|
|
|
112
102
|
|
|
113
103
|
At any point the visitor can type their own question — answer it naturally. Remind them regularly (every 2-3 replies) that they can ask anything, not just click buttons. Add a short note like "Feel free to ask anything" or "You can always type your own question" at the end of your reply before the options.
|
|
114
104
|
|
|
105
|
+
TELL ME MORE ABOUT HAILER:
|
|
106
|
+
When the visitor says "Tell me more about Hailer" or similar ("what is Hailer", "how does it work", "show me more"):
|
|
107
|
+
- Give a 3-5 sentence overview covering the key ideas: Hailer replaces scattered tools (CRM, project tracker, chat, spreadsheets) with one workspace. Workflows model your processes with phases and fields. Every record has its own discussion thread so context stays with the work. There's a marketplace with ready-made templates you can install and customize. Apps and AI agents extend the platform.
|
|
108
|
+
- ALWAYS end with this exact sentence before the options: "Want to see it in action? Click 'Take a tour' in the top left corner — it walks you through the main features step by step."
|
|
109
|
+
- Offer numbered options:
|
|
110
|
+
1. I already know what I need
|
|
111
|
+
2. Show me the marketplace
|
|
112
|
+
|
|
113
|
+
Do NOT navigate anywhere. Do NOT launch a tour yourself. The tour button in the UI handles it.
|
|
114
|
+
|
|
115
|
+
SHOW ME THE MARKETPLACE:
|
|
116
|
+
When the visitor says "Show me the marketplace" or similar:
|
|
117
|
+
- Navigate to apps page: <bot-action type="navigate" target="apps" />
|
|
118
|
+
- In your reply text, tell them they can browse what's there OR describe what they need and you'll search for matching templates.
|
|
119
|
+
- Offer concrete category options — NOT generic "I'm looking for a specific solution":
|
|
120
|
+
1. Sales pipeline
|
|
121
|
+
2. Project tracker
|
|
122
|
+
3. HR & onboarding
|
|
123
|
+
4. Customer support
|
|
124
|
+
- The message text already invites them to type freely, so no need for a catch-all option.
|
|
125
|
+
|
|
115
126
|
SHORTCUT — DIRECT BUSINESS NEED:
|
|
116
127
|
If the visitor says "I already know what I need" or mentions their business, industry, or specific need at ANY point (e.g. "I run a construction company", "we need a sales pipeline", "I'm looking for project management", "HR tool for my team"), respond with a short question and concrete options.
|
|
117
128
|
|
|
@@ -139,7 +150,7 @@ Example for "I run a construction company":
|
|
|
139
150
|
2. Crew scheduling and management
|
|
140
151
|
3. Invoicing and billing"
|
|
141
152
|
|
|
142
|
-
When they pick a specific option → do marketplace-search with TOOL keywords (not industry name) + navigate to apps.
|
|
153
|
+
When they pick a specific option → do marketplace-search with TOOL keywords (not industry name) + ALWAYS navigate to apps (the marketplace page). NEVER navigate to workflow-list or kanban when showing marketplace results.
|
|
143
154
|
|
|
144
155
|
` +
|
|
145
156
|
// Scripted tour STEP 1-6 moved to frontend tour state machine to save output tokens.
|
|
@@ -250,6 +261,7 @@ A bakery doesn't need a "bakery template". They need:
|
|
|
250
261
|
Your job: translate "I'm a [business type]" into 2-3 concrete tool needs, then search for THOSE.
|
|
251
262
|
|
|
252
263
|
Use multiple marketplace-search tags if needed — one per tool category. Use their language, not Hailer jargon.
|
|
264
|
+
ALWAYS include <bot-action type="navigate" target="apps" /> to show the marketplace page. NEVER navigate to workflow-list, kanban, or Data Core when searching for templates.
|
|
253
265
|
|
|
254
266
|
Example for "I'm a plumber":
|
|
255
267
|
"For a plumbing business, you'd want job tracking to manage service calls, a client list to keep customer history, and invoicing to bill when the job's done.
|
|
@@ -259,9 +271,11 @@ Example for "I'm a plumber":
|
|
|
259
271
|
<bot-action type="navigate" target="apps" />
|
|
260
272
|
|
|
261
273
|
1. Tell me more about how job tracking works
|
|
262
|
-
2.
|
|
274
|
+
2. Nothing matched — let me describe what I need
|
|
263
275
|
3. I want to try this"
|
|
264
276
|
|
|
277
|
+
After every marketplace-search, ALWAYS include "Nothing matched — let me describe what I need" as one of the numbered options. The search may return empty results and the visitor needs a way to continue.
|
|
278
|
+
|
|
265
279
|
PRODUCT SELECTED — visitor chose a specific product from the marketplace:
|
|
266
280
|
When you see a message like 'Install the template [name: Product Name] by Publisher in my workspace.' — this means the visitor browsed the marketplace and picked a specific product. The exact product name is inside [name: ...]. This OVERRIDES everything else in the conversation — forget what category they picked before, forget any previous context. Only the product name matters now. Respond:
|
|
267
281
|
1. Say the product name will be installed: "[Product Name] will be installed in your workspace." — nothing else about what it does, what category it is, or how it works. Just the name.
|
|
@@ -304,7 +318,7 @@ You control the center area with navigate tags. Use them to SHOW what you're tal
|
|
|
304
318
|
|
|
305
319
|
DEMO VIEWS — what's on each page and when to show it:
|
|
306
320
|
|
|
307
|
-
workflow-list —
|
|
321
|
+
workflow-list — DEPRECATED, DO NOT USE. This page shows a static placeholder, not real content. To explain workflows, use kanban view instead or just describe in text.
|
|
308
322
|
|
|
309
323
|
kanban — A "Sales Pipeline" board with columns (New, Qualified, Proposal, Won). Cards represent deals/activities. Use when explaining how work moves through phases, or when visitor mentions sales/pipeline/tracking.
|
|
310
324
|
|
|
@@ -362,10 +376,11 @@ Examples:
|
|
|
362
376
|
|
|
363
377
|
═══ SCOPE ═══
|
|
364
378
|
|
|
365
|
-
-
|
|
379
|
+
- You ONLY discuss Hailer and topics directly related to it. Nothing else.
|
|
380
|
+
- If the visitor asks about anything unrelated to Hailer (weather, coding help, math, jokes, other products, general knowledge, personal questions), respond: "I can only help with Hailer-related questions. What would you like to know about the platform?" and offer the standard options.
|
|
381
|
+
- Do NOT answer off-topic questions even partially. Do NOT say "I don't know but..." and then answer anyway. Just redirect to Hailer.
|
|
366
382
|
- Privacy → knowledge base or privacy@hailer.com
|
|
367
383
|
- Want a human? → https://form.hailer.com/846f393a84406e85dbc150ffdfff8352
|
|
368
|
-
- Off-topic → gently redirect
|
|
369
384
|
`;
|
|
370
385
|
const BOT_ACTION_PROTOCOL = `Bot-action tags — embed these in your replies to control the demo UI. The visitor will NOT see the tag text.
|
|
371
386
|
|
|
@@ -378,7 +393,8 @@ Available tags:
|
|
|
378
393
|
<bot-action type="marketplace-search" target="{query}" category="{category}" label="{button text}" />
|
|
379
394
|
Categories: template, app, integration, ai-agent, support. Omit category to search all.
|
|
380
395
|
|
|
381
|
-
Navigate targets:
|
|
396
|
+
Navigate targets: kanban, table, activity-detail, discussions, discussion-detail, feed, calendar, apps
|
|
397
|
+
NOTE: workflow-list is DEPRECATED — do not use it. Use kanban instead to show workflows.
|
|
382
398
|
Rules:
|
|
383
399
|
- Use one or two tags per reply, max — except for guided tours (see below). More than that is noise.
|
|
384
400
|
- ONLY use highlight when the user is asking where something is or how to do something specific. Don't sprinkle them on regular Q&A.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/public-chat/system-prompt.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;
|
|
1
|
+
{"version":3,"file":"system-prompt.js","sourceRoot":"","sources":["../../src/public-chat/system-prompt.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AA4pBH,sDAEC;AA5pBD,2CAA8E;AAQ9E,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyIzB;IACD,qFAAqF;IACrF,yFAAyF;IACzF,yDAAyD;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAuEE;IACF,EAAE,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyJJ,CAAC;AAEF,MAAM,mBAAmB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqF3B;IACD,oFAAoF;IACpF,iGAAiG;IACjG,yDAAyD;IACzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6KE;IACF,EAAE,CAAC;AAEH,MAAM,gBAAgB,GAAG;;CAExB,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,aAAa,GAAwB;IACzC;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,mBAAmB;QACpD,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KACrC;IACD;QACE,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,gBAAgB,GAAG,mCAAuB;QAChD,aAAa,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;KACrC;CACF,CAAC;AAEF,SAAgB,qBAAqB;IACnC,OAAO,aAAa,CAAC;AACvB,CAAC;AAEY,QAAA,eAAe,GAAG,kCAAsB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,398 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: hailer-project-protocol
|
|
3
|
-
description: Complete Hailer project management workflow schemas, field definitions, and protocols for SDK projects
|
|
4
|
-
version: 1.1.0
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# Hailer Project Management Protocol
|
|
8
|
-
|
|
9
|
-
This skill contains the complete Hailer project management workflow schemas, field definitions, and protocols for working with Hailer SDK projects.
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
<critical-rules>
|
|
14
|
-
## Overview
|
|
15
|
-
|
|
16
|
-
Every Hailer workspace uses project management workflows. Claude installs and maintains these automatically using MCP or SDK.
|
|
17
|
-
|
|
18
|
-
**CRITICAL: Real-Time Updates**
|
|
19
|
-
- Update Hailer items IN REAL-TIME as work progresses
|
|
20
|
-
- Do NOT batch updates - update immediately when status changes
|
|
21
|
-
- When completing a task, update Hailer BEFORE moving to next task
|
|
22
|
-
|
|
23
|
-
**Context File Hierarchy**
|
|
24
|
-
1. **SESSION-HANDOFF.md** - Previous session state (read first when resuming)
|
|
25
|
-
2. **DEVELOPMENT.md** - Local backup/snapshot of Hailer state
|
|
26
|
-
3. **Hailer Workflows** - Source of truth for project data
|
|
27
|
-
</critical-rules>
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Workflow 1: Project Planning
|
|
32
|
-
|
|
33
|
-
**Workflow name:** `Project Planning`
|
|
34
|
-
|
|
35
|
-
### Phases (in order)
|
|
36
|
-
1. `Planning`
|
|
37
|
-
2. `In Progress`
|
|
38
|
-
3. `On Hold`
|
|
39
|
-
4. `Completed`
|
|
40
|
-
|
|
41
|
-
### Fields
|
|
42
|
-
|
|
43
|
-
| Field Name | Field Type | Configuration |
|
|
44
|
-
|------------|------------|---------------|
|
|
45
|
-
| Title | Text | - |
|
|
46
|
-
| Description | Long text | - |
|
|
47
|
-
| Type | Predefined options (single) | Options: `Project`, `Feature`, `Session Handoff`, `PRD` |
|
|
48
|
-
| Project | Activity link | Links to: `Project Planning` workflow |
|
|
49
|
-
| Child Features | Linked from | Linked from: `Project Planning` → `Project` field |
|
|
50
|
-
| Dev Tasks | Linked from | Linked from: `Dev Tasks` → `Feature` field |
|
|
51
|
-
| Goal | Long text | - |
|
|
52
|
-
| Documentation | Long text | - |
|
|
53
|
-
| Technical Notes | Long text | - |
|
|
54
|
-
| Blockers | Long text | - |
|
|
55
|
-
| User Stories | Long text | PRD: As a [user], I want [X] so that [Y] |
|
|
56
|
-
| Acceptance Criteria | Long text | PRD: Checklist of "done" conditions |
|
|
57
|
-
| Technical Constraints | Long text | PRD: Performance, security, compatibility |
|
|
58
|
-
| Out of Scope | Long text | PRD: What this feature does NOT include |
|
|
59
|
-
|
|
60
|
-
- **Project**: Features use this to link UP to their parent Project
|
|
61
|
-
- **Child Features**: Automatically shows Features that link to this Project
|
|
62
|
-
- **Dev Tasks**: Automatically shows Tasks/Bugs that link to this Feature
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
## Workflow 2: Dev Tasks
|
|
67
|
-
|
|
68
|
-
**Workflow name:** `Dev Tasks`
|
|
69
|
-
|
|
70
|
-
### Phases (in order)
|
|
71
|
-
1. `Backlog`
|
|
72
|
-
2. `Todo`
|
|
73
|
-
3. `In Progress`
|
|
74
|
-
4. `Review`
|
|
75
|
-
5. `Done`
|
|
76
|
-
|
|
77
|
-
### Fields
|
|
78
|
-
|
|
79
|
-
| Field Name | Field Type | Configuration |
|
|
80
|
-
|------------|------------|---------------|
|
|
81
|
-
| Title | Text | - |
|
|
82
|
-
| Description | Long text | - |
|
|
83
|
-
| Type | Predefined options (single) | Options: `Task`, `Bug`, `Tech Debt` |
|
|
84
|
-
| Priority | Predefined options (single) | Options: `HIGH`, `MEDIUM`, `LOW` |
|
|
85
|
-
| Feature | Activity link | Links to: `Project Planning` workflow |
|
|
86
|
-
| Blocked By | Activity link | Links to: `Dev Tasks` workflow |
|
|
87
|
-
| Blocks | Linked from | Linked from: `Dev Tasks` → `Blocked By` field |
|
|
88
|
-
| Related Items | Activity link | Links to: `Dev Tasks` workflow |
|
|
89
|
-
| Related From | Linked from | Linked from: `Dev Tasks` → `Related Items` field |
|
|
90
|
-
| Files Modified | Text | - |
|
|
91
|
-
| Commits | Text | - |
|
|
92
|
-
|
|
93
|
-
- **Feature**: Links UP to parent Feature in Project Planning
|
|
94
|
-
- **Blocked By**: Links to other Dev Tasks that block this one
|
|
95
|
-
- **Blocks**: Automatically shows Dev Tasks that this task blocks
|
|
96
|
-
- **Related Items**: Links to related Tasks/Bugs (e.g., Bug → Task that caused it)
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
## Protocol: Starting in a Workspace
|
|
101
|
-
|
|
102
|
-
### Step 1: Check for Existing Workflows
|
|
103
|
-
|
|
104
|
-
**AUTOMATIC CREATION: If workflows don't exist, CREATE THEM.**
|
|
105
|
-
|
|
106
|
-
Look for workflows named exactly:
|
|
107
|
-
- `Project Planning`
|
|
108
|
-
- `Dev Tasks`
|
|
109
|
-
|
|
110
|
-
### Step 2: Create Workflows if Missing
|
|
111
|
-
|
|
112
|
-
**This is NOT optional - create them automatically.**
|
|
113
|
-
|
|
114
|
-
Notify user: "Setting up project management workflows for this workspace..."
|
|
115
|
-
|
|
116
|
-
#### Create Project Planning Workflow
|
|
117
|
-
|
|
118
|
-
```typescript
|
|
119
|
-
{
|
|
120
|
-
name: "Project Planning",
|
|
121
|
-
phases: ["Planning", "In Progress", "On Hold", "Completed"],
|
|
122
|
-
fields: [
|
|
123
|
-
{ name: "Title", type: "text" },
|
|
124
|
-
{ name: "Description", type: "textarea" },
|
|
125
|
-
{ name: "Type", type: "textpredefinedoptions", options: ["Project", "Feature", "Session Handoff", "PRD"] },
|
|
126
|
-
{ name: "Project", type: "activitylink", linkedWorkflow: "Project Planning" },
|
|
127
|
-
{ name: "Goal", type: "textarea" },
|
|
128
|
-
{ name: "Documentation", type: "textarea" },
|
|
129
|
-
{ name: "Technical Notes", type: "textarea" },
|
|
130
|
-
{ name: "Blockers", type: "textarea" },
|
|
131
|
-
{ name: "User Stories", type: "textarea" },
|
|
132
|
-
{ name: "Acceptance Criteria", type: "textarea" },
|
|
133
|
-
{ name: "Technical Constraints", type: "textarea" },
|
|
134
|
-
{ name: "Out of Scope", type: "textarea" }
|
|
135
|
-
]
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
#### Create Dev Tasks Workflow
|
|
140
|
-
|
|
141
|
-
```typescript
|
|
142
|
-
{
|
|
143
|
-
name: "Dev Tasks",
|
|
144
|
-
phases: ["Backlog", "Todo", "In Progress", "Review", "Done"],
|
|
145
|
-
fields: [
|
|
146
|
-
{ name: "Title", type: "text" },
|
|
147
|
-
{ name: "Description", type: "textarea" },
|
|
148
|
-
{ name: "Type", type: "textpredefinedoptions", options: ["Task", "Bug", "Tech Debt"] },
|
|
149
|
-
{ name: "Priority", type: "textpredefinedoptions", options: ["HIGH", "MEDIUM", "LOW"] },
|
|
150
|
-
{ name: "Feature", type: "activitylink", linkedWorkflow: "Project Planning" },
|
|
151
|
-
{ name: "Blocked By", type: "activitylink", linkedWorkflow: "Dev Tasks" },
|
|
152
|
-
{ name: "Related Items", type: "activitylink", linkedWorkflow: "Dev Tasks" },
|
|
153
|
-
{ name: "Files Modified", type: "text" },
|
|
154
|
-
{ name: "Commits", type: "text" }
|
|
155
|
-
]
|
|
156
|
-
}
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Step 3: Verify PRD Fields Exist
|
|
160
|
-
|
|
161
|
-
If `Project Planning` workflow exists but is missing PRD fields, ADD THEM:
|
|
162
|
-
- User Stories
|
|
163
|
-
- Acceptance Criteria
|
|
164
|
-
- Technical Constraints
|
|
165
|
-
- Out of Scope
|
|
166
|
-
|
|
167
|
-
### Step 4: Read Current State
|
|
168
|
-
|
|
169
|
-
Before starting work:
|
|
170
|
-
1. Check for SESSION-HANDOFF.md - read if exists (previous session context)
|
|
171
|
-
2. Check for active Project (Type = `Project`, Phase = `In Progress`)
|
|
172
|
-
3. If no Project exists, ask user for project name and create one
|
|
173
|
-
4. Fetch In Progress Features and Tasks
|
|
174
|
-
5. Check for recent Session Handoff (Type = `Session Handoff`)
|
|
175
|
-
6. Summarize state to user
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Protocol: During Development (Real-Time Updates)
|
|
180
|
-
|
|
181
|
-
### Starting New Work
|
|
182
|
-
1. Ensure a Feature exists (Type = `Feature`)
|
|
183
|
-
- Set `Project` field to link to parent Project
|
|
184
|
-
2. Create Task in Dev Tasks (Type = `Task`)
|
|
185
|
-
- Set `Feature` field to link to parent Feature
|
|
186
|
-
3. **IMMEDIATELY** move Task to `In Progress`
|
|
187
|
-
4. Keep only ONE task `In Progress` at a time
|
|
188
|
-
|
|
189
|
-
### Completing Work
|
|
190
|
-
1. **IMMEDIATELY** update Task:
|
|
191
|
-
- `Files Modified`: List changed files
|
|
192
|
-
- `Commits`: Add commit hashes
|
|
193
|
-
2. **IMMEDIATELY** move to `Done`
|
|
194
|
-
3. If new work discovered → create new Tasks in `Backlog`
|
|
195
|
-
|
|
196
|
-
### Finding Bugs
|
|
197
|
-
1. **IMMEDIATELY** create item in Dev Tasks (Type = `Bug`)
|
|
198
|
-
2. Set `Feature` to link to relevant Feature
|
|
199
|
-
3. Set `Priority` based on severity
|
|
200
|
-
4. Optionally set `Related Items` to link to Task that caused it
|
|
201
|
-
|
|
202
|
-
### Blocked Tasks
|
|
203
|
-
1. Set `Blocked By` to link to blocking Task(s)
|
|
204
|
-
2. Update Description with blocker details
|
|
205
|
-
3. When blocker resolved, clear `Blocked By` and continue
|
|
206
|
-
|
|
207
|
-
### Technical Decisions
|
|
208
|
-
Update the Feature's `Technical Notes` field with:
|
|
209
|
-
- Architecture decisions and rationale
|
|
210
|
-
- Important discoveries
|
|
211
|
-
- Trade-offs considered
|
|
212
|
-
|
|
213
|
-
### Documentation
|
|
214
|
-
When feature is complete or stable, update `Documentation` field with:
|
|
215
|
-
- How it works
|
|
216
|
-
- Usage instructions
|
|
217
|
-
- Configuration options
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Protocol: Session Handoff
|
|
222
|
-
|
|
223
|
-
### When to Create
|
|
224
|
-
- Context reaches 70-80%
|
|
225
|
-
- Before ending a long session
|
|
226
|
-
- User requests it
|
|
227
|
-
|
|
228
|
-
### Create Session Handoff Item
|
|
229
|
-
In Project Planning workflow:
|
|
230
|
-
|
|
231
|
-
| Field | Value |
|
|
232
|
-
|-------|-------|
|
|
233
|
-
| Title | `Session Handoff - YYYY-MM-DD HH:MM` |
|
|
234
|
-
| Type | `Session Handoff` |
|
|
235
|
-
| Project | Link to active Project |
|
|
236
|
-
| Phase | `Completed` |
|
|
237
|
-
| Description | See template below |
|
|
238
|
-
| Technical Notes | Key discoveries and decisions |
|
|
239
|
-
| Blockers | Unresolved issues, next steps |
|
|
240
|
-
|
|
241
|
-
**Description template:**
|
|
242
|
-
```
|
|
243
|
-
## Completed This Session
|
|
244
|
-
- [List completed tasks]
|
|
245
|
-
|
|
246
|
-
## In Progress
|
|
247
|
-
- [Current work state]
|
|
248
|
-
|
|
249
|
-
## Next Steps
|
|
250
|
-
- [What to do when resuming]
|
|
251
|
-
```
|
|
252
|
-
|
|
253
|
-
### Local SESSION-HANDOFF.md
|
|
254
|
-
Also create/update `SESSION-HANDOFF.md` in project root:
|
|
255
|
-
|
|
256
|
-
```markdown
|
|
257
|
-
## Session Handoff - YYYY-MM-DD HH:MM
|
|
258
|
-
|
|
259
|
-
### Completed This Session
|
|
260
|
-
- [What was accomplished]
|
|
261
|
-
|
|
262
|
-
### Current State
|
|
263
|
-
- [Work in progress, any partial implementations]
|
|
264
|
-
|
|
265
|
-
### Blockers / Issues Found
|
|
266
|
-
- [Problems encountered, unresolved errors]
|
|
267
|
-
|
|
268
|
-
### Next Steps
|
|
269
|
-
- [Immediate actions for next session]
|
|
270
|
-
|
|
271
|
-
### Key Decisions Made
|
|
272
|
-
- [Important context that shouldn't be lost]
|
|
273
|
-
|
|
274
|
-
### Files Modified
|
|
275
|
-
- [List of changed files with brief description]
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
---
|
|
279
|
-
|
|
280
|
-
## Protocol: Creating Items
|
|
281
|
-
|
|
282
|
-
### New Project
|
|
283
|
-
| Field | Value |
|
|
284
|
-
|-------|-------|
|
|
285
|
-
| Title | Project name (ask user) |
|
|
286
|
-
| Type | `Project` |
|
|
287
|
-
| Phase | `In Progress` |
|
|
288
|
-
| Description | Project overview |
|
|
289
|
-
| Goal | What success looks like |
|
|
290
|
-
|
|
291
|
-
### New Feature
|
|
292
|
-
| Field | Value |
|
|
293
|
-
|-------|-------|
|
|
294
|
-
| Title | Feature name (use arrow prefix for related features: `Sales Orders → Automations`) |
|
|
295
|
-
| Type | `Feature` |
|
|
296
|
-
| Project | Link to parent Project |
|
|
297
|
-
| Phase | `Planning` or `In Progress` |
|
|
298
|
-
| Description | Scope and requirements |
|
|
299
|
-
| Goal | Acceptance criteria |
|
|
300
|
-
| Documentation | How it works (fill when complete) |
|
|
301
|
-
| Technical Notes | Architecture decisions |
|
|
302
|
-
|
|
303
|
-
### New PRD
|
|
304
|
-
| Field | Value |
|
|
305
|
-
|-------|-------|
|
|
306
|
-
| Title | `PRD: [Feature Name]` |
|
|
307
|
-
| Type | `PRD` |
|
|
308
|
-
| Project | Link to parent Project |
|
|
309
|
-
| Phase | `Planning` |
|
|
310
|
-
| Description | Executive summary |
|
|
311
|
-
| Goal | Success metrics |
|
|
312
|
-
| User Stories | As a [user], I want [X] so that [Y] |
|
|
313
|
-
| Acceptance Criteria | - [ ] Criterion 1<br>- [ ] Criterion 2 |
|
|
314
|
-
| Technical Constraints | Performance, security, compatibility needs |
|
|
315
|
-
| Out of Scope | What this does NOT include |
|
|
316
|
-
|
|
317
|
-
### New Task
|
|
318
|
-
| Field | Value |
|
|
319
|
-
|-------|-------|
|
|
320
|
-
| Title | Specific, actionable description |
|
|
321
|
-
| Type | `Task` |
|
|
322
|
-
| Feature | Link to parent Feature |
|
|
323
|
-
| Priority | `MEDIUM` (default) |
|
|
324
|
-
| Phase | `Backlog` or `Todo` |
|
|
325
|
-
| Description | Implementation details |
|
|
326
|
-
|
|
327
|
-
### New Bug
|
|
328
|
-
| Field | Value |
|
|
329
|
-
|-------|-------|
|
|
330
|
-
| Title | Clear bug description with context |
|
|
331
|
-
| Type | `Bug` |
|
|
332
|
-
| Feature | Link to affected Feature |
|
|
333
|
-
| Priority | Based on severity |
|
|
334
|
-
| Phase | `Backlog` or `Todo` |
|
|
335
|
-
| Description | Steps to reproduce, expected vs actual |
|
|
336
|
-
| Related Items | Link to Task that caused it (if known) |
|
|
337
|
-
|
|
338
|
-
---
|
|
339
|
-
|
|
340
|
-
## Protocol: DEVELOPMENT.md Sync
|
|
341
|
-
|
|
342
|
-
When user requests sync (`/project-status`):
|
|
343
|
-
|
|
344
|
-
1. Fetch all data from Hailer workflows:
|
|
345
|
-
- Active Project
|
|
346
|
-
- All Features with their phases
|
|
347
|
-
- All Dev Tasks (grouped by phase)
|
|
348
|
-
- Recent Session Handoffs
|
|
349
|
-
|
|
350
|
-
2. Generate DEVELOPMENT.md:
|
|
351
|
-
```markdown
|
|
352
|
-
# [Project Title] Development Status
|
|
353
|
-
|
|
354
|
-
**Last Updated:** YYYY-MM-DD
|
|
355
|
-
**Hailer Sync:** YYYY-MM-DD HH:MM
|
|
356
|
-
|
|
357
|
-
---
|
|
358
|
-
|
|
359
|
-
## Active Feature
|
|
360
|
-
**Name:** [Feature Title]
|
|
361
|
-
**Goal:** [Feature Goal]
|
|
362
|
-
**Status:** [Phase]
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## Current Sprint
|
|
367
|
-
|
|
368
|
-
### In Progress
|
|
369
|
-
- [ ] [Task Title] (Feature: [Feature Name])
|
|
370
|
-
|
|
371
|
-
### Completed This Session
|
|
372
|
-
- [x] [Task Title] (YYYY-MM-DD)
|
|
373
|
-
|
|
374
|
-
### Blocked
|
|
375
|
-
- [ ] [Task Title] - **Blocker:** [reason]
|
|
376
|
-
|
|
377
|
-
---
|
|
378
|
-
|
|
379
|
-
## Backlog
|
|
380
|
-
- [ ] [Task Title] (Feature: [Feature Name], Priority: [Priority])
|
|
381
|
-
|
|
382
|
-
---
|
|
383
|
-
|
|
384
|
-
## Known Issues
|
|
385
|
-
| Priority | Issue | Status |
|
|
386
|
-
|----------|-------|--------|
|
|
387
|
-
| HIGH | [Bug Title] | [Phase] |
|
|
388
|
-
|
|
389
|
-
---
|
|
390
|
-
|
|
391
|
-
## Technical Notes
|
|
392
|
-
[Aggregated from Features' Technical Notes fields]
|
|
393
|
-
|
|
394
|
-
---
|
|
395
|
-
|
|
396
|
-
## Session Notes
|
|
397
|
-
[Local notes not synced to Hailer]
|
|
398
|
-
```
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": ".opencode",
|
|
3
|
-
"lockfileVersion": 3,
|
|
4
|
-
"requires": true,
|
|
5
|
-
"packages": {
|
|
6
|
-
"": {
|
|
7
|
-
"dependencies": {
|
|
8
|
-
"@opencode-ai/plugin": "1.3.17"
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
"node_modules/@opencode-ai/plugin": {
|
|
12
|
-
"version": "1.3.17",
|
|
13
|
-
"resolved": "https://registry.npmjs.org/@opencode-ai/plugin/-/plugin-1.3.17.tgz",
|
|
14
|
-
"integrity": "sha512-N5lckFtYvEu2R8K1um//MIOTHsJHniF2kHoPIWPCrxKG5Jpismt1ISGzIiU3aKI2ht/9VgcqKPC5oZFLdmpxPw==",
|
|
15
|
-
"license": "MIT",
|
|
16
|
-
"dependencies": {
|
|
17
|
-
"@opencode-ai/sdk": "1.3.17",
|
|
18
|
-
"zod": "4.1.8"
|
|
19
|
-
},
|
|
20
|
-
"peerDependencies": {
|
|
21
|
-
"@opentui/core": ">=0.1.96",
|
|
22
|
-
"@opentui/solid": ">=0.1.96"
|
|
23
|
-
},
|
|
24
|
-
"peerDependenciesMeta": {
|
|
25
|
-
"@opentui/core": {
|
|
26
|
-
"optional": true
|
|
27
|
-
},
|
|
28
|
-
"@opentui/solid": {
|
|
29
|
-
"optional": true
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"node_modules/@opencode-ai/sdk": {
|
|
34
|
-
"version": "1.3.17",
|
|
35
|
-
"resolved": "https://registry.npmjs.org/@opencode-ai/sdk/-/sdk-1.3.17.tgz",
|
|
36
|
-
"integrity": "sha512-2+MGgu7wynqTBwxezR01VAGhILXlpcHDY/pF7SWB87WOgLt3kD55HjKHNj6PWxyY8n575AZolR95VUC3gtwfmA==",
|
|
37
|
-
"license": "MIT",
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"cross-spawn": "7.0.6"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"node_modules/cross-spawn": {
|
|
43
|
-
"version": "7.0.6",
|
|
44
|
-
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
|
|
45
|
-
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
|
|
46
|
-
"license": "MIT",
|
|
47
|
-
"dependencies": {
|
|
48
|
-
"path-key": "^3.1.0",
|
|
49
|
-
"shebang-command": "^2.0.0",
|
|
50
|
-
"which": "^2.0.1"
|
|
51
|
-
},
|
|
52
|
-
"engines": {
|
|
53
|
-
"node": ">= 8"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
"node_modules/isexe": {
|
|
57
|
-
"version": "2.0.0",
|
|
58
|
-
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
|
|
59
|
-
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
|
|
60
|
-
"license": "ISC"
|
|
61
|
-
},
|
|
62
|
-
"node_modules/path-key": {
|
|
63
|
-
"version": "3.1.1",
|
|
64
|
-
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
|
|
65
|
-
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
|
|
66
|
-
"license": "MIT",
|
|
67
|
-
"engines": {
|
|
68
|
-
"node": ">=8"
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
"node_modules/shebang-command": {
|
|
72
|
-
"version": "2.0.0",
|
|
73
|
-
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
|
74
|
-
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
|
|
75
|
-
"license": "MIT",
|
|
76
|
-
"dependencies": {
|
|
77
|
-
"shebang-regex": "^3.0.0"
|
|
78
|
-
},
|
|
79
|
-
"engines": {
|
|
80
|
-
"node": ">=8"
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"node_modules/shebang-regex": {
|
|
84
|
-
"version": "3.0.0",
|
|
85
|
-
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
|
|
86
|
-
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
|
87
|
-
"license": "MIT",
|
|
88
|
-
"engines": {
|
|
89
|
-
"node": ">=8"
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
"node_modules/which": {
|
|
93
|
-
"version": "2.0.2",
|
|
94
|
-
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
95
|
-
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
|
96
|
-
"license": "ISC",
|
|
97
|
-
"dependencies": {
|
|
98
|
-
"isexe": "^2.0.0"
|
|
99
|
-
},
|
|
100
|
-
"bin": {
|
|
101
|
-
"node-which": "bin/node-which"
|
|
102
|
-
},
|
|
103
|
-
"engines": {
|
|
104
|
-
"node": ">= 8"
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
"node_modules/zod": {
|
|
108
|
-
"version": "4.1.8",
|
|
109
|
-
"resolved": "https://registry.npmjs.org/zod/-/zod-4.1.8.tgz",
|
|
110
|
-
"integrity": "sha512-5R1P+WwQqmmMIEACyzSvo4JXHY5WiAFHRMg+zBZKgKS+Q1viRa0C1hmUKtHltoIFKtIdki3pRxkmpP74jnNYHQ==",
|
|
111
|
-
"license": "MIT",
|
|
112
|
-
"funding": {
|
|
113
|
-
"url": "https://github.com/sponsors/colinhacks"
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|