doque 0.1.0 → 0.3.0

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 (55) hide show
  1. package/dist/api/client.d.ts +2 -0
  2. package/dist/api/client.d.ts.map +1 -1
  3. package/dist/api/client.js +13 -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 +33 -16
  11. package/dist/commands/auth.js.map +1 -1
  12. package/dist/commands/beacon.d.ts +3 -0
  13. package/dist/commands/beacon.d.ts.map +1 -0
  14. package/dist/commands/beacon.js +43 -0
  15. package/dist/commands/beacon.js.map +1 -0
  16. package/dist/commands/cargo.d.ts.map +1 -1
  17. package/dist/commands/cargo.js +141 -45
  18. package/dist/commands/cargo.js.map +1 -1
  19. package/dist/commands/comment.d.ts +3 -0
  20. package/dist/commands/comment.d.ts.map +1 -0
  21. package/dist/commands/comment.js +45 -0
  22. package/dist/commands/comment.js.map +1 -0
  23. package/dist/commands/dump.d.ts +3 -0
  24. package/dist/commands/dump.d.ts.map +1 -0
  25. package/dist/commands/dump.js +214 -0
  26. package/dist/commands/dump.js.map +1 -0
  27. package/dist/commands/init.d.ts +3 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +38 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/commands/journal.d.ts +3 -0
  32. package/dist/commands/journal.d.ts.map +1 -0
  33. package/dist/commands/journal.js +166 -0
  34. package/dist/commands/journal.js.map +1 -0
  35. package/dist/commands/ns.d.ts +3 -0
  36. package/dist/commands/ns.d.ts.map +1 -0
  37. package/dist/commands/ns.js +96 -0
  38. package/dist/commands/ns.js.map +1 -0
  39. package/dist/commands/vessel.d.ts.map +1 -1
  40. package/dist/commands/vessel.js +86 -16
  41. package/dist/commands/vessel.js.map +1 -1
  42. package/dist/commands/whoami.d.ts.map +1 -1
  43. package/dist/commands/whoami.js +24 -6
  44. package/dist/commands/whoami.js.map +1 -1
  45. package/dist/config/store.d.ts +9 -0
  46. package/dist/config/store.d.ts.map +1 -1
  47. package/dist/config/store.js +26 -0
  48. package/dist/config/store.js.map +1 -1
  49. package/dist/index.js +96 -3
  50. package/dist/index.js.map +1 -1
  51. package/dist/utils/output.d.ts +13 -0
  52. package/dist/utils/output.d.ts.map +1 -1
  53. package/dist/utils/output.js +78 -3
  54. package/dist/utils/output.js.map +1 -1
  55. package/package.json +24 -2
@@ -14,7 +14,9 @@ export declare function createApiClient(globalOpts: GlobalOptions): {
14
14
  request: <T>(method: string, urlPath: string, body?: unknown) => Promise<T>;
15
15
  get: <T>(urlPath: string) => Promise<T>;
16
16
  post: <T>(urlPath: string, body: unknown) => Promise<T>;
17
+ put: <T>(urlPath: string, body: unknown) => Promise<T>;
17
18
  patch: <T>(urlPath: string, body: unknown) => Promise<T>;
19
+ delete: <T>(urlPath: string) => Promise<T>;
18
20
  resolveNamespace: (nsOverride?: string) => Promise<string>;
19
21
  resolveVesselId: (nsSlug: string, vesselSlug: string) => Promise<number>;
20
22
  token: string;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiDD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa;cAWhC,CAAC,UAAU,MAAM,WAAW,MAAM,SAAS,OAAO,KAAG,OAAO,CAAC,CAAC,CAAC;UAiD9E,CAAC,WAAW,MAAM;WACjB,CAAC,WAAW,MAAM,QAAQ,OAAO;YAChC,CAAC,WAAW,MAAM,QAAQ,OAAO;oCA9BE,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;8BAU9B,MAAM,cAAc,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;;;EA0BpF;AAGD,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiDD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa;cAWhC,CAAC,UAAU,MAAM,WAAW,MAAM,SAAS,OAAO,KAAG,OAAO,CAAC,CAAC,CAAC;UAuD9E,CAAC,WAAW,MAAM;WACjB,CAAC,WAAW,MAAM,QAAQ,OAAO;UAClC,CAAC,WAAW,MAAM,QAAQ,OAAO;YAC/B,CAAC,WAAW,MAAM,QAAQ,OAAO;aAChC,CAAC,WAAW,MAAM;oCAlCgB,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;8BAY9B,MAAM,cAAc,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;;;EA4BpF;AAGD,wBAAsB,mBAAmB,CAAC,CAAC,EACzC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,OAAO,GACb,OAAO,CAAC,CAAC,CAAC,CAmBZ"}
@@ -50,12 +50,16 @@ export function createApiClient(globalOpts) {
50
50
  async function request(method, urlPath, body) {
51
51
  let res;
52
52
  try {
53
+ const headers = {
54
+ Authorization: `Bearer ${resolvedToken}`,
55
+ 'Content-Type': 'application/json',
56
+ };
57
+ const deviceId = configStore.get('device')?.id;
58
+ if (deviceId)
59
+ headers['X-Beacon-Id'] = deviceId;
53
60
  res = await fetch(`${server}${urlPath}`, {
54
61
  method,
55
- headers: {
56
- Authorization: `Bearer ${resolvedToken}`,
57
- 'Content-Type': 'application/json',
58
- },
62
+ headers,
59
63
  body: body !== undefined ? JSON.stringify(body) : undefined,
60
64
  });
61
65
  }
@@ -75,6 +79,9 @@ export function createApiClient(globalOpts) {
75
79
  const globalNs = globalOpts.namespace;
76
80
  if (globalNs)
77
81
  return globalNs;
82
+ const ctx = configStore.getContext();
83
+ if (ctx.namespace)
84
+ return ctx.namespace;
78
85
  const ns = configStore.load().user?.namespace;
79
86
  if (ns)
80
87
  return ns;
@@ -100,7 +107,9 @@ export function createApiClient(globalOpts) {
100
107
  request,
101
108
  get: (urlPath) => request('GET', urlPath),
102
109
  post: (urlPath, body) => request('POST', urlPath, body),
110
+ put: (urlPath, body) => request('PUT', urlPath, body),
103
111
  patch: (urlPath, body) => request('PATCH', urlPath, body),
112
+ delete: (urlPath) => request('DELETE', urlPath),
104
113
  resolveNamespace,
105
114
  resolveVesselId,
106
115
  token: resolvedToken,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerActivityCommands(program: Command): void;
3
+ //# sourceMappingURL=activity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.d.ts","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0C/D"}
@@ -0,0 +1,36 @@
1
+ import chalk from 'chalk';
2
+ import { createApiClient } from '../api/client.js';
3
+ import { formatTable, formatJson } from '../utils/output.js';
4
+ export function registerActivityCommands(program) {
5
+ const activity = program.command('activity').description('Activity(활동) 조회');
6
+ // doque activity list [--limit 20] [-f format]
7
+ activity
8
+ .command('list')
9
+ .description('내 최근 활동 목록')
10
+ .option('--limit <n>', '조회 수 (기본: 20)', '20')
11
+ .option('-f, --format <format>', '출력 형식 (table|json)', 'table')
12
+ .action(async (opts, cmd) => {
13
+ const globalOpts = cmd.optsWithGlobals();
14
+ const client = createApiClient(globalOpts);
15
+ const size = Number(opts.limit) || 20;
16
+ const page = await client.get(`/api/me/activities?size=${size}`);
17
+ const activities = page.content;
18
+ const format = opts.format ?? globalOpts.format ?? 'table';
19
+ if (format === 'json') {
20
+ formatJson(activities);
21
+ return;
22
+ }
23
+ if (activities.length === 0) {
24
+ console.log(chalk.gray(' (결과 없음)'));
25
+ return;
26
+ }
27
+ formatTable(activities.map((a) => ({
28
+ ID: chalk.gray(`#${a.id}`),
29
+ 액션: chalk.cyan(a.action),
30
+ 대상: `${a.targetType}#${a.targetId}`,
31
+ 상세: a.detail ? (a.detail.length > 40 ? a.detail.slice(0, 40) + '...' : a.detail) : chalk.gray('-'),
32
+ 시간: new Date(a.createdAt).toLocaleString(),
33
+ })), ['ID', '액션', '대상', '상세', '시간']);
34
+ });
35
+ }
36
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/commands/activity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAqB7D,MAAM,UAAU,wBAAwB,CAAC,OAAgB;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAE5E,+CAA+C;IAC/C,QAAQ;SACL,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,YAAY,CAAC;SACzB,MAAM,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC;SAC5C,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,OAAO,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,IAAuC,EAAE,GAAY,EAAE,EAAE;QACtE,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAwD,CAAC;QAC/F,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAC3B,2BAA2B,IAAI,EAAE,CAClC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,IAAI,OAAO,CAAC;QAE3D,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,UAAU,CAAC,UAAU,CAAC,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,WAAW,CACT,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACrB,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC;YAC1B,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;YACxB,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,QAAQ,EAAE;YACnC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAClG,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE;SAC3C,CAAC,CAAC,EACH,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4CpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4K3D"}
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuL3D"}
@@ -13,6 +13,7 @@ async function registerBeacon(server, token) {
13
13
  deviceId = crypto.randomUUID();
14
14
  configStore.set('device', { id: deviceId });
15
15
  }
16
+ const hostname = os.hostname();
16
17
  await fetch(`${server}/api/me/beacons/device`, {
17
18
  method: 'PUT',
18
19
  headers: {
@@ -21,13 +22,14 @@ async function registerBeacon(server, token) {
21
22
  },
22
23
  body: JSON.stringify({
23
24
  deviceId,
24
- name: os.hostname(),
25
+ name: hostname,
25
26
  type: 'cli',
26
27
  }),
27
28
  });
29
+ return hostname;
28
30
  }
29
31
  catch {
30
- // non-blocking: 실패해도 인증 플로우 중단하지 않음
32
+ return null;
31
33
  }
32
34
  }
33
35
  export function registerAuthCommands(program) {
@@ -47,13 +49,20 @@ export function registerAuthCommands(program) {
47
49
  try {
48
50
  const me = await apiRequestWithToken(server, 'GET', '/api/me', patToken);
49
51
  const username = me.displayName;
52
+ const nsSlug = `user-${me.userId}`;
50
53
  const config = configStore.load();
51
54
  config.auth = { type: 'pat', access_token: patToken };
52
- config.user = { id: me.id, username, namespace: username };
55
+ config.user = { id: me.id, username, namespace: nsSlug };
56
+ if (!config.context)
57
+ config.context = { namespace: null, vessel: null, vesselId: null };
58
+ config.context.namespace = nsSlug;
53
59
  configStore.save(config);
54
- spinner.succeed(chalk.green(`✓ 인증 완료! @${username} 으로 로그인됨`));
55
- console.log(` 토큰 저장: ~/.doque/config.json`);
56
- registerBeacon(server, patToken).catch(() => { });
60
+ spinner.succeed(chalk.green(`✓ 인증 완료! @${username}으로 로그인됨`));
61
+ console.log(` 토큰 저장: ${chalk.gray('~/.doque/config.json')}`);
62
+ registerBeacon(server, patToken).then((hostname) => {
63
+ if (hostname)
64
+ console.log(` 디바이스 등록: ${chalk.cyan(hostname)}`);
65
+ }).catch(() => { });
57
66
  }
58
67
  catch {
59
68
  spinner.fail('토큰 검증 실패');
@@ -115,11 +124,14 @@ export function registerAuthCommands(program) {
115
124
  }
116
125
  // GET /api/me → member 정보 조회
117
126
  let memberId = 0;
127
+ let namespaceSlug = username;
118
128
  try {
119
129
  const me = await apiRequestWithToken(server, 'GET', '/api/me', tokenResp.access_token);
120
130
  memberId = me.id;
121
131
  if (!username)
122
132
  username = me.displayName;
133
+ // 백엔드는 네임스페이스를 user-{userId}로 생성
134
+ namespaceSlug = `user-${me.userId}`;
123
135
  }
124
136
  catch {
125
137
  // API 호출 실패해도 계속
@@ -135,13 +147,19 @@ export function registerAuthCommands(program) {
135
147
  config.user = {
136
148
  id: memberId,
137
149
  username,
138
- namespace: username,
150
+ namespace: namespaceSlug,
139
151
  };
152
+ if (!config.context)
153
+ config.context = { namespace: null, vessel: null, vesselId: null };
154
+ config.context.namespace = namespaceSlug;
140
155
  configStore.save(config);
141
- console.log(chalk.green(`✓ 인증 완료! @${username} 으로 로그인됨`));
142
- console.log(` 토큰 저장: ~/.doque/config.json`);
156
+ console.log(chalk.green(`✓ 인증 완료! @${username}으로 로그인됨`));
157
+ console.log(` 토큰 저장: ${chalk.gray('~/.doque/config.json')}`);
143
158
  // Beacon 자동 등록 (non-blocking)
144
- registerBeacon(server, tokenResp.access_token).catch(() => { });
159
+ registerBeacon(server, tokenResp.access_token).then((hostname) => {
160
+ if (hostname)
161
+ console.log(` 디바이스 등록: ${chalk.cyan(hostname)}`);
162
+ }).catch(() => { });
145
163
  });
146
164
  // doque auth status
147
165
  auth
@@ -153,7 +171,7 @@ export function registerAuthCommands(program) {
153
171
  const token = process.env.DOQUE_TOKEN ?? globalOpts.token ?? configStore.getToken();
154
172
  if (!token) {
155
173
  console.log(chalk.red('✗ 로그인되지 않음'));
156
- console.log(" 'doque auth login'을 실행하세요.");
174
+ console.log(` → ${chalk.cyan('doque auth login')} 실행하세요`);
157
175
  return;
158
176
  }
159
177
  try {
@@ -161,16 +179,15 @@ export function registerAuthCommands(program) {
161
179
  const config = configStore.load();
162
180
  const authType = config.auth?.type ?? 'unknown';
163
181
  const expiresAt = config.auth?.expires_at;
164
- console.log(chalk.green(' 로그인됨'));
165
- console.log(` 사용자: ${me.displayName}`);
166
- console.log(` 인증 방식: ${authType}`);
182
+ console.log(chalk.green(`✓ 로그인됨: ${chalk.bold('@' + me.displayName)}`));
183
+ console.log(` 인증 방식: ${chalk.cyan(authType)}`);
167
184
  if (expiresAt) {
168
- console.log(` 만료: ${new Date(expiresAt).toLocaleString()}`);
185
+ console.log(` 만료: ${chalk.gray(new Date(expiresAt).toLocaleString())}`);
169
186
  }
170
187
  }
171
188
  catch {
172
189
  console.log(chalk.red('✗ 토큰이 만료되었거나 유효하지 않습니다'));
173
- console.log(" 'doque auth login'을 실행하세요.");
190
+ console.log(` → ${chalk.cyan('doque auth login')} 실행하세요`);
174
191
  }
175
192
  });
176
193
  // doque auth logout
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAWvD,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,KAAa;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/B,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,KAAK,CAAC,GAAG,MAAM,wBAAwB,EAAE;YAC7C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ;gBACR,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE;gBACnB,IAAI,EAAE,KAAK;aACZ,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;IACtC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAE1D,mCAAmC;IACnC,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;SAC5D,MAAM,CAAC,KAAK,EAAE,IAAwB,EAAE,GAAY,EAAE,EAAE;QACvD,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAuC,CAAC;QAC9E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;QAChD,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,6BAA6B,CAAC;QAE/F,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU;YACV,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAiB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;gBACzF,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC;gBAEhC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;gBACtD,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;gBAC3D,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAEzB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,UAAU,CAAC,CAAC,CAAC;gBAC9D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;gBAE7C,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,OAAO;QACT,CAAC;QAED,kBAAkB;QAClB,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,wBAAwB,CAAC;QAE7E,IAAI,cAAc,CAAC;QACnB,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,UAAU,EAAE,CAAC,CAAC;YACpD,IAAI,GAAG,YAAY,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,UAAU,EAAE,QAAQ,EAAE,GACjG,cAAc,CAAC;QAEjB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,uBAAuB;QACvB,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAC/C,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;QACrF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,GAAG,YAAY,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAE1B,uCAAuC;QACvC,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAA6B,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACzD,QAAQ,GAAI,OAAO,CAAC,KAAK,CAAY,IAAI,EAAE,CAAC;YAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAuB,CAAC;YACjD,IAAI,GAAG;gBAAE,SAAS,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QAED,6BAA6B;QAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAClC,MAAM,EACN,KAAK,EACL,SAAS,EACT,SAAS,CAAC,YAAY,CACvB,CAAC;YACF,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,QAAQ;gBAAE,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,iBAAiB;QACnB,CAAC;QAED,iBAAiB;QACjB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,GAAG;YACZ,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,SAAS,CAAC,YAAY;YACpC,aAAa,EAAE,SAAS,CAAC,aAAa;YACtC,UAAU,EAAE,SAAS;SACtB,CAAC;QACF,MAAM,CAAC,IAAI,GAAG;YACZ,EAAE,EAAE,QAAQ;YACZ,QAAQ;YACR,SAAS,EAAE,QAAQ;SACpB,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,QAAQ,UAAU,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,8BAA8B;QAC9B,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,UAAU,CAAC;SACvB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;QACpC,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAuC,CAAC;QAC9E,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,6BAA6B,CAAC;QAC/F,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,UAAU,CAAC,KAAK,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;QAEpF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,GAAG,MAAM,mBAAmB,CAAiB,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACtF,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,SAAS,CAAC;YAChD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC;YAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;YACpC,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,MAAM,CAAC;SACnB,MAAM,CAAC,GAAG,EAAE;QACX,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerBeaconCommands(program: Command): void;
3
+ //# sourceMappingURL=beacon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon.d.ts","sourceRoot":"","sources":["../../src/commands/beacon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgD7D"}
@@ -0,0 +1,43 @@
1
+ import chalk from 'chalk';
2
+ import { createApiClient } from '../api/client.js';
3
+ import { formatTable, formatJson } from '../utils/output.js';
4
+ export function registerBeaconCommands(program) {
5
+ const beacon = program.command('beacon').description('Beacon(디바이스) 관리');
6
+ // doque beacon list
7
+ beacon
8
+ .command('list')
9
+ .description('내 등록 디바이스 목록')
10
+ .option('-f, --format <format>', '출력 형식 (table|json)', 'table')
11
+ .action(async (opts, cmd) => {
12
+ const globalOpts = cmd.optsWithGlobals();
13
+ const client = createApiClient(globalOpts);
14
+ const beacons = await client.get('/api/me/beacons');
15
+ const format = opts.format ?? globalOpts.format ?? 'table';
16
+ if (format === 'json') {
17
+ formatJson(beacons);
18
+ return;
19
+ }
20
+ if (beacons.length === 0) {
21
+ console.log(chalk.gray(' (등록된 디바이스 없음)'));
22
+ return;
23
+ }
24
+ formatTable(beacons.map((b) => ({
25
+ ID: b.id,
26
+ 이름: chalk.cyan(b.name),
27
+ 타입: b.type,
28
+ 'Device ID': b.deviceId ? chalk.gray(`${b.deviceId.slice(0, 8)}...`) : chalk.gray('-'),
29
+ '마지막 활성': new Date(b.lastActiveAt).toLocaleString(),
30
+ })), ['ID', '이름', '타입', 'Device ID', '마지막 활성']);
31
+ });
32
+ // doque beacon delete <id>
33
+ beacon
34
+ .command('delete <id>')
35
+ .description('디바이스 등록 해제')
36
+ .action(async (id, _opts, cmd) => {
37
+ const globalOpts = cmd.optsWithGlobals();
38
+ const client = createApiClient(globalOpts);
39
+ await client.delete(`/api/me/beacons/${id}`);
40
+ console.log(chalk.green(`✓ Beacon #${id} 삭제됨`));
41
+ });
42
+ }
43
+ //# sourceMappingURL=beacon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beacon.js","sourceRoot":"","sources":["../../src/commands/beacon.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAa7D,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAExE,oBAAoB;IACpB,MAAM;SACH,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,cAAc,CAAC;SAC3B,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,eAAe,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAmB,iBAAiB,CAAC,CAAC;QAEtE,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,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,WAAW,CACT,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAClB,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;YACtB,EAAE,EAAE,CAAC,CAAC,IAAI;YACV,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACtF,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,cAAc,EAAE;SACpD,CAAC,CAAC,EACH,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAC1C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,2BAA2B;IAC3B,MAAM;SACH,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,YAAY,CAAC;SACzB,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,KAAc,EAAE,GAAY,EAAE,EAAE;QACzD,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,EAAuC,CAAC;QAC9E,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,MAAM,CAAC,MAAM,CAAO,mBAAmB,EAAE,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cargo.d.ts","sourceRoot":"","sources":["../../src/commands/cargo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgK5D"}
1
+ {"version":3,"file":"cargo.d.ts","sourceRoot":"","sources":["../../src/commands/cargo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwQ5D"}
@@ -1,70 +1,130 @@
1
1
  import chalk from 'chalk';
2
2
  import { configStore } from '../config/store.js';
3
3
  import { createApiClient } from '../api/client.js';
4
- import { formatTable, formatJson, formatDetail } from '../utils/output.js';
4
+ import { formatTable, formatJson, formatDetail, statusLabel, typeLabel, renderCargoTree, findCargoById, } from '../utils/output.js';
5
5
  function flattenCargos(cargos) {
6
6
  const result = [];
7
7
  for (const c of cargos) {
8
8
  result.push(c);
9
- if (c.children.length > 0) {
9
+ if (c.children.length > 0)
10
10
  result.push(...flattenCargos(c.children));
11
- }
12
11
  }
13
12
  return result;
14
13
  }
14
+ function parseFullPath(arg) {
15
+ const parts = arg.split('/');
16
+ if (parts.length >= 2)
17
+ return { namespace: parts[0], vessel: parts[1] };
18
+ return {};
19
+ }
15
20
  async function getVesselId(client, vesselSlug, namespace) {
16
- if (!vesselSlug) {
17
- // 캐시에서 첫 번째 vessel 사용
18
- const cached = configStore.load().cache?.vessels;
19
- if (cached) {
20
- const entries = Object.entries(cached);
21
- if (entries.length === 1)
22
- return entries[0][1].id;
23
- if (entries.length > 1) {
24
- console.error('! --vessel 옵션을 지정하세요. 예: doque cargo list --vessel my-vessel');
25
- process.exit(1);
26
- }
27
- }
28
- console.error('! --vessel 옵션을 지정하세요. 예: doque cargo list --vessel my-vessel');
29
- process.exit(1);
21
+ if (vesselSlug)
22
+ return client.resolveVesselId(namespace, vesselSlug);
23
+ const ctx = configStore.getContext();
24
+ if (ctx.vessel) {
25
+ if (ctx.vesselId !== null)
26
+ return ctx.vesselId;
27
+ return client.resolveVesselId(namespace, ctx.vessel);
30
28
  }
31
- return client.resolveVesselId(namespace, vesselSlug);
29
+ console.error(chalk.red('✗ vessel이 선택되지 않았습니다'));
30
+ console.error(` → ${chalk.cyan('doque vessel use <slug>')} 로 먼저 선택하세요`);
31
+ process.exit(1);
32
+ }
33
+ function formatCargoRow(c) {
34
+ return {
35
+ ID: chalk.gray(`#${c.id}`),
36
+ 타입: typeLabel(c.type),
37
+ 상태: statusLabel(c.status),
38
+ 제목: c.title,
39
+ 담당자: c.assigneeId ? chalk.cyan(`@${c.assigneeId}`) : chalk.gray('-'),
40
+ };
32
41
  }
33
42
  export function registerCargoCommands(program) {
34
43
  const cargo = program.command('cargo').description('Cargo(작업) 관리');
35
- // doque cargo list [-v vessel] [-s status] [--type type] [-f format]
44
+ // doque cargo list [path] [-v vessel] [--parent id] [-s status] [--type type] [-f format]
36
45
  cargo
37
- .command('list')
38
- .description('Cargo 목록 조회')
46
+ .command('list [path]')
47
+ .description('Cargo 목록 조회 (예: doque cargo list rn00n/doque-v1)')
39
48
  .option('-v, --vessel <slug>', 'Vessel slug 지정')
49
+ .option('-p, --parent <id>', '부모 Cargo ID로 필터 (하위 목록)')
40
50
  .option('-s, --status <status>', '상태 필터 (backlog|todo|in_progress|review|done)')
41
51
  .option('--type <type>', '타입 필터 (epic|story|task)')
42
52
  .option('-f, --format <format>', '출력 형식 (table|json)', 'table')
43
- .action(async (opts, cmd) => {
53
+ .action(async (path, opts, cmd) => {
44
54
  const globalOpts = cmd.optsWithGlobals();
45
55
  const client = createApiClient(globalOpts);
46
- const ns = await client.resolveNamespace(globalOpts.namespace);
47
- const vesselId = await getVesselId(client, opts.vessel, ns);
56
+ let nsOverride;
57
+ let vesselOverride = opts.vessel;
58
+ if (path) {
59
+ const parsed = parseFullPath(path);
60
+ if (parsed.namespace)
61
+ nsOverride = parsed.namespace;
62
+ if (parsed.vessel)
63
+ vesselOverride = parsed.vessel;
64
+ }
65
+ const ns = await client.resolveNamespace(nsOverride ?? globalOpts.namespace);
66
+ const vesselId = await getVesselId(client, vesselOverride, ns);
48
67
  const params = new URLSearchParams();
49
68
  if (opts.status)
50
69
  params.set('status', opts.status);
51
70
  if (opts.type)
52
71
  params.set('type', opts.type);
53
72
  const query = params.size > 0 ? `?${params.toString()}` : '';
73
+ // 백엔드는 parentId 필터 미지원 → 전체 조회 후 클라이언트 필터
54
74
  const cargos = await client.get(`/api/vessels/${vesselId}/cargos${query}`);
55
- const flat = flattenCargos(cargos);
75
+ let displayList;
76
+ if (opts.parent) {
77
+ // --parent: 해당 cargo의 children만 표시
78
+ const parentId = Number(opts.parent);
79
+ const parentNode = findCargoById(cargos, parentId);
80
+ if (!parentNode) {
81
+ console.error(chalk.red(`✗ Cargo #${parentId}를 찾을 수 없습니다`));
82
+ process.exit(1);
83
+ }
84
+ displayList = parentNode.children;
85
+ }
86
+ else if (!opts.status && !opts.type) {
87
+ // 필터 없음: 최상위만 표시 (children 미전개)
88
+ displayList = cargos;
89
+ }
90
+ else {
91
+ // 필터 있음: 백엔드가 flat list 반환
92
+ displayList = cargos;
93
+ }
56
94
  const format = opts.format ?? globalOpts.format ?? 'table';
57
95
  if (format === 'json') {
58
- formatJson(flat);
96
+ formatJson(displayList);
59
97
  return;
60
98
  }
61
- formatTable(flat.map((c) => ({
62
- id: c.id,
63
- type: c.type,
64
- status: c.status,
65
- title: c.title,
66
- assignee: c.assigneeId ?? '-',
67
- })), ['id', 'type', 'status', 'title', 'assignee']);
99
+ if (displayList.length === 0) {
100
+ console.log(chalk.gray(' (결과 없음)'));
101
+ return;
102
+ }
103
+ formatTable(displayList.map(formatCargoRow), ['ID', '타입', '상태', '제목', '담당자']);
104
+ });
105
+ // doque cargo tree [id] [-v vessel]
106
+ cargo
107
+ .command('tree [id]')
108
+ .description('Cargo 트리 구조 조회 (id 지정 시 하위 트리만)')
109
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
110
+ .action(async (id, opts, cmd) => {
111
+ const globalOpts = cmd.optsWithGlobals();
112
+ const client = createApiClient(globalOpts);
113
+ const ns = await client.resolveNamespace(globalOpts.namespace);
114
+ const vesselId = await getVesselId(client, opts.vessel, ns);
115
+ const cargos = await client.get(`/api/vessels/${vesselId}/cargos`);
116
+ if (id) {
117
+ const targetId = Number(id);
118
+ const node = findCargoById(cargos, targetId);
119
+ if (!node) {
120
+ console.error(chalk.red(`✗ Cargo #${targetId}를 찾을 수 없습니다`));
121
+ process.exit(1);
122
+ }
123
+ renderCargoTree([node]);
124
+ }
125
+ else {
126
+ renderCargoTree(cargos);
127
+ }
68
128
  });
69
129
  // doque cargo info <id> [-v vessel] [-f format]
70
130
  cargo
@@ -84,13 +144,13 @@ export function registerCargoCommands(program) {
84
144
  return;
85
145
  }
86
146
  formatDetail(chalk.bold(`#${c.id} ${c.title}`), [
87
- ['Type', c.type],
88
- ['Status', c.status],
89
- ['Description', c.description],
90
- ['Assignee ID', c.assigneeId],
91
- ['Priority', c.priority],
92
- ['Due', c.dueAt ? new Date(c.dueAt).toLocaleString() : null],
93
- ['Started', c.startedAt ? new Date(c.startedAt).toLocaleString() : null],
147
+ ['타입', typeLabel(c.type)],
148
+ ['상태', statusLabel(c.status)],
149
+ ['설명', c.description],
150
+ ['담당자', c.assigneeId ? `@${c.assigneeId}` : null],
151
+ ['우선순위', c.priority],
152
+ ['마감일', c.dueAt ? new Date(c.dueAt).toLocaleString() : null],
153
+ ['시작일', c.startedAt ? new Date(c.startedAt).toLocaleString() : null],
94
154
  ]);
95
155
  });
96
156
  // doque cargo create --title "제목" [--type task] [-v vessel] [-d desc]
@@ -125,7 +185,7 @@ export function registerCargoCommands(program) {
125
185
  // doque cargo start <id> [-v vessel]
126
186
  cargo
127
187
  .command('start <id>')
128
- .description('Cargo 시작 (→ in_progress)')
188
+ .description('Cargo 시작 → in_progress')
129
189
  .option('-v, --vessel <slug>', 'Vessel slug 지정')
130
190
  .action(async (id, opts, cmd) => {
131
191
  const globalOpts = cmd.optsWithGlobals();
@@ -135,12 +195,12 @@ export function registerCargoCommands(program) {
135
195
  const c = await client.patch(`/api/vessels/${vesselId}/cargos/${id}/status`, {
136
196
  status: 'in_progress',
137
197
  });
138
- console.log(chalk.green(`✓ #${c.id} "${c.title}" → ${c.status}`));
198
+ console.log(chalk.green(`✓ #${c.id} "${c.title}" → ${statusLabel(c.status)}`));
139
199
  });
140
200
  // doque cargo done <id> [-v vessel]
141
201
  cargo
142
202
  .command('done <id>')
143
- .description('Cargo 완료 (→ done)')
203
+ .description('Cargo 완료 → done')
144
204
  .option('-v, --vessel <slug>', 'Vessel slug 지정')
145
205
  .action(async (id, opts, cmd) => {
146
206
  const globalOpts = cmd.optsWithGlobals();
@@ -150,7 +210,7 @@ export function registerCargoCommands(program) {
150
210
  const c = await client.patch(`/api/vessels/${vesselId}/cargos/${id}/status`, {
151
211
  status: 'done',
152
212
  });
153
- console.log(chalk.green(`✓ #${c.id} "${c.title}" → ${c.status}`));
213
+ console.log(chalk.green(`✓ #${c.id} "${c.title}" → ${statusLabel(c.status)}`));
154
214
  });
155
215
  // doque cargo status <id> <status> [-v vessel]
156
216
  cargo
@@ -165,7 +225,43 @@ export function registerCargoCommands(program) {
165
225
  const c = await client.patch(`/api/vessels/${vesselId}/cargos/${id}/status`, {
166
226
  status,
167
227
  });
168
- console.log(chalk.green(`✓ #${c.id} "${c.title}" → ${c.status}`));
228
+ console.log(chalk.green(`✓ #${c.id} "${c.title}" → ${statusLabel(c.status)}`));
229
+ });
230
+ // doque cargo update <id> [--title "..."] [--description "..."] [--type ...]
231
+ cargo
232
+ .command('update <id>')
233
+ .description('Cargo 수정')
234
+ .option('-t, --title <title>', '새 제목')
235
+ .option('-d, --description <desc>', '새 설명')
236
+ .option('--type <type>', '새 타입 (epic|story|task|todo|bug)')
237
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
238
+ .action(async (id, opts, cmd) => {
239
+ const globalOpts = cmd.optsWithGlobals();
240
+ const client = createApiClient(globalOpts);
241
+ const ns = await client.resolveNamespace(globalOpts.namespace);
242
+ const vesselId = await getVesselId(client, opts.vessel, ns);
243
+ const existing = await client.get(`/api/vessels/${vesselId}/cargos/${id}`);
244
+ const c = await client.put(`/api/vessels/${vesselId}/cargos/${id}`, {
245
+ title: opts.title ?? existing.title,
246
+ description: opts.description !== undefined ? opts.description : existing.description,
247
+ priority: existing.priority,
248
+ assigneeId: existing.assigneeId,
249
+ sortOrder: existing.sortOrder,
250
+ });
251
+ console.log(chalk.green(`✓ Cargo 수정됨: #${c.id} "${c.title}"`));
252
+ });
253
+ // doque cargo delete <id> [-v vessel]
254
+ cargo
255
+ .command('delete <id>')
256
+ .description('Cargo 삭제')
257
+ .option('-v, --vessel <slug>', 'Vessel slug 지정')
258
+ .action(async (id, opts, cmd) => {
259
+ const globalOpts = cmd.optsWithGlobals();
260
+ const client = createApiClient(globalOpts);
261
+ const ns = await client.resolveNamespace(globalOpts.namespace);
262
+ const vesselId = await getVesselId(client, opts.vessel, ns);
263
+ await client.delete(`/api/vessels/${vesselId}/cargos/${id}`);
264
+ console.log(chalk.green(`✓ Cargo #${id} 삭제됨`));
169
265
  });
170
266
  }
171
267
  //# sourceMappingURL=cargo.js.map