@hobeenkim/agmo-opencode-plugin 0.1.0 → 0.1.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.
- package/README.md +7 -4
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +123 -32
- package/dist/index.js.map +1 -1
- package/dist/renderAgentsMd.d.ts +2 -2
- package/dist/renderAgentsMd.d.ts.map +1 -1
- package/dist/renderAgentsMd.js +21 -19
- package/dist/renderAgentsMd.js.map +1 -1
- package/package.json +9 -3
- package/templates/commands/agmo.md +0 -24
package/README.md
CHANGED
|
@@ -23,16 +23,19 @@
|
|
|
23
23
|
}
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
2.
|
|
26
|
+
2. OpenCode에서 `/agmo` 실행
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
이 플러그인은 `config` hook에서 `command.agmo`를 자동 등록하므로, 별도의 `.opencode/commands/agmo.md` 추가/복사 없이 바로 사용할 수 있습니다.
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
### 커맨드 커스터마이즈(선택)
|
|
31
|
+
|
|
32
|
+
- 프로젝트에서 `command.agmo`를 직접 정의하면(=이미 존재하면), 플러그인은 덮어쓰지 않습니다.
|
|
33
|
+
- 로컬 개발/테스트 목적으로만 `.opencode/commands/agmo.md`를 둘 수도 있습니다.
|
|
31
34
|
|
|
32
35
|
## 로컬 설정(개발/테스트용)
|
|
33
36
|
|
|
34
37
|
- `.opencode/plugins/agmo.js`: tool `agmo_generate_agents_md` 등록
|
|
35
|
-
- `.opencode/commands/agmo.md`: `/agmo` 커맨드
|
|
38
|
+
- `.opencode/commands/agmo.md`: (선택) `/agmo` 커맨드 템플릿
|
|
36
39
|
- `.opencode/package.json`: 로컬 플러그인 의존성
|
|
37
40
|
|
|
38
41
|
## 빌드
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* OpenCode plugin entry.
|
|
3
|
+
* Exports default async function(ctx) style.
|
|
4
|
+
*/
|
|
5
|
+
export default function agmoPlugin(ctx: any): Promise<void>;
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAA8B,UAAU,CAAC,GAAG,EAAE,GAAG,iBA2BhD"}
|
package/dist/index.js
CHANGED
|
@@ -1,35 +1,126 @@
|
|
|
1
|
-
import { tool } from "@opencode-ai/plugin/tool";
|
|
2
|
-
import fs from "node:fs/promises";
|
|
3
|
-
import path from "node:path";
|
|
4
1
|
import { renderAgentsMd } from "./renderAgentsMd.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
repoType: args.repoType,
|
|
22
|
-
targetFolder: args.targetFolder,
|
|
23
|
-
language: args.language,
|
|
24
|
-
issueFile: args.issueFile,
|
|
25
|
-
extraRules: args.extraRules,
|
|
26
|
-
});
|
|
27
|
-
await fs.writeFile(outPath, content, "utf-8");
|
|
28
|
-
return `AGENTS.md created/updated at ${outPath}`;
|
|
29
|
-
},
|
|
30
|
-
}),
|
|
31
|
-
},
|
|
2
|
+
/**
|
|
3
|
+
* OpenCode plugin entry.
|
|
4
|
+
* Exports default async function(ctx) style.
|
|
5
|
+
*/
|
|
6
|
+
export default async function agmoPlugin(ctx) {
|
|
7
|
+
const app = ctx?.app;
|
|
8
|
+
const $ = ctx?.$ ?? {};
|
|
9
|
+
const handler = async () => {
|
|
10
|
+
const inputs = await askInputs($);
|
|
11
|
+
const content = renderAgentsMd(inputs);
|
|
12
|
+
await writeWorkspaceFile(app, "AGENTS.md", content);
|
|
13
|
+
// Optional UX feedback
|
|
14
|
+
if (typeof $.notify === "function") {
|
|
15
|
+
await $.notify("✅ AGENTS.md created/updated");
|
|
16
|
+
}
|
|
17
|
+
return "✅ AGENTS.md 생성/갱신 완료";
|
|
32
18
|
};
|
|
33
|
-
|
|
34
|
-
|
|
19
|
+
// Register slash command: /agmo
|
|
20
|
+
registerCommandBestEffort(app, {
|
|
21
|
+
name: "agmo",
|
|
22
|
+
slash: "/agmo",
|
|
23
|
+
description: "Generate AGENTS.md (AGMO conventions)",
|
|
24
|
+
run: handler,
|
|
25
|
+
});
|
|
26
|
+
// In case platform expects returning something
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Tries multiple command registration APIs to maximize compatibility.
|
|
31
|
+
*/
|
|
32
|
+
function registerCommandBestEffort(app, cmd) {
|
|
33
|
+
if (!app) {
|
|
34
|
+
console.warn("[agmo] app is undefined; command not registered.");
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// 1) app.commands.register({ name, slash, description, run })
|
|
38
|
+
if (app.commands && typeof app.commands.register === "function") {
|
|
39
|
+
app.commands.register({
|
|
40
|
+
name: cmd.name,
|
|
41
|
+
slash: cmd.slash,
|
|
42
|
+
description: cmd.description,
|
|
43
|
+
run: cmd.run,
|
|
44
|
+
});
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
// 2) app.command({ name, slash, description, handler })
|
|
48
|
+
if (typeof app.command === "function") {
|
|
49
|
+
app.command({
|
|
50
|
+
name: cmd.name,
|
|
51
|
+
slash: cmd.slash,
|
|
52
|
+
description: cmd.description,
|
|
53
|
+
handler: cmd.run,
|
|
54
|
+
});
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// 3) app.on("command", ...)
|
|
58
|
+
if (typeof app.on === "function") {
|
|
59
|
+
app.on("command", (event) => {
|
|
60
|
+
const text = String(event?.text ?? event?.name ?? "");
|
|
61
|
+
if (text === cmd.slash || text === cmd.name)
|
|
62
|
+
return cmd.run();
|
|
63
|
+
});
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
console.warn("[agmo] No known command registration API found. Please wire registration manually.");
|
|
67
|
+
}
|
|
68
|
+
async function askInputs($) {
|
|
69
|
+
// repoType
|
|
70
|
+
const repoType = (await safeSelect($, "레포 타입 선택", [
|
|
71
|
+
{ label: "backend", value: "backend" },
|
|
72
|
+
{ label: "frontend", value: "frontend" },
|
|
73
|
+
{ label: "custom", value: "custom" },
|
|
74
|
+
], "backend"));
|
|
75
|
+
const agentBasePath = await safeInput($, "에이전트 리소스 기본 경로", ".agents");
|
|
76
|
+
const language = (await safeSelect($, "기본 응답 언어", [
|
|
77
|
+
{ label: "ko", value: "ko" },
|
|
78
|
+
{ label: "en", value: "en" },
|
|
79
|
+
], "ko"));
|
|
80
|
+
const issueFile = await safeInput($, "이슈 실행과제 파일명", "TODO-Issue.md");
|
|
81
|
+
const extraRules = await safeTextarea($, "추가 규칙(옵션, 여러 줄 가능)", "- PR 생성 시 템플릿 준수\n- 릴리즈 노트 업데이트");
|
|
82
|
+
return { repoType, language, issueFile, agentBasePath, extraRules };
|
|
83
|
+
}
|
|
84
|
+
async function safeInput($, message, defaultValue) {
|
|
85
|
+
if (typeof $.input === "function") {
|
|
86
|
+
const v = await $.input({ message, defaultValue });
|
|
87
|
+
if (typeof v === "string" && v.trim() !== "")
|
|
88
|
+
return v.trim();
|
|
89
|
+
return defaultValue;
|
|
90
|
+
}
|
|
91
|
+
// fallback: no UI helper
|
|
92
|
+
return defaultValue;
|
|
93
|
+
}
|
|
94
|
+
async function safeTextarea($, message, defaultValue) {
|
|
95
|
+
if (typeof $.textarea === "function") {
|
|
96
|
+
const v = await $.textarea({ message, defaultValue });
|
|
97
|
+
if (typeof v === "string")
|
|
98
|
+
return v;
|
|
99
|
+
return defaultValue;
|
|
100
|
+
}
|
|
101
|
+
return defaultValue;
|
|
102
|
+
}
|
|
103
|
+
async function safeSelect($, message, options, defaultValue) {
|
|
104
|
+
if (typeof $.select === "function") {
|
|
105
|
+
const v = await $.select({ message, options, defaultValue });
|
|
106
|
+
if (typeof v === "string" && v.trim() !== "")
|
|
107
|
+
return v.trim();
|
|
108
|
+
return defaultValue;
|
|
109
|
+
}
|
|
110
|
+
return defaultValue;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Writes AGENTS.md into the workspace root.
|
|
114
|
+
* Prefers OpenCode workspace fs API if available; falls back to node fs.
|
|
115
|
+
*/
|
|
116
|
+
async function writeWorkspaceFile(app, path, content) {
|
|
117
|
+
// OpenCode-like workspace fs
|
|
118
|
+
if (app?.fs && typeof app.fs.writeFile === "function") {
|
|
119
|
+
await app.fs.writeFile(path, content, { overwrite: true });
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Fallback to node fs (writes relative to process cwd)
|
|
123
|
+
const fs = await import("node:fs/promises");
|
|
124
|
+
await fs.writeFile(path, content, "utf-8");
|
|
125
|
+
}
|
|
35
126
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/renderAgentsMd.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
export type AgmoInputs = {
|
|
2
2
|
repoType: "backend" | "frontend" | "custom";
|
|
3
|
-
targetFolder: string;
|
|
4
3
|
language: "ko" | "en";
|
|
5
4
|
issueFile: string;
|
|
6
|
-
|
|
5
|
+
agentBasePath: string;
|
|
6
|
+
extraRules: string;
|
|
7
7
|
};
|
|
8
8
|
export declare function renderAgentsMd(v: AgmoInputs): string;
|
|
9
9
|
//# sourceMappingURL=renderAgentsMd.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderAgentsMd.d.ts","sourceRoot":"","sources":["../src/renderAgentsMd.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC5C,
|
|
1
|
+
{"version":3,"file":"renderAgentsMd.d.ts","sourceRoot":"","sources":["../src/renderAgentsMd.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IAC5C,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAoCpD"}
|
package/dist/renderAgentsMd.js
CHANGED
|
@@ -1,32 +1,34 @@
|
|
|
1
1
|
export function renderAgentsMd(v) {
|
|
2
|
-
const
|
|
3
|
-
? "sdm-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
2
|
+
const repoTitle = v.repoType === "backend" ? "sdm-backend" :
|
|
3
|
+
v.repoType === "frontend" ? "sdm-frontend" :
|
|
4
|
+
"custom-repo";
|
|
5
|
+
const langLine = v.language === "ko"
|
|
6
|
+
? "- 한국어로 답변한다."
|
|
7
|
+
: "- Answer in English.";
|
|
8
|
+
const extra = v.extraRules?.trim()
|
|
9
|
+
? v.extraRules.trim()
|
|
10
|
+
: "- (없음)";
|
|
9
11
|
return `# AGENTS.md
|
|
10
12
|
|
|
11
|
-
This repo is **${
|
|
13
|
+
This repo is **${repoTitle}**. This file is the working agreement for humans and automation (CI, bots, AI agents).
|
|
12
14
|
|
|
13
|
-
##
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
-
|
|
15
|
+
## Instruction
|
|
16
|
+
${langLine}
|
|
17
|
+
- TODO는 \`${v.issueFile}\`에 기록한다.
|
|
18
|
+
- 에이전트 리소스 기본 경로는 \`${v.agentBasePath}\` 이다.
|
|
17
19
|
|
|
18
20
|
## 새로운 Issue 시작
|
|
19
|
-
1. GitHub에서
|
|
20
|
-
2. Issue
|
|
21
|
-
3.
|
|
21
|
+
1. GitHub에서 이슈 번호로 Issue를 읽고 \`${v.issueFile}\`에 실행 과제를 작성한다. (기존 내용은 무시)
|
|
22
|
+
2. Issue type에 따라 필요한 문서/코드 변경을 수행한다.
|
|
23
|
+
3. PR/커밋 메시지는 변경 요약 + 이슈 번호를 포함한다.
|
|
22
24
|
|
|
23
|
-
##
|
|
24
|
-
- 작은 단위로 커밋한다.
|
|
25
|
+
## 변경 규칙
|
|
26
|
+
- 가능한 작은 단위로 커밋한다.
|
|
25
27
|
- 테스트/빌드가 필요한 경우 반드시 수행한다.
|
|
26
|
-
- 문서 변경이
|
|
28
|
+
- 문서 변경이 필요하면 README/관련 문서도 함께 갱신한다.
|
|
27
29
|
|
|
28
30
|
## 추가 규칙
|
|
29
|
-
${
|
|
31
|
+
${extra}
|
|
30
32
|
`;
|
|
31
33
|
}
|
|
32
34
|
//# sourceMappingURL=renderAgentsMd.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderAgentsMd.js","sourceRoot":"","sources":["../src/renderAgentsMd.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,cAAc,CAAC,CAAa;IAC1C,MAAM,
|
|
1
|
+
{"version":3,"file":"renderAgentsMd.js","sourceRoot":"","sources":["../src/renderAgentsMd.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,cAAc,CAAC,CAAa;IAC1C,MAAM,SAAS,GACX,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;QACtC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;YACxC,aAAa,CAAC;IAE1B,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,IAAI;QAChC,CAAC,CAAC,cAAc;QAChB,CAAC,CAAC,sBAAsB,CAAC;IAE7B,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE;QAC9B,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE;QACrB,CAAC,CAAC,QAAQ,CAAC;IAEf,OAAO;;iBAEQ,SAAS;;;EAGxB,QAAQ;YACE,CAAC,CAAC,SAAS;sBACD,CAAC,CAAC,aAAa;;;iCAGJ,CAAC,CAAC,SAAS;;;;;;;;;;EAU1C,KAAK;CACN,CAAC;AACF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hobeenkim/agmo-opencode-plugin",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "OpenCode plugin that provides a tool to generate AGENTS.md (used by /agmo command template)",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
7
9
|
"exports": {
|
|
8
10
|
".": {
|
|
9
11
|
"types": "./dist/index.d.ts",
|
|
@@ -12,7 +14,9 @@
|
|
|
12
14
|
},
|
|
13
15
|
"files": [
|
|
14
16
|
"dist",
|
|
15
|
-
"templates"
|
|
17
|
+
"templates",
|
|
18
|
+
"README.md",
|
|
19
|
+
"LICENSE"
|
|
16
20
|
],
|
|
17
21
|
"publishConfig": {
|
|
18
22
|
"access": "public"
|
|
@@ -30,5 +34,7 @@
|
|
|
30
34
|
"devDependencies": {
|
|
31
35
|
"@types/node": "^22.13.9",
|
|
32
36
|
"typescript": "^5.5.4"
|
|
33
|
-
}
|
|
37
|
+
},
|
|
38
|
+
"keywords": [],
|
|
39
|
+
"author": ""
|
|
34
40
|
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Generate AGENTS.md (AGMO)
|
|
3
|
-
agent: build
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
워크스페이스 루트에 `AGENTS.md`를 생성/덮어씁니다.
|
|
7
|
-
|
|
8
|
-
아래 입력값을 질문해서 받습니다. (제가 "default"라고 답하면 기본값 사용)
|
|
9
|
-
|
|
10
|
-
1) `repoType`: `backend`, `frontend`, `custom` 중 하나 (기본값: `backend`)
|
|
11
|
-
2) `targetFolder`: 기본값 `.agents`
|
|
12
|
-
3) `language`: `ko` 또는 `en` (기본값: `ko`)
|
|
13
|
-
4) `issueFile`: 기본값 `TODO-Issue.md`
|
|
14
|
-
5) `extraRules`: 옵션, 여러 줄 가능 (기본값: 빈 문자열)
|
|
15
|
-
|
|
16
|
-
값을 모두 받으면 tool `agmo_generate_agents_md`를 아래 인자로 호출합니다.
|
|
17
|
-
|
|
18
|
-
- repoType
|
|
19
|
-
- targetFolder
|
|
20
|
-
- language
|
|
21
|
-
- issueFile
|
|
22
|
-
- extraRules
|
|
23
|
-
|
|
24
|
-
마지막에 `AGENTS.md`가 생성/업데이트되었는지 확인 메시지를 출력합니다.
|