comitia 0.1.0 → 0.2.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.
package/index.js CHANGED
@@ -116,7 +116,7 @@ async function rpc(method, params, { token: override } = {}) {
116
116
  body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),
117
117
  });
118
118
  } catch (e) {
119
- die(`서버에 닿지 못했어요 (${api}).\n ${e.message}`);
119
+ die(`서버에 닿지 못했어요 (${api}).\n ${e.message}\n 회사망·VPN·보안 프로그램이 막는 경우가 많아요 — 다른 망(휴대폰 핫스팟)에서 한 번 해 보세요.`);
120
120
  }
121
121
 
122
122
  if (res.status === 401) die('연결이 끊겼어요(토큰이 끊겼거나 틀림). `comitia login` 으로 다시 연결해 주세요.');
@@ -247,7 +247,7 @@ async function browserLogin({ paste = false } = {}) {
247
247
  body: JSON.stringify({ code, code_verifier: verifier }),
248
248
  });
249
249
  } catch (e) {
250
- die(`서버에 닿지 못했어요 (${api}).\n ${e.message}`);
250
+ die(`서버에 닿지 못했어요 (${api}).\n ${e.message}\n 회사망·VPN·보안 프로그램이 막는 경우가 많아요 — 다른 망(휴대폰 핫스팟)에서 한 번 해 보세요.`);
251
251
  }
252
252
  const body = await res.json().catch(() => ({}));
253
253
  if (!res.ok || !body.token) die(body.detail || `서버가 ${res.status} 로 답했어요.`);
@@ -352,6 +352,7 @@ const BLOCK = `${MARK_START}
352
352
  | \`comitia recent\` | 최근 들어온 것 | \`comitia search <낱말>\` | 본문 검색 |
353
353
  | \`comitia find <낱말>\` | 원본에서 찾기 | \`comitia read <경로>\` | 문서 본문 |
354
354
  | \`comitia raw <id>\` | 원본 본문 | \`comitia list [접두어]\` | 문서 목록 |
355
+ | \`comitia forget <id> <낱말>\` | 원본에서 낱말 지우기(남을 이유 없는 제3자 이름 등) | | |
355
356
 
356
357
  **정리를 부탁받으면 내가 한다** — Comitia 의 AI 에게 맡기지 않는다.
357
358
 
@@ -416,6 +417,8 @@ function parseArgs(argv) {
416
417
  if (a === '-c' || a === '--company') flags.c = argv[++i];
417
418
  else if (a === '--thread') flags.thread = argv[++i];
418
419
  else if (a === '--thread-of') flags.threadOf = argv[++i];
420
+ else if (a === '--edit') flags.edit = argv[++i];
421
+ else if (a === '--edit-of') flags.editOf = argv[++i];
419
422
  else if (a === '-g' || a === '--global') flags.global = true;
420
423
  else if (a === '--paste') flags.paste = true;
421
424
  else if (a === '-h' || a === '--help') flags.help = true;
@@ -447,10 +450,13 @@ const HELP = `comitia — 회사 온톨로지를 내가 쓰는 AI에서 꺼내
447
450
  comitia recent [개수] 최근 들어온 원본
448
451
  comitia find <낱말> 원본에서 찾기
449
452
  comitia raw <id...> 원본 본문 (id 는 recent·find 가 준 것)
453
+ comitia forget <id> <낱말...> 원본에서 낱말 지우기 — 다시 수집돼도 안 돌아옴 (쓰기 토큰)
450
454
  comitia sync [slack|tiro|...] 지금 당겨오기 — 매시 자동 수집을 기다리지 않고 (쓰기 토큰)
451
455
  comitia slack <채널> <파일|-> 연결된 봇으로 슬랙에 올리기 (쓰기 토큰 · 봇에 chat:write 필요)
452
456
  --thread <ts> 그 글의 스레드에 답글로 (부모 ts)
453
457
  --thread-of "<검색어>" 부모 글을 본문으로 찾아 그 스레드에 (최근 100건 중 최신)
458
+ --edit <ts> 새 글 대신 봇이 올린 그 글을 통째로 바꾸기 (봇 글만)
459
+ --edit-of "<검색어>" 고칠 봇 글을 본문으로 찾아서 (최근 100건 중 최신)
454
460
 
455
461
  ── 정리를 내 AI 가 한다 ── (쓰기 토큰 필요)
456
462
  comitia rules 이 워크스페이스의 위키 규칙 — **쓰기 전에 먼저**
@@ -685,6 +691,13 @@ const COMMANDS = {
685
691
  console.log(await callTool('read_raw', { company_id: needCompany(flags), ids: args }));
686
692
  },
687
693
 
694
+ /** 원본에서 낱말을 지운다. 통째로 지우면 다음 수집에 되살아나지만 이건 안 돌아온다. */
695
+ async forget(args, flags) {
696
+ const [id, ...terms] = args;
697
+ if (!id || terms.length === 0) die('원본 id 와 지울 낱말을 적어 주세요.\n z2o forget af1c6e9f "홍길동"');
698
+ console.log(await callTool('forget_raw', { company_id: needCompany(flags), id, terms }));
699
+ },
700
+
688
701
  async push(args, flags) {
689
702
  const [title, path] = args;
690
703
  if (!title || !path) die('제목과 파일을 적어 주세요.\n comitia push "회의록" note.md\n cat x.md | comitia push "제목" -');
@@ -752,9 +765,14 @@ const COMMANDS = {
752
765
  if (!channel || !file) die('채널과 파일을 적어 주세요.\n comitia slack project_0to1 글.txt\n ... | comitia slack project_0to1 -\n comitia slack weekly-meeting 글.txt --thread-of "0913 위클리" # 그 글의 스레드에 답글로');
753
766
  const text = file === '-' ? readFileSync(0, 'utf8') : readFileSync(file, 'utf8');
754
767
  if (!text.trim()) die('올릴 글이 비었어요.');
755
- if (flags.thread && !/^\d{10}\.\d{6}$/.test(flags.thread)) die(`--thread 는 슬랙 ts 모양이어야 해요 (예: 1757769600.123456). 검색어로 찾으려면 --thread-of "<글의 일부>"`);
768
+ const tsShape = /^\d{10}\.\d{6}$/;
769
+ if (flags.thread && !tsShape.test(flags.thread)) die(`--thread 는 슬랙 ts 모양이어야 해요 (예: 1757769600.123456). 검색어로 찾으려면 --thread-of "<글의 일부>"`);
770
+ if (flags.edit && !tsShape.test(flags.edit)) die(`--edit 는 슬랙 ts 모양이어야 해요 (예: 1757769600.123456). 검색어로 찾으려면 --edit-of "<글의 일부>"`);
771
+ if ((flags.edit || flags.editOf) && (flags.thread || flags.threadOf)) die('--edit 와 --thread 는 같이 못 써요. 고치기는 새 글이 아니에요.');
756
772
  const args = { company_id: needCompany(flags), channel, text };
757
- if (flags.thread) args.thread_ts = flags.thread;
773
+ if (flags.edit) args.edit_ts = flags.edit;
774
+ else if (flags.editOf) args.edit_of = flags.editOf;
775
+ else if (flags.thread) args.thread_ts = flags.thread;
758
776
  else if (flags.threadOf) args.thread_of = flags.threadOf;
759
777
  console.log(await callTool('post_slack', args));
760
778
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "comitia",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Comitia — 슬랙·회의·문서에 흩어진 회사의 말을 내가 쓰는 AI에서 꺼내 쓴다",
5
5
  "keywords": [
6
6
  "comitia",
@@ -48,6 +48,8 @@ Comitia 에 연결된 **봇**이 대신 올린다. 사람 이름으로 올라가
48
48
  comitia slack <채널> <임시파일> 새 글로
49
49
  comitia slack <채널> <임시파일> --thread-of "<검색어>" 그 글의 스레드에 답글로
50
50
  comitia slack <채널> <임시파일> --thread <ts> 부모 ts 를 알 때
51
+ comitia slack <채널> <임시파일> --edit-of "<검색어>" 봇이 올린 그 글을 통째로 바꾸기 (체크리스트 갱신 등)
52
+ comitia slack <채널> <임시파일> --edit <ts> 고칠 글의 ts 를 알 때
51
53
  ```
52
54
 
53
55
  채널은 `project_0to1` 처럼 이름으로(`#` 는 있어도 없어도 된다). 올린 기록은 Comitia 연대기에 남는다.
@@ -68,5 +70,8 @@ comitia slack <채널> <임시파일> --thread <ts> 부모 ts 를 알
68
70
 
69
71
  ## 못 하는 것
70
72
 
71
- 새 글과 스레드 답글만 된다. **DM·올린 글 고치기·지우기는 안 된다** —
73
+ 새 글 · 스레드 답글 · **봇이 올린 글 고치기**까지 된다. **DM · 지우기 · 사람이 올린 글 고치기는 안 된다** —
72
74
  부탁받으면 안 된다고 말하고, 슬랙에서 직접 하시라고 안내한다.
75
+
76
+ **고치기**는 본문을 **통째로 덮어쓴다.** 부분만 바꾸더라도 전체 새 본문을 파일에 쓰고, 허락받을 때는
77
+ 바뀐 부분을 짚어 보여 준다(예: 「0-1 · 1-4 … 17건을 ✅ 로」). 봇 자기 글만 찾으니 사람 글은 매치되지 않는다.