@ksm0709/context 0.0.14 → 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 +23 -12
- 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
|
@@ -16,7 +16,6 @@ var DEFAULTS = {
|
|
|
16
16
|
promptDir: ".opencode/context/prompts",
|
|
17
17
|
turnStartFile: "turn-start.md",
|
|
18
18
|
turnEndFile: "turn-end.md",
|
|
19
|
-
subagentTurnEndFile: "subagent-turn-end.md",
|
|
20
19
|
blockedToolPatterns: ["^task$", "^background_", "agent"],
|
|
21
20
|
knowledgeSources: ["AGENTS.md"],
|
|
22
21
|
templateDir: ".opencode/context/templates",
|
|
@@ -74,18 +73,19 @@ var package_default = {
|
|
|
74
73
|
"jsonc-parser": "^3.0.0"
|
|
75
74
|
},
|
|
76
75
|
devDependencies: {
|
|
77
|
-
"@opencode-ai/plugin": "^1.2.10",
|
|
78
76
|
"@eslint/js": "^9.39.1",
|
|
77
|
+
"@opencode-ai/plugin": "^1.2.10",
|
|
79
78
|
"@types/node": "^20.11.5",
|
|
80
79
|
"@typescript-eslint/eslint-plugin": "8.47.0",
|
|
81
80
|
"@typescript-eslint/parser": "8.47.0",
|
|
81
|
+
"@vitest/coverage-v8": "^4.0.18",
|
|
82
82
|
"bun-types": "latest",
|
|
83
83
|
eslint: "^9.39.1",
|
|
84
84
|
"eslint-config-prettier": "10.1.8",
|
|
85
85
|
"eslint-plugin-prettier": "^5.1.3",
|
|
86
86
|
prettier: "^3.2.4",
|
|
87
87
|
"typescript-eslint": "^8.47.0",
|
|
88
|
-
vitest: "^
|
|
88
|
+
vitest: "^4.0.18"
|
|
89
89
|
}
|
|
90
90
|
};
|
|
91
91
|
|
|
@@ -96,8 +96,7 @@ var DEFAULT_CONFIG = `{
|
|
|
96
96
|
// See: https://github.com/ksm0709/context
|
|
97
97
|
"prompts": {
|
|
98
98
|
"turnStart": ".opencode/context/prompts/turn-start.md",
|
|
99
|
-
"turnEnd": ".opencode/context/prompts/turn-end.md"
|
|
100
|
-
"subagentTurnEnd": ".opencode/context/prompts/subagent-turn-end.md"
|
|
99
|
+
"turnEnd": ".opencode/context/prompts/turn-end.md"
|
|
101
100
|
},
|
|
102
101
|
"subagentConfig": {
|
|
103
102
|
"blockedToolPatterns": ["^task$", "^background_", "agent"]
|
|
@@ -121,11 +120,17 @@ var DEFAULT_TURN_START = `## Knowledge Context
|
|
|
121
120
|
### \uC791\uC5C5 \uC804 \uD544\uC218
|
|
122
121
|
|
|
123
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 -->
|
|
124
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 -->
|
|
125
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
|
|
126
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
|
|
127
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
|
|
128
132
|
|
|
133
|
+
${"<"}!-- primary-only -->
|
|
129
134
|
### \uC9C0\uC2DD \uD0D0\uC0C9 (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
|
|
130
135
|
|
|
131
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.
|
|
@@ -156,6 +161,8 @@ task(
|
|
|
156
161
|
)
|
|
157
162
|
\`\`\`
|
|
158
163
|
|
|
164
|
+
${"<"}!-- /primary-only -->
|
|
165
|
+
|
|
159
166
|
|
|
160
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
|
|
161
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
|
|
@@ -172,9 +179,12 @@ task(
|
|
|
172
179
|
|
|
173
180
|
- AGENTS.md\uC758 \uC9C0\uC2DC\uC0AC\uD56D\uC774 \uD56D\uC0C1 \uCD5C\uC6B0\uC120
|
|
174
181
|
- \uC9C0\uC2DD \uB178\uD2B8\uC758 \uACB0\uC815\uC0AC\uD56D > \uC77C\uBC18\uC801 \uAD00\uD589
|
|
182
|
+
${"<"}!-- primary-only -->
|
|
175
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 -->
|
|
176
185
|
`;
|
|
177
|
-
var DEFAULT_TURN_END =
|
|
186
|
+
var DEFAULT_TURN_END = `${"<"}!-- primary-only -->
|
|
187
|
+
## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
|
|
178
188
|
|
|
179
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.
|
|
180
190
|
\uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uAC00 \uC9C1\uC811 \uC218\uD589\uD558\uC9C0 \uB9C8\uC138\uC694.
|
|
@@ -252,13 +262,16 @@ task(
|
|
|
252
262
|
"""
|
|
253
263
|
)
|
|
254
264
|
\`\`\`
|
|
255
|
-
|
|
256
|
-
|
|
265
|
+
|
|
266
|
+
${"<"}!-- /primary-only -->
|
|
267
|
+
${"<"}!-- subagent-only -->
|
|
268
|
+
<environment-constraints>
|
|
257
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.
|
|
258
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.
|
|
259
271
|
|
|
260
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.
|
|
261
273
|
</environment-constraints>
|
|
274
|
+
${"<"}!-- /subagent-only -->
|
|
262
275
|
`;
|
|
263
276
|
var DEFAULT_ADR_TEMPLATE = `# ADR-NNN: [\uC81C\uBAA9]
|
|
264
277
|
|
|
@@ -486,7 +499,6 @@ function updateScaffold(projectDir) {
|
|
|
486
499
|
"config.jsonc": DEFAULT_CONFIG,
|
|
487
500
|
[`prompts/${DEFAULTS.turnStartFile}`]: DEFAULT_TURN_START,
|
|
488
501
|
[`prompts/${DEFAULTS.turnEndFile}`]: DEFAULT_TURN_END,
|
|
489
|
-
[`prompts/${DEFAULTS.subagentTurnEndFile}`]: DEFAULT_SUBAGENT_TURN_END,
|
|
490
502
|
...templateEntries
|
|
491
503
|
};
|
|
492
504
|
const updated = [];
|
|
@@ -511,8 +523,7 @@ function updatePrompts(projectDir) {
|
|
|
511
523
|
mkdirSync(join(contextDir, "prompts"), { recursive: true });
|
|
512
524
|
const prompts = {
|
|
513
525
|
[`prompts/${DEFAULTS.turnStartFile}`]: DEFAULT_TURN_START,
|
|
514
|
-
[`prompts/${DEFAULTS.turnEndFile}`]: DEFAULT_TURN_END
|
|
515
|
-
[`prompts/${DEFAULTS.subagentTurnEndFile}`]: DEFAULT_SUBAGENT_TURN_END
|
|
526
|
+
[`prompts/${DEFAULTS.turnEndFile}`]: DEFAULT_TURN_END
|
|
516
527
|
};
|
|
517
528
|
const updated = [];
|
|
518
529
|
for (const [path, content] of Object.entries(prompts)) {
|
|
@@ -676,7 +687,7 @@ function runCli(argv) {
|
|
|
676
687
|
process.exit(1);
|
|
677
688
|
}
|
|
678
689
|
}
|
|
679
|
-
if (import.meta.path === Bun.main) {
|
|
690
|
+
if (typeof Bun !== "undefined" && import.meta.path === Bun.main) {
|
|
680
691
|
runCli(process.argv.slice(2));
|
|
681
692
|
}
|
|
682
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
|
-
};
|