@cr8rcho/alkahest 0.1.14 → 0.1.16

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.ko.md CHANGED
@@ -145,7 +145,6 @@ claude mcp add alkahest -s project -- alkahest mcp
145
145
  ```bash
146
146
  claude mcp add alkahest -s project \
147
147
  -e ALKAHEST_TOKEN=alk_xxxxx \
148
- -e ALKAHEST_API_URL=https://<ref>.supabase.co/functions/v1 \
149
148
  -- alkahest mcp
150
149
  ```
151
150
 
@@ -156,15 +155,16 @@ claude mcp add alkahest -s project \
156
155
  "command": "alkahest",
157
156
  "args": ["mcp"],
158
157
  "env": {
159
- "ALKAHEST_TOKEN": "alk_xxxxx",
160
- "ALKAHEST_API_URL": "https://<ref>.supabase.co/functions/v1"
158
+ "ALKAHEST_TOKEN": "alk_xxxxx"
161
159
  }
162
160
  }
163
161
  }
164
162
  }
165
163
  ```
166
164
 
167
- 이미 `alkahest login` 을 했다면 저장된 자격증명이 fallback으로 쓰여서 env 없이도 됩니다. 그다음 에이전트에게 *"이거 publish 해줘"* 라고만 하면 링크를 돌려줍니다.
165
+ 토큰만 있으면 됩니다 — CLI가 호스팅 서비스(alkahest.app)를 기본값으로 씁니다. 이미 `alkahest login` 을 했다면 토큰 env조차 생략 가능합니다(저장된 자격증명 사용). 그다음 에이전트에게 *"이거 publish 해줘"* 라고만 하면 링크를 돌려줍니다.
166
+
167
+ > 백엔드를 직접 셀프호스팅한다면 `-e ALKAHEST_API_URL=https://<ref>.supabase.co/functions/v1` (또는 `alkahest login --api <url>`)로 CLI를 그쪽으로 가리키세요.
168
168
 
169
169
  ## 산출물 — `.alkahest/`
170
170
 
package/README.md CHANGED
@@ -150,7 +150,6 @@ The agent reads with `get_screen` / `who_calls` and writes back with `set_summar
150
150
  ```bash
151
151
  claude mcp add alkahest -s project \
152
152
  -e ALKAHEST_TOKEN=alk_xxxxx \
153
- -e ALKAHEST_API_URL=https://<ref>.supabase.co/functions/v1 \
154
153
  -- alkahest mcp
155
154
  ```
156
155
 
@@ -161,15 +160,16 @@ claude mcp add alkahest -s project \
161
160
  "command": "alkahest",
162
161
  "args": ["mcp"],
163
162
  "env": {
164
- "ALKAHEST_TOKEN": "alk_xxxxx",
165
- "ALKAHEST_API_URL": "https://<ref>.supabase.co/functions/v1"
163
+ "ALKAHEST_TOKEN": "alk_xxxxx"
166
164
  }
167
165
  }
168
166
  }
169
167
  }
170
168
  ```
171
169
 
172
- If you've already run `alkahest login`, the saved credentials are used as a fallback — no env needed. Then just ask the agent to *"publish this"* and it returns the link.
170
+ The token is all you need — the CLI defaults to the hosted service (alkahest.app). If you've already run `alkahest login`, even the token env is optional (saved credentials are used). Then just ask the agent to *"publish this"* and it returns the link.
171
+
172
+ > Self-hosting your own backend? Point the CLI at it with `-e ALKAHEST_API_URL=https://<ref>.supabase.co/functions/v1` (or `alkahest login --api <url>`).
173
173
 
174
174
  ## Output — `.alkahest/`
175
175
 
@@ -10,9 +10,9 @@
10
10
  --bg: #ffffff;
11
11
  --panel: #f7f7f8;
12
12
  --panel-soft: #ffffff;
13
- --line: #e4e4e7;
14
- --ink: #18181b;
15
- --muted: #71717a;
13
+ --line: #e5e5e5;
14
+ --ink: #111111;
15
+ --muted: #666666;
16
16
  --node-fill: #ffffff; /* screen */
17
17
  --node-stroke: #c4c4cc;
18
18
  --node-ink: #27272a;
@@ -22,19 +22,19 @@
22
22
  --edge: #a1a1aa;
23
23
  }
24
24
  html[data-theme="dark"] {
25
- --bg: #0d1117;
26
- --panel: #161b22;
27
- --panel-soft: #1c2128;
28
- --line: #2a2f37;
29
- --ink: #e6edf3;
30
- --muted: #8b949e;
31
- --node-fill: #1c2128;
25
+ --bg: #0b0b0c;
26
+ --panel: #161619;
27
+ --panel-soft: #1d1d21;
28
+ --line: #2a2a2e;
29
+ --ink: #f4f4f5;
30
+ --muted: #9ca3af;
31
+ --node-fill: #1d1d21;
32
32
  --node-stroke: #444c56;
33
- --node-ink: #e6edf3;
34
- --res-fill: #30404f;
33
+ --node-ink: #f4f4f5;
34
+ --res-fill: #2e2e33;
35
35
  --entry: #3fb950;
36
- --accent: #58a6ff;
37
- --edge: #484f58;
36
+ --accent: #3b82f6;
37
+ --edge: #4a4a50;
38
38
  }
39
39
  * { box-sizing: border-box; }
40
40
  html, body { margin: 0; height: 100%; }
@@ -1,12 +1,11 @@
1
- import { loadCredentials, resolveApiUrl, saveCredentials } from "../core/credentials.js";
1
+ import { loadCredentials, saveCredentials } from "../core/credentials.js";
2
2
  export async function login(options) {
3
3
  const creds = loadCredentials();
4
- const apiUrl = resolveApiUrl(options.api, creds);
5
4
  if (!options.token) {
6
5
  console.log("[alkahest] login — paste a token from the web app:");
7
6
  console.log(" 1. Open the Alkahest web app and sign in with GitHub");
8
7
  console.log(" 2. Account → Create token, copy the alk_… value");
9
- console.log(" 3. Run: alkahest login --token alk_xxxxx" + (apiUrl ? "" : " --api <url>"));
8
+ console.log(" 3. Run: alkahest login --token alk_xxxxx");
10
9
  process.exitCode = 1;
11
10
  return;
12
11
  }
@@ -16,12 +15,12 @@ export async function login(options) {
16
15
  return;
17
16
  }
18
17
  creds.token = options.token;
19
- if (apiUrl)
20
- creds.apiUrl = apiUrl;
18
+ // Persist the API URL only when the user explicitly chose one; the hosted default
19
+ // (resolveApiUrl's fallback) is left implicit so a future default change is picked up.
20
+ const explicitApi = options.api || process.env.ALKAHEST_API_URL;
21
+ if (explicitApi)
22
+ creds.apiUrl = explicitApi.replace(/\/+$/, "");
21
23
  saveCredentials(creds);
22
24
  console.log("[alkahest] logged in. Token saved to ~/.alkahest/credentials.json");
23
- if (!apiUrl) {
24
- console.log(" note: no API URL set — pass --api <url> or set ALKAHEST_API_URL before publishing.");
25
- }
26
25
  }
27
26
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAazF,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,4CAA4C,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3F,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,MAAM;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IAClC,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC;IACtG,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAa1E,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB;IAC/C,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAEhC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,6DAA6D,CAAC,CAAC;QAC7E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,kFAAkF;IAClF,uFAAuF;IACvF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;IAChE,IAAI,WAAW;QAAE,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChE,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;AACnF,CAAC"}
@@ -14,7 +14,7 @@ export interface Credentials {
14
14
  }
15
15
  export declare function loadCredentials(): Credentials;
16
16
  export declare function saveCredentials(creds: Credentials): void;
17
- /** API base URL resolved from flag → saved creds → env. */
17
+ /** API base URL resolved from flag → saved creds → env → hosted default. */
18
18
  export declare function resolveApiUrl(flag: string | undefined, creds: Credentials): string;
19
19
  /**
20
20
  * Publish token resolved from arg → saved creds → env.
@@ -3,6 +3,13 @@ import { join } from "node:path";
3
3
  import { homedir } from "node:os";
4
4
  const CRED_DIR = join(homedir(), ".alkahest");
5
5
  const CRED_FILE = join(CRED_DIR, "credentials.json");
6
+ /**
7
+ * The hosted service (alkahest.app). Used as the final fallback so that pointing
8
+ * the CLI / MCP at the public instance needs no config — the URL is not a secret
9
+ * (it ships in every served page). Self-hosters override via --api, `alkahest login
10
+ * --api <url>`, or ALKAHEST_API_URL.
11
+ */
12
+ const DEFAULT_API_URL = "https://ytcmzkrvtomtcrcyqqcb.supabase.co/functions/v1";
6
13
  export function loadCredentials() {
7
14
  try {
8
15
  return JSON.parse(readFileSync(CRED_FILE, "utf8"));
@@ -15,9 +22,9 @@ export function saveCredentials(creds) {
15
22
  mkdirSync(CRED_DIR, { recursive: true });
16
23
  writeFileSync(CRED_FILE, JSON.stringify(creds, null, 2) + "\n");
17
24
  }
18
- /** API base URL resolved from flag → saved creds → env. */
25
+ /** API base URL resolved from flag → saved creds → env → hosted default. */
19
26
  export function resolveApiUrl(flag, creds) {
20
- return (flag || creds.apiUrl || process.env.ALKAHEST_API_URL || "").replace(/\/+$/, "");
27
+ return (flag || creds.apiUrl || process.env.ALKAHEST_API_URL || DEFAULT_API_URL).replace(/\/+$/, "");
21
28
  }
22
29
  /**
23
30
  * Publish token resolved from arg → saved creds → env.
@@ -1 +1 @@
1
- {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/core/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAelC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAErD,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAgB,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAAC,IAAwB,EAAE,KAAkB;IACxE,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1F,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAuB,EAAE,KAAkB;IACtE,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/core/credentials.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAelC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;AAErD;;;;;GAKG;AACH,MAAM,eAAe,GAAG,uDAAuD,CAAC;AAEhF,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAgB,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAkB;IAChD,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAClE,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,aAAa,CAAC,IAAwB,EAAE,KAAkB;IACxE,OAAO,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,GAAuB,EAAE,KAAkB;IACtE,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AACzE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cr8rcho/alkahest",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },