@hailer/mcp 2.0.0-beta.1 → 2.0.0-beta.3
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 +13 -1
- package/CLAUDE.md +2 -0
- package/dist/cli.js +42 -0
- package/dist/cli.js.map +1 -1
- package/dist/mcp/publish-auth-injector.d.ts +22 -0
- package/dist/mcp/publish-auth-injector.d.ts.map +1 -0
- package/dist/mcp/publish-auth-injector.js +100 -0
- package/dist/mcp/publish-auth-injector.js.map +1 -0
- package/package.json +1 -2
|
@@ -67,10 +67,22 @@ After the first publish `public/manifest.json` holds the dev `appId`; later iter
|
|
|
67
67
|
| Production | `My App` | publish only when the user explicitly asks |
|
|
68
68
|
</dev-publish>
|
|
69
69
|
|
|
70
|
+
<credentials>
|
|
71
|
+
## Credentials — Read This Before Publishing Fails
|
|
72
|
+
|
|
73
|
+
The publish CLI (`@hailer/app-sdk`'s `publish.cjs`, wrapped as `npm run publish-*`) authenticates ONLY from, in order: `--user-api-key` flag → `USER_API_KEY` / `HAILER_USER_API_KEY` env vars → `~/.env` in the HOME directory → `--email` flag (interactive password prompt — useless for agents).
|
|
74
|
+
|
|
75
|
+
- **Hailer Studio:** `~/.env` is auto-injected — publishing just works, no flags.
|
|
76
|
+
- **Local machines:** the `npx hailer-mcp` server self-provisions on first boot — it mints a user API key from the project bot's credentials and writes `HAILER_USER_API_KEY` to `~/.env` (Studio's mechanism, reproduced locally). So once the local MCP server has run once, `npm run publish-production` works flag-free. (Opt out: `HAILER_MCP_NO_PUBLISH_AUTH=true`.)
|
|
77
|
+
- **If publishing still hits exit code 10** (no auth — the CLI prints usage and quits): the local server hasn't run yet, or injection was disabled. Start `npx hailer-mcp` once, OR ask the user for a Hailer user API key (Hailer → profile → API keys) and pass `-- --user-api-key <key>`. **Never read passwords from .env, never log in via curl, never probe API endpoints for keys.**
|
|
78
|
+
|
|
79
|
+
Other exit codes: 8 = login failed (bad key/credentials), 7 = bundle isn't a .tgz (build problem), loud version error = `--market` without `version`/`versionDescription` in the manifest.
|
|
80
|
+
</credentials>
|
|
81
|
+
|
|
70
82
|
<validate>
|
|
71
83
|
## Step 4 — Validate BEFORE Any Production Publish
|
|
72
84
|
|
|
73
|
-
|
|
85
|
+
Check before publishing:
|
|
74
86
|
|
|
75
87
|
1. Read `public/manifest.json`
|
|
76
88
|
2. `appId` exists, 24 chars — required for any non-`--create` publish (auto-written by `--create`)
|
package/CLAUDE.md
CHANGED
|
@@ -104,6 +104,8 @@ Always use `:force` — the non-force variants prompt interactively.
|
|
|
104
104
|
| Publish | `cd app && npm run publish-production` (`--market` for marketplace versions); then share via `manage_app` add_member |
|
|
105
105
|
| Register / share | Edit `workspace/apps.ts` → `npx hailer-sdk ws-config apps push --force` |
|
|
106
106
|
|
|
107
|
+
Publish auth: works flag-free once the local `npx hailer-mcp` server has run once — it mints a user API key from the project bot creds into `~/.env`, mirroring Studio. Exit 10 = no auth yet → start the server once, or pass `-- --user-api-key <key>`; NEVER read passwords or probe login endpoints. Details: `create-and-publish-app` skill.
|
|
108
|
+
|
|
107
109
|
## When MCP Tools Are the Answer
|
|
108
110
|
|
|
109
111
|
The MCP server exposes a curated runtime surface the SDK can't replicate locally:
|
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
3
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
37
|
// Parse port before loading app (which reads process.env.PORT)
|
|
5
38
|
// Supports: hailer-mcp --port 3031 | hailer-mcp -p 3031 | npm run mcp-start --port=3031
|
|
@@ -27,4 +60,13 @@ if (!process.env.MCP_DEFAULT_PROFILE) {
|
|
|
27
60
|
process.env.MCP_DEFAULT_PROFILE = 'sdk';
|
|
28
61
|
}
|
|
29
62
|
require("./app");
|
|
63
|
+
// Studio-style publish auth: on the CLI path (prod runs `node dist/app.js`,
|
|
64
|
+
// never this bin), ensure ~/.env has a user API key so `npm run publish-*`
|
|
65
|
+
// works flag-free. Fire-and-forget — never blocks or fails server boot.
|
|
66
|
+
// Opt out with HAILER_MCP_NO_PUBLISH_AUTH=true.
|
|
67
|
+
const publishAuthOptOut = /^true$/i.test(process.env.HAILER_MCP_NO_PUBLISH_AUTH ?? '');
|
|
68
|
+
if (!publishAuthOptOut) {
|
|
69
|
+
Promise.resolve().then(() => __importStar(require('./mcp/publish-auth-injector'))).then(({ injectLocalPublishAuth }) => injectLocalPublishAuth())
|
|
70
|
+
.catch(() => { });
|
|
71
|
+
}
|
|
30
72
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,+DAA+D;AAC/D,wFAAwF;AACxF,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACnC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,MAAM;IACV,CAAC;AACL,CAAC;AAED,4DAA4D;AAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;AACnD,CAAC;AAED,0EAA0E;AAC1E,0EAA0E;AAC1E,gFAAgF;AAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9C,MAAM;IACV,CAAC;AACL,CAAC;AACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,KAAK,CAAC;AAC5C,CAAC;AAED,iBAAe;AAEf,4EAA4E;AAC5E,2EAA2E;AAC3E,wEAAwE;AACxE,gDAAgD;AAChD,MAAM,iBAAiB,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;AACvF,IAAI,CAAC,iBAAiB,EAAE,CAAC;IACrB,kDAAO,6BAA6B,IAC/B,IAAI,CAAC,CAAC,EAAE,sBAAsB,EAAE,EAAE,EAAE,CAAC,sBAAsB,EAAE,CAAC;SAC9D,KAAK,CAAC,GAAG,EAAE,GAAqB,CAAC,CAAC,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local publish-auth injection — mirrors Hailer Studio's flow for the
|
|
3
|
+
* `npx hailer-mcp` CLI path (never the prod server, which runs `node dist/app.js`).
|
|
4
|
+
*
|
|
5
|
+
* Studio writes the session's user API key into the sandbox's `~/.env` so the
|
|
6
|
+
* app publish script (`@hailer/app-sdk` publish.cjs) authenticates with no
|
|
7
|
+
* flags. Locally there's no session key, but the CLI server already has the
|
|
8
|
+
* project bot's credentials in CLIENT_CONFIGS — so on first boot we mint a
|
|
9
|
+
* user API key on the bot's authenticated socket and write it to `~/.env`,
|
|
10
|
+
* exactly where publish.cjs looks.
|
|
11
|
+
*
|
|
12
|
+
* Idempotent (skips if a key is already present), best-effort (never blocks
|
|
13
|
+
* or fails server startup), and CLI-gated (prod never imports this).
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Mint a publish user API key from the project bot's CLIENT_CONFIGS account
|
|
17
|
+
* and append it to ~/.env. No-op when a key already exists or no account is
|
|
18
|
+
* configured. Swallows every error — publishing convenience must never break
|
|
19
|
+
* the server.
|
|
20
|
+
*/
|
|
21
|
+
export declare function injectLocalPublishAuth(): Promise<void>;
|
|
22
|
+
//# sourceMappingURL=publish-auth-injector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-auth-injector.d.ts","sourceRoot":"","sources":["../../src/mcp/publish-auth-injector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA+BH;;;;;GAKG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CA2D5D"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Local publish-auth injection — mirrors Hailer Studio's flow for the
|
|
4
|
+
* `npx hailer-mcp` CLI path (never the prod server, which runs `node dist/app.js`).
|
|
5
|
+
*
|
|
6
|
+
* Studio writes the session's user API key into the sandbox's `~/.env` so the
|
|
7
|
+
* app publish script (`@hailer/app-sdk` publish.cjs) authenticates with no
|
|
8
|
+
* flags. Locally there's no session key, but the CLI server already has the
|
|
9
|
+
* project bot's credentials in CLIENT_CONFIGS — so on first boot we mint a
|
|
10
|
+
* user API key on the bot's authenticated socket and write it to `~/.env`,
|
|
11
|
+
* exactly where publish.cjs looks.
|
|
12
|
+
*
|
|
13
|
+
* Idempotent (skips if a key is already present), best-effort (never blocks
|
|
14
|
+
* or fails server startup), and CLI-gated (prod never imports this).
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.injectLocalPublishAuth = injectLocalPublishAuth;
|
|
18
|
+
const cli_1 = require("@hailer/cli");
|
|
19
|
+
const fs_1 = require("fs");
|
|
20
|
+
const os_1 = require("os");
|
|
21
|
+
const path_1 = require("path");
|
|
22
|
+
const config_1 = require("../config");
|
|
23
|
+
const logger_1 = require("../lib/logger");
|
|
24
|
+
const logger = (0, logger_1.createLogger)({ component: 'publish-auth' });
|
|
25
|
+
/** Already have a publish key on this machine? (~/.env or the live env) */
|
|
26
|
+
function publishKeyAlreadyPresent(envPath) {
|
|
27
|
+
if (process.env.HAILER_USER_API_KEY || process.env.USER_API_KEY) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
if (!(0, fs_1.existsSync)(envPath)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
return /^\s*(HAILER_USER_API_KEY|USER_API_KEY)\s*=/m.test((0, fs_1.readFileSync)(envPath, 'utf-8'));
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Mint a publish user API key from the project bot's CLIENT_CONFIGS account
|
|
42
|
+
* and append it to ~/.env. No-op when a key already exists or no account is
|
|
43
|
+
* configured. Swallows every error — publishing convenience must never break
|
|
44
|
+
* the server.
|
|
45
|
+
*/
|
|
46
|
+
async function injectLocalPublishAuth() {
|
|
47
|
+
const envPath = (0, path_1.join)((0, os_1.homedir)(), '.env');
|
|
48
|
+
if (publishKeyAlreadyPresent(envPath)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const accounts = Object.values(config_1.environment.CLIENT_CONFIGS);
|
|
52
|
+
const account = accounts[0];
|
|
53
|
+
if (!account) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const isLocalDev = account.apiBaseUrl.includes('local.gd') || account.apiBaseUrl.includes('localhost');
|
|
57
|
+
let client;
|
|
58
|
+
try {
|
|
59
|
+
client = await cli_1.Client.create({
|
|
60
|
+
host: account.apiBaseUrl,
|
|
61
|
+
username: account.email,
|
|
62
|
+
password: account.password,
|
|
63
|
+
...(isLocalDev && { rejectUnauthorized: false }),
|
|
64
|
+
});
|
|
65
|
+
const init = await client.request('v2.core.init', [['network']]);
|
|
66
|
+
const workspaceId = init.network?._id;
|
|
67
|
+
if (!workspaceId) {
|
|
68
|
+
logger.debug('Skipping publish-auth injection — no workspace on bot account');
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const keyName = `hailer-mcp local (${(0, os_1.hostname)()})`;
|
|
72
|
+
const created = await client.request('v3.user.apikey.create', [keyName, workspaceId, []]);
|
|
73
|
+
if (!created?.key) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// ~/.env holds a live credential — keep it owner-only (0600). Create
|
|
77
|
+
// it with restrictive mode if absent, and tighten an existing file too.
|
|
78
|
+
if (!(0, fs_1.existsSync)(envPath)) {
|
|
79
|
+
(0, fs_1.writeFileSync)(envPath, '', { mode: 0o600 });
|
|
80
|
+
}
|
|
81
|
+
(0, fs_1.chmodSync)(envPath, 0o600);
|
|
82
|
+
(0, fs_1.appendFileSync)(envPath, `\n# Added by hailer-mcp for local app publishing\nHAILER_USER_API_KEY="${created.key}"\n`);
|
|
83
|
+
process.env.HAILER_USER_API_KEY = created.key;
|
|
84
|
+
logger.info('Minted local publish key → ~/.env', { keyName, workspaceId });
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
logger.debug('Publish-auth injection skipped', {
|
|
88
|
+
error: error instanceof Error ? error.message : String(error),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
try {
|
|
93
|
+
client?.disconnect();
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// best-effort cleanup
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=publish-auth-injector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish-auth-injector.js","sourceRoot":"","sources":["../../src/mcp/publish-auth-injector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hailer/mcp",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.3",
|
|
4
4
|
"config": {
|
|
5
5
|
"docker": {
|
|
6
6
|
"registry": "registry.gitlab.com/hailer-repos/hailer-mcp"
|
|
@@ -56,7 +56,6 @@
|
|
|
56
56
|
"form-data": "^4.0.4",
|
|
57
57
|
"mammoth": "^1.12.0",
|
|
58
58
|
"openai": "^5.5.1",
|
|
59
|
-
"sharp": "^0.34.5",
|
|
60
59
|
"tar": "^7.5.13",
|
|
61
60
|
"typescript-language-server": "^5.1.3",
|
|
62
61
|
"ws": "^8.20.0",
|