katanakit-js 6.2.0 → 6.6.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.
Files changed (116) hide show
  1. package/README.md +11 -3
  2. package/dist/adapters/better-auth/better-auth.service.d.ts +83 -0
  3. package/dist/adapters/better-auth/better-auth.service.d.ts.map +1 -0
  4. package/dist/adapters/better-auth/better-auth.service.js +110 -0
  5. package/dist/adapters/better-auth/better-auth.service.js.map +1 -0
  6. package/dist/adapters/better-auth/client.d.ts +51 -0
  7. package/dist/adapters/better-auth/client.d.ts.map +1 -0
  8. package/dist/adapters/better-auth/client.js +67 -0
  9. package/dist/adapters/better-auth/client.js.map +1 -0
  10. package/dist/adapters/better-auth/index.d.ts +3 -0
  11. package/dist/adapters/better-auth/index.d.ts.map +1 -0
  12. package/dist/adapters/better-auth/index.js +3 -0
  13. package/dist/adapters/better-auth/index.js.map +1 -0
  14. package/dist/adapters/express/server.d.ts +133 -1
  15. package/dist/adapters/express/server.d.ts.map +1 -1
  16. package/dist/adapters/express/server.js +199 -97
  17. package/dist/adapters/express/server.js.map +1 -1
  18. package/dist/adapters/index.d.ts +2 -0
  19. package/dist/adapters/index.d.ts.map +1 -1
  20. package/dist/adapters/index.js +2 -0
  21. package/dist/adapters/index.js.map +1 -1
  22. package/dist/adapters/insforge/insforge.service.d.ts +139 -4
  23. package/dist/adapters/insforge/insforge.service.d.ts.map +1 -1
  24. package/dist/adapters/insforge/insforge.service.js +383 -213
  25. package/dist/adapters/insforge/insforge.service.js.map +1 -1
  26. package/dist/adapters/notion/notion.service.d.ts +130 -144
  27. package/dist/adapters/notion/notion.service.d.ts.map +1 -1
  28. package/dist/adapters/notion/notion.service.js +330 -341
  29. package/dist/adapters/notion/notion.service.js.map +1 -1
  30. package/dist/adapters/photoswipe/index.d.ts +2 -0
  31. package/dist/adapters/photoswipe/index.d.ts.map +1 -0
  32. package/dist/adapters/photoswipe/index.js +2 -0
  33. package/dist/adapters/photoswipe/index.js.map +1 -0
  34. package/dist/adapters/photoswipe/photoswipe.service.d.ts +99 -0
  35. package/dist/adapters/photoswipe/photoswipe.service.d.ts.map +1 -0
  36. package/dist/adapters/photoswipe/photoswipe.service.js +150 -0
  37. package/dist/adapters/photoswipe/photoswipe.service.js.map +1 -0
  38. package/dist/adapters/telegram/telegram.service.d.ts +82 -13
  39. package/dist/adapters/telegram/telegram.service.d.ts.map +1 -1
  40. package/dist/adapters/telegram/telegram.service.js +133 -55
  41. package/dist/adapters/telegram/telegram.service.js.map +1 -1
  42. package/dist/adapters/wordpress/wordpress.service.d.ts +181 -110
  43. package/dist/adapters/wordpress/wordpress.service.d.ts.map +1 -1
  44. package/dist/adapters/wordpress/wordpress.service.js +556 -465
  45. package/dist/adapters/wordpress/wordpress.service.js.map +1 -1
  46. package/dist/config/seo.service.d.ts +1 -1
  47. package/dist/config/seo.service.d.ts.map +1 -1
  48. package/dist/config/seo.service.js +1 -1
  49. package/dist/config/seo.service.js.map +1 -1
  50. package/dist/core/services/access.service.d.ts +167 -4
  51. package/dist/core/services/access.service.d.ts.map +1 -1
  52. package/dist/core/services/access.service.js +241 -31
  53. package/dist/core/services/access.service.js.map +1 -1
  54. package/dist/core/services/agent.service.d.ts +182 -27
  55. package/dist/core/services/agent.service.d.ts.map +1 -1
  56. package/dist/core/services/agent.service.js +296 -164
  57. package/dist/core/services/agent.service.js.map +1 -1
  58. package/dist/core/services/assistant.service.d.ts +96 -5
  59. package/dist/core/services/assistant.service.d.ts.map +1 -1
  60. package/dist/core/services/assistant.service.js +171 -66
  61. package/dist/core/services/assistant.service.js.map +1 -1
  62. package/dist/core/services/dates.service.d.ts +183 -11
  63. package/dist/core/services/dates.service.d.ts.map +1 -1
  64. package/dist/core/services/dates.service.js +256 -57
  65. package/dist/core/services/dates.service.js.map +1 -1
  66. package/dist/core/services/http.service.d.ts +172 -133
  67. package/dist/core/services/http.service.d.ts.map +1 -1
  68. package/dist/core/services/http.service.js +367 -310
  69. package/dist/core/services/http.service.js.map +1 -1
  70. package/dist/core/services/logger.service.d.ts +96 -34
  71. package/dist/core/services/logger.service.d.ts.map +1 -1
  72. package/dist/core/services/logger.service.js +128 -41
  73. package/dist/core/services/logger.service.js.map +1 -1
  74. package/dist/core/services/query.service.d.ts +101 -0
  75. package/dist/core/services/query.service.d.ts.map +1 -1
  76. package/dist/core/services/query.service.js +131 -14
  77. package/dist/core/services/query.service.js.map +1 -1
  78. package/dist/core/services/utils.service.d.ts +286 -131
  79. package/dist/core/services/utils.service.d.ts.map +1 -1
  80. package/dist/core/services/utils.service.js +417 -227
  81. package/dist/core/services/utils.service.js.map +1 -1
  82. package/dist/core/services/validation.service.d.ts +48 -3
  83. package/dist/core/services/validation.service.d.ts.map +1 -1
  84. package/dist/core/services/validation.service.js +75 -23
  85. package/dist/core/services/validation.service.js.map +1 -1
  86. package/dist/infrastructure/decorators/cache.decorator.d.ts +53 -0
  87. package/dist/infrastructure/decorators/cache.decorator.d.ts.map +1 -0
  88. package/dist/infrastructure/decorators/cache.decorator.js +47 -0
  89. package/dist/infrastructure/decorators/cache.decorator.js.map +1 -0
  90. package/dist/infrastructure/decorators/index.d.ts +4 -0
  91. package/dist/infrastructure/decorators/index.d.ts.map +1 -0
  92. package/dist/infrastructure/decorators/index.js +4 -0
  93. package/dist/infrastructure/decorators/index.js.map +1 -0
  94. package/dist/infrastructure/decorators/logger.decorator.d.ts +38 -0
  95. package/dist/infrastructure/decorators/logger.decorator.d.ts.map +1 -0
  96. package/dist/infrastructure/decorators/logger.decorator.js +66 -0
  97. package/dist/infrastructure/decorators/logger.decorator.js.map +1 -0
  98. package/dist/infrastructure/decorators/retry.decorator.d.ts +37 -0
  99. package/dist/infrastructure/decorators/retry.decorator.d.ts.map +1 -0
  100. package/dist/infrastructure/decorators/retry.decorator.js +54 -0
  101. package/dist/infrastructure/decorators/retry.decorator.js.map +1 -0
  102. package/dist/infrastructure/index.d.ts +1 -0
  103. package/dist/infrastructure/index.d.ts.map +1 -1
  104. package/dist/infrastructure/index.js +1 -0
  105. package/dist/infrastructure/index.js.map +1 -1
  106. package/dist/styles.css +2 -0
  107. package/package.json +49 -14
  108. package/scss/_flags.scss +179 -0
  109. package/scss/_functions.scss +168 -0
  110. package/scss/_mixins.scss +658 -0
  111. package/scss/_reset.scss +275 -0
  112. package/scss/_utilities.scss +449 -0
  113. package/scss/_variables.scss +539 -0
  114. package/scss/components/_index.scss +50 -0
  115. package/scss/demo.scss +12 -0
  116. package/scss/main.scss +56 -0
@@ -7,12 +7,102 @@ import type { AiMessage, AssistantInitConfig, AssistantReplyOptions, AssistantRe
7
7
  */
8
8
  export declare function useCreateMemoryStore(): ConversationStore;
9
9
  /**
10
- * Configures the assistant: provider (Kitt) plus an optional conversation store.
10
+ * AssistantService - Singleton para el asistente conversacional.
11
+ *
12
+ * Aplica el patrón Singleton: una única instancia mantiene el store de
13
+ * conversaciones, las herramientas y el presupuesto de pasos del agente.
14
+ * El store es intercambiable (Strategy implícita: in-memory por defecto,
15
+ * Prisma u otro persistente vía `useInit`), y la lógica de completado
16
+ * delega en {@link AgentService}.
11
17
  *
12
- * Defaults mirror {@link useInitAgent}: `apiKey` falls back to
13
- * `process.env.DASHSCOPE_API_KEY`, and `baseUrl`/`model`/`systemPrompt` fall
14
- * back to the Kitt preset. The default store is in-memory; pass
15
- * `{ store }` to persist conversations (e.g. a Prisma-backed store).
18
+ * @example
19
+ * ```ts
20
+ * const assistant = AssistantService.getInstance();
21
+ * assistant.useInit({ model: "qwen3.8-max" });
22
+ * const result = await assistant.useReply(undefined, "Hello!");
23
+ * ```
24
+ */
25
+ export declare class AssistantService implements IAssistantService {
26
+ private static instance;
27
+ /** Conversation store. Defaults to in-memory. */
28
+ private store;
29
+ /** Tools used by {@link useReply} when none are passed per call. */
30
+ private tools;
31
+ /** Agent step budget. */
32
+ private maxSteps;
33
+ /**
34
+ * Constructor privado - enforce singleton.
35
+ */
36
+ private constructor();
37
+ /**
38
+ * Obtiene la instancia única del AssistantService (Singleton).
39
+ *
40
+ * @returns La instancia única de {@link AssistantService}.
41
+ */
42
+ static getInstance(): AssistantService;
43
+ /**
44
+ * Configures the assistant: provider (Kitt) plus an optional conversation store.
45
+ *
46
+ * Defaults mirror `useInitAgent`: `apiKey` falls back to
47
+ * `process.env.DASHSCOPE_API_KEY`, and `baseUrl`/`model`/`systemPrompt` fall
48
+ * back to the Kitt preset. The default store is in-memory; pass
49
+ * `{ store }` to persist conversations (e.g. a Prisma-backed store).
50
+ *
51
+ * @param config - Assistant configuration.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * AssistantService.getInstance().useInit({ model: "qwen3.8-max" });
56
+ * ```
57
+ */
58
+ useInitAssistant(config?: AssistantInitConfig): void;
59
+ /**
60
+ * Creates a new conversation session.
61
+ *
62
+ * @param channel - Optional channel tag (e.g. `"rest"`, `"telegram"`, `"whatsapp"`).
63
+ * @returns The new session id.
64
+ */
65
+ useCreateSession(channel?: string): Promise<string>;
66
+ /**
67
+ * Checks whether a conversation session exists.
68
+ *
69
+ * @param sessionId - The conversation session id.
70
+ * @returns `true` when the session exists.
71
+ */
72
+ useSessionExists(sessionId: string): Promise<boolean>;
73
+ /**
74
+ * Returns the full message history of a session, oldest first.
75
+ *
76
+ * @param sessionId - The conversation session id.
77
+ * @returns The accumulated messages.
78
+ */
79
+ useGetHistory(sessionId: string): Promise<AiMessage[]>;
80
+ /**
81
+ * Deletes a conversation session and its messages.
82
+ *
83
+ * @param sessionId - The conversation session id to reset.
84
+ */
85
+ useResetSession(sessionId: string): Promise<void>;
86
+ /**
87
+ * Sends a user message within a conversation and returns the assistant reply.
88
+ * If no `sessionId` is provided, a new session is created. The user message and
89
+ * the assistant reply are persisted only on success.
90
+ *
91
+ * @param sessionId - Existing session id, or `undefined` to start a new one.
92
+ * @param text - The user's message.
93
+ * @param options - Optional completion options.
94
+ * @returns An {@link AssistantResult} with the reply and session id.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * const result = await AssistantService.getInstance().useReply(undefined, "Hello!");
99
+ * if (result.ok) console.log(result.data.reply);
100
+ * ```
101
+ */
102
+ useReply(sessionId: string | undefined, text: string, options?: AssistantReplyOptions): Promise<AssistantResult>;
103
+ }
104
+ /**
105
+ * Configures the assistant: provider (Kitt) plus an optional conversation store.
16
106
  *
17
107
  * @param config - Assistant configuration.
18
108
  *
@@ -90,5 +180,6 @@ export declare function useResetSession(sessionId: string): Promise<void>;
90
180
  * ```
91
181
  */
92
182
  export declare function useReply(sessionId: string | undefined, text: string, options?: AssistantReplyOptions): Promise<AssistantResult>;
183
+ /** Object facade implementing {@link IAssistantService} over the singleton. */
93
184
  export declare const assistant: IAssistantService;
94
185
  //# sourceMappingURL=assistant.service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assistant.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/assistant.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EAET,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,sBAAsB,CAAC;AAG9B;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAkDD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,mBAAwB,GAAG,IAAI,CAWvE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAExE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAE3E;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,QAAQ,CAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,eAAe,CAAC,CA+B1B;AA4BD,eAAO,MAAM,SAAS,EAAE,iBAOvB,CAAC"}
1
+ {"version":3,"file":"assistant.service.d.ts","sourceRoot":"","sources":["../../../src/core/services/assistant.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EAET,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,MAAM,sBAAsB,CAAC;AAG9B;;;;;GAKG;AACH,wBAAgB,oBAAoB,IAAI,iBAAiB,CAExD;AAmED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmB;IAE1C,iDAAiD;IACjD,OAAO,CAAC,KAAK,CAA0C;IACvD,oEAAoE;IACpE,OAAO,CAAC,KAAK,CAAgB;IAC7B,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAM;IAEtB;;OAEG;IACH,OAAO;IAEP;;;;OAIG;IACH,MAAM,CAAC,WAAW,IAAI,gBAAgB;IAOtC;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,MAAM,GAAE,mBAAwB,GAAG,IAAI;IAaxD;;;;;OAKG;IACG,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzD;;;;;OAKG;IACG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAI3D;;;;;OAKG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI5D;;;;OAIG;IACG,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;;;;;;;;;;;;;;OAeG;IACG,QAAQ,CACb,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,eAAe,CAAC;CAgC3B;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,mBAAwB,GAAG,IAAI,CAEvE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAExE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAE1E;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAE3E;AAED;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,QAAQ,CAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,eAAe,CAAC,CAE1B;AAED,+EAA+E;AAC/E,eAAO,MAAM,SAAS,EAAE,iBAOvB,CAAC"}
@@ -34,23 +34,176 @@ function createMemoryStore() {
34
34
  };
35
35
  return { useCreate, useExists, useAppend, useGetHistory, useReset };
36
36
  }
37
- /** Module-level conversation store. Defaults to in-memory. */
38
- let store = createMemoryStore();
39
- /** Module-level tools used by {@link useReply} when none are passed per call. */
40
- let tools = [];
41
- /** Module-level agent step budget. */
42
- let maxSteps = 10;
43
37
  /** Coerces an unknown error into a message string. */
44
38
  function toMessage(error) {
45
39
  return error instanceof Error ? error.message : String(error);
46
40
  }
41
+ /** Runs a tool-aware agent loop when tools are present; otherwise a single chat. */
42
+ async function completeReply(history, text, options, activeTools, stepBudget) {
43
+ if (activeTools.length === 0) {
44
+ return useChat([...history, { role: "user", content: text }], options);
45
+ }
46
+ const result = await useRunAgent(text, {
47
+ ...options,
48
+ tools: activeTools,
49
+ maxSteps: stepBudget,
50
+ history,
51
+ });
52
+ if (!result.ok) {
53
+ return { data: null, error: result.error, ok: false };
54
+ }
55
+ return { data: result.data.finalMessage, error: null, ok: true };
56
+ }
47
57
  /**
48
- * Configures the assistant: provider (Kitt) plus an optional conversation store.
58
+ * AssistantService - Singleton para el asistente conversacional.
49
59
  *
50
- * Defaults mirror {@link useInitAgent}: `apiKey` falls back to
51
- * `process.env.DASHSCOPE_API_KEY`, and `baseUrl`/`model`/`systemPrompt` fall
52
- * back to the Kitt preset. The default store is in-memory; pass
53
- * `{ store }` to persist conversations (e.g. a Prisma-backed store).
60
+ * Aplica el patrón Singleton: una única instancia mantiene el store de
61
+ * conversaciones, las herramientas y el presupuesto de pasos del agente.
62
+ * El store es intercambiable (Strategy implícita: in-memory por defecto,
63
+ * Prisma u otro persistente vía `useInit`), y la lógica de completado
64
+ * delega en {@link AgentService}.
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * const assistant = AssistantService.getInstance();
69
+ * assistant.useInit({ model: "qwen3.8-max" });
70
+ * const result = await assistant.useReply(undefined, "Hello!");
71
+ * ```
72
+ */
73
+ export class AssistantService {
74
+ static instance;
75
+ /** Conversation store. Defaults to in-memory. */
76
+ store = createMemoryStore();
77
+ /** Tools used by {@link useReply} when none are passed per call. */
78
+ tools = [];
79
+ /** Agent step budget. */
80
+ maxSteps = 10;
81
+ /**
82
+ * Constructor privado - enforce singleton.
83
+ */
84
+ constructor() { }
85
+ /**
86
+ * Obtiene la instancia única del AssistantService (Singleton).
87
+ *
88
+ * @returns La instancia única de {@link AssistantService}.
89
+ */
90
+ static getInstance() {
91
+ if (!AssistantService.instance) {
92
+ AssistantService.instance = new AssistantService();
93
+ }
94
+ return AssistantService.instance;
95
+ }
96
+ /**
97
+ * Configures the assistant: provider (Kitt) plus an optional conversation store.
98
+ *
99
+ * Defaults mirror `useInitAgent`: `apiKey` falls back to
100
+ * `process.env.DASHSCOPE_API_KEY`, and `baseUrl`/`model`/`systemPrompt` fall
101
+ * back to the Kitt preset. The default store is in-memory; pass
102
+ * `{ store }` to persist conversations (e.g. a Prisma-backed store).
103
+ *
104
+ * @param config - Assistant configuration.
105
+ *
106
+ * @example
107
+ * ```ts
108
+ * AssistantService.getInstance().useInit({ model: "qwen3.8-max" });
109
+ * ```
110
+ */
111
+ useInitAssistant(config = {}) {
112
+ const { store: customStore, tools: customTools, maxSteps: customMaxSteps, ...agentConfig } = config;
113
+ if (customStore)
114
+ this.store = customStore;
115
+ if (customTools)
116
+ this.tools = customTools;
117
+ if (customMaxSteps !== undefined)
118
+ this.maxSteps = customMaxSteps;
119
+ useInitAgent(agentConfig);
120
+ }
121
+ /**
122
+ * Creates a new conversation session.
123
+ *
124
+ * @param channel - Optional channel tag (e.g. `"rest"`, `"telegram"`, `"whatsapp"`).
125
+ * @returns The new session id.
126
+ */
127
+ async useCreateSession(channel) {
128
+ return this.store.useCreate(channel);
129
+ }
130
+ /**
131
+ * Checks whether a conversation session exists.
132
+ *
133
+ * @param sessionId - The conversation session id.
134
+ * @returns `true` when the session exists.
135
+ */
136
+ async useSessionExists(sessionId) {
137
+ return this.store.useExists(sessionId);
138
+ }
139
+ /**
140
+ * Returns the full message history of a session, oldest first.
141
+ *
142
+ * @param sessionId - The conversation session id.
143
+ * @returns The accumulated messages.
144
+ */
145
+ async useGetHistory(sessionId) {
146
+ return this.store.useGetHistory(sessionId);
147
+ }
148
+ /**
149
+ * Deletes a conversation session and its messages.
150
+ *
151
+ * @param sessionId - The conversation session id to reset.
152
+ */
153
+ async useResetSession(sessionId) {
154
+ await this.store.useReset(sessionId);
155
+ }
156
+ /**
157
+ * Sends a user message within a conversation and returns the assistant reply.
158
+ * If no `sessionId` is provided, a new session is created. The user message and
159
+ * the assistant reply are persisted only on success.
160
+ *
161
+ * @param sessionId - Existing session id, or `undefined` to start a new one.
162
+ * @param text - The user's message.
163
+ * @param options - Optional completion options.
164
+ * @returns An {@link AssistantResult} with the reply and session id.
165
+ *
166
+ * @example
167
+ * ```ts
168
+ * const result = await AssistantService.getInstance().useReply(undefined, "Hello!");
169
+ * if (result.ok) console.log(result.data.reply);
170
+ * ```
171
+ */
172
+ async useReply(sessionId, text, options = {}) {
173
+ try {
174
+ if (sessionId !== undefined && !(await this.store.useExists(sessionId))) {
175
+ return {
176
+ data: null,
177
+ error: { message: "[Assistant] Unknown session", status: 404 },
178
+ ok: false,
179
+ };
180
+ }
181
+ const id = sessionId ?? (await this.store.useCreate());
182
+ const history = await this.store.useGetHistory(id);
183
+ const activeTools = options.tools ?? this.tools;
184
+ const stepBudget = options.maxSteps ?? this.maxSteps;
185
+ const replyText = await completeReply(history, text, options, activeTools, stepBudget);
186
+ if (!replyText.ok) {
187
+ return { data: null, error: replyText.error, ok: false };
188
+ }
189
+ await this.store.useAppend(id, { role: "user", content: text });
190
+ await this.store.useAppend(id, { role: "assistant", content: replyText.data });
191
+ return { data: { reply: replyText.data, sessionId: id }, error: null, ok: true };
192
+ }
193
+ catch (error) {
194
+ return {
195
+ data: null,
196
+ error: { message: `[Assistant] ${toMessage(error)}`, status: 0 },
197
+ ok: false,
198
+ };
199
+ }
200
+ }
201
+ }
202
+ /* -------------------------------------------------------------------------- */
203
+ /* Wrappers (backward compatibility) */
204
+ /* -------------------------------------------------------------------------- */
205
+ /**
206
+ * Configures the assistant: provider (Kitt) plus an optional conversation store.
54
207
  *
55
208
  * @param config - Assistant configuration.
56
209
  *
@@ -62,14 +215,7 @@ function toMessage(error) {
62
215
  * ```
63
216
  */
64
217
  export function useInitAssistant(config = {}) {
65
- const { store: customStore, tools: customTools, maxSteps: customMaxSteps, ...agentConfig } = config;
66
- if (customStore)
67
- store = customStore;
68
- if (customTools)
69
- tools = customTools;
70
- if (customMaxSteps !== undefined)
71
- maxSteps = customMaxSteps;
72
- useInitAgent(agentConfig);
218
+ AssistantService.getInstance().useInitAssistant(config);
73
219
  }
74
220
  /**
75
221
  * Creates a new conversation session.
@@ -83,7 +229,7 @@ export function useInitAssistant(config = {}) {
83
229
  * ```
84
230
  */
85
231
  export async function useCreateSession(channel) {
86
- return store.useCreate(channel);
232
+ return AssistantService.getInstance().useCreateSession(channel);
87
233
  }
88
234
  /**
89
235
  * Checks whether a conversation session exists.
@@ -97,7 +243,7 @@ export async function useCreateSession(channel) {
97
243
  * ```
98
244
  */
99
245
  export async function useSessionExists(sessionId) {
100
- return store.useExists(sessionId);
246
+ return AssistantService.getInstance().useSessionExists(sessionId);
101
247
  }
102
248
  /**
103
249
  * Returns the full message history of a session, oldest first.
@@ -111,7 +257,7 @@ export async function useSessionExists(sessionId) {
111
257
  * ```
112
258
  */
113
259
  export async function useGetHistory(sessionId) {
114
- return store.useGetHistory(sessionId);
260
+ return AssistantService.getInstance().useGetHistory(sessionId);
115
261
  }
116
262
  /**
117
263
  * Deletes a conversation session and its messages.
@@ -124,7 +270,7 @@ export async function useGetHistory(sessionId) {
124
270
  * ```
125
271
  */
126
272
  export async function useResetSession(sessionId) {
127
- await store.useReset(sessionId);
273
+ return AssistantService.getInstance().useResetSession(sessionId);
128
274
  }
129
275
  /**
130
276
  * Sends a user message within a conversation and returns the assistant reply.
@@ -145,50 +291,9 @@ export async function useResetSession(sessionId) {
145
291
  * ```
146
292
  */
147
293
  export async function useReply(sessionId, text, options = {}) {
148
- try {
149
- if (sessionId !== undefined && !(await store.useExists(sessionId))) {
150
- return {
151
- data: null,
152
- error: { message: "[Assistant] Unknown session", status: 404 },
153
- ok: false,
154
- };
155
- }
156
- const id = sessionId ?? (await store.useCreate());
157
- const history = await store.useGetHistory(id);
158
- const activeTools = options.tools ?? tools;
159
- const stepBudget = options.maxSteps ?? maxSteps;
160
- const replyText = await completeReply(history, text, options, activeTools, stepBudget);
161
- if (!replyText.ok) {
162
- return { data: null, error: replyText.error, ok: false };
163
- }
164
- await store.useAppend(id, { role: "user", content: text });
165
- await store.useAppend(id, { role: "assistant", content: replyText.data });
166
- return { data: { reply: replyText.data, sessionId: id }, error: null, ok: true };
167
- }
168
- catch (error) {
169
- return {
170
- data: null,
171
- error: { message: `[Assistant] ${toMessage(error)}`, status: 0 },
172
- ok: false,
173
- };
174
- }
175
- }
176
- /** Runs a tool-aware agent loop when tools are present; otherwise a single chat. */
177
- async function completeReply(history, text, options, activeTools, stepBudget) {
178
- if (activeTools.length === 0) {
179
- return useChat([...history, { role: "user", content: text }], options);
180
- }
181
- const result = await useRunAgent(text, {
182
- ...options,
183
- tools: activeTools,
184
- maxSteps: stepBudget,
185
- history,
186
- });
187
- if (!result.ok) {
188
- return { data: null, error: result.error, ok: false };
189
- }
190
- return { data: result.data.finalMessage, error: null, ok: true };
294
+ return AssistantService.getInstance().useReply(sessionId, text, options);
191
295
  }
296
+ /** Object facade implementing {@link IAssistantService} over the singleton. */
192
297
  export const assistant = {
193
298
  useInitAssistant,
194
299
  useReply,
@@ -1 +1 @@
1
- {"version":3,"file":"assistant.service.js","sourceRoot":"","sources":["../../../src/core/services/assistant.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"assistant.service.js","sourceRoot":"","sources":["../../../src/core/services/assistant.service.ts"],"names":[],"mappings":"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"}