open-coleslaw 0.6.3 โ 0.6.4
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/README.md +132 -169
- package/dist/index.js +16 -4
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,140 +1,159 @@
|
|
|
1
1
|
# ๐ฅฌ Open Coleslaw
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/open-coleslaw)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](package.json)
|
|
6
|
+
[](https://www.npmjs.com/package/open-coleslaw)
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
> **Type a prompt. Get a real multi-agent engineering team. No commands to learn.**
|
|
6
9
|
|
|
7
|
-
|
|
10
|
+
Open Coleslaw is a multi-agent orchestrator plugin for [Claude Code](https://claude.com/claude-code). Every prompt runs through a **kickoff meeting โ per-MVP design meeting โ plan mode โ parallel workers โ verification** pipeline โ with each speaker turn being a real `Agent` dispatch, not role-play.
|
|
8
11
|
|
|
9
|
-
|
|
12
|
+

|
|
10
13
|
|
|
11
|
-
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
In Claude Code:
|
|
12
19
|
|
|
13
20
|
```
|
|
14
|
-
|
|
21
|
+
/plugin marketplace add sshworld/open-coleslaw
|
|
22
|
+
/plugin install open-coleslaw@sshworld
|
|
23
|
+
```
|
|
15
24
|
|
|
16
|
-
|
|
25
|
+
Open a new session, then just type what you want:
|
|
17
26
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
```
|
|
28
|
+
Build me a balance-game web app
|
|
29
|
+
```
|
|
21
30
|
|
|
22
|
-
|
|
23
|
-
ยท Dispatches open-coleslaw:architect โ speech โ add-transcript
|
|
24
|
-
ยท Dispatches open-coleslaw:engineer โ speech โ add-transcript
|
|
25
|
-
ยท Dispatches open-coleslaw:verifier โ speech โ add-transcript
|
|
26
|
-
ยท After each round, planner runs a consensus check (AGREE / DISAGREE)
|
|
27
|
-
ยท Repeats until everyone AGREEs (max 10 rounds, then @mention escalation)
|
|
28
|
-
ยท Planner synthesizes minutes โ docs/open-coleslaw/
|
|
31
|
+
That's it. Watch the meeting unfold at **http://localhost:35143**.
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
ยท EnterPlanMode โ plan from minutes โ user approves
|
|
33
|
+
---
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
ยท Dispatches N ร open-coleslaw:worker in parallel
|
|
35
|
+
## What You Type vs What Happens
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
| You type | The pipeline runs |
|
|
38
|
+
|---|---|
|
|
39
|
+
| `Build me a balance-game web app` | Kickoff โ 3 MVPs โ per-MVP design meeting โ plan mode โ workers โ verified |
|
|
40
|
+
| `Fix the flaky login test` | Kickoff (1 MVP) โ design meeting w/ engineer + verifier โ plan โ fix โ green |
|
|
41
|
+
| `Should we migrate from Redux to Zustand?` | Design meeting w/ architect + engineer + researcher โ minutes with recommendation |
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
|
|
43
|
+
You don't call a tool. You don't pick a department. You don't write prompt templates.
|
|
44
|
+
The main Claude session **dispatches each specialist as a real subagent** and
|
|
45
|
+
collects their actual output into the meeting transcript.
|
|
42
46
|
|
|
43
|
-
|
|
44
|
-
dashboard at `localhost:35143` shows each specialist's actual comment appear
|
|
45
|
-
in the thread as the main session dispatches them.
|
|
47
|
+
---
|
|
46
48
|
|
|
47
|
-
|
|
49
|
+
## Why Open Coleslaw
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
- **Real multi-agent, not one-LLM role-play.** Every speaker turn is a separate `Agent` dispatch with its own context. The dashboard shows the real comments as they stream in.
|
|
52
|
+
- **Consensus, not round count.** A meeting only ends when everyone actually agrees. If 10 rounds pass without consensus, you get an `@mention` to break the tie.
|
|
53
|
+
- **Minutes survive compaction.** Everything is written to `docs/open-coleslaw/` inside your project. `/compact` and `/clear` don't lose meeting history.
|
|
54
|
+
- **Model-agnostic.** No hardcoded model names anywhere. Switch with `/model` and the whole pipeline follows โ Opus, Sonnet, Haiku, or whatever ships next.
|
|
50
55
|
|
|
51
|
-
|
|
56
|
+
---
|
|
52
57
|
|
|
53
|
-
|
|
58
|
+
## The Team
|
|
54
59
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
7 agents, all dispatched by the main Claude session:
|
|
61
|
+
|
|
62
|
+
| Agent | Role |
|
|
63
|
+
|---|---|
|
|
64
|
+
| `planner` | Chairs the meeting. Runs rounds, checks consensus, synthesises minutes. **Always attends.** |
|
|
65
|
+
| `architect` | System design, API contracts, schemas |
|
|
66
|
+
| `engineer` | Implementation feasibility, code quality |
|
|
67
|
+
| `verifier` | Test strategy at design time; runs tests/build at verify time |
|
|
68
|
+
| `product-manager` | Requirements, user stories, prioritisation |
|
|
69
|
+
| `researcher` | Codebase exploration, prior art, library comparison |
|
|
70
|
+
| `worker` | Writes code (N workers in parallel during implementation) |
|
|
59
71
|
|
|
60
|
-
|
|
72
|
+
Planner is mandatory. The other specialists are convened dynamically based on what the task actually needs.
|
|
61
73
|
|
|
62
|
-
|
|
74
|
+
---
|
|
63
75
|
|
|
64
|
-
|
|
76
|
+
## The Pipeline
|
|
65
77
|
|
|
66
78
|
```
|
|
67
|
-
|
|
79
|
+
You type a prompt
|
|
80
|
+
โ
|
|
81
|
+
โผ
|
|
82
|
+
โโโโโโโโโโโโโโโโโโโโโโโโ
|
|
83
|
+
โ Main Claude โ
|
|
84
|
+
โ session (you) โ
|
|
85
|
+
โโโโโโโโโโโโฌโโโโโโโโโโโโ
|
|
86
|
+
โ dispatches
|
|
87
|
+
โโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโ
|
|
88
|
+
โผ โผ โผ
|
|
89
|
+
โโโโโโโโโโโ Design meeting Plan Mode โ approve
|
|
90
|
+
โ Kickoff โ planner โ architect โ
|
|
91
|
+
โ planner โ โ engineer โ verifier โ
|
|
92
|
+
โ โ MVPs โ (consensus check parallel
|
|
93
|
+
โโโโโโโโโโโ every round) workers
|
|
94
|
+
โ โ
|
|
95
|
+
โโโโโโโโโโโฌโโโโโโโโโโโโ
|
|
96
|
+
โผ
|
|
97
|
+
verifier
|
|
98
|
+
/ \
|
|
99
|
+
pass fail
|
|
100
|
+
โ โ
|
|
101
|
+
next MVP verify-retry meeting
|
|
68
102
|
```
|
|
69
103
|
|
|
70
|
-
|
|
104
|
+
When all MVPs pass verification, the main session touches a marker file and the Stop hook checks your context usage โ if you're over ~30%, it suggests running `/compact` or `/clear`. Minutes on disk mean you lose nothing.
|
|
71
105
|
|
|
72
|
-
|
|
106
|
+
---
|
|
73
107
|
|
|
74
|
-
|
|
75
|
-
the whole pipeline โ dispatching planner + specialists one-by-one and collecting
|
|
76
|
-
their real output into `add-transcript`. This is what makes "multi-agent" mean
|
|
77
|
-
multi-agent: each speaker turn is a fresh `Agent` call with its own context, not
|
|
78
|
-
one LLM role-playing every role.
|
|
108
|
+
## Dashboard
|
|
79
109
|
|
|
80
|
-
|
|
81
|
-
Kickoff โ per-MVP design meeting โ Plan Mode โ Workers โ Verify โ (loop)
|
|
82
|
-
```
|
|
110
|
+
A live meeting viewer at **http://localhost:35143**:
|
|
83
111
|
|
|
84
|
-
|
|
85
|
-
|
|
112
|
+
- **Current meeting as a thread** โ speakers post comments, stance badges (AGREE / DISAGREE / SPEAKING) appear inline
|
|
113
|
+
- **MVP progress panel** โ pending / in-progress / done
|
|
114
|
+
- **Comment from the browser** โ type a note straight into the meeting; it's picked up at the next round boundary
|
|
115
|
+
- **Per-project tabs** โ multiple terminals on the same project merge into one tab
|
|
116
|
+
- **Past meetings** โ survives MCP restart (rehydrated from markdown minutes on disk)
|
|
86
117
|
|
|
87
|
-
|
|
118
|
+
---
|
|
88
119
|
|
|
89
|
-
##
|
|
120
|
+
## Philosophy
|
|
90
121
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
โ
|
|
97
|
-
Kickoff โ per-MVP design loop
|
|
98
|
-
โ
|
|
99
|
-
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
|
|
100
|
-
โผ โผ โผ โผ
|
|
101
|
-
โโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ
|
|
102
|
-
โ Planner โ โ Architectโ โ Engineer โ โ Verifier โ + product-manager /
|
|
103
|
-
โ (chair) โ โ โ โ โ โ โ researcher as needed
|
|
104
|
-
โโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโ
|
|
105
|
-
Always Dynamic Dynamic Dynamic
|
|
106
|
-
โ
|
|
107
|
-
Plan Mode โ User approves
|
|
108
|
-
โ
|
|
109
|
-
โโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโ
|
|
110
|
-
โผ โผ โผ
|
|
111
|
-
โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ
|
|
112
|
-
โWorker 1โ โWorker 2โ โฆ โWorker Nโ โ Parallel implementation
|
|
113
|
-
โโโโโโโโโโ โโโโโโโโโโ โโโโโโโโโโ
|
|
114
|
-
โ
|
|
115
|
-
Verifier runs tests
|
|
116
|
-
/ \
|
|
117
|
-
Pass Fail โ verify-retry meeting
|
|
118
|
-
โ
|
|
119
|
-
Next MVP (or done)
|
|
120
|
-
```
|
|
122
|
+
### The Coleslaw Principle
|
|
123
|
+
|
|
124
|
+
Coleslaw is a side dish that's already made. You don't prepare it โ you just eat it. This plugin works the same way. You don't configure agents, define workflows, or call tools. You describe what you want, and the system figures out the rest.
|
|
125
|
+
|
|
126
|
+
### Key Decisions
|
|
121
127
|
|
|
122
|
-
**
|
|
123
|
-
|
|
128
|
+
- **The orchestrator is your proxy, not a CEO.** You are the decision-maker. The orchestrator acts on your behalf but escalates important choices via `@mention`.
|
|
129
|
+
- **Kickoff first.** Every non-trivial request starts by breaking itself into ordered MVPs.
|
|
130
|
+
- **Consensus, not round count.** A meeting ends when everyone actually agrees (or you're asked to break a tie).
|
|
131
|
+
- **Minutes are the real artifact.** They survive `/compact` and `/clear` โ your Claude Code context is disposable.
|
|
132
|
+
- **TDD by default.** The engineer and verifier draft tests before workers start writing code.
|
|
124
133
|
|
|
125
|
-
|
|
134
|
+
---
|
|
126
135
|
|
|
127
|
-
##
|
|
136
|
+
## Development
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
git clone https://github.com/sshworld/open-coleslaw.git
|
|
140
|
+
cd open-coleslaw
|
|
141
|
+
npm install
|
|
142
|
+
npm run build
|
|
143
|
+
npm test # 260 tests
|
|
144
|
+
npm run lint # type-check only
|
|
128
145
|
|
|
129
|
-
|
|
146
|
+
COLESLAW_MOCK=1 node dist/index.js # run without the Claude CLI
|
|
147
|
+
```
|
|
130
148
|
|
|
131
|
-
|
|
149
|
+
See [`CLAUDE.md`](CLAUDE.md) and [`docs/smoke-tests.md`](docs/smoke-tests.md) before shipping a release โ unit tests alone don't catch multi-agent regressions.
|
|
132
150
|
|
|
133
|
-
|
|
151
|
+
---
|
|
134
152
|
|
|
135
|
-
|
|
153
|
+
<details>
|
|
154
|
+
<summary><strong>๐ 15 MCP tools</strong> (the pipeline calls these โ you don't)</summary>
|
|
136
155
|
|
|
137
|
-
| Tool | What
|
|
156
|
+
| Tool | What it does |
|
|
138
157
|
|------|-------------|
|
|
139
158
|
| `start-meeting` | Creates a meeting record (kickoff / design / verify-retry) |
|
|
140
159
|
| `add-transcript` | Saves a speaker's turn |
|
|
@@ -145,99 +164,43 @@ This is deliberately slower than a fixed-round meeting โ but each MVP ends wit
|
|
|
145
164
|
| `get-task-report` | Shows execution results per department |
|
|
146
165
|
| `get-agent-tree` | Displays the agent hierarchy (bookkeeping) |
|
|
147
166
|
| `respond-to-mention` | Resolves a pending decision escalated by an agent |
|
|
148
|
-
| `get-mentions` | Lists pending
|
|
167
|
+
| `get-mentions` | Lists pending `@mention` decisions |
|
|
149
168
|
| `cancel-meeting` | Stops a meeting and cascades to workers |
|
|
150
169
|
| `list-meetings` | Shows meeting history |
|
|
151
170
|
| `create-capability` | Self-extends the plugin with new hooks/skills |
|
|
152
171
|
| `get-cost-summary` | Tracks spend per agent/meeting/department |
|
|
153
172
|
| `chain-meeting` | Links meetings โ previous minutes feed the next |
|
|
154
173
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
| Agent | Role |
|
|
158
|
-
|-------|------|
|
|
159
|
-
| `planner` | Runs the meeting, chairs rounds, checks consensus, synthesises minutes |
|
|
160
|
-
| `architect` | System design, API contracts, schemas |
|
|
161
|
-
| `engineer` | Implementation feasibility, code quality |
|
|
162
|
-
| `verifier` | Testing strategy at design time; tests/build at verify time |
|
|
163
|
-
| `product-manager` | Requirements, user stories, prioritisation |
|
|
164
|
-
| `researcher` | Codebase exploration, prior art, library comparison |
|
|
165
|
-
| `worker` | Writes code (N workers in parallel) |
|
|
174
|
+
</details>
|
|
166
175
|
|
|
167
|
-
|
|
176
|
+
<details>
|
|
177
|
+
<summary><strong>๐ฏ 7 skills</strong> (the plugin registers these in your session)</summary>
|
|
168
178
|
|
|
169
179
|
| Skill | Purpose |
|
|
170
180
|
|-------|---------|
|
|
171
|
-
| `using-open-coleslaw` | Injected at session start โ
|
|
172
|
-
| `meeting` |
|
|
173
|
-
| `status` |
|
|
174
|
-
| `dashboard` | Opens the
|
|
175
|
-
| `mention` |
|
|
176
|
-
| `agents` |
|
|
177
|
-
| `minutes` |
|
|
178
|
-
|
|
179
|
-
### Real-Time Meeting Dashboard
|
|
180
|
-
|
|
181
|
-
A live meeting viewer at `http://localhost:35143`:
|
|
182
|
-
|
|
183
|
-
- **Current meeting as a thread** โ speakers post comments, consensus stances are shown inline
|
|
184
|
-
- **MVP progress panel** โ which MVPs are pending / in-progress / done
|
|
185
|
-
- **User comment box** โ type a note straight into the meeting from the browser; the orchestrator picks it up at the next round boundary (file-queue routed to `docs/open-coleslaw/.pending-comments.jsonl`)
|
|
186
|
-
- **Terminal comments also work** โ if you prompt Claude Code while a meeting is in progress, your prompt becomes a user turn in the thread
|
|
187
|
-
- Per-project tabs (multiple terminals โ multiple tabs); duplicate names auto-number: `project`, `project (1)`
|
|
188
|
-
|
|
189
|
-
### Self-Extending
|
|
190
|
-
|
|
191
|
-
Ask for a workflow that doesn't exist yet, and the orchestrator creates it โ new hooks, skills, or automations โ registered for future use.
|
|
192
|
-
|
|
193
|
-
## Agent Tiers
|
|
194
|
-
|
|
195
|
-
| Tier | Model | Role |
|
|
196
|
-
|------|-------|------|
|
|
197
|
-
| Meeting runner | inherits from user session | The main Claude session itself โ dispatches everything |
|
|
198
|
-
| Specialist subagent | inherits from user session | Dispatched per speaker turn |
|
|
199
|
-
| Worker subagent | inherits from user session | Dispatched per implementation task |
|
|
200
|
-
|
|
201
|
-
**No model is hard-coded.** Every specialist, every worker runs on whatever
|
|
202
|
-
model you've selected in your Claude Code session (Opus, Sonnet, Haiku, or
|
|
203
|
-
anything Anthropic ships next). Switch models with `/model` and the whole
|
|
204
|
-
pipeline follows.
|
|
181
|
+
| `using-open-coleslaw` | Injected at session start โ the full pipeline runbook |
|
|
182
|
+
| `meeting` | Shortcut pointer to the runbook |
|
|
183
|
+
| `status` | Active meetings, agents, pending mentions |
|
|
184
|
+
| `dashboard` | Opens the live dashboard |
|
|
185
|
+
| `mention` | Handle pending `@mention` decisions |
|
|
186
|
+
| `agents` | Show the agent hierarchy |
|
|
187
|
+
| `minutes` | Browse past meeting minutes |
|
|
205
188
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
### The Coleslaw Principle
|
|
209
|
-
|
|
210
|
-
Coleslaw is a side dish that's already made. You don't prepare it โ you just eat it. This plugin works the same way. You don't configure agents, define workflows, or call tools. You describe what you want, and the system figures out the rest.
|
|
211
|
-
|
|
212
|
-
### Key Decisions
|
|
213
|
-
|
|
214
|
-
- **The Orchestrator is your proxy, not a CEO.** You are the decision-maker. The orchestrator acts on your behalf but escalates important choices via @mention.
|
|
215
|
-
- **Kickoff first.** Every non-trivial request starts by breaking itself into ordered MVPs.
|
|
216
|
-
- **Consensus, not round count.** A meeting ends when everyone actually agrees (or you are asked to break a tie).
|
|
217
|
-
- **Minutes are the real artifact.** They survive `/compact` and `/clear` โ your Claude Code context is disposable.
|
|
218
|
-
- **Agents check before they code.** Every specialist reads the project's state before proposing anything.
|
|
189
|
+
</details>
|
|
219
190
|
|
|
220
|
-
|
|
191
|
+
<details>
|
|
192
|
+
<summary><strong>๐งฉ Self-extension</strong></summary>
|
|
221
193
|
|
|
222
|
-
|
|
223
|
-
git clone https://github.com/sshworld/open-coleslaw.git
|
|
224
|
-
cd open-coleslaw
|
|
225
|
-
npm install
|
|
226
|
-
npm run build
|
|
194
|
+
Ask for a workflow that doesn't exist yet (a new hook, a new skill, a custom automation) and the pipeline creates it, registered for future use. Powered by the `create-capability` MCP tool.
|
|
227
195
|
|
|
228
|
-
|
|
229
|
-
COLESLAW_MOCK=1 node dist/index.js
|
|
196
|
+
</details>
|
|
230
197
|
|
|
231
|
-
|
|
232
|
-
npm test
|
|
233
|
-
|
|
234
|
-
# Type check
|
|
235
|
-
npm run lint
|
|
236
|
-
```
|
|
198
|
+
---
|
|
237
199
|
|
|
238
200
|
## Contributing
|
|
239
201
|
|
|
240
|
-
See [CLAUDE.md](CLAUDE.md)
|
|
202
|
+
See [CLAUDE.md](CLAUDE.md). TDD is the default โ write the failing test or
|
|
203
|
+
structural assertion first, then implement.
|
|
241
204
|
|
|
242
205
|
## License
|
|
243
206
|
|
package/dist/index.js
CHANGED
|
@@ -2500,7 +2500,10 @@ var CostTracker = class {
|
|
|
2500
2500
|
byDepartment[leader.department] = (byDepartment[leader.department] ?? 0) + cost;
|
|
2501
2501
|
}
|
|
2502
2502
|
}
|
|
2503
|
-
} catch {
|
|
2503
|
+
} catch (err) {
|
|
2504
|
+
logger.debug(
|
|
2505
|
+
`Cost tracker: DB aggregation skipped (${err instanceof Error ? err.message : String(err)})`
|
|
2506
|
+
);
|
|
2504
2507
|
}
|
|
2505
2508
|
const filteredEntries = meetingId ? this.entries.filter((e) => e.meetingId === meetingId) : this.entries;
|
|
2506
2509
|
for (const entry of filteredEntries) {
|
|
@@ -3976,6 +3979,7 @@ var StateBridge = class extends EventEmitter2 {
|
|
|
3976
3979
|
if (past.length === 0) return;
|
|
3977
3980
|
const current = this.projects.get(info.projectPath);
|
|
3978
3981
|
if (!current) return;
|
|
3982
|
+
if (current.pastMeetings.length > 0) return;
|
|
3979
3983
|
current.pastMeetings = past;
|
|
3980
3984
|
logger.info(
|
|
3981
3985
|
`Hydrated ${past.length} past meeting(s) for ${displayName}`
|
|
@@ -4330,7 +4334,10 @@ function startDashboard(options) {
|
|
|
4330
4334
|
} else if (msg.type === "ping") {
|
|
4331
4335
|
ws.send(JSON.stringify({ type: "pong" }));
|
|
4332
4336
|
}
|
|
4333
|
-
} catch {
|
|
4337
|
+
} catch (err) {
|
|
4338
|
+
logger.debug(
|
|
4339
|
+
`Malformed WebSocket message: ${err instanceof Error ? err.message : String(err)}`
|
|
4340
|
+
);
|
|
4334
4341
|
}
|
|
4335
4342
|
});
|
|
4336
4343
|
});
|
|
@@ -4359,7 +4366,10 @@ async function main() {
|
|
|
4359
4366
|
const sessionId = randomUUID();
|
|
4360
4367
|
const projectPath = process.cwd();
|
|
4361
4368
|
const projectName = projectPath.split("/").pop() ?? "unknown";
|
|
4362
|
-
startDashboard({ sessionId, projectPath, projectName }).catch(() => {
|
|
4369
|
+
startDashboard({ sessionId, projectPath, projectName }).catch((err) => {
|
|
4370
|
+
logger.warn(
|
|
4371
|
+
`Dashboard startup failed: ${err instanceof Error ? err.message : String(err)}`
|
|
4372
|
+
);
|
|
4363
4373
|
});
|
|
4364
4374
|
}
|
|
4365
4375
|
const server = createServer();
|
|
@@ -4367,7 +4377,9 @@ async function main() {
|
|
|
4367
4377
|
await server.connect(transport);
|
|
4368
4378
|
}
|
|
4369
4379
|
main().catch((error) => {
|
|
4370
|
-
|
|
4380
|
+
logger.error(
|
|
4381
|
+
`Fatal error: ${error instanceof Error ? error.message : String(error)}`
|
|
4382
|
+
);
|
|
4371
4383
|
process.exit(1);
|
|
4372
4384
|
});
|
|
4373
4385
|
//# sourceMappingURL=index.js.map
|