@ksm0709/context 0.0.13 → 0.0.15
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 +59 -14
- package/dist/index.js +75 -23
- package/package.json +1 -1
- package/dist/constants.d.ts +0 -14
- package/dist/context.js +0 -1579
- package/dist/index.d.ts +0 -1
- package/dist/types.d.ts +0 -13
package/dist/cli/index.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// @bun
|
|
3
3
|
|
|
4
4
|
// src/cli/commands/update.ts
|
|
5
|
-
import { resolve } from "path";
|
|
5
|
+
import { resolve, join as join2 } from "path";
|
|
6
6
|
import { existsSync as existsSync2 } from "fs";
|
|
7
|
+
import { homedir } from "os";
|
|
7
8
|
|
|
8
9
|
// src/lib/scaffold.ts
|
|
9
10
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "fs";
|
|
@@ -15,8 +16,8 @@ var DEFAULTS = {
|
|
|
15
16
|
promptDir: ".opencode/context/prompts",
|
|
16
17
|
turnStartFile: "turn-start.md",
|
|
17
18
|
turnEndFile: "turn-end.md",
|
|
19
|
+
blockedToolPatterns: ["^task$", "^background_", "agent"],
|
|
18
20
|
knowledgeSources: ["AGENTS.md"],
|
|
19
|
-
knowledgeDir: "docs",
|
|
20
21
|
templateDir: ".opencode/context/templates",
|
|
21
22
|
indexFilename: "INDEX.md",
|
|
22
23
|
maxDomainDepth: 2
|
|
@@ -32,7 +33,7 @@ var LIMITS = {
|
|
|
32
33
|
// package.json
|
|
33
34
|
var package_default = {
|
|
34
35
|
name: "@ksm0709/context",
|
|
35
|
-
version: "0.0.
|
|
36
|
+
version: "0.0.14",
|
|
36
37
|
author: {
|
|
37
38
|
name: "TaehoKang",
|
|
38
39
|
email: "ksm07091@gmail.com"
|
|
@@ -68,22 +69,23 @@ var package_default = {
|
|
|
68
69
|
"@opencode-ai/plugin": ">=1.0.0"
|
|
69
70
|
},
|
|
70
71
|
dependencies: {
|
|
71
|
-
"@ksm0709/context": "^0.0.
|
|
72
|
+
"@ksm0709/context": "^0.0.12",
|
|
72
73
|
"jsonc-parser": "^3.0.0"
|
|
73
74
|
},
|
|
74
75
|
devDependencies: {
|
|
75
|
-
"@opencode-ai/plugin": "^1.2.10",
|
|
76
76
|
"@eslint/js": "^9.39.1",
|
|
77
|
+
"@opencode-ai/plugin": "^1.2.10",
|
|
77
78
|
"@types/node": "^20.11.5",
|
|
78
79
|
"@typescript-eslint/eslint-plugin": "8.47.0",
|
|
79
80
|
"@typescript-eslint/parser": "8.47.0",
|
|
81
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
80
82
|
"bun-types": "latest",
|
|
81
83
|
eslint: "^9.39.1",
|
|
82
84
|
"eslint-config-prettier": "10.1.8",
|
|
83
85
|
"eslint-plugin-prettier": "^5.1.3",
|
|
84
86
|
prettier: "^3.2.4",
|
|
85
87
|
"typescript-eslint": "^8.47.0",
|
|
86
|
-
vitest: "^
|
|
88
|
+
vitest: "^4.0.18"
|
|
87
89
|
}
|
|
88
90
|
};
|
|
89
91
|
|
|
@@ -96,6 +98,9 @@ var DEFAULT_CONFIG = `{
|
|
|
96
98
|
"turnStart": ".opencode/context/prompts/turn-start.md",
|
|
97
99
|
"turnEnd": ".opencode/context/prompts/turn-end.md"
|
|
98
100
|
},
|
|
101
|
+
"subagentConfig": {
|
|
102
|
+
"blockedToolPatterns": ["^task$", "^background_", "agent"]
|
|
103
|
+
},
|
|
99
104
|
"knowledge": {
|
|
100
105
|
"dir": "docs",
|
|
101
106
|
"sources": ["AGENTS.md"]
|
|
@@ -115,11 +120,17 @@ var DEFAULT_TURN_START = `## Knowledge Context
|
|
|
115
120
|
### \uC791\uC5C5 \uC804 \uD544\uC218
|
|
116
121
|
|
|
117
122
|
- \uC544\uB798 **Available Knowledge** \uBAA9\uB85D\uC5D0\uC11C \uD604\uC7AC \uC791\uC5C5\uACFC \uAD00\uB828\uB41C \uBB38\uC11C\uB97C **\uBA3C\uC800** \uC77D\uC73C\uC138\uC694
|
|
123
|
+
${"<"}!-- primary-only -->
|
|
118
124
|
- \uC9C1\uC811 \uC77D\uAE30 \uC804\uC5D0 \uC544\uB798\uC640 \uAC19\uC774 **\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8(explore)\uC5D0 \uC704\uC784**\uD558\uC5EC, \uC5F0\uAD00\uB41C \uB178\uD2B8\uB97C \uC9D1\uC911 \uD0D0\uC0C9\uD558\uACE0 \uC791\uC5C5\uC5D0 \uD544\uC694\uD55C \uB0B4\uC6A9\uC744 \uC694\uC57D\uD558\uB3C4\uB85D \uC9C0\uC2DC\uD558\uC138\uC694.
|
|
125
|
+
${"<"}!-- /primary-only -->
|
|
126
|
+
${"<"}!-- subagent-only -->
|
|
127
|
+
- \uAD00\uB828 \uBB38\uC11C\uB97C \uC9C1\uC811 \uC77D\uACE0 \uC791\uC5C5\uC5D0 \uC801\uC6A9\uD558\uC138\uC694. \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB97C \uD638\uCD9C\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
128
|
+
${"<"}!-- /subagent-only -->
|
|
119
129
|
- \uB3C4\uBA54\uC778 \uD3F4\uB354 \uAD6C\uC870\uAC00 \uC788\uB2E4\uBA74 INDEX.md\uC758 \uC694\uC57D\uC744 \uCC38\uACE0\uD558\uC5EC \uD544\uC694\uD55C \uB178\uD2B8\uB9CC \uC120\uD0DD\uC801\uC73C\uB85C \uC77D\uC73C\uC138\uC694
|
|
120
130
|
- \uBB38\uC11C \uB0B4 [[\uB9C1\uD06C]]\uB97C \uB530\uB77C\uAC00\uBA70 \uAD00\uB828 \uB178\uD2B8\uB97C \uD0D0\uC0C9\uD558\uC138\uC694 -- \uB9C1\uD06C\uB97C \uB193\uCE58\uBA74 \uC911\uC694\uD55C \uB9E5\uB77D\uC744 \uC783\uC2B5\uB2C8\uB2E4
|
|
121
131
|
- \uC9C0\uC2DD \uD30C\uC77C\uC5D0 \uAE30\uB85D\uB41C \uC544\uD0A4\uD14D\uCC98 \uACB0\uC815, \uD328\uD134, \uC81C\uC57D\uC0AC\uD56D\uC744 \uBC18\uB4DC\uC2DC \uB530\uB974\uC138\uC694
|
|
122
132
|
|
|
133
|
+
${"<"}!-- primary-only -->
|
|
123
134
|
### \uC9C0\uC2DD \uD0D0\uC0C9 (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
|
|
124
135
|
|
|
125
136
|
\uD604\uC7AC \uC791\uC5C5\uACFC \uAD00\uB828\uB41C \uC9C0\uC2DD \uB178\uD2B8\uB97C \uC77D\uACE0 \uC694\uC57D\uD558\uB294 \uC791\uC5C5\uC744 **\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uC5D0 \uC704\uC784**\uD558\uC5EC \uCEE8\uD14D\uC2A4\uD2B8 \uD30C\uC545\uC744 \uD6A8\uC728\uD654\uD558\uC138\uC694.
|
|
@@ -150,6 +161,8 @@ task(
|
|
|
150
161
|
)
|
|
151
162
|
\`\`\`
|
|
152
163
|
|
|
164
|
+
${"<"}!-- /primary-only -->
|
|
165
|
+
|
|
153
166
|
|
|
154
167
|
- \uC544\uB798 **Available Knowledge** \uBAA9\uB85D\uC5D0\uC11C \uD604\uC7AC \uC791\uC5C5\uACFC \uAD00\uB828\uB41C \uBB38\uC11C\uB97C **\uBA3C\uC800** \uC77D\uC73C\uC138\uC694
|
|
155
168
|
- \uB3C4\uBA54\uC778 \uD3F4\uB354 \uAD6C\uC870\uAC00 \uC788\uB2E4\uBA74 INDEX.md\uC758 \uC694\uC57D\uC744 \uCC38\uACE0\uD558\uC5EC \uD544\uC694\uD55C \uB178\uD2B8\uB9CC \uC120\uD0DD\uC801\uC73C\uB85C \uC77D\uC73C\uC138\uC694
|
|
@@ -166,9 +179,12 @@ task(
|
|
|
166
179
|
|
|
167
180
|
- AGENTS.md\uC758 \uC9C0\uC2DC\uC0AC\uD56D\uC774 \uD56D\uC0C1 \uCD5C\uC6B0\uC120
|
|
168
181
|
- \uC9C0\uC2DD \uB178\uD2B8\uC758 \uACB0\uC815\uC0AC\uD56D > \uC77C\uBC18\uC801 \uAD00\uD589
|
|
182
|
+
${"<"}!-- primary-only -->
|
|
169
183
|
- \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
|
|
184
|
+
${"<"}!-- /primary-only -->
|
|
170
185
|
`;
|
|
171
|
-
var DEFAULT_TURN_END =
|
|
186
|
+
var DEFAULT_TURN_END = `${"<"}!-- primary-only -->
|
|
187
|
+
## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
|
|
172
188
|
|
|
173
189
|
\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.
|
|
174
190
|
\uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uAC00 \uC9C1\uC811 \uC218\uD589\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
@@ -246,6 +262,16 @@ task(
|
|
|
246
262
|
"""
|
|
247
263
|
)
|
|
248
264
|
\`\`\`
|
|
265
|
+
|
|
266
|
+
${"<"}!-- /primary-only -->
|
|
267
|
+
${"<"}!-- subagent-only -->
|
|
268
|
+
<environment-constraints>
|
|
269
|
+
\uB2F9\uC2E0\uC740 \uD604\uC7AC \uBA54\uC778 \uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130\uAC00 \uD638\uCD9C\uD55C **\uB9D0\uB2E8 \uC6CC\uCEE4(Worker) \uC5D0\uC774\uC804\uD2B8**\uC785\uB2C8\uB2E4.
|
|
270
|
+
\uD604\uC7AC \uB2F9\uC2E0\uC758 \uC2E4\uD589 \uD658\uACBD(Sandbox)\uC5D0\uC11C\uB294 \uB124\uD2B8\uC6CC\uD06C \uC790\uC6D0 \uBCF4\uD638\uB97C \uC704\uD574 **\uB2E4\uB978 \uC5D0\uC774\uC804\uD2B8\uB97C \uC0DD\uC131, \uD638\uCD9C, \uC704\uC784\uD558\uB294 \uBAA8\uB4E0 \uB3C4\uAD6C(\uC608: task, background_task \uB4F1)\uC758 \uAD8C\uD55C\uC774 \uC2DC\uC2A4\uD15C \uB808\uBCA8\uC5D0\uC11C \uD68C\uC218**\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
|
271
|
+
|
|
272
|
+
\uB9CC\uC57D \uC791\uC5C5 \uC911 \uB2E4\uB978 \uC804\uBB38\uAC00(explore, librarian \uB4F1)\uC758 \uB3C4\uC6C0\uC774 \uD544\uC694\uD558\uB2E4\uBA74, \uC9C1\uC811 \uC5D0\uC774\uC804\uD2B8\uB97C \uBD80\uB974\uB824 \uC2DC\uB3C4\uD558\uC9C0 \uB9C8\uC138\uC694. \uB300\uC2E0 \uD604\uC7AC\uAE4C\uC9C0\uC758 \uBD84\uC11D \uACB0\uACFC\uB97C \uC694\uC57D\uD558\uACE0 "OOO \uC5D0\uC774\uC804\uD2B8\uC758 \uB3C4\uC6C0\uC774 \uD544\uC694\uD568"\uC774\uB77C\uB294 \uBA54\uC2DC\uC9C0\uC640 \uD568\uAED8 \uC791\uC5C5\uC744 \uC885\uB8CC(Complete)\uD558\uC5EC \uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uC5D0\uAC8C \uC81C\uC5B4\uAD8C\uC744 \uBC18\uD658\uD558\uC138\uC694.
|
|
273
|
+
</environment-constraints>
|
|
274
|
+
${"<"}!-- /subagent-only -->
|
|
249
275
|
`;
|
|
250
276
|
var DEFAULT_ADR_TEMPLATE = `# ADR-NNN: [\uC81C\uBAA9]
|
|
251
277
|
|
|
@@ -578,18 +604,37 @@ function detectPackageManager() {
|
|
|
578
604
|
return "npm";
|
|
579
605
|
return "bun";
|
|
580
606
|
}
|
|
607
|
+
function isGloballyInstalled() {
|
|
608
|
+
const globalBin = join2(homedir(), ".bun", "bin", "context");
|
|
609
|
+
return existsSync2(globalBin);
|
|
610
|
+
}
|
|
581
611
|
function runUpdatePlugin(version) {
|
|
582
|
-
const pm = detectPackageManager();
|
|
583
612
|
const pkg = `@ksm0709/context@${version}`;
|
|
584
|
-
|
|
613
|
+
const globalInstalled = isGloballyInstalled();
|
|
614
|
+
if (globalInstalled) {
|
|
615
|
+
process.stdout.write(`Updating global ${pkg}...
|
|
585
616
|
`);
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
617
|
+
const globalResult = Bun.spawnSync(["bun", "install", "-g", pkg]);
|
|
618
|
+
if (globalResult.exitCode !== 0) {
|
|
619
|
+
process.stderr.write(`Failed to update global: ${globalResult.stderr.toString()}
|
|
620
|
+
`);
|
|
621
|
+
process.exit(1);
|
|
622
|
+
return;
|
|
623
|
+
}
|
|
624
|
+
process.stdout.write(`Successfully updated global ${pkg}.
|
|
625
|
+
`);
|
|
626
|
+
}
|
|
627
|
+
const pm = detectPackageManager();
|
|
628
|
+
process.stdout.write(`Updating local ${pkg} using ${pm}...
|
|
629
|
+
`);
|
|
630
|
+
const localResult = Bun.spawnSync([pm, "add", pkg]);
|
|
631
|
+
if (localResult.exitCode !== 0) {
|
|
632
|
+
process.stderr.write(`Failed to update local: ${localResult.stderr.toString()}
|
|
589
633
|
`);
|
|
590
634
|
process.exit(1);
|
|
635
|
+
return;
|
|
591
636
|
}
|
|
592
|
-
process.stdout.write(`Successfully updated
|
|
637
|
+
process.stdout.write(`Successfully updated local ${pkg}.
|
|
593
638
|
`);
|
|
594
639
|
}
|
|
595
640
|
|
|
@@ -642,7 +687,7 @@ function runCli(argv) {
|
|
|
642
687
|
process.exit(1);
|
|
643
688
|
}
|
|
644
689
|
}
|
|
645
|
-
if (import.meta.path === Bun.main) {
|
|
690
|
+
if (typeof Bun !== "undefined" && import.meta.path === Bun.main) {
|
|
646
691
|
runCli(process.argv.slice(2));
|
|
647
692
|
}
|
|
648
693
|
export {
|
package/dist/index.js
CHANGED
|
@@ -816,7 +816,6 @@ var DEFAULTS = {
|
|
|
816
816
|
promptDir: ".opencode/context/prompts",
|
|
817
817
|
turnStartFile: "turn-start.md",
|
|
818
818
|
turnEndFile: "turn-end.md",
|
|
819
|
-
subagentTurnEndFile: "subagent-turn-end.md",
|
|
820
819
|
blockedToolPatterns: ["^task$", "^background_", "agent"],
|
|
821
820
|
knowledgeSources: ["AGENTS.md"],
|
|
822
821
|
templateDir: ".opencode/context/templates",
|
|
@@ -837,14 +836,13 @@ function getDefaultConfig() {
|
|
|
837
836
|
return {
|
|
838
837
|
prompts: {
|
|
839
838
|
turnStart: join(DEFAULTS.promptDir, DEFAULTS.turnStartFile),
|
|
840
|
-
turnEnd: join(DEFAULTS.promptDir, DEFAULTS.turnEndFile)
|
|
841
|
-
subagentTurnEnd: join(DEFAULTS.promptDir, DEFAULTS.subagentTurnEndFile)
|
|
839
|
+
turnEnd: join(DEFAULTS.promptDir, DEFAULTS.turnEndFile)
|
|
842
840
|
},
|
|
843
841
|
subagentConfig: {
|
|
844
842
|
blockedToolPatterns: [...DEFAULTS.blockedToolPatterns]
|
|
845
843
|
},
|
|
846
844
|
knowledge: {
|
|
847
|
-
dir:
|
|
845
|
+
dir: "docs",
|
|
848
846
|
sources: [...DEFAULTS.knowledgeSources],
|
|
849
847
|
mode: "auto",
|
|
850
848
|
indexFilename: DEFAULTS.indexFilename,
|
|
@@ -857,8 +855,7 @@ function mergeWithDefaults(partial) {
|
|
|
857
855
|
return {
|
|
858
856
|
prompts: {
|
|
859
857
|
turnStart: partial.prompts?.turnStart ?? defaults.prompts.turnStart,
|
|
860
|
-
turnEnd: partial.prompts?.turnEnd ?? defaults.prompts.turnEnd
|
|
861
|
-
subagentTurnEnd: partial.prompts?.subagentTurnEnd ?? defaults.prompts.subagentTurnEnd
|
|
858
|
+
turnEnd: partial.prompts?.turnEnd ?? defaults.prompts.turnEnd
|
|
862
859
|
},
|
|
863
860
|
subagentConfig: {
|
|
864
861
|
blockedToolPatterns: partial.subagentConfig?.blockedToolPatterns ?? defaults.subagentConfig.blockedToolPatterns
|
|
@@ -1103,7 +1100,7 @@ import { join as join3 } from "path";
|
|
|
1103
1100
|
// package.json
|
|
1104
1101
|
var package_default = {
|
|
1105
1102
|
name: "@ksm0709/context",
|
|
1106
|
-
version: "0.0.
|
|
1103
|
+
version: "0.0.15",
|
|
1107
1104
|
author: {
|
|
1108
1105
|
name: "TaehoKang",
|
|
1109
1106
|
email: "ksm07091@gmail.com"
|
|
@@ -1165,8 +1162,7 @@ var DEFAULT_CONFIG = `{
|
|
|
1165
1162
|
// See: https://github.com/ksm0709/context
|
|
1166
1163
|
"prompts": {
|
|
1167
1164
|
"turnStart": ".opencode/context/prompts/turn-start.md",
|
|
1168
|
-
"turnEnd": ".opencode/context/prompts/turn-end.md"
|
|
1169
|
-
"subagentTurnEnd": ".opencode/context/prompts/subagent-turn-end.md"
|
|
1165
|
+
"turnEnd": ".opencode/context/prompts/turn-end.md"
|
|
1170
1166
|
},
|
|
1171
1167
|
"subagentConfig": {
|
|
1172
1168
|
"blockedToolPatterns": ["^task$", "^background_", "agent"]
|
|
@@ -1190,11 +1186,17 @@ var DEFAULT_TURN_START = `## Knowledge Context
|
|
|
1190
1186
|
### \uC791\uC5C5 \uC804 \uD544\uC218
|
|
1191
1187
|
|
|
1192
1188
|
- \uC544\uB798 **Available Knowledge** \uBAA9\uB85D\uC5D0\uC11C \uD604\uC7AC \uC791\uC5C5\uACFC \uAD00\uB828\uB41C \uBB38\uC11C\uB97C **\uBA3C\uC800** \uC77D\uC73C\uC138\uC694
|
|
1189
|
+
${"<"}!-- primary-only -->
|
|
1193
1190
|
- \uC9C1\uC811 \uC77D\uAE30 \uC804\uC5D0 \uC544\uB798\uC640 \uAC19\uC774 **\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8(explore)\uC5D0 \uC704\uC784**\uD558\uC5EC, \uC5F0\uAD00\uB41C \uB178\uD2B8\uB97C \uC9D1\uC911 \uD0D0\uC0C9\uD558\uACE0 \uC791\uC5C5\uC5D0 \uD544\uC694\uD55C \uB0B4\uC6A9\uC744 \uC694\uC57D\uD558\uB3C4\uB85D \uC9C0\uC2DC\uD558\uC138\uC694.
|
|
1191
|
+
${"<"}!-- /primary-only -->
|
|
1192
|
+
${"<"}!-- subagent-only -->
|
|
1193
|
+
- \uAD00\uB828 \uBB38\uC11C\uB97C \uC9C1\uC811 \uC77D\uACE0 \uC791\uC5C5\uC5D0 \uC801\uC6A9\uD558\uC138\uC694. \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uB97C \uD638\uCD9C\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
1194
|
+
${"<"}!-- /subagent-only -->
|
|
1194
1195
|
- \uB3C4\uBA54\uC778 \uD3F4\uB354 \uAD6C\uC870\uAC00 \uC788\uB2E4\uBA74 INDEX.md\uC758 \uC694\uC57D\uC744 \uCC38\uACE0\uD558\uC5EC \uD544\uC694\uD55C \uB178\uD2B8\uB9CC \uC120\uD0DD\uC801\uC73C\uB85C \uC77D\uC73C\uC138\uC694
|
|
1195
1196
|
- \uBB38\uC11C \uB0B4 [[\uB9C1\uD06C]]\uB97C \uB530\uB77C\uAC00\uBA70 \uAD00\uB828 \uB178\uD2B8\uB97C \uD0D0\uC0C9\uD558\uC138\uC694 -- \uB9C1\uD06C\uB97C \uB193\uCE58\uBA74 \uC911\uC694\uD55C \uB9E5\uB77D\uC744 \uC783\uC2B5\uB2C8\uB2E4
|
|
1196
1197
|
- \uC9C0\uC2DD \uD30C\uC77C\uC5D0 \uAE30\uB85D\uB41C \uC544\uD0A4\uD14D\uCC98 \uACB0\uC815, \uD328\uD134, \uC81C\uC57D\uC0AC\uD56D\uC744 \uBC18\uB4DC\uC2DC \uB530\uB974\uC138\uC694
|
|
1197
1198
|
|
|
1199
|
+
${"<"}!-- primary-only -->
|
|
1198
1200
|
### \uC9C0\uC2DD \uD0D0\uC0C9 (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
|
|
1199
1201
|
|
|
1200
1202
|
\uD604\uC7AC \uC791\uC5C5\uACFC \uAD00\uB828\uB41C \uC9C0\uC2DD \uB178\uD2B8\uB97C \uC77D\uACE0 \uC694\uC57D\uD558\uB294 \uC791\uC5C5\uC744 **\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uC5D0 \uC704\uC784**\uD558\uC5EC \uCEE8\uD14D\uC2A4\uD2B8 \uD30C\uC545\uC744 \uD6A8\uC728\uD654\uD558\uC138\uC694.
|
|
@@ -1225,6 +1227,8 @@ task(
|
|
|
1225
1227
|
)
|
|
1226
1228
|
\`\`\`
|
|
1227
1229
|
|
|
1230
|
+
${"<"}!-- /primary-only -->
|
|
1231
|
+
|
|
1228
1232
|
|
|
1229
1233
|
- \uC544\uB798 **Available Knowledge** \uBAA9\uB85D\uC5D0\uC11C \uD604\uC7AC \uC791\uC5C5\uACFC \uAD00\uB828\uB41C \uBB38\uC11C\uB97C **\uBA3C\uC800** \uC77D\uC73C\uC138\uC694
|
|
1230
1234
|
- \uB3C4\uBA54\uC778 \uD3F4\uB354 \uAD6C\uC870\uAC00 \uC788\uB2E4\uBA74 INDEX.md\uC758 \uC694\uC57D\uC744 \uCC38\uACE0\uD558\uC5EC \uD544\uC694\uD55C \uB178\uD2B8\uB9CC \uC120\uD0DD\uC801\uC73C\uB85C \uC77D\uC73C\uC138\uC694
|
|
@@ -1241,9 +1245,12 @@ task(
|
|
|
1241
1245
|
|
|
1242
1246
|
- AGENTS.md\uC758 \uC9C0\uC2DC\uC0AC\uD56D\uC774 \uD56D\uC0C1 \uCD5C\uC6B0\uC120
|
|
1243
1247
|
- \uC9C0\uC2DD \uB178\uD2B8\uC758 \uACB0\uC815\uC0AC\uD56D > \uC77C\uBC18\uC801 \uAD00\uD589
|
|
1248
|
+
${"<"}!-- primary-only -->
|
|
1244
1249
|
- \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
|
|
1250
|
+
${"<"}!-- /primary-only -->
|
|
1245
1251
|
`;
|
|
1246
|
-
var DEFAULT_TURN_END =
|
|
1252
|
+
var DEFAULT_TURN_END = `${"<"}!-- primary-only -->
|
|
1253
|
+
## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
|
|
1247
1254
|
|
|
1248
1255
|
\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.
|
|
1249
1256
|
\uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uAC00 \uC9C1\uC811 \uC218\uD589\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
@@ -1321,13 +1328,16 @@ task(
|
|
|
1321
1328
|
"""
|
|
1322
1329
|
)
|
|
1323
1330
|
\`\`\`
|
|
1324
|
-
|
|
1325
|
-
|
|
1331
|
+
|
|
1332
|
+
${"<"}!-- /primary-only -->
|
|
1333
|
+
${"<"}!-- subagent-only -->
|
|
1334
|
+
<environment-constraints>
|
|
1326
1335
|
\uB2F9\uC2E0\uC740 \uD604\uC7AC \uBA54\uC778 \uC624\uCF00\uC2A4\uD2B8\uB808\uC774\uD130\uAC00 \uD638\uCD9C\uD55C **\uB9D0\uB2E8 \uC6CC\uCEE4(Worker) \uC5D0\uC774\uC804\uD2B8**\uC785\uB2C8\uB2E4.
|
|
1327
1336
|
\uD604\uC7AC \uB2F9\uC2E0\uC758 \uC2E4\uD589 \uD658\uACBD(Sandbox)\uC5D0\uC11C\uB294 \uB124\uD2B8\uC6CC\uD06C \uC790\uC6D0 \uBCF4\uD638\uB97C \uC704\uD574 **\uB2E4\uB978 \uC5D0\uC774\uC804\uD2B8\uB97C \uC0DD\uC131, \uD638\uCD9C, \uC704\uC784\uD558\uB294 \uBAA8\uB4E0 \uB3C4\uAD6C(\uC608: task, background_task \uB4F1)\uC758 \uAD8C\uD55C\uC774 \uC2DC\uC2A4\uD15C \uB808\uBCA8\uC5D0\uC11C \uD68C\uC218**\uB418\uC5C8\uC2B5\uB2C8\uB2E4.
|
|
1328
1337
|
|
|
1329
1338
|
\uB9CC\uC57D \uC791\uC5C5 \uC911 \uB2E4\uB978 \uC804\uBB38\uAC00(explore, librarian \uB4F1)\uC758 \uB3C4\uC6C0\uC774 \uD544\uC694\uD558\uB2E4\uBA74, \uC9C1\uC811 \uC5D0\uC774\uC804\uD2B8\uB97C \uBD80\uB974\uB824 \uC2DC\uB3C4\uD558\uC9C0 \uB9C8\uC138\uC694. \uB300\uC2E0 \uD604\uC7AC\uAE4C\uC9C0\uC758 \uBD84\uC11D \uACB0\uACFC\uB97C \uC694\uC57D\uD558\uACE0 "OOO \uC5D0\uC774\uC804\uD2B8\uC758 \uB3C4\uC6C0\uC774 \uD544\uC694\uD568"\uC774\uB77C\uB294 \uBA54\uC2DC\uC9C0\uC640 \uD568\uAED8 \uC791\uC5C5\uC744 \uC885\uB8CC(Complete)\uD558\uC5EC \uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uC5D0\uAC8C \uC81C\uC5B4\uAD8C\uC744 \uBC18\uD658\uD558\uC138\uC694.
|
|
1330
1339
|
</environment-constraints>
|
|
1340
|
+
${"<"}!-- /subagent-only -->
|
|
1331
1341
|
`;
|
|
1332
1342
|
var DEFAULT_ADR_TEMPLATE = `# ADR-NNN: [\uC81C\uBAA9]
|
|
1333
1343
|
|
|
@@ -1559,7 +1569,6 @@ function scaffoldIfNeeded(projectDir) {
|
|
|
1559
1569
|
writeFileSync(join3(contextDir, "config.jsonc"), DEFAULT_CONFIG, "utf-8");
|
|
1560
1570
|
writeFileSync(join3(promptsDir, DEFAULTS.turnStartFile), DEFAULT_TURN_START, "utf-8");
|
|
1561
1571
|
writeFileSync(join3(promptsDir, DEFAULTS.turnEndFile), DEFAULT_TURN_END, "utf-8");
|
|
1562
|
-
writeFileSync(join3(promptsDir, DEFAULTS.subagentTurnEndFile), DEFAULT_SUBAGENT_TURN_END, "utf-8");
|
|
1563
1572
|
for (const [filename, content] of Object.entries(TEMPLATE_FILES)) {
|
|
1564
1573
|
writeFileSync(join3(templatesDir, filename), content, "utf-8");
|
|
1565
1574
|
}
|
|
@@ -1602,6 +1611,49 @@ function autoUpdateTemplates(projectDir) {
|
|
|
1602
1611
|
return updated;
|
|
1603
1612
|
}
|
|
1604
1613
|
|
|
1614
|
+
// src/lib/prompt-filter.ts
|
|
1615
|
+
function filterByAgentType(content, isSubagent) {
|
|
1616
|
+
const process = (text, marker, shouldRemove) => {
|
|
1617
|
+
const startTag = `<!-- ${marker} -->`;
|
|
1618
|
+
const endTag = `<!-- /${marker} -->`;
|
|
1619
|
+
if (!text.includes(startTag))
|
|
1620
|
+
return text;
|
|
1621
|
+
if (!text.includes(endTag))
|
|
1622
|
+
return text;
|
|
1623
|
+
const regex = new RegExp(`${startTag}\\n?([\\s\\S]*?)${endTag}\\n?`, "g");
|
|
1624
|
+
if (shouldRemove) {
|
|
1625
|
+
return text.replace(regex, "");
|
|
1626
|
+
} else {
|
|
1627
|
+
return text.replace(regex, "$1");
|
|
1628
|
+
}
|
|
1629
|
+
};
|
|
1630
|
+
let filtered = content;
|
|
1631
|
+
if (isSubagent) {
|
|
1632
|
+
filtered = process(filtered, "primary-only", true);
|
|
1633
|
+
filtered = process(filtered, "subagent-only", false);
|
|
1634
|
+
} else {
|
|
1635
|
+
filtered = process(filtered, "subagent-only", true);
|
|
1636
|
+
filtered = process(filtered, "primary-only", false);
|
|
1637
|
+
}
|
|
1638
|
+
return filtered;
|
|
1639
|
+
}
|
|
1640
|
+
|
|
1641
|
+
// src/lib/subagent-detector.ts
|
|
1642
|
+
async function isSubagentSession(getSession, sessionID, cache) {
|
|
1643
|
+
if (!sessionID)
|
|
1644
|
+
return false;
|
|
1645
|
+
if (cache.has(sessionID))
|
|
1646
|
+
return cache.get(sessionID);
|
|
1647
|
+
try {
|
|
1648
|
+
const session = await getSession(sessionID);
|
|
1649
|
+
const result = !!session?.parentID;
|
|
1650
|
+
cache.set(sessionID, result);
|
|
1651
|
+
return result;
|
|
1652
|
+
} catch {
|
|
1653
|
+
return false;
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
|
|
1605
1657
|
// src/index.ts
|
|
1606
1658
|
var plugin = async ({ directory, client }) => {
|
|
1607
1659
|
const scaffolded = scaffoldIfNeeded(directory);
|
|
@@ -1626,14 +1678,13 @@ var plugin = async ({ directory, client }) => {
|
|
|
1626
1678
|
}
|
|
1627
1679
|
}
|
|
1628
1680
|
const config = loadConfig(directory);
|
|
1681
|
+
const subagentCache = new Map;
|
|
1682
|
+
const getSession = (id) => client.session.get({ path: { id } });
|
|
1629
1683
|
return {
|
|
1630
1684
|
"tool.execute.before": async (input) => {
|
|
1631
1685
|
try {
|
|
1632
|
-
const
|
|
1633
|
-
if (
|
|
1634
|
-
return;
|
|
1635
|
-
const isSubagent = ["explore", "librarian", "oracle", "Sisyphus-Junior"].includes(session.agent);
|
|
1636
|
-
if (isSubagent) {
|
|
1686
|
+
const subagent = await isSubagentSession(getSession, input.sessionID, subagentCache);
|
|
1687
|
+
if (subagent) {
|
|
1637
1688
|
const patterns = config.subagentConfig?.blockedToolPatterns ?? DEFAULTS.blockedToolPatterns;
|
|
1638
1689
|
const isBlocked = patterns.some((pattern) => new RegExp(pattern, "i").test(input.tool));
|
|
1639
1690
|
if (isBlocked) {
|
|
@@ -1653,7 +1704,9 @@ var plugin = async ({ directory, client }) => {
|
|
|
1653
1704
|
if (!lastUserMsg)
|
|
1654
1705
|
return;
|
|
1655
1706
|
const turnStartPath = join4(directory, config.prompts.turnStart ?? join4(DEFAULTS.promptDir, DEFAULTS.turnStartFile));
|
|
1656
|
-
const
|
|
1707
|
+
const sessionID = lastUserMsg.info.sessionID;
|
|
1708
|
+
const subagent = await isSubagentSession(getSession, sessionID, subagentCache);
|
|
1709
|
+
const turnStart = filterByAgentType(readPromptFile(turnStartPath) ?? "", subagent);
|
|
1657
1710
|
const knowledgeIndex = buildKnowledgeIndexV2(directory, config.knowledge);
|
|
1658
1711
|
const indexContent = knowledgeIndex.mode === "flat" ? formatKnowledgeIndex(knowledgeIndex.individualFiles) : formatDomainIndex(knowledgeIndex);
|
|
1659
1712
|
const combinedContent = [turnStart, indexContent].filter(Boolean).join(`
|
|
@@ -1668,10 +1721,9 @@ var plugin = async ({ directory, client }) => {
|
|
|
1668
1721
|
text: combinedContent
|
|
1669
1722
|
});
|
|
1670
1723
|
}
|
|
1671
|
-
const
|
|
1672
|
-
const
|
|
1673
|
-
const
|
|
1674
|
-
const turnEnd = readPromptFile(turnEndPath);
|
|
1724
|
+
const turnEndPath = join4(directory, config.prompts.turnEnd ?? join4(DEFAULTS.promptDir, DEFAULTS.turnEndFile));
|
|
1725
|
+
const rawTurnEnd = readPromptFile(turnEndPath);
|
|
1726
|
+
const turnEnd = rawTurnEnd ? filterByAgentType(rawTurnEnd, subagent) : null;
|
|
1675
1727
|
if (!turnEnd)
|
|
1676
1728
|
return;
|
|
1677
1729
|
const msgId = `context-turn-end-${Date.now()}`;
|
package/package.json
CHANGED
package/dist/constants.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare const DEFAULTS: {
|
|
2
|
-
readonly configPath: ".opencode/context/config.jsonc";
|
|
3
|
-
readonly promptDir: ".opencode/context/prompts";
|
|
4
|
-
readonly turnStartFile: "turn-start.md";
|
|
5
|
-
readonly turnEndFile: "turn-end.md";
|
|
6
|
-
readonly knowledgeSources: readonly ["AGENTS.md"];
|
|
7
|
-
};
|
|
8
|
-
export declare const LIMITS: {
|
|
9
|
-
readonly maxPromptFileSize: number;
|
|
10
|
-
readonly maxIndexEntries: 100;
|
|
11
|
-
readonly maxTotalInjectionSize: number;
|
|
12
|
-
readonly maxScanDepth: 3;
|
|
13
|
-
readonly maxSummaryLength: 100;
|
|
14
|
-
};
|