relayax-cli 0.3.55 → 0.3.57
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/dist/commands/publish.js
CHANGED
|
@@ -709,8 +709,10 @@ function registerPublish(program) {
|
|
|
709
709
|
console.log(index_js_1.GUIDE_INSTRUCTION);
|
|
710
710
|
console.log(guideUrl);
|
|
711
711
|
console.log('```');
|
|
712
|
-
console.log(`\n \x1b[90m이미 relay를 쓰는 사용자는 이렇게만 하면 됩니다:\x1b[0m`);
|
|
713
|
-
console.log(
|
|
712
|
+
console.log(`\n \x1b[90m이미 relay를 쓰는 사용자는 이렇게만 하면 됩니다:\x1b[0m\n`);
|
|
713
|
+
console.log('```');
|
|
714
|
+
console.log(`/relay-install ${result.slug}`);
|
|
715
|
+
console.log('```');
|
|
714
716
|
if (config.visibility === 'private') {
|
|
715
717
|
console.log(`\n \x1b[90mprivate 에이전트:\x1b[0m`);
|
|
716
718
|
console.log(` 접근 링크를 생성한 뒤 guide.md?code={agent_code}로 공유하세요.`);
|
package/dist/mcp/server.js
CHANGED
|
@@ -260,6 +260,52 @@ function createMcpServer() {
|
|
|
260
260
|
}
|
|
261
261
|
return { content: [jsonText({ sources })] };
|
|
262
262
|
});
|
|
263
|
+
server.tool('relay_org_list', '소속 Organization 목록을 조회합니다', {}, async () => {
|
|
264
|
+
try {
|
|
265
|
+
const token = await (0, config_js_1.getValidToken)();
|
|
266
|
+
if (!token) {
|
|
267
|
+
return { content: [jsonText({ error: 'LOGIN_REQUIRED', message: '로그인이 필요합니다.' })], isError: true };
|
|
268
|
+
}
|
|
269
|
+
const { fetchMyOrgs } = await import('../commands/orgs.js');
|
|
270
|
+
const orgs = await fetchMyOrgs(token);
|
|
271
|
+
return { content: [jsonText({ orgs: orgs.map((o) => ({ id: o.id, slug: o.slug, name: o.name, role: o.role })) })] };
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
return { content: [jsonText({ error: String(err) })], isError: true };
|
|
275
|
+
}
|
|
276
|
+
});
|
|
277
|
+
server.tool('relay_org_create', '새 Organization을 생성합니다', {
|
|
278
|
+
name: zod_1.z.string().describe('Organization 이름'),
|
|
279
|
+
slug: zod_1.z.string().optional().describe('URL slug (미지정 시 이름에서 자동 생성)'),
|
|
280
|
+
}, async ({ name, slug: slugInput }) => {
|
|
281
|
+
try {
|
|
282
|
+
const token = await (0, config_js_1.getValidToken)();
|
|
283
|
+
if (!token) {
|
|
284
|
+
return { content: [jsonText({ error: 'LOGIN_REQUIRED', message: '로그인이 필요합니다.' })], isError: true };
|
|
285
|
+
}
|
|
286
|
+
const slug = slugInput ?? name
|
|
287
|
+
.toLowerCase()
|
|
288
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
289
|
+
.replace(/[\s]+/g, '-')
|
|
290
|
+
.replace(/-+/g, '-')
|
|
291
|
+
.replace(/^-|-$/g, '')
|
|
292
|
+
.slice(0, 50);
|
|
293
|
+
const res = await fetch(`${config_js_1.API_URL}/api/orgs`, {
|
|
294
|
+
method: 'POST',
|
|
295
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${token}` },
|
|
296
|
+
body: JSON.stringify({ name, slug }),
|
|
297
|
+
});
|
|
298
|
+
if (!res.ok) {
|
|
299
|
+
const body = await res.json().catch(() => ({ message: `${res.status}` }));
|
|
300
|
+
throw new Error(body.message ?? `Organization 생성 실패 (${res.status})`);
|
|
301
|
+
}
|
|
302
|
+
const org = await res.json();
|
|
303
|
+
return { content: [jsonText({ status: 'created', org })] };
|
|
304
|
+
}
|
|
305
|
+
catch (err) {
|
|
306
|
+
return { content: [jsonText({ error: String(err) })], isError: true };
|
|
307
|
+
}
|
|
308
|
+
});
|
|
263
309
|
server.tool('relay_publish', '에이전트를 마켓플레이스에 배포합니다 (.relay/ 디렉토리를 tar로 패키징하여 업로드)', {
|
|
264
310
|
project_path: zod_1.z.string().optional().describe('프로젝트 경로 (.relay/relay.yaml이 있는 디렉토리)'),
|
|
265
311
|
}, async ({ project_path }) => {
|
|
@@ -25,12 +25,11 @@ Node.js가 없는 경우:
|
|
|
25
25
|
|
|
26
26
|
### 환경 B (MCP)
|
|
27
27
|
|
|
28
|
-
**Step 1-1. 버전 확인**: `relay_check_update` tool을
|
|
29
|
-
- `
|
|
30
|
-
- `status: "
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
사용자가 업데이트 완료 후 Claude를 재시작하면 최신 MCP 서버가 적용됩니다.
|
|
28
|
+
**Step 1-1. 버전 확인**: `relay_check_update` tool을 호출하세요.
|
|
29
|
+
- tool이 없으면 `relay_status`로 대체하고, 응답의 `cli.update_available` 또는 `cli_update` 필드를 확인하세요.
|
|
30
|
+
- `status: "up_to_date"` (또는 `update_available: null`) → 최신 버전. Step 1-2로.
|
|
31
|
+
- `status: "updates_available"` (또는 `update_available`에 버전이 있음) → 사용자에게 업데이트 안내:
|
|
32
|
+
> CLI 업데이트가 있습니다. 터미널에서 `npm update -g relayax-cli`를 실행한 후 Claude를 재시작해주세요.
|
|
34
33
|
|
|
35
34
|
**Step 1-2. slash command 설치**: `relay_init` tool을 반드시 호출하세요.
|
|
36
35
|
- `/relay-install`, `/relay-publish` 등 slash command가 설치/업데이트됩니다.
|
|
@@ -61,5 +61,7 @@ cat ~/Library/Application\ Support/Claude/claude_desktop_config.json 2>/dev/null
|
|
|
61
61
|
| "relay login" | `relay login` | `relay_login` tool 호출 |
|
|
62
62
|
| "relay scan" | `relay package --init` | `relay_scan` tool 호출 |
|
|
63
63
|
| "relay check-update X" | `relay check-update X` | `relay_check_update` tool 호출 (`slug: "X"`) |
|
|
64
|
+
| "relay orgs list" | `relay orgs list --json` | `relay_org_list` tool 호출 |
|
|
65
|
+
| "relay orgs create" | `relay orgs create "이름" --json` | `relay_org_create` tool 호출 (`name: "이름"`) |
|
|
64
66
|
|
|
65
67
|
처음 판별한 환경을 이후 계속 사용합니다.
|
package/dist/prompts/publish.md
CHANGED
|
@@ -276,8 +276,15 @@ relay.yaml의 `visibility` 설정을 확인합니다.
|
|
|
276
276
|
**응답 처리:**
|
|
277
277
|
- "공개" → relay.yaml에 `visibility: public` 저장
|
|
278
278
|
- "링크 공유" → relay.yaml에 `visibility: private` 저장. 배포 후 웹 대시보드(/dashboard)에서 접근 링크를 생성하고 구매 안내를 설정할 수 있다고 안내.
|
|
279
|
-
- "비공개" →
|
|
280
|
-
-
|
|
279
|
+
- "비공개" → Organization 목록을 조회합니다:
|
|
280
|
+
- 환경 A: `relay orgs list --json` 실행
|
|
281
|
+
- 환경 B: `relay_status` tool 응답을 참고하거나, 배포 시 `relay_publish` tool이 org 선택 없이 배포하면 서버가 자동 매칭합니다.
|
|
282
|
+
- Org가 0개이면: Organization을 생성합니다.
|
|
283
|
+
- 환경 A: `relay orgs create "이름" --json` 실행
|
|
284
|
+
- 환경 B: `relay_org_create` MCP tool 호출 (tool이 없으면 사용자에게 "www.relayax.com/orgs 에서 Organization을 생성하세요"라고 안내)
|
|
285
|
+
- **사용자 질문 도구 호출:**
|
|
286
|
+
- question: "비공개 배포를 위해 Organization을 만들어야 합니다. Organization 이름을 입력하세요."
|
|
287
|
+
- 생성 후 해당 org를 선택하여 계속 진행합니다.
|
|
281
288
|
|
|
282
289
|
**사용자 질문 도구 호출 (Org가 1개여도 반드시 호출):**
|
|
283
290
|
- question: "어떤 Organization에 배포할까요?"
|
|
@@ -395,7 +402,9 @@ requires: env 2개, cli 1개
|
|
|
395
402
|
- options: `["배포", "취소"]`
|
|
396
403
|
|
|
397
404
|
**응답 처리:**
|
|
398
|
-
- "배포"
|
|
405
|
+
- "배포":
|
|
406
|
+
- 환경 A: `relay publish --json` 실행 (슬래시 커맨드에서 이미 버전/visibility를 relay.yaml에 저장했으므로 --json으로 인터랙티브 프롬프트 생략)
|
|
407
|
+
- 환경 B: `relay_publish` MCP tool 호출 (`project_path`는 프로젝트 루트 경로)
|
|
399
408
|
- "취소" → 중단
|
|
400
409
|
|
|
401
410
|
#### 3-3. 배포 완료 & 온보딩 가이드
|
|
@@ -428,7 +437,7 @@ https://relayax.com/api/registry/{owner}/{slug}/guide.md
|
|
|
428
437
|
- **private (personal)**: agent 접근 코드 사용. 코드를 사용하면 **이 에이전트에만** 접근 가능.
|
|
429
438
|
- `{owner}`과 `{slug}`는 배포된 에이전트의 실제 슬러그에서 추출합니다 (`@owner/slug` → `owner`, `slug`).
|
|
430
439
|
- "이 블록을 동료에게 공유하면 AI 에이전트가 환경 체크부터 설치까지 자동으로 해줍니다"라고 안내합니다.
|
|
431
|
-
- CLI가 이미 설치된 사용자를 위한 짧은 버전도 함께 표시: `/relay
|
|
440
|
+
- CLI가 이미 설치된 사용자를 위한 짧은 버전도 코드 블록으로 함께 표시: `/relay-install <slug>`
|
|
432
441
|
|
|
433
442
|
## 예시
|
|
434
443
|
|