oh-my-opencode-kikokikok 2.15.2 → 2.15.3
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
|
@@ -2253,7 +2253,7 @@ var require_picocolors = __commonJS((exports, module) => {
|
|
|
2253
2253
|
var require_package = __commonJS((exports, module) => {
|
|
2254
2254
|
module.exports = {
|
|
2255
2255
|
name: "oh-my-opencode-kikokikok",
|
|
2256
|
-
version: "2.15.
|
|
2256
|
+
version: "2.15.3",
|
|
2257
2257
|
description: "OpenCode plugin - custom agents (oracle, librarian) and enhanced features",
|
|
2258
2258
|
main: "dist/index.js",
|
|
2259
2259
|
types: "dist/index.d.ts",
|
|
@@ -3,7 +3,10 @@ export declare class LettaAdapter {
|
|
|
3
3
|
private config;
|
|
4
4
|
private endpoint;
|
|
5
5
|
private agentCache;
|
|
6
|
+
private detectedEmbeddingModel;
|
|
7
|
+
private modelDetectionPromise;
|
|
6
8
|
constructor(config: LettaConfig);
|
|
9
|
+
private detectEmbeddingModel;
|
|
7
10
|
add(input: AddMemoryInput): Promise<Memory>;
|
|
8
11
|
search(input: SearchMemoryInput): Promise<MemorySearchResult[]>;
|
|
9
12
|
get(id: string): Promise<Memory | null>;
|
|
@@ -13,6 +16,8 @@ export declare class LettaAdapter {
|
|
|
13
16
|
getStats(): Promise<MemoryStats>;
|
|
14
17
|
isAvailable(): Promise<boolean>;
|
|
15
18
|
private getOrCreateAgent;
|
|
19
|
+
private agentNeedsEmbeddingUpdate;
|
|
20
|
+
private recreateAgentWithCorrectEmbedding;
|
|
16
21
|
private getAgent;
|
|
17
22
|
private listAgents;
|
|
18
23
|
private request;
|
|
@@ -43,6 +43,12 @@ export interface LettaAgent {
|
|
|
43
43
|
metadata?: Record<string, unknown>;
|
|
44
44
|
memory_blocks?: LettaBlock[];
|
|
45
45
|
tools?: string[];
|
|
46
|
+
embedding?: string;
|
|
47
|
+
embedding_config?: {
|
|
48
|
+
handle?: string;
|
|
49
|
+
embedding_model?: string;
|
|
50
|
+
embedding_endpoint?: string;
|
|
51
|
+
};
|
|
46
52
|
}
|
|
47
53
|
/** Letta Memory Block (Core Memory - always in-context) */
|
|
48
54
|
export interface LettaBlock {
|
package/dist/index.js
CHANGED
|
@@ -43788,10 +43788,44 @@ class LettaAdapter {
|
|
|
43788
43788
|
config;
|
|
43789
43789
|
endpoint;
|
|
43790
43790
|
agentCache = new Map;
|
|
43791
|
+
detectedEmbeddingModel = null;
|
|
43792
|
+
modelDetectionPromise = null;
|
|
43791
43793
|
constructor(config3) {
|
|
43792
43794
|
this.config = config3;
|
|
43793
43795
|
this.endpoint = config3.endpoint ?? DEFAULT_ENDPOINT2;
|
|
43794
43796
|
}
|
|
43797
|
+
async detectEmbeddingModel() {
|
|
43798
|
+
if (this.config.embeddingModel) {
|
|
43799
|
+
return this.config.embeddingModel;
|
|
43800
|
+
}
|
|
43801
|
+
if (this.detectedEmbeddingModel) {
|
|
43802
|
+
return this.detectedEmbeddingModel;
|
|
43803
|
+
}
|
|
43804
|
+
if (this.modelDetectionPromise) {
|
|
43805
|
+
await this.modelDetectionPromise;
|
|
43806
|
+
return this.detectedEmbeddingModel ?? DEFAULT_EMBEDDING_MODEL;
|
|
43807
|
+
}
|
|
43808
|
+
this.modelDetectionPromise = (async () => {
|
|
43809
|
+
try {
|
|
43810
|
+
const response2 = await fetch(`${this.endpoint}/v1/models`, {
|
|
43811
|
+
method: "GET",
|
|
43812
|
+
redirect: "follow",
|
|
43813
|
+
signal: AbortSignal.timeout(1e4)
|
|
43814
|
+
});
|
|
43815
|
+
if (!response2.ok) {
|
|
43816
|
+
return;
|
|
43817
|
+
}
|
|
43818
|
+
const models = await response2.json();
|
|
43819
|
+
const embeddingModels = models.filter((m) => m.name.includes("embedding") && m.model_endpoint.includes("host.docker.internal"));
|
|
43820
|
+
if (embeddingModels.length > 0) {
|
|
43821
|
+
const preferred = embeddingModels.find((m) => m.name.includes("text-embedding-3-small"));
|
|
43822
|
+
this.detectedEmbeddingModel = preferred?.handle ?? embeddingModels[0].handle;
|
|
43823
|
+
}
|
|
43824
|
+
} catch {}
|
|
43825
|
+
})();
|
|
43826
|
+
await this.modelDetectionPromise;
|
|
43827
|
+
return this.detectedEmbeddingModel ?? DEFAULT_EMBEDDING_MODEL;
|
|
43828
|
+
}
|
|
43795
43829
|
async add(input) {
|
|
43796
43830
|
if (!this.config.enabled) {
|
|
43797
43831
|
throw new Error("Letta is not enabled");
|
|
@@ -43956,15 +43990,60 @@ class LettaAdapter {
|
|
|
43956
43990
|
}
|
|
43957
43991
|
async getOrCreateAgent(layer) {
|
|
43958
43992
|
const existing = await this.getAgent(layer);
|
|
43959
|
-
if (existing)
|
|
43993
|
+
if (existing) {
|
|
43994
|
+
const needsUpdate = await this.agentNeedsEmbeddingUpdate(existing);
|
|
43995
|
+
if (needsUpdate) {
|
|
43996
|
+
return this.recreateAgentWithCorrectEmbedding(existing, layer);
|
|
43997
|
+
}
|
|
43960
43998
|
return existing;
|
|
43999
|
+
}
|
|
44000
|
+
const embeddingModel = await this.detectEmbeddingModel();
|
|
44001
|
+
const agentName = this.getAgentName(layer);
|
|
44002
|
+
const response2 = await this.request("/v1/agents", {
|
|
44003
|
+
method: "POST",
|
|
44004
|
+
body: JSON.stringify({
|
|
44005
|
+
name: agentName,
|
|
44006
|
+
model: this.config.llmModel ?? DEFAULT_LLM_MODEL,
|
|
44007
|
+
embedding: embeddingModel,
|
|
44008
|
+
memory_blocks: [
|
|
44009
|
+
{ label: "persona", value: `OpenCode memory agent for ${layer} layer` },
|
|
44010
|
+
{ label: "human", value: this.getUserId(layer) }
|
|
44011
|
+
],
|
|
44012
|
+
metadata: {
|
|
44013
|
+
layer,
|
|
44014
|
+
user_id: this.getUserId(layer),
|
|
44015
|
+
created_by: "oh-my-opencode"
|
|
44016
|
+
}
|
|
44017
|
+
})
|
|
44018
|
+
});
|
|
44019
|
+
const agent = await response2.json();
|
|
44020
|
+
this.agentCache.set(layer, agent);
|
|
44021
|
+
return agent;
|
|
44022
|
+
}
|
|
44023
|
+
async agentNeedsEmbeddingUpdate(agent) {
|
|
44024
|
+
if (this.config.embeddingModel) {
|
|
44025
|
+
return false;
|
|
44026
|
+
}
|
|
44027
|
+
const embeddingHandle = agent.embedding_config?.handle ?? agent.embedding;
|
|
44028
|
+
if (!embeddingHandle)
|
|
44029
|
+
return false;
|
|
44030
|
+
if (embeddingHandle === "letta/letta-free") {
|
|
44031
|
+
const detected = await this.detectEmbeddingModel();
|
|
44032
|
+
return detected !== "letta/letta-free";
|
|
44033
|
+
}
|
|
44034
|
+
return false;
|
|
44035
|
+
}
|
|
44036
|
+
async recreateAgentWithCorrectEmbedding(existingAgent, layer) {
|
|
44037
|
+
await this.request(`/v1/agents/${existingAgent.id}`, { method: "DELETE" }).catch(() => {});
|
|
44038
|
+
this.agentCache.delete(layer);
|
|
44039
|
+
const embeddingModel = await this.detectEmbeddingModel();
|
|
43961
44040
|
const agentName = this.getAgentName(layer);
|
|
43962
44041
|
const response2 = await this.request("/v1/agents", {
|
|
43963
44042
|
method: "POST",
|
|
43964
44043
|
body: JSON.stringify({
|
|
43965
44044
|
name: agentName,
|
|
43966
44045
|
model: this.config.llmModel ?? DEFAULT_LLM_MODEL,
|
|
43967
|
-
embedding:
|
|
44046
|
+
embedding: embeddingModel,
|
|
43968
44047
|
memory_blocks: [
|
|
43969
44048
|
{ label: "persona", value: `OpenCode memory agent for ${layer} layer` },
|
|
43970
44049
|
{ label: "human", value: this.getUserId(layer) }
|