opencode-knowledge 0.5.1-next.1 → 0.6.0-next.1
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/index.js +79 -10
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -12631,7 +12631,53 @@ function tool(input) {
|
|
|
12631
12631
|
return input;
|
|
12632
12632
|
}
|
|
12633
12633
|
tool.schema = exports_external;
|
|
12634
|
+
// src/lib/logger.ts
|
|
12635
|
+
var ENV_CONSOLE_LOG = "OPENCODE_KNOWLEDGE_CONSOLE_LOG";
|
|
12636
|
+
var _client = null;
|
|
12637
|
+
function isConsoleLogEnabled() {
|
|
12638
|
+
const val = process.env[ENV_CONSOLE_LOG];
|
|
12639
|
+
return val === "1" || val?.toLowerCase() === "true";
|
|
12640
|
+
}
|
|
12641
|
+
function initLogger(client) {
|
|
12642
|
+
_client = client;
|
|
12643
|
+
}
|
|
12644
|
+
function createLogger(module) {
|
|
12645
|
+
const service = `opencode-knowledge.${module}`;
|
|
12646
|
+
const log = (level, message, extra) => {
|
|
12647
|
+
const app = _client?.app;
|
|
12648
|
+
if (app && typeof app.log === "function") {
|
|
12649
|
+
app.log({
|
|
12650
|
+
body: { service, level, message, extra }
|
|
12651
|
+
}).catch(() => {});
|
|
12652
|
+
} else if (isConsoleLogEnabled()) {
|
|
12653
|
+
const prefix = `[${service}]`;
|
|
12654
|
+
const args = extra ? [prefix, message, extra] : [prefix, message];
|
|
12655
|
+
switch (level) {
|
|
12656
|
+
case "debug":
|
|
12657
|
+
console.debug(...args);
|
|
12658
|
+
break;
|
|
12659
|
+
case "info":
|
|
12660
|
+
console.info(...args);
|
|
12661
|
+
break;
|
|
12662
|
+
case "warn":
|
|
12663
|
+
console.warn(...args);
|
|
12664
|
+
break;
|
|
12665
|
+
case "error":
|
|
12666
|
+
console.error(...args);
|
|
12667
|
+
break;
|
|
12668
|
+
}
|
|
12669
|
+
}
|
|
12670
|
+
};
|
|
12671
|
+
return {
|
|
12672
|
+
debug: (message, extra) => log("debug", message, extra),
|
|
12673
|
+
info: (message, extra) => log("info", message, extra),
|
|
12674
|
+
warn: (message, extra) => log("warn", message, extra),
|
|
12675
|
+
error: (message, extra) => log("error", message, extra)
|
|
12676
|
+
};
|
|
12677
|
+
}
|
|
12678
|
+
|
|
12634
12679
|
// src/lib/tools/search.ts
|
|
12680
|
+
var log = createLogger("tools.search");
|
|
12635
12681
|
var knowledgeSearchTool = tool({
|
|
12636
12682
|
description: "Search the knowledge vault for packages matching specific tags. Returns a ranked list of relevant knowledge packages with their metadata.",
|
|
12637
12683
|
args: {
|
|
@@ -12639,12 +12685,16 @@ var knowledgeSearchTool = tool({
|
|
|
12639
12685
|
},
|
|
12640
12686
|
async execute(args) {
|
|
12641
12687
|
const tagArray = args.tags.split(",").map((t) => t.trim()).filter(Boolean);
|
|
12688
|
+
log.debug("knowledge_search called", { tags: args.tags, parsedTags: tagArray });
|
|
12642
12689
|
if (tagArray.length === 0) {
|
|
12690
|
+
log.debug("knowledge_search - no tags provided");
|
|
12643
12691
|
return "No tags provided. Please specify at least one tag.";
|
|
12644
12692
|
}
|
|
12645
12693
|
try {
|
|
12694
|
+
log.debug("knowledge_search - calling searchKnowledge", { tagCount: tagArray.length });
|
|
12646
12695
|
const results = await searchKnowledge(tagArray);
|
|
12647
12696
|
loadCatalog();
|
|
12697
|
+
log.debug("searchKnowledge completed", { resultsCount: results.length });
|
|
12648
12698
|
if (results.length === 0) {
|
|
12649
12699
|
return `No knowledge packages found matching [${tagArray.join(", ")}]`;
|
|
12650
12700
|
}
|
|
@@ -12666,6 +12716,7 @@ _...and ${results.length - 10} more results_`;
|
|
|
12666
12716
|
}
|
|
12667
12717
|
return output;
|
|
12668
12718
|
} catch (error45) {
|
|
12719
|
+
log.error("knowledge_search error", { error: String(error45) });
|
|
12669
12720
|
return "Failed to search knowledge vault. Please try again.";
|
|
12670
12721
|
}
|
|
12671
12722
|
}
|
|
@@ -12800,17 +12851,21 @@ var knowledgeIndexTool = tool({
|
|
|
12800
12851
|
});
|
|
12801
12852
|
|
|
12802
12853
|
// src/index.ts
|
|
12803
|
-
var
|
|
12854
|
+
var log2 = createLogger("plugin");
|
|
12855
|
+
var opencodeKnowledge = async (input) => {
|
|
12856
|
+
initLogger(input.client);
|
|
12857
|
+
log2.info("Plugin initialized");
|
|
12804
12858
|
return {
|
|
12805
12859
|
tool: {
|
|
12806
12860
|
knowledge_search: knowledgeSearchTool,
|
|
12807
12861
|
knowledge_load: knowledgeLoadTool,
|
|
12808
12862
|
knowledge_index: knowledgeIndexTool
|
|
12809
12863
|
},
|
|
12810
|
-
"chat.message": async (
|
|
12864
|
+
"chat.message": async (input2, output) => {
|
|
12811
12865
|
try {
|
|
12812
|
-
const state = getSessionState(
|
|
12866
|
+
const state = getSessionState(input2.sessionID);
|
|
12813
12867
|
if (state.isFirstPrompt) {
|
|
12868
|
+
log2.debug("First message in session", { sessionID: input2.sessionID });
|
|
12814
12869
|
const vaultExists = existsSync5(".opencode/knowledge/vault");
|
|
12815
12870
|
if (vaultExists) {
|
|
12816
12871
|
const categoryTagMap = buildCategoryTagMap();
|
|
@@ -12828,38 +12883,52 @@ var opencodeKnowledge = async () => {
|
|
|
12828
12883
|
type: "text",
|
|
12829
12884
|
text: knowledgePrompt,
|
|
12830
12885
|
id: `knowledge-${Date.now()}`,
|
|
12831
|
-
sessionID:
|
|
12832
|
-
messageID:
|
|
12886
|
+
sessionID: input2.sessionID,
|
|
12887
|
+
messageID: input2.messageID || ""
|
|
12833
12888
|
});
|
|
12889
|
+
log2.debug("Knowledge map injected");
|
|
12834
12890
|
}
|
|
12835
|
-
updateSessionState(
|
|
12891
|
+
updateSessionState(input2.sessionID, {
|
|
12836
12892
|
isFirstPrompt: false,
|
|
12837
12893
|
categoriesShown: vaultExists
|
|
12838
12894
|
});
|
|
12895
|
+
log2.debug("First message processed");
|
|
12839
12896
|
}
|
|
12840
|
-
} catch (error45) {
|
|
12897
|
+
} catch (error45) {
|
|
12898
|
+
log2.error("Error in chat.message", { error: String(error45) });
|
|
12899
|
+
}
|
|
12841
12900
|
},
|
|
12842
12901
|
event: async ({ event }) => {
|
|
12843
12902
|
try {
|
|
12844
12903
|
if (event.type === "session.created") {
|
|
12904
|
+
log2.debug("session.created event");
|
|
12845
12905
|
const eventData = event;
|
|
12846
12906
|
const sessionId = eventData.properties?.info?.id;
|
|
12847
12907
|
if (!sessionId) {
|
|
12848
|
-
const errorMsg =
|
|
12908
|
+
const errorMsg = "Could not extract session ID from session.created event";
|
|
12909
|
+
log2.error(errorMsg);
|
|
12849
12910
|
throw new Error(errorMsg);
|
|
12850
12911
|
}
|
|
12912
|
+
log2.debug("Extracted session ID", { sessionId });
|
|
12851
12913
|
clearJsonl("session-state.jsonl");
|
|
12852
12914
|
clearJsonl("knowledge-reads.jsonl");
|
|
12853
12915
|
if (existsSync5(".opencode/knowledge/vault")) {
|
|
12916
|
+
log2.debug("Building knowledge index...");
|
|
12854
12917
|
try {
|
|
12855
12918
|
const catalog = buildKnowledgeCatalog();
|
|
12856
12919
|
saveCatalog(catalog);
|
|
12857
12920
|
const packagesCount = Object.values(catalog.knowledge).reduce((sum, packages) => sum + Object.keys(packages).length, 0);
|
|
12858
|
-
|
|
12921
|
+
log2.info("Knowledge catalog built", { packagesCount });
|
|
12922
|
+
} catch (error45) {
|
|
12923
|
+
log2.warn("Failed to build knowledge catalog", { error: String(error45) });
|
|
12924
|
+
}
|
|
12859
12925
|
}
|
|
12860
12926
|
await createSessionState(sessionId);
|
|
12927
|
+
log2.debug("Session state created");
|
|
12861
12928
|
}
|
|
12862
|
-
} catch (error45) {
|
|
12929
|
+
} catch (error45) {
|
|
12930
|
+
log2.error("Error in event", { error: String(error45) });
|
|
12931
|
+
}
|
|
12863
12932
|
}
|
|
12864
12933
|
};
|
|
12865
12934
|
};
|