doque 0.2.0 → 0.3.1

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.
Files changed (39) hide show
  1. package/README.md +197 -0
  2. package/dist/api/client.d.ts.map +1 -1
  3. package/dist/api/client.js +8 -4
  4. package/dist/api/client.js.map +1 -1
  5. package/dist/commands/activity.d.ts +3 -0
  6. package/dist/commands/activity.d.ts.map +1 -0
  7. package/dist/commands/activity.js +36 -0
  8. package/dist/commands/activity.js.map +1 -0
  9. package/dist/commands/auth.d.ts.map +1 -1
  10. package/dist/commands/auth.js +12 -8
  11. package/dist/commands/auth.js.map +1 -1
  12. package/dist/commands/cargo.d.ts.map +1 -1
  13. package/dist/commands/cargo.js +36 -0
  14. package/dist/commands/cargo.js.map +1 -1
  15. package/dist/commands/comment.d.ts +3 -0
  16. package/dist/commands/comment.d.ts.map +1 -0
  17. package/dist/commands/comment.js +45 -0
  18. package/dist/commands/comment.js.map +1 -0
  19. package/dist/commands/dump.d.ts +3 -0
  20. package/dist/commands/dump.d.ts.map +1 -0
  21. package/dist/commands/dump.js +214 -0
  22. package/dist/commands/dump.js.map +1 -0
  23. package/dist/commands/init.d.ts +4 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +134 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/journal.d.ts +3 -0
  28. package/dist/commands/journal.d.ts.map +1 -0
  29. package/dist/commands/journal.js +166 -0
  30. package/dist/commands/journal.js.map +1 -0
  31. package/dist/commands/ns.js +1 -1
  32. package/dist/commands/ns.js.map +1 -1
  33. package/dist/commands/vessel.js +1 -1
  34. package/dist/commands/vessel.js.map +1 -1
  35. package/dist/commands/whoami.js +3 -3
  36. package/dist/commands/whoami.js.map +1 -1
  37. package/dist/index.js +66 -25
  38. package/dist/index.js.map +1 -1
  39. package/package.json +14 -6
@@ -0,0 +1,214 @@
1
+ import chalk from 'chalk';
2
+ import { configStore } from '../config/store.js';
3
+ import { createApiClient } from '../api/client.js';
4
+ import { statusIcon, typeLabel, formatJson } from '../utils/output.js';
5
+ async function getVesselId(client, vesselSlug, namespace) {
6
+ if (vesselSlug)
7
+ return client.resolveVesselId(namespace, vesselSlug);
8
+ const ctx = configStore.getContext();
9
+ if (ctx.vessel) {
10
+ if (ctx.vesselId !== null)
11
+ return ctx.vesselId;
12
+ return client.resolveVesselId(namespace, ctx.vessel);
13
+ }
14
+ console.error(chalk.red('✗ vessel이 선택되지 않았습니다'));
15
+ console.error(` → ${chalk.cyan('doque vessel use <slug>')} 로 먼저 선택하세요`);
16
+ process.exit(1);
17
+ }
18
+ function renderTreeNode(node, prefix, isLast) {
19
+ const connector = isLast ? '└─' : '├─';
20
+ const icon = statusIcon(node.status);
21
+ const typeLbl = typeLabel(node.type);
22
+ console.log(`${prefix}${connector} ${chalk.gray(`#${node.id}`)} ${node.title} ${typeLbl} ${icon} ${chalk.gray(node.status)}`);
23
+ const childPrefix = prefix + (isLast ? ' ' : '│ ');
24
+ node.children.forEach((child, i) => {
25
+ renderTreeNode(child, childPrefix, i === node.children.length - 1);
26
+ });
27
+ }
28
+ function renderTree(roots) {
29
+ if (roots.length === 0) {
30
+ console.log(chalk.gray(' (결과 없음)'));
31
+ return;
32
+ }
33
+ roots.forEach((root, i) => {
34
+ const isLast = i === roots.length - 1;
35
+ const icon = statusIcon(root.status);
36
+ const typeLbl = typeLabel(root.type);
37
+ console.log(`${isLast ? '└─' : '├─'} ${chalk.gray(`#${root.id}`)} ${root.title} ${typeLbl} ${icon} ${chalk.gray(root.status)}`);
38
+ const childPrefix = isLast ? ' ' : '│ ';
39
+ root.children.forEach((child, ci) => {
40
+ renderTreeNode(child, childPrefix, ci === root.children.length - 1);
41
+ });
42
+ });
43
+ }
44
+ function renderMarkdownTree(roots, depth = 0) {
45
+ for (const node of roots) {
46
+ const indent = ' '.repeat(depth);
47
+ const icon = statusIcon(node.status);
48
+ console.log(`${indent}- ${chalk.gray(`#${node.id}`)} **${node.title}** \`${node.type}\` ${icon} ${node.status}`);
49
+ if (node.children.length > 0) {
50
+ renderMarkdownTree(node.children, depth + 1);
51
+ }
52
+ }
53
+ }
54
+ function renderFullNode(node, journals, prefix, isLast) {
55
+ const connector = isLast ? '└─' : '├─';
56
+ const icon = statusIcon(node.status);
57
+ const typeLbl = typeLabel(node.type);
58
+ console.log(`${prefix}${connector} ${chalk.gray(`#${node.id}`)} ${node.title} ${typeLbl} ${icon} ${chalk.gray(node.status)}`);
59
+ const childPrefix = prefix + (isLast ? ' ' : '│ ');
60
+ // journals for this cargo
61
+ const nodeJournals = journals.filter((j) => j.cargoId === node.id);
62
+ for (const j of nodeJournals) {
63
+ console.log(`${childPrefix} ${chalk.cyan(`[${j.type}]`)} ${j.title}`);
64
+ if (j.content) {
65
+ const lines = j.content.split('\n').slice(0, 3);
66
+ for (const line of lines) {
67
+ console.log(`${childPrefix} ${chalk.gray(line)}`);
68
+ }
69
+ if (j.content.split('\n').length > 3) {
70
+ console.log(`${childPrefix} ${chalk.gray('...')}`);
71
+ }
72
+ }
73
+ }
74
+ node.children.forEach((child, i) => {
75
+ renderFullNode(child, journals, childPrefix, i === node.children.length - 1);
76
+ });
77
+ }
78
+ function renderMarkdownFull(node, journals, depth = 0) {
79
+ const heading = '#'.repeat(Math.min(depth + 2, 6));
80
+ const icon = statusIcon(node.status);
81
+ console.log(`\n${heading} #${node.id} ${node.title}`);
82
+ console.log(`> \`${node.type}\` | ${icon} ${node.status}`);
83
+ if (node.description) {
84
+ console.log(`\n${node.description}`);
85
+ }
86
+ const nodeJournals = journals.filter((j) => j.cargoId === node.id);
87
+ if (nodeJournals.length > 0) {
88
+ console.log(`\n**Journals:**`);
89
+ for (const j of nodeJournals) {
90
+ console.log(`\n#### [${j.type}] ${j.title}`);
91
+ if (j.content)
92
+ console.log(j.content);
93
+ }
94
+ }
95
+ for (const child of node.children) {
96
+ renderMarkdownFull(child, journals, depth + 1);
97
+ }
98
+ }
99
+ function findCargoById(nodes, id) {
100
+ for (const node of nodes) {
101
+ if (node.id === id)
102
+ return node;
103
+ const found = findCargoById(node.children, id);
104
+ if (found)
105
+ return found;
106
+ }
107
+ return null;
108
+ }
109
+ export function registerDumpCommands(program) {
110
+ const dump = program.command('dump').description('프로젝트 데이터 덤프');
111
+ // doque dump tree [-v vessel] [-f format]
112
+ dump
113
+ .command('tree')
114
+ .description('Cargo 트리 (제목/상태만)')
115
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
116
+ .option('-f, --format <format>', '출력 형식 (table|json|markdown)', 'table')
117
+ .action(async (opts, cmd) => {
118
+ const globalOpts = cmd.optsWithGlobals();
119
+ const client = createApiClient(globalOpts);
120
+ const ns = await client.resolveNamespace(globalOpts.namespace);
121
+ const vesselId = await getVesselId(client, opts.vessel, ns);
122
+ const cargos = await client.get(`/api/vessels/${vesselId}/cargos`);
123
+ const format = globalOpts.format ?? opts.format ?? 'table';
124
+ if (format === 'json') {
125
+ formatJson(cargos);
126
+ return;
127
+ }
128
+ if (format === 'markdown') {
129
+ console.log('# Cargo Tree\n');
130
+ renderMarkdownTree(cargos);
131
+ return;
132
+ }
133
+ renderTree(cargos);
134
+ });
135
+ // doque dump full [-v vessel] [-f format]
136
+ dump
137
+ .command('full')
138
+ .description('Cargo + Journal 내용 전체')
139
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
140
+ .option('-f, --format <format>', '출력 형식 (table|json|markdown)', 'table')
141
+ .action(async (opts, cmd) => {
142
+ const globalOpts = cmd.optsWithGlobals();
143
+ const client = createApiClient(globalOpts);
144
+ const ns = await client.resolveNamespace(globalOpts.namespace);
145
+ const vesselId = await getVesselId(client, opts.vessel, ns);
146
+ const [cargos, journals] = await Promise.all([
147
+ client.get(`/api/vessels/${vesselId}/cargos`),
148
+ client.get(`/api/vessels/${vesselId}/journals`),
149
+ ]);
150
+ const format = globalOpts.format ?? opts.format ?? 'table';
151
+ if (format === 'json') {
152
+ formatJson({ cargos, journals });
153
+ return;
154
+ }
155
+ if (format === 'markdown') {
156
+ for (const root of cargos) {
157
+ renderMarkdownFull(root, journals);
158
+ }
159
+ return;
160
+ }
161
+ if (cargos.length === 0) {
162
+ console.log(chalk.gray(' (결과 없음)'));
163
+ return;
164
+ }
165
+ cargos.forEach((root, i) => {
166
+ renderFullNode(root, journals, '', i === cargos.length - 1);
167
+ });
168
+ });
169
+ // doque dump cargo <id> [--deep] [-v vessel] [-f format]
170
+ dump
171
+ .command('cargo <id>')
172
+ .description('특정 Cargo + 하위 + Journal')
173
+ .option('--deep', '하위 cargo 및 journal 포함')
174
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
175
+ .option('-f, --format <format>', '출력 형식 (table|json|markdown)', 'table')
176
+ .action(async (id, opts, cmd) => {
177
+ const globalOpts = cmd.optsWithGlobals();
178
+ const client = createApiClient(globalOpts);
179
+ const ns = await client.resolveNamespace(globalOpts.namespace);
180
+ const vesselId = await getVesselId(client, opts.vessel, ns);
181
+ const allCargos = await client.get(`/api/vessels/${vesselId}/cargos`);
182
+ const targetId = Number(id);
183
+ const node = findCargoById(allCargos, targetId);
184
+ if (!node) {
185
+ console.error(chalk.red(`✗ Cargo #${targetId}를 찾을 수 없습니다`));
186
+ process.exit(1);
187
+ }
188
+ const format = globalOpts.format ?? opts.format ?? 'table';
189
+ if (!opts.deep) {
190
+ // 단순 정보 출력
191
+ if (format === 'json') {
192
+ formatJson(node);
193
+ return;
194
+ }
195
+ const icon = statusIcon(node.status);
196
+ console.log(`${chalk.gray(`#${node.id}`)} ${chalk.bold(node.title)} ${typeLabel(node.type)} ${icon} ${chalk.gray(node.status)}`);
197
+ if (node.description)
198
+ console.log(` ${chalk.gray(node.description)}`);
199
+ return;
200
+ }
201
+ // deep: cargo + 하위 + journals
202
+ const journals = await client.get(`/api/vessels/${vesselId}/journals?cargoId=${targetId}`);
203
+ if (format === 'json') {
204
+ formatJson({ cargo: node, journals });
205
+ return;
206
+ }
207
+ if (format === 'markdown') {
208
+ renderMarkdownFull(node, journals);
209
+ return;
210
+ }
211
+ renderFullNode(node, journals, '', true);
212
+ });
213
+ }
214
+ //# sourceMappingURL=dump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump.js","sourceRoot":"","sources":["../../src/commands/dump.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Command } from 'commander';
2
+ export declare const SKILL_CONTENT = "# Doque \u2014 \uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC CLI\n\ndoque\uB294 \uBA40\uD2F0\uD658\uACBD \uD1B5\uD569 \uC791\uC5C5 \uAD00\uB9AC CLI\uC774\uB2E4.\n\uD504\uB85C\uC81D\uD2B8(Vessel), \uC791\uC5C5(Cargo), \uAE30\uB85D(Journal), \uB313\uAE00(Comment)\uC744 \uD130\uBBF8\uB110\uC5D0\uC11C \uAD00\uB9AC\uD55C\uB2E4.\n\uC774 \uC2A4\uD0AC\uC740 Claude Code\uAC00 doque-cli\uB97C \uC0AC\uC6A9\uD558\uC5EC \uD504\uB85C\uC81D\uD2B8\uB97C \uAD00\uB9AC\uD558\uB294 \uBC29\uBC95\uC744 \uC815\uC758\uD55C\uB2E4.\n\n## \uD575\uC2EC \uAC1C\uB150\n\n- Namespace: \uC0AC\uC6A9\uC790 \uACC4\uC815 \uB610\uB294 \uC870\uC9C1 \uB2E8\uC704. \uB85C\uADF8\uC778 \uC2DC \uAE30\uBCF8 namespace\uAC00 \uC124\uC815\uB41C\uB2E4.\n- Vessel: \uD504\uB85C\uC81D\uD2B8. namespace \uC548\uC5D0 \uC5EC\uB7EC vessel\uC744 \uAC00\uC9C4\uB2E4.\n- Cargo: \uC791\uC5C5. vessel \uC548\uC5D0 \uBB34\uD55C \uB381\uC2A4\uB85C \uC911\uCCA9 \uAC00\uB2A5 (epic > story > task).\n - \uD0C0\uC785: epic / story / task / todo / bug\n - \uC0C1\uD0DC: backlog / in_progress / review / done\n- Journal: cargo\uC5D0 \uB538\uB9B0 \uAE30\uB85D \uBB38\uC11C. ADR, \uC138\uC158 \uAE30\uB85D, \uC124\uACC4 \uBB38\uC11C \uB4F1.\n - \uD0C0\uC785: adr / session / design / note / memo / review / test\n- Comment: cargo\uC5D0 \uB538\uB9B0 \uB313\uAE00.\n\n## \uCEE8\uD14D\uC2A4\uD2B8\n\nCLI\uB294 \"\uD604\uC7AC namespace\"\uC640 \"\uD604\uC7AC vessel\"\uC744 \uAE30\uC5B5\uD55C\uB2E4.\nnamespace/vessel\uC744 \uC120\uD0DD\uD558\uBA74 \uC774\uD6C4 \uBA85\uB839\uC5B4\uB294 \uD574\uB2F9 \uCEE8\uD14D\uC2A4\uD2B8 \uAE30\uC900\uC73C\uB85C \uB3D9\uC791\uD55C\uB2E4.\n\n## \uC138\uC158 \uC2DC\uC791 \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n### 1. \uC778\uC99D \uD655\uC778\n```bash\ndoque auth status\n# \uC778\uC99D \uC548 \uB410\uC73C\uBA74:\ndoque auth login\n```\n\n### 2. \uCEE8\uD14D\uC2A4\uD2B8 \uD655\uC778 \uBC0F \uC124\uC815\n```bash\ndoque status # \uD604\uC7AC namespace, vessel, \uC11C\uBC84 \uD655\uC778\ndoque ns list # \uB0B4 namespace \uBAA9\uB85D\ndoque ns use <slug> # namespace \uC804\uD658 (\uD544\uC694 \uC2DC)\ndoque vessel list # \uD604\uC7AC namespace\uC758 \uD504\uB85C\uC81D\uD2B8 \uBAA9\uB85D\ndoque vessel use <slug> # \uD504\uB85C\uC81D\uD2B8 \uC120\uD0DD\n```\n\n### 3. \uC804\uCCB4 \uAD6C\uC870 \uD30C\uC545\n```bash\ndoque dump tree # \uC804\uCCB4 cargo \uD2B8\uB9AC (\uC81C\uBAA9/\uC0C1\uD0DC\uB9CC, \uBE60\uB984)\ndoque dump tree --format json # JSON\uC73C\uB85C \uD30C\uC2F1 \uAC00\uB2A5\uD55C \uD615\uD0DC\ndoque dump full # cargo + journal \uC804\uCCB4 \uB0B4\uC6A9 (\uC0C1\uC138)\ndoque dump full --format markdown # \uB9C8\uD06C\uB2E4\uC6B4 \uD615\uC2DD (\uCEE8\uD14D\uC2A4\uD2B8 \uB85C\uB529\uC5D0 \uC801\uD569)\ndoque dump cargo <id> --deep # \uD2B9\uC815 cargo + \uD558\uC704 + journal \uC0C1\uC138\n```\n\n## \uC791\uC5C5 \uAD00\uB9AC\n\n### Cargo CRUD\n```bash\ndoque cargo list # \uD604\uC7AC vessel\uC758 cargo \uBAA9\uB85D\ndoque cargo list --status in_progress # \uC0C1\uD0DC \uD544\uD130\ndoque cargo list --format json # JSON \uCD9C\uB825\ndoque cargo tree # \uD2B8\uB9AC \uBDF0 (\uC911\uCCA9 \uAD6C\uC870)\ndoque cargo create --title \"\uC81C\uBAA9\" --type task # \uC0DD\uC131\ndoque cargo create --title \"\uD558\uC704\" --type task --parent <id> # \uC911\uCCA9 \uC0DD\uC131\ndoque cargo info <id> # \uC0C1\uC138 \uC870\uD68C\ndoque cargo update <id> --title \"\uC0C8 \uC81C\uBAA9\" # \uC218\uC815\ndoque cargo start <id> # \uC2DC\uC791 (-> in_progress)\ndoque cargo done <id> # \uC644\uB8CC (-> done)\ndoque cargo status <id> review # \uC0C1\uD0DC \uBCC0\uACBD\ndoque cargo delete <id> # \uC0AD\uC81C\n```\n\n### Journal CRUD\n```bash\ndoque journal list <cargo-id> # journal \uBAA9\uB85D\ndoque journal create <cargo-id> --title \"ADR-001\" --type adr --content \"\uB0B4\uC6A9\"\ndoque journal create <cargo-id> --title \"SESSION-001\" --type session --stdin # stdin \uC785\uB825\ndoque journal read <journal-id> # journal \uB0B4\uC6A9 \uC77D\uAE30\ndoque journal update <journal-id> --content \"\uC218\uC815 \uB0B4\uC6A9\"\ndoque journal update <journal-id> --stdin # stdin\uC73C\uB85C \uC218\uC815\ndoque journal delete <journal-id> # \uC0AD\uC81C\n```\n\n### Comment\n```bash\ndoque comment list <cargo-id> # \uB313\uAE00 \uBAA9\uB85D\ndoque comment add <cargo-id> \"\uB0B4\uC6A9\" # \uB313\uAE00 \uCD94\uAC00\n```\n\n## \uC138\uC158 \uC885\uB8CC \uC6CC\uD06C\uD50C\uB85C\uC6B0\n\n1. \uC9C4\uD589\uD55C \uC791\uC5C5\uC744 journal\uB85C \uAE30\uB85D\n2. cargo \uC0C1\uD0DC \uC5C5\uB370\uC774\uD2B8 (start/done)\n3. \uBBF8\uC644\uB8CC \uC791\uC5C5 \uD655\uC778: doque cargo list --status in_progress\n\n## \uAE30\uD0C0 \uBA85\uB839\uC5B4\n\n```bash\ndoque whoami # \uC0AC\uC6A9\uC790 + \uCEE8\uD14D\uC2A4\uD2B8 + \uB514\uBC14\uC774\uC2A4 \uC815\uBCF4\ndoque activity list # \uB0B4 \uCD5C\uADFC \uD65C\uB3D9 \uC774\uB825\ndoque beacon list # \uB0B4 \uB4F1\uB85D \uB514\uBC14\uC774\uC2A4 \uBAA9\uB85D\ndoque config list # \uC124\uC815 \uC870\uD68C\ndoque config set <key> <value> # \uC124\uC815 \uBCC0\uACBD\n```\n\n## \uCD9C\uB825 \uD615\uC2DD\n\n\uBAA8\uB4E0 \uBAA9\uB85D/\uC870\uD68C \uBA85\uB839\uC5B4\uC5D0 --format \uC635\uC158 \uC0AC\uC6A9 \uAC00\uB2A5:\n- table (\uAE30\uBCF8): \uC0AC\uB78C\uC774 \uC77D\uAE30 \uC88B\uC740 \uD14C\uC774\uBE14\n- json: \uD30C\uC2F1 \uAC00\uB2A5\uD55C JSON\n- markdown: dump \uBA85\uB839\uC5B4 \uC804\uC6A9, \uCEE8\uD14D\uC2A4\uD2B8 \uB85C\uB529\uC5D0 \uC801\uD569\n\n## \uC124\uC815 \uD30C\uC77C\n\n- ~/.doque/config.json: \uC11C\uBC84 URL, \uC778\uC99D \uD1A0\uD070, \uCEE8\uD14D\uC2A4\uD2B8 (namespace, vessel)\n- ~/.doque/device.json: \uB514\uBC14\uC774\uC2A4 ID (\uC778\uC99D\uACFC \uB3C5\uB9BD, \uC7AC\uC124\uCE58\uD574\uB3C4 \uC720\uC9C0)\n";
3
+ export declare function registerInitCommand(program: Command): void;
4
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,o/LA+GzB,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoB1D"}
@@ -0,0 +1,134 @@
1
+ import chalk from 'chalk';
2
+ import * as fs from 'fs';
3
+ import * as path from 'path';
4
+ export const SKILL_CONTENT = `# Doque — 프로젝트 관리 CLI
5
+
6
+ doque는 멀티환경 통합 작업 관리 CLI이다.
7
+ 프로젝트(Vessel), 작업(Cargo), 기록(Journal), 댓글(Comment)을 터미널에서 관리한다.
8
+ 이 스킬은 Claude Code가 doque-cli를 사용하여 프로젝트를 관리하는 방법을 정의한다.
9
+
10
+ ## 핵심 개념
11
+
12
+ - Namespace: 사용자 계정 또는 조직 단위. 로그인 시 기본 namespace가 설정된다.
13
+ - Vessel: 프로젝트. namespace 안에 여러 vessel을 가진다.
14
+ - Cargo: 작업. vessel 안에 무한 뎁스로 중첩 가능 (epic > story > task).
15
+ - 타입: epic / story / task / todo / bug
16
+ - 상태: backlog / in_progress / review / done
17
+ - Journal: cargo에 딸린 기록 문서. ADR, 세션 기록, 설계 문서 등.
18
+ - 타입: adr / session / design / note / memo / review / test
19
+ - Comment: cargo에 딸린 댓글.
20
+
21
+ ## 컨텍스트
22
+
23
+ CLI는 "현재 namespace"와 "현재 vessel"을 기억한다.
24
+ namespace/vessel을 선택하면 이후 명령어는 해당 컨텍스트 기준으로 동작한다.
25
+
26
+ ## 세션 시작 워크플로우
27
+
28
+ ### 1. 인증 확인
29
+ \`\`\`bash
30
+ doque auth status
31
+ # 인증 안 됐으면:
32
+ doque auth login
33
+ \`\`\`
34
+
35
+ ### 2. 컨텍스트 확인 및 설정
36
+ \`\`\`bash
37
+ doque status # 현재 namespace, vessel, 서버 확인
38
+ doque ns list # 내 namespace 목록
39
+ doque ns use <slug> # namespace 전환 (필요 시)
40
+ doque vessel list # 현재 namespace의 프로젝트 목록
41
+ doque vessel use <slug> # 프로젝트 선택
42
+ \`\`\`
43
+
44
+ ### 3. 전체 구조 파악
45
+ \`\`\`bash
46
+ doque dump tree # 전체 cargo 트리 (제목/상태만, 빠름)
47
+ doque dump tree --format json # JSON으로 파싱 가능한 형태
48
+ doque dump full # cargo + journal 전체 내용 (상세)
49
+ doque dump full --format markdown # 마크다운 형식 (컨텍스트 로딩에 적합)
50
+ doque dump cargo <id> --deep # 특정 cargo + 하위 + journal 상세
51
+ \`\`\`
52
+
53
+ ## 작업 관리
54
+
55
+ ### Cargo CRUD
56
+ \`\`\`bash
57
+ doque cargo list # 현재 vessel의 cargo 목록
58
+ doque cargo list --status in_progress # 상태 필터
59
+ doque cargo list --format json # JSON 출력
60
+ doque cargo tree # 트리 뷰 (중첩 구조)
61
+ doque cargo create --title "제목" --type task # 생성
62
+ doque cargo create --title "하위" --type task --parent <id> # 중첩 생성
63
+ doque cargo info <id> # 상세 조회
64
+ doque cargo update <id> --title "새 제목" # 수정
65
+ doque cargo start <id> # 시작 (-> in_progress)
66
+ doque cargo done <id> # 완료 (-> done)
67
+ doque cargo status <id> review # 상태 변경
68
+ doque cargo delete <id> # 삭제
69
+ \`\`\`
70
+
71
+ ### Journal CRUD
72
+ \`\`\`bash
73
+ doque journal list <cargo-id> # journal 목록
74
+ doque journal create <cargo-id> --title "ADR-001" --type adr --content "내용"
75
+ doque journal create <cargo-id> --title "SESSION-001" --type session --stdin # stdin 입력
76
+ doque journal read <journal-id> # journal 내용 읽기
77
+ doque journal update <journal-id> --content "수정 내용"
78
+ doque journal update <journal-id> --stdin # stdin으로 수정
79
+ doque journal delete <journal-id> # 삭제
80
+ \`\`\`
81
+
82
+ ### Comment
83
+ \`\`\`bash
84
+ doque comment list <cargo-id> # 댓글 목록
85
+ doque comment add <cargo-id> "내용" # 댓글 추가
86
+ \`\`\`
87
+
88
+ ## 세션 종료 워크플로우
89
+
90
+ 1. 진행한 작업을 journal로 기록
91
+ 2. cargo 상태 업데이트 (start/done)
92
+ 3. 미완료 작업 확인: doque cargo list --status in_progress
93
+
94
+ ## 기타 명령어
95
+
96
+ \`\`\`bash
97
+ doque whoami # 사용자 + 컨텍스트 + 디바이스 정보
98
+ doque activity list # 내 최근 활동 이력
99
+ doque beacon list # 내 등록 디바이스 목록
100
+ doque config list # 설정 조회
101
+ doque config set <key> <value> # 설정 변경
102
+ \`\`\`
103
+
104
+ ## 출력 형식
105
+
106
+ 모든 목록/조회 명령어에 --format 옵션 사용 가능:
107
+ - table (기본): 사람이 읽기 좋은 테이블
108
+ - json: 파싱 가능한 JSON
109
+ - markdown: dump 명령어 전용, 컨텍스트 로딩에 적합
110
+
111
+ ## 설정 파일
112
+
113
+ - ~/.doque/config.json: 서버 URL, 인증 토큰, 컨텍스트 (namespace, vessel)
114
+ - ~/.doque/device.json: 디바이스 ID (인증과 독립, 재설치해도 유지)
115
+ `;
116
+ export function registerInitCommand(program) {
117
+ program
118
+ .command('init')
119
+ .description('현재 디렉토리에 .claude/skills/doque/SKILL.md 생성')
120
+ .action(() => {
121
+ const skillDir = path.join(process.cwd(), '.claude', 'skills', 'doque');
122
+ const skillPath = path.join(skillDir, 'SKILL.md');
123
+ if (!fs.existsSync(skillDir)) {
124
+ fs.mkdirSync(skillDir, { recursive: true });
125
+ }
126
+ if (fs.existsSync(skillPath)) {
127
+ console.log(chalk.yellow(`! SKILL.md가 이미 존재합니다: ${skillPath}`));
128
+ return;
129
+ }
130
+ fs.writeFileSync(skillPath, SKILL_CONTENT, 'utf-8');
131
+ console.log(chalk.green(`✓ SKILL.md 생성됨: ${chalk.cyan(skillPath)}`));
132
+ });
133
+ }
134
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+G5B,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,2CAA2C,CAAC;SACxD,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAElD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,SAAS,EAAE,CAAC,CAAC,CAAC;YAChE,OAAO;QACT,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerJournalCommands(program: Command): void;
3
+ //# sourceMappingURL=journal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.d.ts","sourceRoot":"","sources":["../../src/commands/journal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsDpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkK9D"}
@@ -0,0 +1,166 @@
1
+ import chalk from 'chalk';
2
+ import { configStore } from '../config/store.js';
3
+ import { createApiClient } from '../api/client.js';
4
+ import { formatTable, formatJson, formatDetail } from '../utils/output.js';
5
+ async function readStdin() {
6
+ if (process.stdin.isTTY)
7
+ return '';
8
+ const chunks = [];
9
+ for await (const chunk of process.stdin)
10
+ chunks.push(chunk);
11
+ return Buffer.concat(chunks).toString('utf-8');
12
+ }
13
+ function journalTypeLabel(type) {
14
+ switch (type.toLowerCase()) {
15
+ case 'adr': return chalk.magenta('[adr]');
16
+ case 'session': return chalk.blue('[session]');
17
+ case 'design': return chalk.cyan('[design]');
18
+ case 'note': return chalk.yellow('[note]');
19
+ case 'memo': return chalk.gray('[memo]');
20
+ default: return chalk.gray(`[${type}]`);
21
+ }
22
+ }
23
+ async function getVesselId(client, vesselSlug, namespace) {
24
+ if (vesselSlug)
25
+ return client.resolveVesselId(namespace, vesselSlug);
26
+ const ctx = configStore.getContext();
27
+ if (ctx.vessel) {
28
+ if (ctx.vesselId !== null)
29
+ return ctx.vesselId;
30
+ return client.resolveVesselId(namespace, ctx.vessel);
31
+ }
32
+ console.error(chalk.red('✗ vessel이 선택되지 않았습니다'));
33
+ console.error(` → ${chalk.cyan('doque vessel use <slug>')} 로 먼저 선택하세요`);
34
+ process.exit(1);
35
+ }
36
+ export function registerJournalCommands(program) {
37
+ const journal = program.command('journal').description('Journal(기록) 관리');
38
+ // doque journal list <cargo-id> [-v vessel] [-f format]
39
+ journal
40
+ .command('list <cargo-id>')
41
+ .description('Cargo의 Journal 목록 조회')
42
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
43
+ .option('-f, --format <format>', '출력 형식 (table|json)', 'table')
44
+ .action(async (cargoId, opts, cmd) => {
45
+ const globalOpts = cmd.optsWithGlobals();
46
+ const client = createApiClient(globalOpts);
47
+ const ns = await client.resolveNamespace(globalOpts.namespace);
48
+ const vesselId = await getVesselId(client, opts.vessel, ns);
49
+ const journals = await client.get(`/api/vessels/${vesselId}/journals?cargoId=${cargoId}`);
50
+ const format = opts.format ?? globalOpts.format ?? 'table';
51
+ if (format === 'json') {
52
+ formatJson(journals);
53
+ return;
54
+ }
55
+ if (journals.length === 0) {
56
+ console.log(chalk.gray(' (결과 없음)'));
57
+ return;
58
+ }
59
+ formatTable(journals.map((j) => ({
60
+ ID: chalk.gray(`#${j.id}`),
61
+ 타입: journalTypeLabel(j.type),
62
+ 제목: j.title,
63
+ 작성일: new Date(j.createdAt).toLocaleDateString(),
64
+ })), ['ID', '타입', '제목', '작성일']);
65
+ });
66
+ // doque journal create <cargo-id> --title "..." --type adr|... [--content "..." | --stdin]
67
+ journal
68
+ .command('create <cargo-id>')
69
+ .description('Journal 생성')
70
+ .requiredOption('--title <title>', '제목')
71
+ .option('--type <type>', '타입 (adr|session|design|note|memo)', 'memo')
72
+ .option('--content <content>', '내용')
73
+ .option('--stdin', 'stdin에서 내용 읽기')
74
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
75
+ .action(async (cargoId, opts, cmd) => {
76
+ const globalOpts = cmd.optsWithGlobals();
77
+ const client = createApiClient(globalOpts);
78
+ const ns = await client.resolveNamespace(globalOpts.namespace);
79
+ const vesselId = await getVesselId(client, opts.vessel, ns);
80
+ let content = opts.content ?? '';
81
+ if (opts.stdin) {
82
+ content = await readStdin();
83
+ }
84
+ const j = await client.post(`/api/vessels/${vesselId}/journals`, {
85
+ cargoId: Number(cargoId),
86
+ type: opts.type,
87
+ title: opts.title,
88
+ content,
89
+ });
90
+ console.log(chalk.green(`✓ Journal 생성됨: #${j.id} "${j.title}"`));
91
+ });
92
+ // doque journal read <journal-id> [-v vessel] [-f format]
93
+ journal
94
+ .command('read <journal-id>')
95
+ .description('Journal 상세 조회 (내용 포함)')
96
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
97
+ .option('-f, --format <format>', '출력 형식 (table|json)', 'table')
98
+ .action(async (journalId, opts, cmd) => {
99
+ const globalOpts = cmd.optsWithGlobals();
100
+ const client = createApiClient(globalOpts);
101
+ const ns = await client.resolveNamespace(globalOpts.namespace);
102
+ const vesselId = await getVesselId(client, opts.vessel, ns);
103
+ const allJournals = await client.get(`/api/vessels/${vesselId}/journals`);
104
+ const j = allJournals.find((x) => x.id === Number(journalId));
105
+ if (!j) {
106
+ console.error(chalk.red(`✗ Journal #${journalId}를 찾을 수 없습니다`));
107
+ process.exit(1);
108
+ }
109
+ const format = opts.format ?? globalOpts.format ?? 'table';
110
+ if (format === 'json') {
111
+ formatJson(j);
112
+ return;
113
+ }
114
+ formatDetail(chalk.bold(`#${j.id} ${j.title}`), [
115
+ ['타입', journalTypeLabel(j.type)],
116
+ ['Cargo', j.cargoId ? `#${j.cargoId}` : null],
117
+ ['작성일', new Date(j.createdAt).toLocaleString()],
118
+ ['수정일', new Date(j.updatedAt).toLocaleString()],
119
+ ]);
120
+ console.log();
121
+ console.log(j.content);
122
+ });
123
+ // doque journal update <journal-id> [--content "..." | --stdin] [-v vessel]
124
+ journal
125
+ .command('update <journal-id>')
126
+ .description('Journal 수정')
127
+ .option('--title <title>', '새 제목')
128
+ .option('--content <content>', '새 내용')
129
+ .option('--stdin', 'stdin에서 내용 읽기')
130
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
131
+ .action(async (journalId, opts, cmd) => {
132
+ const globalOpts = cmd.optsWithGlobals();
133
+ const client = createApiClient(globalOpts);
134
+ const ns = await client.resolveNamespace(globalOpts.namespace);
135
+ const vesselId = await getVesselId(client, opts.vessel, ns);
136
+ const allJournalsForUpdate = await client.get(`/api/vessels/${vesselId}/journals`);
137
+ const existing = allJournalsForUpdate.find((x) => x.id === Number(journalId));
138
+ if (!existing) {
139
+ console.error(chalk.red(`✗ Journal #${journalId}를 찾을 수 없습니다`));
140
+ process.exit(1);
141
+ }
142
+ let content = opts.content ?? existing.content;
143
+ if (opts.stdin) {
144
+ content = await readStdin();
145
+ }
146
+ const j = await client.put(`/api/vessels/${vesselId}/journals/${journalId}`, {
147
+ title: opts.title ?? existing.title,
148
+ content,
149
+ });
150
+ console.log(chalk.green(`✓ Journal 수정됨: #${j.id} "${j.title}"`));
151
+ });
152
+ // doque journal delete <journal-id> [-v vessel]
153
+ journal
154
+ .command('delete <journal-id>')
155
+ .description('Journal 삭제')
156
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
157
+ .action(async (journalId, opts, cmd) => {
158
+ const globalOpts = cmd.optsWithGlobals();
159
+ const client = createApiClient(globalOpts);
160
+ const ns = await client.resolveNamespace(globalOpts.namespace);
161
+ const vesselId = await getVesselId(client, opts.vessel, ns);
162
+ await client.delete(`/api/vessels/${vesselId}/journals/${journalId}`);
163
+ console.log(chalk.green(`✓ Journal #${journalId} 삭제됨`));
164
+ });
165
+ }
166
+ //# sourceMappingURL=journal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journal.js","sourceRoot":"","sources":["../../src/commands/journal.ts"],"names":[],"mappings":"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"}
@@ -59,7 +59,7 @@ export function registerNsCommands(program) {
59
59
  formatJson(data);
60
60
  return;
61
61
  }
62
- formatDetail(chalk.bold(`🏷 ${data.name}`), [
62
+ formatDetail(chalk.bold(data.name), [
63
63
  ['ID', data.id],
64
64
  ['Slug', chalk.cyan(data.slug)],
65
65
  ['타입', data.type],
@@ -1 +1 @@
1
- {"version":3,"file":"ns.js","sourceRoot":"","sources":["../../src/commands/ns.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAmB3E,MAAM,UAAU,kBAAkB,CAAC,OAAgB;IACjD,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAE7D,gBAAgB;IAChB,EAAE;SACC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,aAAa,CAAC;SAC1B,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,OAAO,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,GAAY,EAAE,EAAE;QACvD,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAwD,CAAC;QAC/F,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC;QAE3D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QAExD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,UAAU,CAAC,UAAU,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,WAAW,CACT,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACjE,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;YACjE,EAAE,EAAE,CAAC,CAAC,IAAI;SACX,CAAC,CAAC,EACH,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CACnB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,sBAAsB;IACtB,EAAE;SACC,OAAO,CAAC,YAAY,CAAC;SACrB,WAAW,CAAC,WAAW,CAAC;SACxB,MAAM,CAAC,CAAC,IAAY,EAAE,EAAE;QACvB,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEL,uBAAuB;IACvB,EAAE;SACC,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,OAAO,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,IAAwB,EAAE,GAAY,EAAE,EAAE;QACjF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAwD,CAAC;QAC/F,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC;QAC9D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAoB,mBAAmB,UAAU,EAAE,CAAC,CAAC;QAElF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC;QAC3D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QAED,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YAC3C,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACf,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/B,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;YACjB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC;YACxB,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAC;SACnD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEL,0BAA0B;IAC1B,EAAE;SACC,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,iBAAiB,CAAC;SAC9B,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,OAAO,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,IAAwB,EAAE,GAAY,EAAE,EAAE;QACjF,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAwD,CAAC;QAC/F,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,UAAU,GAAG,IAAI,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC;QAC9D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAA4B,mBAAmB,UAAU,UAAU,CAAC,CAAC;QAErG,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC;QAC3D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,UAAU,CAAC,OAAO,CAAC,CAAC;YACpB,OAAO;QACT,CAAC;QAED,WAAW,CACT,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,WAAW,EAAE,CAAC,CAAC,QAAQ;YACvB,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;SACvB,CAAC,CAAC,EACH,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAC1B,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"ns.js","sourceRoot":"","sources":["../../src/commands/ns.ts"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ export function registerVesselCommands(program) {
61
61
  formatJson(v);
62
62
  return;
63
63
  }
64
- formatDetail(chalk.bold(`📦 ${v.name}`), [
64
+ formatDetail(chalk.bold(v.name), [
65
65
  ['ID', v.id],
66
66
  ['Slug', chalk.cyan(v.slug)],
67
67
  ['상태', statusLabel(v.status)],