context-mode 1.0.33 → 1.0.34

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.
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Claude Code plugins by Mert Koseoğlu",
9
- "version": "1.0.33"
9
+ "version": "1.0.34"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "context-mode",
14
14
  "source": "./",
15
15
  "description": "Claude Code MCP plugin that saves 98% of your context window. Sandboxed code execution in 11 languages, FTS5 knowledge base with BM25 ranking, and intent-driven search.",
16
- "version": "1.0.33",
16
+ "version": "1.0.34",
17
17
  "author": {
18
18
  "name": "Mert Koseoğlu"
19
19
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-mode",
3
- "version": "1.0.33",
3
+ "version": "1.0.34",
4
4
  "description": "MCP server that saves 98% of your context window with session continuity. Sandboxed code execution in 11 languages, FTS5 knowledge base with BM25 ranking, and automatic state restore across compactions.",
5
5
  "author": {
6
6
  "name": "Mert Koseoğlu",
@@ -3,7 +3,7 @@
3
3
  "name": "Context Mode",
4
4
  "kind": "tool",
5
5
  "description": "OpenClaw plugin that saves 98% of your context window. Sandboxed code execution in 11 languages, FTS5 knowledge base with BM25 ranking, and intent-driven search.",
6
- "version": "1.0.33",
6
+ "version": "1.0.34",
7
7
  "sandbox": {
8
8
  "mode": "permissive",
9
9
  "filesystem_access": "full",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-mode",
3
- "version": "1.0.33",
3
+ "version": "1.0.34",
4
4
  "description": "OpenClaw plugin that saves 98% of your context window. Sandboxed code execution in 11 languages, FTS5 knowledge base with BM25 ranking, and intent-driven search.",
5
5
  "author": {
6
6
  "name": "Mert Koseoğlu",
package/build/server.js CHANGED
@@ -804,7 +804,8 @@ function coerceCommandsArray(val) {
804
804
  }
805
805
  server.registerTool("ctx_search", {
806
806
  title: "Search Indexed Content",
807
- description: "Search indexed content. Pass ALL search questions as queries array in ONE call.\n\n" +
807
+ description: "Search indexed content. Requires prior indexing via ctx_batch_execute, ctx_index, or ctx_fetch_and_index. " +
808
+ "Pass ALL search questions as queries array in ONE call.\n\n" +
808
809
  "TIPS: 2-4 specific terms per query. Use 'source' to scope results.",
809
810
  inputSchema: z.object({
810
811
  queries: z.preprocess(coerceJsonArray, z
@@ -828,6 +829,23 @@ server.registerTool("ctx_search", {
828
829
  }, async (params) => {
829
830
  try {
830
831
  const store = getStore();
832
+ // Guard: redirect when the index is empty — ctx_search is a follow-up
833
+ // tool that requires prior indexing. Guide the model to the right tool.
834
+ if (store.getStats().chunks === 0) {
835
+ return trackResponse("ctx_search", {
836
+ content: [{
837
+ type: "text",
838
+ text: "Knowledge base is empty — no content has been indexed yet.\n\n" +
839
+ "ctx_search is a follow-up tool that queries previously indexed content. " +
840
+ "To gather and index content first, use:\n" +
841
+ " • ctx_batch_execute(commands, queries) — run commands, auto-index output, and search in one call\n" +
842
+ " • ctx_fetch_and_index(url) — fetch a URL, index it, then search with ctx_search\n" +
843
+ " • ctx_index(content, source) — manually index text content\n\n" +
844
+ "After indexing, ctx_search becomes available for follow-up queries.",
845
+ }],
846
+ isError: true,
847
+ });
848
+ }
831
849
  const raw = params;
832
850
  // Normalize: accept both query (string) and queries (array)
833
851
  const queryList = [];