@hailer/mcp 1.1.6 → 1.1.8
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/agents/agent-helga-workflow-config.md +8 -1
- package/.hailer-mcp-port +1 -0
- package/.mcp.json +3 -3
- package/.opencode/agent/agent-helga-workflow-config.md +8 -1
- package/CHANGELOG.md +13 -0
- package/dist/app.js +40 -35
- package/dist/cli.js +13 -0
- package/dist/mcp-server.js +6 -0
- package/inbox/failures.log +1 -0
- package/package.json +1 -1
- package/.claude/.context-watchdog.json +0 -1
- package/.claude/.session-checked +0 -1
- package/inbox/usage.jsonl +0 -1
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
name: agent-helga-workflow-config
|
|
3
3
|
description: Manages Hailer workspace configuration as infrastructure-as-code using SDK v0.8.4.
|
|
4
4
|
model: sonnet
|
|
5
|
-
tools:
|
|
5
|
+
tools:
|
|
6
|
+
bash: true
|
|
7
|
+
read: true
|
|
8
|
+
edit: true
|
|
9
|
+
write: true
|
|
10
|
+
glob: true
|
|
11
|
+
skill: true
|
|
12
|
+
mcp_hailer_get_workflow_schema: true
|
|
6
13
|
skills:
|
|
7
14
|
- SDK-ws-config-skill
|
|
8
15
|
- SDK-generate-skill
|
package/.hailer-mcp-port
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3031
|
package/.mcp.json
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"mcpServers": {
|
|
3
3
|
"hailer": {
|
|
4
4
|
"type": "stdio",
|
|
5
|
-
"command": "
|
|
5
|
+
"command": "sh",
|
|
6
6
|
"args": [
|
|
7
|
-
"
|
|
8
|
-
"http://localhost
|
|
7
|
+
"-c",
|
|
8
|
+
"PORT=$(cat .hailer-mcp-port 2>/dev/null || echo 3030) && npx mcp-remote \"http://localhost:$PORT/api/mcp?apiKey=unique-api-key-for-this-agent\""
|
|
9
9
|
],
|
|
10
10
|
"env": {}
|
|
11
11
|
}
|
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
name: agent-helga-workflow-config
|
|
3
3
|
description: Manages Hailer workspace configuration as infrastructure-as-code using SDK v0.8.4.
|
|
4
4
|
model: sonnet
|
|
5
|
-
tools:
|
|
5
|
+
tools:
|
|
6
|
+
bash: true
|
|
7
|
+
read: true
|
|
8
|
+
edit: true
|
|
9
|
+
write: true
|
|
10
|
+
glob: true
|
|
11
|
+
skill: true
|
|
12
|
+
mcp_hailer_get_workflow_schema: true
|
|
6
13
|
skills:
|
|
7
14
|
- SDK-ws-config-skill
|
|
8
15
|
- SDK-generate-skill
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
5
5
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [1.1.7] - 18-02-2026
|
|
8
|
+
|
|
9
|
+
### Fix
|
|
10
|
+
|
|
11
|
+
- Fixed `agent-helga-workflow-config.md` file format to ensure OpenCode compatibility
|
|
12
|
+
|
|
7
13
|
## [0.2.5] - 22-01-2026
|
|
8
14
|
|
|
9
15
|
### Added
|
|
@@ -15,6 +21,7 @@ Download file attachments from Hailer activities. Useful for processing uploaded
|
|
|
15
21
|
```
|
|
16
22
|
download_file(file_id, activity_id)
|
|
17
23
|
```
|
|
24
|
+
|
|
18
25
|
- Returns content directly in response or saves to disk
|
|
19
26
|
- Auto-detects text (utf8) vs binary (base64)
|
|
20
27
|
|
|
@@ -38,12 +45,14 @@ No more switching to docs - everything is accessible inline.
|
|
|
38
45
|
Share and install community-built agents, skills, and hooks.
|
|
39
46
|
|
|
40
47
|
How it works:
|
|
48
|
+
|
|
41
49
|
1. The marketplace is a separate git repo with community plugins
|
|
42
50
|
2. `/marketplace-setup` clones it locally to `./hailer-marketplace/`
|
|
43
51
|
3. `/install-plugin <name>` copies plugin files to your `.claude/` folder
|
|
44
52
|
4. Restart Claude Code to load the new plugin
|
|
45
53
|
|
|
46
54
|
New commands:
|
|
55
|
+
|
|
47
56
|
- `/marketplace-setup` - Clone the marketplace repo locally
|
|
48
57
|
- `/list-plugins` - Browse available plugins
|
|
49
58
|
- `/install-plugin <name>` - Install a plugin to `.claude/`
|
|
@@ -51,12 +60,14 @@ New commands:
|
|
|
51
60
|
- `/publish-plugin` - Submit your plugin to the marketplace
|
|
52
61
|
|
|
53
62
|
New agents:
|
|
63
|
+
|
|
54
64
|
- `agent-marketplace-publisher` - creates PRs to publish your plugins
|
|
55
65
|
- `agent-marketplace-reviewer` - auto-reviews and merges marketplace PRs
|
|
56
66
|
|
|
57
67
|
### Changed
|
|
58
68
|
|
|
59
69
|
**Orchestrator Improvements**
|
|
70
|
+
|
|
60
71
|
- Delegation protocol now has bootstrap exception
|
|
61
72
|
- Agent-chaining: agents can trigger follow-up agents automatically
|
|
62
73
|
|
|
@@ -68,6 +79,7 @@ New agents:
|
|
|
68
79
|
Language Server Protocol provides code intelligence - go to definition, find references, hover for types. Lars uses this to find dead code, unused imports, and navigate TypeScript/JavaScript codebases.
|
|
69
80
|
|
|
70
81
|
**Setup:**
|
|
82
|
+
|
|
71
83
|
```bash
|
|
72
84
|
/marketplace-setup # Clone marketplace (one time)
|
|
73
85
|
/install-plugin lars-code-inspector # Install LSP config
|
|
@@ -75,6 +87,7 @@ claude -c # Restart to activate
|
|
|
75
87
|
```
|
|
76
88
|
|
|
77
89
|
What this does:
|
|
90
|
+
|
|
78
91
|
- Installs `.lsp.json` to Claude's plugin cache
|
|
79
92
|
- Sets `ENABLE_LSP_TOOL=1` in `.claude/settings.json`
|
|
80
93
|
- Sets `ENABLE_LSP_TOOL=1` in `.env`
|
package/dist/app.js
CHANGED
|
@@ -80,42 +80,47 @@ core.addTool(app_1.getProductManifestTool);
|
|
|
80
80
|
core.addTool(app_1.publishAppTool);
|
|
81
81
|
core.addTool(app_1.installMarketplaceAppTool);
|
|
82
82
|
// Bot-internal tools - dynamically imported only when MCP_CLIENT_ENABLED=true
|
|
83
|
-
//
|
|
83
|
+
// Wrapped in try/catch so global installs work (bot-config excluded from npm package)
|
|
84
84
|
if (config_1.environment.MCP_CLIENT_ENABLED) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
85
|
+
try {
|
|
86
|
+
// Dynamic import bot-config tools
|
|
87
|
+
const { listBotsConfigTool, enableBotTool, disableBotTool, checkSpecialistStatusTool } = require('./bot-config');
|
|
88
|
+
core.addTool(listBotsConfigTool);
|
|
89
|
+
core.addTool(enableBotTool);
|
|
90
|
+
core.addTool(disableBotTool);
|
|
91
|
+
core.addTool(checkSpecialistStatusTool);
|
|
92
|
+
// Dynamic import bug-fixer tools
|
|
93
|
+
const {
|
|
94
|
+
// Low-level tools
|
|
95
|
+
bugFixerFindAppTool, bugFixerListFilesTool, bugFixerReadFileTool, bugFixerWriteFileTool, bugFixerApplyFixTool, bugFixerRunBuildTool, bugFixerGitStatusTool, bugFixerGitPullTool, bugFixerGitCommitTool, bugFixerGitPushTool, bugFixerGitRevertTool, bugFixerPublishAppTool,
|
|
96
|
+
// High-level workflow tools (LLM-driven)
|
|
97
|
+
bugFixerAnalyzeBugTool, bugFixerStartFixTool, bugFixerMarkDeclinedTool, bugFixerPublishFixTool, bugFixerRetryFixTool, markBugDeclinedTool, markBugFixedTool } = require('./plugins/bug-fixer');
|
|
98
|
+
// Low-level tools
|
|
99
|
+
core.addTool(bugFixerFindAppTool);
|
|
100
|
+
core.addTool(bugFixerListFilesTool);
|
|
101
|
+
core.addTool(bugFixerReadFileTool);
|
|
102
|
+
core.addTool(bugFixerWriteFileTool);
|
|
103
|
+
core.addTool(bugFixerApplyFixTool);
|
|
104
|
+
core.addTool(bugFixerRunBuildTool);
|
|
105
|
+
core.addTool(bugFixerGitStatusTool);
|
|
106
|
+
core.addTool(bugFixerGitPullTool);
|
|
107
|
+
core.addTool(bugFixerGitCommitTool);
|
|
108
|
+
core.addTool(bugFixerGitPushTool);
|
|
109
|
+
core.addTool(bugFixerGitRevertTool);
|
|
110
|
+
core.addTool(bugFixerPublishAppTool);
|
|
111
|
+
// High-level workflow tools (LLM-driven)
|
|
112
|
+
core.addTool(bugFixerAnalyzeBugTool);
|
|
113
|
+
core.addTool(bugFixerStartFixTool);
|
|
114
|
+
core.addTool(bugFixerMarkDeclinedTool);
|
|
115
|
+
core.addTool(bugFixerPublishFixTool);
|
|
116
|
+
core.addTool(bugFixerRetryFixTool);
|
|
117
|
+
core.addTool(markBugDeclinedTool);
|
|
118
|
+
core.addTool(markBugFixedTool);
|
|
119
|
+
logger.debug('Bot-internal tools registered (MCP_CLIENT_ENABLED=true)');
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
logger.warn('Bot modules not available (normal for npm package installs)');
|
|
123
|
+
}
|
|
119
124
|
}
|
|
120
125
|
logger.debug('All tools registered successfully');
|
|
121
126
|
// Start the application
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
// Parse port before loading app (which reads process.env.PORT)
|
|
5
|
+
// Supports: hailer-mcp --port 3031 | hailer-mcp -p 3031 | npm run mcp-start --port=3031
|
|
6
|
+
const args = process.argv.slice(2);
|
|
7
|
+
for (let i = 0; i < args.length; i++) {
|
|
8
|
+
if ((args[i] === '--port' || args[i] === '-p') && args[i + 1]) {
|
|
9
|
+
process.env.PORT = args[i + 1];
|
|
10
|
+
break;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
// npm run mcp-start --port=3031 sets npm_config_port in env
|
|
14
|
+
if (!process.env.PORT && process.env.npm_config_port) {
|
|
15
|
+
process.env.PORT = process.env.npm_config_port;
|
|
16
|
+
}
|
|
4
17
|
require("./app");
|
|
5
18
|
//# sourceMappingURL=cli.js.map
|
package/dist/mcp-server.js
CHANGED
|
@@ -474,6 +474,12 @@ class MCPServerService {
|
|
|
474
474
|
healthCheck: `http://localhost:${port}/health`,
|
|
475
475
|
mcpEndpoint: `http://localhost:${port}/api/mcp`
|
|
476
476
|
});
|
|
477
|
+
// Write port file so .mcp.json can dynamically connect
|
|
478
|
+
const fs = require('fs');
|
|
479
|
+
const path = require('path');
|
|
480
|
+
const portFile = path.join(process.cwd(), '.hailer-mcp-port');
|
|
481
|
+
fs.writeFileSync(portFile, String(port));
|
|
482
|
+
this.logger.debug('Port file written', { portFile, port });
|
|
477
483
|
resolve();
|
|
478
484
|
});
|
|
479
485
|
this.server.on('error', (error) => {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[2026-02-16T05:32:29.204Z] agent-giuseppe-app-builder | skill | hailer-mcp | \"Field '{fieldLabel}' expects Unix ms timestamp (number), got: '{value}'. Convert the date to milliseconds first.\"\n```\n\n**Important:**\n- Read th
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"sessionId":"bbf0750e-f087-436f-b281-a69e09d13b04","toolCalls":1,"compactCount":0,"lastWarning":"none","stopBlocks":0}
|
package/.claude/.session-checked
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
2026-02-13T07:47:04.846Z
|
package/inbox/usage.jsonl
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"ts":"2026-02-13T08:23:26.264Z","agent":"general-purpose","status":"unknown","project":"hailer-mcp","description":"Convert new agents to OpenCode"}
|