@ksm0709/context 0.0.9 → 0.0.10
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/dist/cli/index.js +162 -40
- package/dist/index.js +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
// @bun
|
|
3
3
|
|
|
4
|
-
// src/cli/
|
|
4
|
+
// src/cli/commands/update.ts
|
|
5
5
|
import { resolve } from "path";
|
|
6
|
+
import { existsSync as existsSync2 } from "fs";
|
|
6
7
|
|
|
7
8
|
// src/lib/scaffold.ts
|
|
8
9
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -31,7 +32,7 @@ var LIMITS = {
|
|
|
31
32
|
// package.json
|
|
32
33
|
var package_default = {
|
|
33
34
|
name: "@ksm0709/context",
|
|
34
|
-
version: "0.0.
|
|
35
|
+
version: "0.0.10",
|
|
35
36
|
author: {
|
|
36
37
|
name: "TaehoKang",
|
|
37
38
|
email: "ksm07091@gmail.com"
|
|
@@ -127,23 +128,48 @@ var DEFAULT_TURN_START = `## Knowledge Context
|
|
|
127
128
|
|
|
128
129
|
- AGENTS.md\uC758 \uC9C0\uC2DC\uC0AC\uD56D\uC774 \uD56D\uC0C1 \uCD5C\uC6B0\uC120
|
|
129
130
|
- \uC9C0\uC2DD \uB178\uD2B8\uC758 \uACB0\uC815\uC0AC\uD56D > \uC77C\uBC18\uC801 \uAD00\uD589
|
|
130
|
-
- \uC9C0\uC2DD \uB178\uD2B8\uC5D0 \uC5C6\uB294 \uC0C8\uB85C\uC6B4 \uACB0\uC815\uC740 \uC791\uC5C5 \uC644\uB8CC \uC2DC \uAE30\uB85D\uD558\uC138\uC694
|
|
131
|
+
- \uC9C0\uC2DD \uB178\uD2B8\uC5D0 \uC5C6\uB294 \uC0C8\uB85C\uC6B4 \uACB0\uC815\uC740 \uC791\uC5C5 \uC644\uB8CC \uC2DC \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uC5D0 \uC704\uC784\uD558\uC5EC \uAE30\uB85D\uD558\uC138\uC694
|
|
131
132
|
`;
|
|
132
|
-
var DEFAULT_TURN_END = `## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
|
|
133
|
-
|
|
134
|
-
\uC791\uC5C5\
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
133
|
+
var DEFAULT_TURN_END = `## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
|
|
134
|
+
|
|
135
|
+
\uC791\uC5C5\uC774 \uC644\uB8CC\uB418\uBA74, \uC544\uB798 \uB450 \uAC00\uC9C0\uB97C **\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uC5D0 \uC704\uC784**\uD558\uC138\uC694.
|
|
136
|
+
\uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uAC00 \uC9C1\uC811 \uC218\uD589\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
137
|
+
|
|
138
|
+
### 1. \uD004\uB9AC\uD2F0 \uCCB4\uD06C (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
|
|
139
|
+
|
|
140
|
+
\uBCC0\uACBD\uD55C \uCF54\uB4DC\uC758 \uD488\uC9C8\uC744 \uAC80\uC99D\uD558\uB294 \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB97C \uC2E4\uD589\uD558\uC138\uC694.
|
|
141
|
+
|
|
142
|
+
\`\`\`
|
|
143
|
+
task(
|
|
144
|
+
category="quick",
|
|
145
|
+
load_skills=[],
|
|
146
|
+
description="Quality check for changed files",
|
|
147
|
+
prompt="""
|
|
148
|
+
TASK: \uBCC0\uACBD\uB41C \uD30C\uC77C\uB4E4\uC5D0 \uB300\uD574 \uD004\uB9AC\uD2F0 \uCCB4\uD06C\uB97C \uC218\uD589\uD558\uC138\uC694.
|
|
149
|
+
EXPECTED OUTCOME: \uBAA8\uB4E0 \uCCB4\uD06C \uD1B5\uACFC \uB610\uB294 \uC2E4\uD328 \uD56D\uBAA9 \uBAA9\uB85D
|
|
150
|
+
REQUIRED TOOLS: Bash (lint, format, test \uC2E4\uD589)
|
|
151
|
+
MUST DO:
|
|
152
|
+
- \uBCC0\uACBD\uD55C \uCF54\uB4DC\uC5D0 \uB300\uD574 lint \uC2E4\uD589
|
|
153
|
+
- \uBCC0\uACBD\uD55C \uCF54\uB4DC\uC5D0 \uB300\uD574 formatter \uC2E4\uD589 (lint\uC640 \uBCC4\uAC1C)
|
|
154
|
+
- \uAE30\uC874 \uD14C\uC2A4\uD2B8 \uD1B5\uACFC \uD655\uC778
|
|
155
|
+
- \uC0C8\uB85C \uC791\uC131/\uBCC0\uACBD\uD55C \uCF54\uB4DC\uC758 \uD14C\uC2A4\uD2B8 \uCEE4\uBC84\uB9AC\uC9C0 80% \uC774\uC0C1 \uD655\uC778
|
|
156
|
+
- \uBCC0\uACBD \uBC94\uC704 \uD655\uC778: \uC694\uCCAD\uACFC \uBB34\uAD00\uD55C \uD30C\uC77C\uC744 \uAC74\uB4DC\uB9AC\uC9C0 \uC54A\uC558\uB294\uC9C0 \uAC80\uC99D
|
|
157
|
+
- \uC2E4\uD328 \uD56D\uBAA9\uC774 \uC788\uC73C\uBA74 \uAD6C\uCCB4\uC801\uC778 \uC5D0\uB7EC \uBA54\uC2DC\uC9C0\uC640 \uD30C\uC77C \uC704\uCE58\uB97C \uBCF4\uACE0
|
|
158
|
+
MUST NOT DO:
|
|
159
|
+
- \uCF54\uB4DC\uB97C \uC9C1\uC811 \uC218\uC815\uD558\uC9C0 \uB9C8\uC138\uC694 (\uBCF4\uACE0\uB9CC)
|
|
160
|
+
- \uD14C\uC2A4\uD2B8\uB97C \uC0AD\uC81C\uD558\uAC70\uB098 \uC2A4\uD0B5\uD558\uC9C0 \uB9C8\uC138\uC694
|
|
161
|
+
CONTEXT: [\uBCC0\uACBD\uD55C \uD30C\uC77C \uBAA9\uB85D\uACFC \uBCC0\uACBD \uB0B4\uC6A9 \uC694\uC57D\uC744 \uC5EC\uAE30\uC5D0 \uD3EC\uD568]
|
|
162
|
+
"""
|
|
163
|
+
)
|
|
164
|
+
\`\`\`
|
|
165
|
+
|
|
166
|
+
\uD004\uB9AC\uD2F0 \uCCB4\uD06C \uC2E4\uD328 \uC2DC: \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uBCF4\uACE0\uB97C \uBC14\uD0D5\uC73C\uB85C \uC9C1\uC811 \uC218\uC815\uD55C \uB4A4, \uB2E4\uC2DC \uC704\uC784\uD558\uC138\uC694.
|
|
167
|
+
|
|
168
|
+
### 2. \uC9C0\uC2DD \uC815\uB9AC (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
|
|
169
|
+
|
|
170
|
+
\uC791\uC5C5 \uC911 \uAE30\uB85D\uD560 \uB9CC\uD55C \uBC1C\uACAC\uC774 \uC788\uC5C8\uB2E4\uBA74, \uC9C0\uC2DD \uB178\uD2B8 \uC791\uC131\uC744 \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uC5D0 \uC704\uC784\uD558\uC138\uC694.
|
|
171
|
+
|
|
172
|
+
**\uAE30\uB85D \uB300\uC0C1 \uD310\uB2E8 \uAE30\uC900:**
|
|
147
173
|
|
|
148
174
|
| \uC0C1\uD669 | \uD15C\uD50C\uB9BF | \uD30C\uC77C\uBA85 \uD328\uD134 |
|
|
149
175
|
| ------------------------------- | --------------------------------------------------- | --------------------------- |
|
|
@@ -156,17 +182,32 @@ var DEFAULT_TURN_END = `## \uC791\uC5C5 \uB9C8\uBB34\uB9AC \uCCB4\uD06C\uB9AC\uC
|
|
|
156
182
|
| \uBC18\uBCF5 \uAC00\uB2A5\uD55C \uD504\uB85C\uC138\uC2A4 \uC815\uB9BD | [Runbook](.opencode/context/templates/runbook.md) | \`runbook-\uC81C\uBAA9.md\` |
|
|
157
183
|
| \uC2E4\uD5D8/\uB514\uBC84\uAE45 \uC911 \uD559\uC2B5 | [Insight](.opencode/context/templates/insight.md) | \`insight-\uC81C\uBAA9.md\` |
|
|
158
184
|
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
185
|
+
\uD574\uB2F9 \uC0AC\uD56D\uC774 \uC5C6\uC73C\uBA74 \uC774 \uB2E8\uACC4\uB294 \uAC74\uB108\uB6F0\uC138\uC694.
|
|
186
|
+
|
|
187
|
+
\`\`\`
|
|
188
|
+
task(
|
|
189
|
+
category="quick",
|
|
190
|
+
load_skills=[],
|
|
191
|
+
description="Write Zettelkasten knowledge note",
|
|
192
|
+
prompt="""
|
|
193
|
+
TASK: \uC544\uB798 \uB0B4\uC6A9\uC744 \uBC14\uD0D5\uC73C\uB85C Zettelkasten \uC9C0\uC2DD \uB178\uD2B8\uB97C \uC791\uC131\uD558\uC138\uC694.
|
|
194
|
+
EXPECTED OUTCOME: \uD15C\uD50C\uB9BF\uC5D0 \uB9DE\uB294 \uB178\uD2B8 \uD30C\uC77C \uC0DD\uC131, \uAD00\uB828 \uB178\uD2B8 \uB9C1\uD06C \uC5F0\uACB0
|
|
195
|
+
REQUIRED TOOLS: Read (\uD15C\uD50C\uB9BF \uC77D\uAE30), Write (\uB178\uD2B8 \uC791\uC131), Edit (\uAE30\uC874 \uB178\uD2B8 \uB9C1\uD06C \uCD94\uAC00)
|
|
196
|
+
MUST DO:
|
|
197
|
+
- \uD574\uB2F9 \uD15C\uD50C\uB9BF \uD30C\uC77C\uC744 \uC77D\uACE0 \uADF8 \uAD6C\uC870\uC5D0 \uB9DE\uCDB0 \uB178\uD2B8 \uC791\uC131
|
|
198
|
+
- \uB178\uD2B8 \uCCAB \uC904: \uBA85\uD655\uD55C \uC81C\uBAA9 (# Title)
|
|
199
|
+
- \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC790\uAE30 \uC5B8\uC5B4\uB85C \uAC04\uACB0\uD558\uAC8C \uC11C\uC220 (\uBCF5\uC0AC-\uBD99\uC5EC\uB123\uAE30 \uAE08\uC9C0)
|
|
200
|
+
- \uAD00\uB828 \uB178\uD2B8\uB97C [[relative/path/file.md]] \uD615\uD0DC\uC758 wikilink\uB85C \uC5F0\uACB0
|
|
201
|
+
- knowledge \uB514\uB809\uD1A0\uB9AC (\uAE30\uBCF8: docs/)\uC5D0 \uC800\uC7A5. \uB3C4\uBA54\uC778 \uD3F4\uB354\uAC00 \uC788\uB2E4\uBA74 \uC801\uC808\uD55C \uB3C4\uBA54\uC778\uC5D0 \uC800\uC7A5
|
|
202
|
+
- \uAE30\uC874 \uB178\uD2B8\uC758 \uB0B4\uC6A9\uC774 \uBCC0\uACBD\uC0AC\uD56D\uACFC \uBD88\uC77C\uCE58\uD558\uBA74 \uC5C5\uB370\uC774\uD2B8
|
|
203
|
+
- \uB3C4\uBA54\uC778 \uD3F4\uB354\uC5D0 \uC800\uC7A5\uD588\uB2E4\uBA74 \uD574\uB2F9 INDEX.md\uC5D0 \uD56D\uBAA9 \uCD94\uAC00
|
|
204
|
+
MUST NOT DO:
|
|
205
|
+
- \uC18C\uC2A4 \uCF54\uB4DC\uB97C \uC218\uC815\uD558\uC9C0 \uB9C8\uC138\uC694 (\uB178\uD2B8\uB9CC \uC791\uC131)
|
|
206
|
+
- \uB178\uD2B8\uC5D0 \uC5EC\uB7EC \uC8FC\uC81C\uB97C \uC11E\uC9C0 \uB9C8\uC138\uC694 (\uC6D0\uC790\uC131 \uC6D0\uCE59)
|
|
207
|
+
CONTEXT: [\uAE30\uB85D\uD560 \uBC1C\uACAC \uB0B4\uC6A9, \uD574\uB2F9\uD558\uB294 \uD15C\uD50C\uB9BF \uC885\uB958, \uAD00\uB828 \uAE30\uC874 \uB178\uD2B8 \uBAA9\uB85D\uC744 \uC5EC\uAE30\uC5D0 \uD3EC\uD568]
|
|
208
|
+
"""
|
|
209
|
+
)
|
|
210
|
+
\`\`\`
|
|
170
211
|
`;
|
|
171
212
|
var DEFAULT_ADR_TEMPLATE = `# ADR-NNN: [\uC81C\uBAA9]
|
|
172
213
|
|
|
@@ -413,9 +454,54 @@ function updateScaffold(projectDir) {
|
|
|
413
454
|
function writeVersion(contextDir, version) {
|
|
414
455
|
writeFileSync(join(contextDir, ".version"), version, "utf-8");
|
|
415
456
|
}
|
|
457
|
+
function updatePrompts(projectDir) {
|
|
458
|
+
const contextDir = join(projectDir, ".opencode", "context");
|
|
459
|
+
mkdirSync(join(contextDir, "prompts"), { recursive: true });
|
|
460
|
+
const prompts = {
|
|
461
|
+
[`prompts/${DEFAULTS.turnStartFile}`]: DEFAULT_TURN_START,
|
|
462
|
+
[`prompts/${DEFAULTS.turnEndFile}`]: DEFAULT_TURN_END
|
|
463
|
+
};
|
|
464
|
+
const updated = [];
|
|
465
|
+
for (const [path, content] of Object.entries(prompts)) {
|
|
466
|
+
const filePath = join(contextDir, path);
|
|
467
|
+
try {
|
|
468
|
+
const existing = readFileSync(filePath, "utf-8");
|
|
469
|
+
if (existing === content)
|
|
470
|
+
continue;
|
|
471
|
+
} catch {}
|
|
472
|
+
writeFileSync(filePath, content, "utf-8");
|
|
473
|
+
updated.push(path);
|
|
474
|
+
}
|
|
475
|
+
return updated;
|
|
476
|
+
}
|
|
416
477
|
|
|
417
478
|
// src/cli/commands/update.ts
|
|
418
|
-
|
|
479
|
+
var KNOWN_SUBCOMMANDS = ["all", "prompt", "plugin"];
|
|
480
|
+
function runUpdate(args) {
|
|
481
|
+
const [subcommand, ...rest] = args;
|
|
482
|
+
switch (subcommand) {
|
|
483
|
+
case undefined:
|
|
484
|
+
case "all":
|
|
485
|
+
runUpdateAll(resolve(rest[0] ?? process.cwd()));
|
|
486
|
+
break;
|
|
487
|
+
case "prompt":
|
|
488
|
+
runUpdatePrompt(resolve(rest[0] ?? process.cwd()));
|
|
489
|
+
break;
|
|
490
|
+
case "plugin":
|
|
491
|
+
runUpdatePlugin(rest[0] ?? "latest");
|
|
492
|
+
break;
|
|
493
|
+
default:
|
|
494
|
+
if (!KNOWN_SUBCOMMANDS.includes(subcommand)) {
|
|
495
|
+
runUpdateAll(resolve(subcommand));
|
|
496
|
+
} else {
|
|
497
|
+
process.stderr.write(`Unknown update subcommand: ${subcommand}
|
|
498
|
+
`);
|
|
499
|
+
process.exit(1);
|
|
500
|
+
}
|
|
501
|
+
break;
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
function runUpdateAll(projectDir) {
|
|
419
505
|
const updated = updateScaffold(projectDir);
|
|
420
506
|
if (updated.length === 0) {
|
|
421
507
|
process.stdout.write(`All scaffold files are already up to date.
|
|
@@ -429,11 +515,47 @@ function runUpdate(projectDir) {
|
|
|
429
515
|
}
|
|
430
516
|
}
|
|
431
517
|
}
|
|
518
|
+
function runUpdatePrompt(projectDir) {
|
|
519
|
+
const updated = updatePrompts(projectDir);
|
|
520
|
+
if (updated.length === 0) {
|
|
521
|
+
process.stdout.write(`All prompt files are already up to date.
|
|
522
|
+
`);
|
|
523
|
+
} else {
|
|
524
|
+
process.stdout.write(`Updated ${updated.length} prompt file(s):
|
|
525
|
+
`);
|
|
526
|
+
for (const f of updated) {
|
|
527
|
+
process.stdout.write(` - ${f}
|
|
528
|
+
`);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
function detectPackageManager() {
|
|
533
|
+
if (existsSync2("bun.lock") || existsSync2("bun.lockb"))
|
|
534
|
+
return "bun";
|
|
535
|
+
if (existsSync2("pnpm-lock.yaml"))
|
|
536
|
+
return "pnpm";
|
|
537
|
+
if (existsSync2("yarn.lock"))
|
|
538
|
+
return "yarn";
|
|
539
|
+
if (existsSync2("package-lock.json"))
|
|
540
|
+
return "npm";
|
|
541
|
+
return "bun";
|
|
542
|
+
}
|
|
543
|
+
function runUpdatePlugin(version) {
|
|
544
|
+
const pm = detectPackageManager();
|
|
545
|
+
const pkg = `@ksm0709/context@${version}`;
|
|
546
|
+
process.stdout.write(`Updating ${pkg} using ${pm}...
|
|
547
|
+
`);
|
|
548
|
+
const result = Bun.spawnSync([pm, "add", pkg]);
|
|
549
|
+
if (result.exitCode !== 0) {
|
|
550
|
+
process.stderr.write(`Failed to update: ${result.stderr.toString()}
|
|
551
|
+
`);
|
|
552
|
+
process.exit(1);
|
|
553
|
+
}
|
|
554
|
+
process.stdout.write(`Successfully updated to ${pkg}.
|
|
555
|
+
`);
|
|
556
|
+
}
|
|
432
557
|
|
|
433
558
|
// src/cli/index.ts
|
|
434
|
-
var COMMANDS = {
|
|
435
|
-
update: "Force-update scaffold files to latest plugin version"
|
|
436
|
-
};
|
|
437
559
|
function printHelp(out) {
|
|
438
560
|
const write = out ?? ((s) => process.stdout.write(s));
|
|
439
561
|
write(`Usage: context <command>
|
|
@@ -441,19 +563,20 @@ function printHelp(out) {
|
|
|
441
563
|
`);
|
|
442
564
|
write(`Commands:
|
|
443
565
|
`);
|
|
444
|
-
|
|
445
|
-
|
|
566
|
+
write(` update [all] [path] Force-update all scaffold files
|
|
567
|
+
`);
|
|
568
|
+
write(` update prompt [path] Force-update prompt files only
|
|
569
|
+
`);
|
|
570
|
+
write(` update plugin [version] Update @ksm0709/context package
|
|
446
571
|
`);
|
|
447
|
-
}
|
|
448
572
|
write(`
|
|
449
573
|
`);
|
|
450
574
|
}
|
|
451
575
|
function runCli(argv) {
|
|
452
576
|
const [command, ...rest] = argv;
|
|
453
|
-
const projectDir = resolve(rest[0] ?? process.cwd());
|
|
454
577
|
switch (command) {
|
|
455
578
|
case "update":
|
|
456
|
-
runUpdate(
|
|
579
|
+
runUpdate(rest);
|
|
457
580
|
break;
|
|
458
581
|
case undefined:
|
|
459
582
|
case "--help":
|
|
@@ -473,6 +596,5 @@ if (import.meta.path === Bun.main) {
|
|
|
473
596
|
}
|
|
474
597
|
export {
|
|
475
598
|
runCli,
|
|
476
|
-
printHelp
|
|
477
|
-
COMMANDS
|
|
599
|
+
printHelp
|
|
478
600
|
};
|
package/dist/index.js
CHANGED