@ksm0709/context 0.0.9 → 0.0.11

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 CHANGED
@@ -1,8 +1,9 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
3
 
4
- // src/cli/index.ts
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.8",
35
+ version: "0.0.11",
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 \uCCB4\uD06C\uB9AC\uC2A4\uD2B8
133
-
134
- \uC791\uC5C5\uC744 \uC644\uB8CC\uD558\uAE30 \uC804\uC5D0 \uBC18\uB4DC\uC2DC:
135
-
136
- ### \uD004\uB9AC\uD2F0 \uBCF4\uC7A5
137
-
138
- - [ ] \uBCC0\uACBD\uD55C \uCF54\uB4DC\uC5D0 \uB300\uD574 lint \uC2E4\uD589
139
- - [ ] \uBCC0\uACBD\uD55C \uCF54\uB4DC\uC5D0 \uB300\uD574 formatter \uC2E4\uD589 (lint\uC640 \uBCC4\uAC1C)
140
- - [ ] \uAE30\uC874 \uD14C\uC2A4\uD2B8 \uD1B5\uACFC \uD655\uC778
141
- - [ ] \uBCC0\uACBD \uBC94\uC704 \uD655\uC778: \uC694\uCCAD\uACFC \uBB34\uAD00\uD55C \uD30C\uC77C\uC744 \uAC74\uB4DC\uB9AC\uC9C0 \uC54A\uC558\uB294\uAC00?
142
- - [ ] \uC0C8\uB85C \uC791\uC131\uD558\uAC70\uB098 \uBCC0\uACBD\uD55C \uCF54\uB4DC\uC758 \uD14C\uC2A4\uD2B8 \uCEE4\uBC84\uB9AC\uC9C0 80% \uC774\uC0C1 \uB2EC\uC131
143
-
144
- ### \uC9C0\uC2DD \uC815\uB9AC (Zettelkasten)
145
-
146
- \uC544\uB798 \uC0C1\uD669\uC5D0 \uD574\uB2F9\uD558\uBA74, \uD574\uB2F9 \uD15C\uD50C\uB9BF \uD30C\uC77C\uC744 \uC77D\uACE0 \uADF8 \uAD6C\uC870\uC5D0 \uB9DE\uCDB0 \uB178\uD2B8\uB97C \uC791\uC131\uD558\uC138\uC694.
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
- - [ ] \uC704 \uC0C1\uD669\uC5D0 \uD574\uB2F9\uD558\uB294 \uBC1C\uACAC\uC774 \uC788\uC5C8\uB2E4\uBA74 \uB178\uD2B8\uB97C \uC791\uC131\uD588\uB294\uAC00?
160
- - [ ] \uAD00\uB828 \uAE30\uC874 \uB178\uD2B8\uC5D0 [[\uB9C1\uD06C]]\uB97C \uCD94\uAC00\uD588\uB294\uAC00?
161
- - [ ] \uAE30\uC874 \uB178\uD2B8\uC758 \uB0B4\uC6A9\uC774 \uBCC0\uACBD\uC0AC\uD56D\uACFC \uBD88\uC77C\uCE58\uD558\uBA74 \uC5C5\uB370\uC774\uD2B8\uD588\uB294\uAC00?
162
- - [ ] \uB178\uD2B8\uB97C \uB3C4\uBA54\uC778 \uD3F4\uB354\uC5D0 \uC800\uC7A5\uD588\uB2E4\uBA74 \uD574\uB2F9 INDEX.md\uC5D0 \uCD94\uAC00\uD588\uB294\uAC00?
163
-
164
- #### \uB178\uD2B8 \uC791\uC131 \uADDC\uCE59
165
-
166
- - \uCCAB \uC904: \uBA85\uD655\uD55C \uC81C\uBAA9 (\`# Title\`)
167
- - \uD575\uC2EC \uB0B4\uC6A9\uC744 \uC790\uC2E0\uC758 \uC5B8\uC5B4\uB85C \uAC04\uACB0\uD558\uAC8C \uC11C\uC220
168
- - \uAD00\uB828 \uB178\uD2B8\uB97C \`[[relative/path/file.md]]\` \uD615\uD0DC\uC758 wikilink\uB85C \uC5F0\uACB0
169
- - 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
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
- function runUpdate(projectDir) {
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,31 +515,81 @@ 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
- };
559
+ var PLUGIN_VERSION2 = package_default.version;
437
560
  function printHelp(out) {
438
561
  const write = out ?? ((s) => process.stdout.write(s));
439
- write(`Usage: context <command>
562
+ write(`Context Plugin CLI v${PLUGIN_VERSION2}
563
+
564
+ `);
565
+ write(`Usage: context <command> [options]
440
566
 
441
567
  `);
442
568
  write(`Commands:
443
569
  `);
444
- for (const [name, desc] of Object.entries(COMMANDS)) {
445
- write(` ${name.padEnd(12)}${desc}
570
+ write(` update [all] [path] Force-update all scaffold files
571
+ `);
572
+ write(` update prompt [path] Force-update prompt files only
573
+ `);
574
+ write(` update plugin [version] Update @ksm0709/context package
446
575
  `);
447
- }
448
576
  write(`
449
577
  `);
450
578
  }
451
579
  function runCli(argv) {
452
580
  const [command, ...rest] = argv;
453
- const projectDir = resolve(rest[0] ?? process.cwd());
581
+ if (argv.includes("--help") || argv.includes("-h")) {
582
+ printHelp();
583
+ return;
584
+ }
454
585
  switch (command) {
455
586
  case "update":
456
- runUpdate(projectDir);
587
+ runUpdate(rest);
588
+ break;
589
+ case "--version":
590
+ case "-v":
591
+ process.stdout.write(`${PLUGIN_VERSION2}
592
+ `);
457
593
  break;
458
594
  case undefined:
459
595
  case "--help":
@@ -473,6 +609,5 @@ if (import.meta.path === Bun.main) {
473
609
  }
474
610
  export {
475
611
  runCli,
476
- printHelp,
477
- COMMANDS
612
+ printHelp
478
613
  };
package/dist/index.js CHANGED
@@ -1094,7 +1094,7 @@ import { join as join3 } from "path";
1094
1094
  // package.json
1095
1095
  var package_default = {
1096
1096
  name: "@ksm0709/context",
1097
- version: "0.0.9",
1097
+ version: "0.0.11",
1098
1098
  author: {
1099
1099
  name: "TaehoKang",
1100
1100
  email: "ksm07091@gmail.com"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ksm0709/context",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "author": {
5
5
  "name": "TaehoKang",
6
6
  "email": "ksm07091@gmail.com"