@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 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.11",
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.11",
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 turnEndPath = join4(directory, config.prompts.turnEnd ?? join4(DEFAULTS.promptDir, DEFAULTS.turnEndFile));
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.11",
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": {