@ksm0709/context 0.0.11 → 0.0.13
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 +39 -1
- package/dist/index.js +86 -6
- package/package.json +2 -1
package/dist/cli/index.js
CHANGED
|
@@ -32,7 +32,7 @@ var LIMITS = {
|
|
|
32
32
|
// package.json
|
|
33
33
|
var package_default = {
|
|
34
34
|
name: "@ksm0709/context",
|
|
35
|
-
version: "0.0.
|
|
35
|
+
version: "0.0.12",
|
|
36
36
|
author: {
|
|
37
37
|
name: "TaehoKang",
|
|
38
38
|
email: "ksm07091@gmail.com"
|
|
@@ -68,6 +68,7 @@ var package_default = {
|
|
|
68
68
|
"@opencode-ai/plugin": ">=1.0.0"
|
|
69
69
|
},
|
|
70
70
|
dependencies: {
|
|
71
|
+
"@ksm0709/context": "^0.0.11",
|
|
71
72
|
"jsonc-parser": "^3.0.0"
|
|
72
73
|
},
|
|
73
74
|
devDependencies: {
|
|
@@ -113,6 +114,43 @@ var DEFAULT_TURN_START = `## Knowledge Context
|
|
|
113
114
|
|
|
114
115
|
### \uC791\uC5C5 \uC804 \uD544\uC218
|
|
115
116
|
|
|
117
|
+
- \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
|
|
118
|
+
- \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.
|
|
119
|
+
- \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
|
+
- \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
|
+
- \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
|
+
|
|
123
|
+
### \uC9C0\uC2DD \uD0D0\uC0C9 (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
|
|
124
|
+
|
|
125
|
+
\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.
|
|
126
|
+
\uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uB294 \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uAC00 \uC694\uC57D\uD574\uC900 \uB0B4\uC6A9\uC744 \uBC14\uD0D5\uC73C\uB85C \uC791\uC5C5\uC744 \uC9C4\uD589\uD558\uC138\uC694.
|
|
127
|
+
|
|
128
|
+
\`\`\`
|
|
129
|
+
task(
|
|
130
|
+
subagent_type="explore",
|
|
131
|
+
load_skills=[],
|
|
132
|
+
description="Analyze and summarize related knowledge notes",
|
|
133
|
+
run_in_background=false,
|
|
134
|
+
prompt="""
|
|
135
|
+
TASK: \uC0AC\uC6A9\uC790\uC758 \uC791\uC5C5 \uC694\uCCAD\uACFC 'Available Knowledge' \uBAA9\uB85D\uC744 \uBD84\uC11D\uD558\uC5EC, \uC774\uBC88 \uC791\uC5C5\uC5D0 \uC9C1\uC811\uC801\uC73C\uB85C \uD544\uC694\uD55C \uC9C0\uC2DD \uB178\uD2B8\uB97C \uD0D0\uC0C9\uD558\uACE0 \uD575\uC2EC\uC744 \uC694\uC57D\uD558\uC138\uC694.
|
|
136
|
+
EXPECTED OUTCOME: \uC791\uC5C5\uC5D0 \uC801\uC6A9\uD574\uC57C \uD560 \uD575\uC2EC \uC81C\uC57D\uC0AC\uD56D, \uC544\uD0A4\uD14D\uCC98 \uACB0\uC815, \uCF54\uB4DC \uD328\uD134, \uC8FC\uC758\uC0AC\uD56D(Gotchas) \uC694\uC57D \uB9AC\uD3EC\uD2B8
|
|
137
|
+
REQUIRED TOOLS: Read (\uC9C0\uC2DD \uB178\uD2B8 \uC77D\uAE30), Glob/Grep (\uD544\uC694 \uC2DC \uC5F0\uAD00 \uC9C0\uC2DD \uAC80\uC0C9)
|
|
138
|
+
MUST DO:
|
|
139
|
+
- \uC791\uC5C5\uACFC \uAD00\uB828\uC131\uC774 \uB192\uC740 \uB178\uD2B8\uB9CC \uC120\uBCC4\uC801\uC73C\uB85C \uC77D\uAE30
|
|
140
|
+
- \uB3C4\uBA54\uC778 \uD3F4\uB354 \uAD6C\uC870\uC778 \uACBD\uC6B0 INDEX.md\uB97C \uC6B0\uC120 \uC77D\uACE0 \uD544\uC694\uD55C \uC138\uBD80 \uB178\uD2B8 \uD0D0\uC0C9
|
|
141
|
+
- \uC77D\uC740 \uB178\uD2B8 \uB0B4\uC758 [[wikilink]]\uB97C \uB530\uB77C\uAC00\uBA70 \uC911\uC694\uD55C \uC5F0\uAD00 \uB9E5\uB77D \uD30C\uC545
|
|
142
|
+
- \uBCF5\uC0AC-\uBD99\uC5EC\uB123\uAE30\uAC00 \uC544\uB2CC, \uC774\uBC88 \uC791\uC5C5\uC5D0 \uC5B4\uB5BB\uAC8C \uC801\uC6A9\uD560\uC9C0 \uBA85\uD655\uD788 \uC694\uC57D
|
|
143
|
+
MUST NOT DO:
|
|
144
|
+
- \uCF54\uB4DC\uB97C \uC9C1\uC811 \uC218\uC815\uD558\uAC70\uB098 \uC791\uC131\uD558\uC9C0 \uB9C8\uC138\uC694 (\uD0D0\uC0C9 \uBC0F \uC694\uC57D\uB9CC \uC218\uD589)
|
|
145
|
+
- \uC791\uC5C5\uACFC \uBB34\uAD00\uD55C \uB178\uD2B8\uAE4C\uC9C0 \uBD88\uD544\uC694\uD558\uAC8C \uD0D0\uC0C9\uD558\uC9C0 \uB9C8\uC138\uC694
|
|
146
|
+
CONTEXT:
|
|
147
|
+
- \uD604\uC7AC \uC791\uC5C5: [\uC0AC\uC6A9\uC790\uC758 \uC791\uC5C5 \uC694\uCCAD \uB0B4\uC6A9 \uC694\uC57D]
|
|
148
|
+
- \uCC38\uACE0\uD560 \uC9C0\uC2DD \uBAA9\uB85D: [\uBA54\uC778 \uD504\uB86C\uD504\uD2B8 \uD558\uB2E8\uC758 Available Knowledge \uBAA9\uB85D \uCC38\uACE0]
|
|
149
|
+
"""
|
|
150
|
+
)
|
|
151
|
+
\`\`\`
|
|
152
|
+
|
|
153
|
+
|
|
116
154
|
- \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
|
|
117
155
|
- \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
|
|
118
156
|
- \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
|
package/dist/index.js
CHANGED
|
@@ -816,8 +816,9 @@ 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
|
+
blockedToolPatterns: ["^task$", "^background_", "agent"],
|
|
819
821
|
knowledgeSources: ["AGENTS.md"],
|
|
820
|
-
knowledgeDir: "docs",
|
|
821
822
|
templateDir: ".opencode/context/templates",
|
|
822
823
|
indexFilename: "INDEX.md",
|
|
823
824
|
maxDomainDepth: 2
|
|
@@ -836,7 +837,11 @@ function getDefaultConfig() {
|
|
|
836
837
|
return {
|
|
837
838
|
prompts: {
|
|
838
839
|
turnStart: join(DEFAULTS.promptDir, DEFAULTS.turnStartFile),
|
|
839
|
-
turnEnd: join(DEFAULTS.promptDir, DEFAULTS.turnEndFile)
|
|
840
|
+
turnEnd: join(DEFAULTS.promptDir, DEFAULTS.turnEndFile),
|
|
841
|
+
subagentTurnEnd: join(DEFAULTS.promptDir, DEFAULTS.subagentTurnEndFile)
|
|
842
|
+
},
|
|
843
|
+
subagentConfig: {
|
|
844
|
+
blockedToolPatterns: [...DEFAULTS.blockedToolPatterns]
|
|
840
845
|
},
|
|
841
846
|
knowledge: {
|
|
842
847
|
dir: DEFAULTS.knowledgeDir,
|
|
@@ -852,7 +857,11 @@ function mergeWithDefaults(partial) {
|
|
|
852
857
|
return {
|
|
853
858
|
prompts: {
|
|
854
859
|
turnStart: partial.prompts?.turnStart ?? defaults.prompts.turnStart,
|
|
855
|
-
turnEnd: partial.prompts?.turnEnd ?? defaults.prompts.turnEnd
|
|
860
|
+
turnEnd: partial.prompts?.turnEnd ?? defaults.prompts.turnEnd,
|
|
861
|
+
subagentTurnEnd: partial.prompts?.subagentTurnEnd ?? defaults.prompts.subagentTurnEnd
|
|
862
|
+
},
|
|
863
|
+
subagentConfig: {
|
|
864
|
+
blockedToolPatterns: partial.subagentConfig?.blockedToolPatterns ?? defaults.subagentConfig.blockedToolPatterns
|
|
856
865
|
},
|
|
857
866
|
knowledge: {
|
|
858
867
|
dir: partial.knowledge?.dir ?? defaults.knowledge.dir,
|
|
@@ -1094,7 +1103,7 @@ import { join as join3 } from "path";
|
|
|
1094
1103
|
// package.json
|
|
1095
1104
|
var package_default = {
|
|
1096
1105
|
name: "@ksm0709/context",
|
|
1097
|
-
version: "0.0.
|
|
1106
|
+
version: "0.0.13",
|
|
1098
1107
|
author: {
|
|
1099
1108
|
name: "TaehoKang",
|
|
1100
1109
|
email: "ksm07091@gmail.com"
|
|
@@ -1130,6 +1139,7 @@ var package_default = {
|
|
|
1130
1139
|
"@opencode-ai/plugin": ">=1.0.0"
|
|
1131
1140
|
},
|
|
1132
1141
|
dependencies: {
|
|
1142
|
+
"@ksm0709/context": "^0.0.12",
|
|
1133
1143
|
"jsonc-parser": "^3.0.0"
|
|
1134
1144
|
},
|
|
1135
1145
|
devDependencies: {
|
|
@@ -1155,7 +1165,11 @@ var DEFAULT_CONFIG = `{
|
|
|
1155
1165
|
// See: https://github.com/ksm0709/context
|
|
1156
1166
|
"prompts": {
|
|
1157
1167
|
"turnStart": ".opencode/context/prompts/turn-start.md",
|
|
1158
|
-
"turnEnd": ".opencode/context/prompts/turn-end.md"
|
|
1168
|
+
"turnEnd": ".opencode/context/prompts/turn-end.md",
|
|
1169
|
+
"subagentTurnEnd": ".opencode/context/prompts/subagent-turn-end.md"
|
|
1170
|
+
},
|
|
1171
|
+
"subagentConfig": {
|
|
1172
|
+
"blockedToolPatterns": ["^task$", "^background_", "agent"]
|
|
1159
1173
|
},
|
|
1160
1174
|
"knowledge": {
|
|
1161
1175
|
"dir": "docs",
|
|
@@ -1175,6 +1189,43 @@ var DEFAULT_TURN_START = `## Knowledge Context
|
|
|
1175
1189
|
|
|
1176
1190
|
### \uC791\uC5C5 \uC804 \uD544\uC218
|
|
1177
1191
|
|
|
1192
|
+
- \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
|
|
1193
|
+
- \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.
|
|
1194
|
+
- \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
|
+
- \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
|
+
- \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
|
+
### \uC9C0\uC2DD \uD0D0\uC0C9 (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
|
|
1199
|
+
|
|
1200
|
+
\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.
|
|
1201
|
+
\uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uB294 \uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8\uAC00 \uC694\uC57D\uD574\uC900 \uB0B4\uC6A9\uC744 \uBC14\uD0D5\uC73C\uB85C \uC791\uC5C5\uC744 \uC9C4\uD589\uD558\uC138\uC694.
|
|
1202
|
+
|
|
1203
|
+
\`\`\`
|
|
1204
|
+
task(
|
|
1205
|
+
subagent_type="explore",
|
|
1206
|
+
load_skills=[],
|
|
1207
|
+
description="Analyze and summarize related knowledge notes",
|
|
1208
|
+
run_in_background=false,
|
|
1209
|
+
prompt="""
|
|
1210
|
+
TASK: \uC0AC\uC6A9\uC790\uC758 \uC791\uC5C5 \uC694\uCCAD\uACFC 'Available Knowledge' \uBAA9\uB85D\uC744 \uBD84\uC11D\uD558\uC5EC, \uC774\uBC88 \uC791\uC5C5\uC5D0 \uC9C1\uC811\uC801\uC73C\uB85C \uD544\uC694\uD55C \uC9C0\uC2DD \uB178\uD2B8\uB97C \uD0D0\uC0C9\uD558\uACE0 \uD575\uC2EC\uC744 \uC694\uC57D\uD558\uC138\uC694.
|
|
1211
|
+
EXPECTED OUTCOME: \uC791\uC5C5\uC5D0 \uC801\uC6A9\uD574\uC57C \uD560 \uD575\uC2EC \uC81C\uC57D\uC0AC\uD56D, \uC544\uD0A4\uD14D\uCC98 \uACB0\uC815, \uCF54\uB4DC \uD328\uD134, \uC8FC\uC758\uC0AC\uD56D(Gotchas) \uC694\uC57D \uB9AC\uD3EC\uD2B8
|
|
1212
|
+
REQUIRED TOOLS: Read (\uC9C0\uC2DD \uB178\uD2B8 \uC77D\uAE30), Glob/Grep (\uD544\uC694 \uC2DC \uC5F0\uAD00 \uC9C0\uC2DD \uAC80\uC0C9)
|
|
1213
|
+
MUST DO:
|
|
1214
|
+
- \uC791\uC5C5\uACFC \uAD00\uB828\uC131\uC774 \uB192\uC740 \uB178\uD2B8\uB9CC \uC120\uBCC4\uC801\uC73C\uB85C \uC77D\uAE30
|
|
1215
|
+
- \uB3C4\uBA54\uC778 \uD3F4\uB354 \uAD6C\uC870\uC778 \uACBD\uC6B0 INDEX.md\uB97C \uC6B0\uC120 \uC77D\uACE0 \uD544\uC694\uD55C \uC138\uBD80 \uB178\uD2B8 \uD0D0\uC0C9
|
|
1216
|
+
- \uC77D\uC740 \uB178\uD2B8 \uB0B4\uC758 [[wikilink]]\uB97C \uB530\uB77C\uAC00\uBA70 \uC911\uC694\uD55C \uC5F0\uAD00 \uB9E5\uB77D \uD30C\uC545
|
|
1217
|
+
- \uBCF5\uC0AC-\uBD99\uC5EC\uB123\uAE30\uAC00 \uC544\uB2CC, \uC774\uBC88 \uC791\uC5C5\uC5D0 \uC5B4\uB5BB\uAC8C \uC801\uC6A9\uD560\uC9C0 \uBA85\uD655\uD788 \uC694\uC57D
|
|
1218
|
+
MUST NOT DO:
|
|
1219
|
+
- \uCF54\uB4DC\uB97C \uC9C1\uC811 \uC218\uC815\uD558\uAC70\uB098 \uC791\uC131\uD558\uC9C0 \uB9C8\uC138\uC694 (\uD0D0\uC0C9 \uBC0F \uC694\uC57D\uB9CC \uC218\uD589)
|
|
1220
|
+
- \uC791\uC5C5\uACFC \uBB34\uAD00\uD55C \uB178\uD2B8\uAE4C\uC9C0 \uBD88\uD544\uC694\uD558\uAC8C \uD0D0\uC0C9\uD558\uC9C0 \uB9C8\uC138\uC694
|
|
1221
|
+
CONTEXT:
|
|
1222
|
+
- \uD604\uC7AC \uC791\uC5C5: [\uC0AC\uC6A9\uC790\uC758 \uC791\uC5C5 \uC694\uCCAD \uB0B4\uC6A9 \uC694\uC57D]
|
|
1223
|
+
- \uCC38\uACE0\uD560 \uC9C0\uC2DD \uBAA9\uB85D: [\uBA54\uC778 \uD504\uB86C\uD504\uD2B8 \uD558\uB2E8\uC758 Available Knowledge \uBAA9\uB85D \uCC38\uACE0]
|
|
1224
|
+
"""
|
|
1225
|
+
)
|
|
1226
|
+
\`\`\`
|
|
1227
|
+
|
|
1228
|
+
|
|
1178
1229
|
- \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
|
|
1179
1230
|
- \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
|
|
1180
1231
|
- \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
|
|
@@ -1271,6 +1322,13 @@ task(
|
|
|
1271
1322
|
)
|
|
1272
1323
|
\`\`\`
|
|
1273
1324
|
`;
|
|
1325
|
+
var DEFAULT_SUBAGENT_TURN_END = `<environment-constraints>
|
|
1326
|
+
\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
|
+
\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
|
+
|
|
1329
|
+
\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
|
+
</environment-constraints>
|
|
1331
|
+
`;
|
|
1274
1332
|
var DEFAULT_ADR_TEMPLATE = `# ADR-NNN: [\uC81C\uBAA9]
|
|
1275
1333
|
|
|
1276
1334
|
## \uC0C1\uD0DC
|
|
@@ -1501,6 +1559,7 @@ function scaffoldIfNeeded(projectDir) {
|
|
|
1501
1559
|
writeFileSync(join3(contextDir, "config.jsonc"), DEFAULT_CONFIG, "utf-8");
|
|
1502
1560
|
writeFileSync(join3(promptsDir, DEFAULTS.turnStartFile), DEFAULT_TURN_START, "utf-8");
|
|
1503
1561
|
writeFileSync(join3(promptsDir, DEFAULTS.turnEndFile), DEFAULT_TURN_END, "utf-8");
|
|
1562
|
+
writeFileSync(join3(promptsDir, DEFAULTS.subagentTurnEndFile), DEFAULT_SUBAGENT_TURN_END, "utf-8");
|
|
1504
1563
|
for (const [filename, content] of Object.entries(TEMPLATE_FILES)) {
|
|
1505
1564
|
writeFileSync(join3(templatesDir, filename), content, "utf-8");
|
|
1506
1565
|
}
|
|
@@ -1568,6 +1627,25 @@ var plugin = async ({ directory, client }) => {
|
|
|
1568
1627
|
}
|
|
1569
1628
|
const config = loadConfig(directory);
|
|
1570
1629
|
return {
|
|
1630
|
+
"tool.execute.before": async (input) => {
|
|
1631
|
+
try {
|
|
1632
|
+
const session = await client.session.get({ path: { id: input.sessionID } });
|
|
1633
|
+
if (!session)
|
|
1634
|
+
return;
|
|
1635
|
+
const isSubagent = ["explore", "librarian", "oracle", "Sisyphus-Junior"].includes(session.agent);
|
|
1636
|
+
if (isSubagent) {
|
|
1637
|
+
const patterns = config.subagentConfig?.blockedToolPatterns ?? DEFAULTS.blockedToolPatterns;
|
|
1638
|
+
const isBlocked = patterns.some((pattern) => new RegExp(pattern, "i").test(input.tool));
|
|
1639
|
+
if (isBlocked) {
|
|
1640
|
+
throw new Error(`[Security] Subagents are not allowed to use orchestration tools (${input.tool}). Please return control to the main agent.`);
|
|
1641
|
+
}
|
|
1642
|
+
}
|
|
1643
|
+
} catch (err) {
|
|
1644
|
+
if (err instanceof Error && err.message.startsWith("[Security]")) {
|
|
1645
|
+
throw err;
|
|
1646
|
+
}
|
|
1647
|
+
}
|
|
1648
|
+
},
|
|
1571
1649
|
"experimental.chat.messages.transform": async (_input, output) => {
|
|
1572
1650
|
if (output.messages.length === 0)
|
|
1573
1651
|
return;
|
|
@@ -1590,7 +1668,9 @@ var plugin = async ({ directory, client }) => {
|
|
|
1590
1668
|
text: combinedContent
|
|
1591
1669
|
});
|
|
1592
1670
|
}
|
|
1593
|
-
const
|
|
1671
|
+
const agentName = lastUserMsg.info.agent || "default";
|
|
1672
|
+
const isSubagent = ["explore", "librarian", "oracle", "Sisyphus-Junior"].includes(agentName);
|
|
1673
|
+
const turnEndPath = join4(directory, isSubagent ? config.prompts.subagentTurnEnd ?? join4(DEFAULTS.promptDir, DEFAULTS.subagentTurnEndFile) : config.prompts.turnEnd ?? join4(DEFAULTS.promptDir, DEFAULTS.turnEndFile));
|
|
1594
1674
|
const turnEnd = readPromptFile(turnEndPath);
|
|
1595
1675
|
if (!turnEnd)
|
|
1596
1676
|
return;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ksm0709/context",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.13",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "TaehoKang",
|
|
6
6
|
"email": "ksm07091@gmail.com"
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
"@opencode-ai/plugin": ">=1.0.0"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
+
"@ksm0709/context": "^0.0.12",
|
|
39
40
|
"jsonc-parser": "^3.0.0"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|