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.2",
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: this.config.embeddingModel ?? DEFAULT_EMBEDDING_MODEL,
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) }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oh-my-opencode-kikokikok",
3
- "version": "2.15.2",
3
+ "version": "2.15.3",
4
4
  "description": "OpenCode plugin - custom agents (oracle, librarian) and enhanced features",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",