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.
- package/README.md +11 -3
- package/dist/adapters/better-auth/better-auth.service.d.ts +83 -0
- package/dist/adapters/better-auth/better-auth.service.d.ts.map +1 -0
- package/dist/adapters/better-auth/better-auth.service.js +110 -0
- package/dist/adapters/better-auth/better-auth.service.js.map +1 -0
- package/dist/adapters/better-auth/client.d.ts +51 -0
- package/dist/adapters/better-auth/client.d.ts.map +1 -0
- package/dist/adapters/better-auth/client.js +67 -0
- package/dist/adapters/better-auth/client.js.map +1 -0
- package/dist/adapters/better-auth/index.d.ts +3 -0
- package/dist/adapters/better-auth/index.d.ts.map +1 -0
- package/dist/adapters/better-auth/index.js +3 -0
- package/dist/adapters/better-auth/index.js.map +1 -0
- package/dist/adapters/express/server.d.ts +133 -1
- package/dist/adapters/express/server.d.ts.map +1 -1
- package/dist/adapters/express/server.js +199 -97
- package/dist/adapters/express/server.js.map +1 -1
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +2 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/insforge/insforge.service.d.ts +139 -4
- package/dist/adapters/insforge/insforge.service.d.ts.map +1 -1
- package/dist/adapters/insforge/insforge.service.js +383 -213
- package/dist/adapters/insforge/insforge.service.js.map +1 -1
- package/dist/adapters/notion/notion.service.d.ts +130 -144
- package/dist/adapters/notion/notion.service.d.ts.map +1 -1
- package/dist/adapters/notion/notion.service.js +330 -341
- package/dist/adapters/notion/notion.service.js.map +1 -1
- package/dist/adapters/photoswipe/index.d.ts +2 -0
- package/dist/adapters/photoswipe/index.d.ts.map +1 -0
- package/dist/adapters/photoswipe/index.js +2 -0
- package/dist/adapters/photoswipe/index.js.map +1 -0
- package/dist/adapters/photoswipe/photoswipe.service.d.ts +99 -0
- package/dist/adapters/photoswipe/photoswipe.service.d.ts.map +1 -0
- package/dist/adapters/photoswipe/photoswipe.service.js +150 -0
- package/dist/adapters/photoswipe/photoswipe.service.js.map +1 -0
- package/dist/adapters/telegram/telegram.service.d.ts +82 -13
- package/dist/adapters/telegram/telegram.service.d.ts.map +1 -1
- package/dist/adapters/telegram/telegram.service.js +133 -55
- package/dist/adapters/telegram/telegram.service.js.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.d.ts +181 -110
- package/dist/adapters/wordpress/wordpress.service.d.ts.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.js +556 -465
- package/dist/adapters/wordpress/wordpress.service.js.map +1 -1
- package/dist/config/seo.service.d.ts +1 -1
- package/dist/config/seo.service.d.ts.map +1 -1
- package/dist/config/seo.service.js +1 -1
- package/dist/config/seo.service.js.map +1 -1
- package/dist/core/services/access.service.d.ts +167 -4
- package/dist/core/services/access.service.d.ts.map +1 -1
- package/dist/core/services/access.service.js +241 -31
- package/dist/core/services/access.service.js.map +1 -1
- package/dist/core/services/agent.service.d.ts +182 -27
- package/dist/core/services/agent.service.d.ts.map +1 -1
- package/dist/core/services/agent.service.js +296 -164
- package/dist/core/services/agent.service.js.map +1 -1
- package/dist/core/services/assistant.service.d.ts +96 -5
- package/dist/core/services/assistant.service.d.ts.map +1 -1
- package/dist/core/services/assistant.service.js +171 -66
- package/dist/core/services/assistant.service.js.map +1 -1
- package/dist/core/services/dates.service.d.ts +183 -11
- package/dist/core/services/dates.service.d.ts.map +1 -1
- package/dist/core/services/dates.service.js +256 -57
- package/dist/core/services/dates.service.js.map +1 -1
- package/dist/core/services/http.service.d.ts +172 -133
- package/dist/core/services/http.service.d.ts.map +1 -1
- package/dist/core/services/http.service.js +367 -310
- package/dist/core/services/http.service.js.map +1 -1
- package/dist/core/services/logger.service.d.ts +96 -34
- package/dist/core/services/logger.service.d.ts.map +1 -1
- package/dist/core/services/logger.service.js +128 -41
- package/dist/core/services/logger.service.js.map +1 -1
- package/dist/core/services/query.service.d.ts +101 -0
- package/dist/core/services/query.service.d.ts.map +1 -1
- package/dist/core/services/query.service.js +131 -14
- package/dist/core/services/query.service.js.map +1 -1
- package/dist/core/services/utils.service.d.ts +286 -131
- package/dist/core/services/utils.service.d.ts.map +1 -1
- package/dist/core/services/utils.service.js +417 -227
- package/dist/core/services/utils.service.js.map +1 -1
- package/dist/core/services/validation.service.d.ts +48 -3
- package/dist/core/services/validation.service.d.ts.map +1 -1
- package/dist/core/services/validation.service.js +75 -23
- package/dist/core/services/validation.service.js.map +1 -1
- package/dist/infrastructure/decorators/cache.decorator.d.ts +53 -0
- package/dist/infrastructure/decorators/cache.decorator.d.ts.map +1 -0
- package/dist/infrastructure/decorators/cache.decorator.js +47 -0
- package/dist/infrastructure/decorators/cache.decorator.js.map +1 -0
- package/dist/infrastructure/decorators/index.d.ts +4 -0
- package/dist/infrastructure/decorators/index.d.ts.map +1 -0
- package/dist/infrastructure/decorators/index.js +4 -0
- package/dist/infrastructure/decorators/index.js.map +1 -0
- package/dist/infrastructure/decorators/logger.decorator.d.ts +38 -0
- package/dist/infrastructure/decorators/logger.decorator.d.ts.map +1 -0
- package/dist/infrastructure/decorators/logger.decorator.js +66 -0
- package/dist/infrastructure/decorators/logger.decorator.js.map +1 -0
- package/dist/infrastructure/decorators/retry.decorator.d.ts +37 -0
- package/dist/infrastructure/decorators/retry.decorator.d.ts.map +1 -0
- package/dist/infrastructure/decorators/retry.decorator.js +54 -0
- package/dist/infrastructure/decorators/retry.decorator.js.map +1 -0
- package/dist/infrastructure/index.d.ts +1 -0
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +1 -0
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/styles.css +2 -0
- package/package.json +49 -14
- package/scss/_flags.scss +179 -0
- package/scss/_functions.scss +168 -0
- package/scss/_mixins.scss +658 -0
- package/scss/_reset.scss +275 -0
- package/scss/_utilities.scss +449 -0
- package/scss/_variables.scss +539 -0
- package/scss/components/_index.scss +50 -0
- package/scss/demo.scss +12 -0
- 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
|
-
*
|
|
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
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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;
|
|
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
|
-
*
|
|
58
|
+
* AssistantService - Singleton para el asistente conversacional.
|
|
49
59
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
*
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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":"AASA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAExE;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB;IACnC,OAAO,iBAAiB,EAAE,CAAC;AAC5B,CAAC;AAED,2EAA2E;AAC3E,SAAS,iBAAiB;IACzB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAErD,MAAM,SAAS,GAAG,KAAK,IAAqB,EAAE;QAC7C,MAAM,EAAE,GACP,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM;YACtD,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;YACrB,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,OAAO,EAAE,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;QAC/D,OAAO,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,KAAK,EAAE,SAAiB,EAAE,OAAkB,EAAiB,EAAE;QAChF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtB,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,SAAiB,EAAwB,EAAE;QACvE,OAAO,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,SAAiB,EAAiB,EAAE;QAC3D,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AACrE,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"assistant.service.js","sourceRoot":"","sources":["../../../src/core/services/assistant.service.ts"],"names":[],"mappings":"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"}
|