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 +22 -4
- package/package.json +1 -1
- package/plugin/skills/slack/SKILL.md +6 -1
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
|
-
|
|
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.
|
|
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
|
@@ -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
|
-
새
|
|
73
|
+
새 글 · 스레드 답글 · **봇이 올린 글 고치기**까지 된다. **DM · 지우기 · 사람이 올린 글 고치기는 안 된다** —
|
|
72
74
|
부탁받으면 안 된다고 말하고, 슬랙에서 직접 하시라고 안내한다.
|
|
75
|
+
|
|
76
|
+
**고치기**는 본문을 **통째로 덮어쓴다.** 부분만 바꾸더라도 전체 새 본문을 파일에 쓰고, 허락받을 때는
|
|
77
|
+
바뀐 부분을 짚어 보여 준다(예: 「0-1 · 1-4 … 17건을 ✅ 로」). 봇 자기 글만 찾으니 사람 글은 매치되지 않는다.
|