@ksm0709/context 0.0.14 → 0.0.16

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
@@ -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",
@@ -34,7 +33,7 @@ var LIMITS = {
34
33
  // package.json
35
34
  var package_default = {
36
35
  name: "@ksm0709/context",
37
- version: "0.0.14",
36
+ version: "0.0.16",
38
37
  author: {
39
38
  name: "TaehoKang",
40
39
  email: "ksm07091@gmail.com"
@@ -61,7 +60,8 @@ var package_default = {
61
60
  scripts: {
62
61
  build: "bun build ./src/index.ts --outdir dist --target bun && bun build ./src/cli/index.ts --outdir dist/cli --target bun",
63
62
  test: "vitest run",
64
- lint: "eslint src --ext .ts"
63
+ lint: "eslint src --ext .ts",
64
+ prepublishOnly: "bun build ./src/index.ts --outdir dist --target bun && bun build ./src/cli/index.ts --outdir dist/cli --target bun"
65
65
  },
66
66
  files: [
67
67
  "dist"
@@ -70,7 +70,7 @@ var package_default = {
70
70
  "@opencode-ai/plugin": ">=1.0.0"
71
71
  },
72
72
  dependencies: {
73
- "@ksm0709/context": "^0.0.12",
73
+ "@ksm0709/context": "0.0.16",
74
74
  "jsonc-parser": "^3.0.0"
75
75
  },
76
76
  devDependencies: {
@@ -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 = `## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
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
- var DEFAULT_SUBAGENT_TURN_END = `<environment-constraints>
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)) {
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: DEFAULTS.knowledgeDir,
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.14",
1103
+ version: "0.0.16",
1107
1104
  author: {
1108
1105
  name: "TaehoKang",
1109
1106
  email: "ksm07091@gmail.com"
@@ -1130,7 +1127,8 @@ var package_default = {
1130
1127
  scripts: {
1131
1128
  build: "bun build ./src/index.ts --outdir dist --target bun && bun build ./src/cli/index.ts --outdir dist/cli --target bun",
1132
1129
  test: "vitest run",
1133
- lint: "eslint src --ext .ts"
1130
+ lint: "eslint src --ext .ts",
1131
+ prepublishOnly: "bun build ./src/index.ts --outdir dist --target bun && bun build ./src/cli/index.ts --outdir dist/cli --target bun"
1134
1132
  },
1135
1133
  files: [
1136
1134
  "dist"
@@ -1139,7 +1137,7 @@ var package_default = {
1139
1137
  "@opencode-ai/plugin": ">=1.0.0"
1140
1138
  },
1141
1139
  dependencies: {
1142
- "@ksm0709/context": "^0.0.12",
1140
+ "@ksm0709/context": "0.0.16",
1143
1141
  "jsonc-parser": "^3.0.0"
1144
1142
  },
1145
1143
  devDependencies: {
@@ -1165,8 +1163,7 @@ var DEFAULT_CONFIG = `{
1165
1163
  // See: https://github.com/ksm0709/context
1166
1164
  "prompts": {
1167
1165
  "turnStart": ".opencode/context/prompts/turn-start.md",
1168
- "turnEnd": ".opencode/context/prompts/turn-end.md",
1169
- "subagentTurnEnd": ".opencode/context/prompts/subagent-turn-end.md"
1166
+ "turnEnd": ".opencode/context/prompts/turn-end.md"
1170
1167
  },
1171
1168
  "subagentConfig": {
1172
1169
  "blockedToolPatterns": ["^task$", "^background_", "agent"]
@@ -1190,11 +1187,17 @@ var DEFAULT_TURN_START = `## Knowledge Context
1190
1187
  ### \uC791\uC5C5 \uC804 \uD544\uC218
1191
1188
 
1192
1189
  - \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
1190
+ ${"<"}!-- primary-only -->
1193
1191
  - \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.
1192
+ ${"<"}!-- /primary-only -->
1193
+ ${"<"}!-- subagent-only -->
1194
+ - \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.
1195
+ ${"<"}!-- /subagent-only -->
1194
1196
  - \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
1197
  - \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
1198
  - \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
1199
 
1200
+ ${"<"}!-- primary-only -->
1198
1201
  ### \uC9C0\uC2DD \uD0D0\uC0C9 (\uC11C\uBE0C\uC5D0\uC774\uC804\uD2B8 \uC704\uC784)
1199
1202
 
1200
1203
  \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 +1228,8 @@ task(
1225
1228
  )
1226
1229
  \`\`\`
1227
1230
 
1231
+ ${"<"}!-- /primary-only -->
1232
+
1228
1233
 
1229
1234
  - \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
1235
  - \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 +1246,12 @@ task(
1241
1246
 
1242
1247
  - AGENTS.md\uC758 \uC9C0\uC2DC\uC0AC\uD56D\uC774 \uD56D\uC0C1 \uCD5C\uC6B0\uC120
1243
1248
  - \uC9C0\uC2DD \uB178\uD2B8\uC758 \uACB0\uC815\uC0AC\uD56D > \uC77C\uBC18\uC801 \uAD00\uD589
1249
+ ${"<"}!-- primary-only -->
1244
1250
  - \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
1251
+ ${"<"}!-- /primary-only -->
1245
1252
  `;
1246
- var DEFAULT_TURN_END = `## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
1253
+ var DEFAULT_TURN_END = `${"<"}!-- primary-only -->
1254
+ ## \uC791\uC5C5 \uB9C8\uBB34\uB9AC
1247
1255
 
1248
1256
  \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
1257
  \uBA54\uC778 \uC5D0\uC774\uC804\uD2B8\uAC00 \uC9C1\uC811 \uC218\uD589\uD558\uC9C0 \uB9C8\uC138\uC694.
@@ -1321,13 +1329,16 @@ task(
1321
1329
  """
1322
1330
  )
1323
1331
  \`\`\`
1324
- `;
1325
- var DEFAULT_SUBAGENT_TURN_END = `<environment-constraints>
1332
+
1333
+ ${"<"}!-- /primary-only -->
1334
+ ${"<"}!-- subagent-only -->
1335
+ <environment-constraints>
1326
1336
  \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
1337
  \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
1338
 
1329
1339
  \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
1340
  </environment-constraints>
1341
+ ${"<"}!-- /subagent-only -->
1331
1342
  `;
1332
1343
  var DEFAULT_ADR_TEMPLATE = `# ADR-NNN: [\uC81C\uBAA9]
1333
1344
 
@@ -1559,7 +1570,6 @@ function scaffoldIfNeeded(projectDir) {
1559
1570
  writeFileSync(join3(contextDir, "config.jsonc"), DEFAULT_CONFIG, "utf-8");
1560
1571
  writeFileSync(join3(promptsDir, DEFAULTS.turnStartFile), DEFAULT_TURN_START, "utf-8");
1561
1572
  writeFileSync(join3(promptsDir, DEFAULTS.turnEndFile), DEFAULT_TURN_END, "utf-8");
1562
- writeFileSync(join3(promptsDir, DEFAULTS.subagentTurnEndFile), DEFAULT_SUBAGENT_TURN_END, "utf-8");
1563
1573
  for (const [filename, content] of Object.entries(TEMPLATE_FILES)) {
1564
1574
  writeFileSync(join3(templatesDir, filename), content, "utf-8");
1565
1575
  }
@@ -1602,6 +1612,49 @@ function autoUpdateTemplates(projectDir) {
1602
1612
  return updated;
1603
1613
  }
1604
1614
 
1615
+ // src/lib/prompt-filter.ts
1616
+ function filterByAgentType(content, isSubagent) {
1617
+ const process = (text, marker, shouldRemove) => {
1618
+ const startTag = `<!-- ${marker} -->`;
1619
+ const endTag = `<!-- /${marker} -->`;
1620
+ if (!text.includes(startTag))
1621
+ return text;
1622
+ if (!text.includes(endTag))
1623
+ return text;
1624
+ const regex = new RegExp(`${startTag}\\n?([\\s\\S]*?)${endTag}\\n?`, "g");
1625
+ if (shouldRemove) {
1626
+ return text.replace(regex, "");
1627
+ } else {
1628
+ return text.replace(regex, "$1");
1629
+ }
1630
+ };
1631
+ let filtered = content;
1632
+ if (isSubagent) {
1633
+ filtered = process(filtered, "primary-only", true);
1634
+ filtered = process(filtered, "subagent-only", false);
1635
+ } else {
1636
+ filtered = process(filtered, "subagent-only", true);
1637
+ filtered = process(filtered, "primary-only", false);
1638
+ }
1639
+ return filtered;
1640
+ }
1641
+
1642
+ // src/lib/subagent-detector.ts
1643
+ async function isSubagentSession(getSession, sessionID, cache) {
1644
+ if (!sessionID)
1645
+ return false;
1646
+ if (cache.has(sessionID))
1647
+ return cache.get(sessionID);
1648
+ try {
1649
+ const session = await getSession(sessionID);
1650
+ const result = !!session?.parentID;
1651
+ cache.set(sessionID, result);
1652
+ return result;
1653
+ } catch {
1654
+ return false;
1655
+ }
1656
+ }
1657
+
1605
1658
  // src/index.ts
1606
1659
  var plugin = async ({ directory, client }) => {
1607
1660
  const scaffolded = scaffoldIfNeeded(directory);
@@ -1626,14 +1679,13 @@ var plugin = async ({ directory, client }) => {
1626
1679
  }
1627
1680
  }
1628
1681
  const config = loadConfig(directory);
1682
+ const subagentCache = new Map;
1683
+ const getSession = (id) => client.session.get({ path: { id } });
1629
1684
  return {
1630
1685
  "tool.execute.before": async (input) => {
1631
1686
  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) {
1687
+ const subagent = await isSubagentSession(getSession, input.sessionID, subagentCache);
1688
+ if (subagent) {
1637
1689
  const patterns = config.subagentConfig?.blockedToolPatterns ?? DEFAULTS.blockedToolPatterns;
1638
1690
  const isBlocked = patterns.some((pattern) => new RegExp(pattern, "i").test(input.tool));
1639
1691
  if (isBlocked) {
@@ -1653,7 +1705,9 @@ var plugin = async ({ directory, client }) => {
1653
1705
  if (!lastUserMsg)
1654
1706
  return;
1655
1707
  const turnStartPath = join4(directory, config.prompts.turnStart ?? join4(DEFAULTS.promptDir, DEFAULTS.turnStartFile));
1656
- const turnStart = readPromptFile(turnStartPath);
1708
+ const sessionID = lastUserMsg.info.sessionID;
1709
+ const subagent = await isSubagentSession(getSession, sessionID, subagentCache);
1710
+ const turnStart = filterByAgentType(readPromptFile(turnStartPath) ?? "", subagent);
1657
1711
  const knowledgeIndex = buildKnowledgeIndexV2(directory, config.knowledge);
1658
1712
  const indexContent = knowledgeIndex.mode === "flat" ? formatKnowledgeIndex(knowledgeIndex.individualFiles) : formatDomainIndex(knowledgeIndex);
1659
1713
  const combinedContent = [turnStart, indexContent].filter(Boolean).join(`
@@ -1668,10 +1722,9 @@ var plugin = async ({ directory, client }) => {
1668
1722
  text: combinedContent
1669
1723
  });
1670
1724
  }
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));
1674
- const turnEnd = readPromptFile(turnEndPath);
1725
+ const turnEndPath = join4(directory, config.prompts.turnEnd ?? join4(DEFAULTS.promptDir, DEFAULTS.turnEndFile));
1726
+ const rawTurnEnd = readPromptFile(turnEndPath);
1727
+ const turnEnd = rawTurnEnd ? filterByAgentType(rawTurnEnd, subagent) : null;
1675
1728
  if (!turnEnd)
1676
1729
  return;
1677
1730
  const msgId = `context-turn-end-${Date.now()}`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ksm0709/context",
3
- "version": "0.0.14",
3
+ "version": "0.0.16",
4
4
  "author": {
5
5
  "name": "TaehoKang",
6
6
  "email": "ksm07091@gmail.com"
@@ -27,7 +27,8 @@
27
27
  "scripts": {
28
28
  "build": "bun build ./src/index.ts --outdir dist --target bun && bun build ./src/cli/index.ts --outdir dist/cli --target bun",
29
29
  "test": "vitest run",
30
- "lint": "eslint src --ext .ts"
30
+ "lint": "eslint src --ext .ts",
31
+ "prepublishOnly": "bun build ./src/index.ts --outdir dist --target bun && bun build ./src/cli/index.ts --outdir dist/cli --target bun"
31
32
  },
32
33
  "files": [
33
34
  "dist"
@@ -36,7 +37,7 @@
36
37
  "@opencode-ai/plugin": ">=1.0.0"
37
38
  },
38
39
  "dependencies": {
39
- "@ksm0709/context": "^0.0.12",
40
+ "@ksm0709/context": "0.0.16",
40
41
  "jsonc-parser": "^3.0.0"
41
42
  },
42
43
  "devDependencies": {
@@ -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
- };