@ssww.one/framework 0.0.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.
@@ -0,0 +1,3 @@
1
+ import { AgentTool } from "./tools";
2
+ export declare function agent(at: AgentTool): Promise<void>;
3
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,SAAS,CAAC;AAiCtD,wBAAsB,KAAK,CAAC,EAAE,EAAE,SAAS,iBAiDxC"}
package/dist/agent.js ADDED
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.agent = agent;
7
+ const tools_1 = require("./tools");
8
+ const zod_1 = __importDefault(require("zod"));
9
+ // export async function agent(at: AgentTool) {
10
+ // at.print('\n');
11
+ // at.print('----------------------\n');
12
+ // at.print('Hi welcome to my apps!\n');
13
+ // at.print('----------------------\n');
14
+ // at.print(`what do you want to know?`, true);
15
+ // await at.prepareKnowledge('You are an agent that will resolve all topics about computers and programming (remember this is your topic)');
16
+ // let i = 0;
17
+ // while (true) {
18
+ // at.addInformation(`-- start of session #${++i} --`);
19
+ // const instruction = await at.waitForUserInstruction();
20
+ // if (instruction === '/quit') {
21
+ // at.print('End of session', true);
22
+ // return;
23
+ // }
24
+ // const is_on_scope = await at.askLLM(`is user inquiry "${instruction}" in your topic scope? return true if yes, otherwise return false`, z.boolean());
25
+ // if (is_on_scope) {
26
+ // const article_len = await at.askUser(`How many sentences do you want me to create an article about your inquiry?`);
27
+ // await at.streamLLM(`create a ${article_len} sentence(s) article about topic user said before`, s => {
28
+ // at.print(s);
29
+ // });
30
+ // at.print('\n', true);
31
+ // } else {
32
+ // at.print(`You question is out of scope`, true);
33
+ // }
34
+ // at.addInformation(`-- end of session #${i} --, user next inquiry/prompt/message must be unrelated to this ended session #${i} unless explicitly mentioned`);
35
+ // }
36
+ // }
37
+ const list_schedule = [];
38
+ async function agent(at) {
39
+ at.termination_keywords = ['/quit'];
40
+ at.print(`How can I help you?`, true);
41
+ try {
42
+ while (true) {
43
+ const instruction = await at.waitForUserInstruction();
44
+ await at.prepareKnowledge(`current time ${new Date().toISOString()}`);
45
+ const is_on_topic = await at.askLLM(`return true if this prompt "${instruction}" is related to your task (add/delete/update/retrieve), return false otherwise`, zod_1.default.boolean());
46
+ if (is_on_topic) {
47
+ const category = await at.askLLM(`categorize this user prompt "${instruction}", mark true on only one of { read, update, create, delete } output format.`, zod_1.default.object({
48
+ read: zod_1.default.boolean(),
49
+ update: zod_1.default.boolean(),
50
+ create: zod_1.default.boolean(),
51
+ delete: zod_1.default.boolean()
52
+ }));
53
+ if (category.create) {
54
+ await at.validateLLMWithFeedback(`user information have to be clear and no assumption, does it has all required meeting name (required), date (required), and time (required)? return true if clear and have all required data, false if not clear`, async () => await at.askLLM(`create a one sentence straight question (human like question) for user, regarding to the missing only information? I will ask it to user for you`, zod_1.default.string()));
55
+ await at.prepareKnowledge(`updated current time ${new Date().toISOString()}`);
56
+ const schedule = await at.askLLM(`extract schedule time with format { label: string, datetime: string } from user prompt, label is meeting name`, zod_1.default.object({
57
+ label: zod_1.default.string(),
58
+ datetime: zod_1.default.string()
59
+ }));
60
+ list_schedule.push(schedule);
61
+ at.print(`New schedule added: ${schedule.label} at ${schedule.datetime}`, true);
62
+ }
63
+ if (category.read) {
64
+ await at.prepareKnowledge(['List user schedule', JSON.stringify(list_schedule)].join('\n'));
65
+ await at.streamLLM(`return straight answer in one or more sentence based on user prompt and list user schedule (dont include programming like answer like: true, read, create, or anything else)`, s => {
66
+ at.print(s);
67
+ });
68
+ at.print('\n', true);
69
+ }
70
+ if (category.update) {
71
+ //
72
+ }
73
+ }
74
+ else {
75
+ at.print(`your prompt is out of topic`, true);
76
+ }
77
+ }
78
+ }
79
+ catch (err) {
80
+ if (err instanceof tools_1.TerminationError) {
81
+ at.print(`End of session`, true);
82
+ return;
83
+ }
84
+ throw err;
85
+ }
86
+ }
87
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../agent.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import { AgentType } from "./server";
2
+ export interface AgentCLIConfig {
3
+ llm_apikey: string;
4
+ llm_base_url?: string;
5
+ llm_model?: string;
6
+ }
7
+ export declare function startAgentCLI(agent: AgentType, config: AgentCLIConfig): Promise<void>;
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrC,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AACD,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,iBAI3E"}
package/dist/cli.js ADDED
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startAgentCLI = startAgentCLI;
4
+ const llm_1 = require("./llm");
5
+ const tools_1 = require("./tools");
6
+ async function startAgentCLI(agent, config) {
7
+ const llm = new llm_1.LLM(config.llm_apikey, config.llm_base_url, config.llm_model);
8
+ const agent_tool = new tools_1.AgentTool(llm, 'cli');
9
+ await agent(agent_tool);
10
+ }
11
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../cli.ts"],"names":[],"mappings":";;AASA,sCAIC;AAbD,+BAA4B;AAE5B,mCAAoC;AAO7B,KAAK,UAAU,aAAa,CAAC,KAAgB,EAAE,MAAsB;IAC1E,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,IAAI,iBAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAC7C,MAAM,KAAK,CAAC,UAAU,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const agent_1 = require("./agent");
4
+ const server_1 = require("./server");
5
+ async function main() {
6
+ // startAgentCLI(agent, {
7
+ // llm_apikey: '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',
8
+ // llm_base_url: 'https://openrouter.ai/api/v1',
9
+ // llm_model: 'google/gemini-3.1-flash-lite-preview'
10
+ // });
11
+ (0, server_1.startAgentServer)(agent_1.agent, {
12
+ llm_apikey: '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',
13
+ llm_base_url: 'https://openrouter.ai/api/v1',
14
+ llm_model: 'google/gemini-3.1-flash-lite-preview'
15
+ });
16
+ }
17
+ main().catch(console.error);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;AAAA,mCAAgC;AAChC,qCAA4C;AAE5C,KAAK,UAAU,IAAI;IACjB,yBAAyB;IACzB,6FAA6F;IAC7F,kDAAkD;IAClD,sDAAsD;IACtD,MAAM;IACN,IAAA,yBAAgB,EAAC,aAAK,EAAE;QACtB,UAAU,EAAE,2EAA2E;QACvF,YAAY,EAAE,8BAA8B;QAC5C,SAAS,EAAE,sCAAsC;KAClD,CAAC,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
package/dist/llm.d.ts ADDED
@@ -0,0 +1,21 @@
1
+ import OpenAI from "openai";
2
+ import { ChatModel } from "openai/resources/shared";
3
+ import z from "zod";
4
+ export type StreamFn = (delta_text: string) => void;
5
+ export declare class LLM {
6
+ client: OpenAI;
7
+ model: ChatModel;
8
+ knowledges: string[];
9
+ history: {
10
+ role: string;
11
+ content: string;
12
+ }[];
13
+ constructor(apiKey: string, base_url?: string, model?: string);
14
+ setModel(model: ChatModel): this;
15
+ addKnowledge(k: string): void;
16
+ addInformation(k: string): void;
17
+ askLLM<T = string>(q: string, type?: z.ZodTypeAny<T>): Promise<T>;
18
+ streamLLM(q: string, onOutput: StreamFn, afterStreamStart?: Function): Promise<void>;
19
+ cleanUp(): void;
20
+ }
21
+ //# sourceMappingURL=llm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../llm.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;AACpD,qBAAa,GAAG;IACP,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAY;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAM;IAC1B,OAAO,EAAE;QACd,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,EAAE,CAAM;gBAEU,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAO7D,QAAQ,CAAC,KAAK,EAAE,SAAS;IAKzB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAW7B,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAOzB,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAsCjE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,QAAQ;IA6B1E,OAAO;CAIf"}
package/dist/llm.js ADDED
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LLM = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ const zod_1 = require("openai/helpers/zod");
9
+ class LLM {
10
+ client;
11
+ model = 'gpt-4o';
12
+ knowledges = [];
13
+ history = [];
14
+ constructor(apiKey, base_url, model) {
15
+ this.client = new openai_1.default({ apiKey, baseURL: base_url });
16
+ if (model) {
17
+ this.model = model;
18
+ }
19
+ }
20
+ setModel(model) {
21
+ this.model = model;
22
+ return this;
23
+ }
24
+ addKnowledge(k) {
25
+ this.knowledges.push(k);
26
+ this.history.push({
27
+ role: "user",
28
+ content: [
29
+ `### Knowledge #${this.knowledges.length}`,
30
+ k
31
+ ].join('\n'),
32
+ });
33
+ }
34
+ addInformation(k) {
35
+ this.history.push({
36
+ role: "user",
37
+ content: k,
38
+ });
39
+ }
40
+ async askLLM(q, type) {
41
+ this.history.push({
42
+ role: "user",
43
+ content: q,
44
+ });
45
+ try {
46
+ if (!type) {
47
+ const response = await this.client.responses.create({
48
+ model: this.model,
49
+ input: this.history
50
+ });
51
+ this.history.push({
52
+ role: 'assistant',
53
+ content: response.output_text
54
+ });
55
+ return response.output_text;
56
+ }
57
+ const response = await this.client.chat.completions.parse({
58
+ model: this.model,
59
+ messages: this.history,
60
+ response_format: (0, zod_1.zodResponseFormat)(type, "user"),
61
+ });
62
+ const result = response.choices[0]?.message.parsed;
63
+ if (result) {
64
+ this.history.push({
65
+ role: 'assistant',
66
+ content: JSON.stringify(response.choices[0]?.message.parsed)
67
+ });
68
+ return result;
69
+ }
70
+ throw new Error('Something went wrong.');
71
+ }
72
+ catch (err) {
73
+ console.log(err);
74
+ throw err;
75
+ }
76
+ }
77
+ async streamLLM(q, onOutput, afterStreamStart) {
78
+ this.history.push({
79
+ role: "user",
80
+ content: q,
81
+ });
82
+ try {
83
+ const stream = await this.client.responses.create({
84
+ model: this.model,
85
+ input: this.history,
86
+ stream: true
87
+ });
88
+ afterStreamStart?.();
89
+ let result = '';
90
+ for await (const s of stream) {
91
+ if (s.type === 'response.output_text.delta') {
92
+ result = '' + result + s.delta;
93
+ onOutput(s.delta);
94
+ }
95
+ }
96
+ this.history.push({
97
+ role: 'assistant',
98
+ content: result
99
+ });
100
+ }
101
+ catch (err) {
102
+ console.log(err);
103
+ throw err;
104
+ }
105
+ }
106
+ cleanUp() {
107
+ this.history = [];
108
+ this.knowledges = [];
109
+ }
110
+ }
111
+ exports.LLM = LLM;
112
+ //# sourceMappingURL=llm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.js","sourceRoot":"","sources":["../llm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AgentTool } from "./tools";
2
+ export type AgentType = (at: AgentTool) => Promise<void>;
3
+ export interface AgentServerConfig {
4
+ port?: number;
5
+ llm_apikey: string;
6
+ llm_base_url?: string;
7
+ llm_model?: string;
8
+ }
9
+ export declare function startAgentServer(agent: AgentType, config: AgentServerConfig): Promise<void>;
10
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,MAAM,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AACzD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AACD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,iBAsCjF"}
package/dist/server.js ADDED
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startAgentServer = startAgentServer;
7
+ const llm_1 = require("./llm");
8
+ const express_1 = __importDefault(require("express"));
9
+ const tools_1 = require("./tools");
10
+ const uuid_1 = require("uuid");
11
+ async function startAgentServer(agent, config) {
12
+ const agents = {};
13
+ const app = (0, express_1.default)();
14
+ app.use(express_1.default.json());
15
+ app.get('/start', async (req, res) => {
16
+ const llm = new llm_1.LLM(config.llm_apikey, config.llm_base_url, config.llm_model);
17
+ const new_agent = new tools_1.AgentTool(llm, 'managed');
18
+ const id = (0, uuid_1.v4)();
19
+ agents[id] = new_agent;
20
+ res.header('conversation-id', id);
21
+ new_agent.setOutput((result, finish) => {
22
+ res.write(result);
23
+ if (finish) {
24
+ res.end();
25
+ return;
26
+ }
27
+ });
28
+ setImmediate(() => agent(new_agent).catch(console.error));
29
+ });
30
+ app.post('/conversation/:id', (req, res) => {
31
+ const id = req.params.id;
32
+ if (!id || !agents[id]) {
33
+ res.status(404).send('No agents found');
34
+ return;
35
+ }
36
+ agents[id].setOutput((result, finish) => {
37
+ res.write(result);
38
+ if (finish) {
39
+ res.end();
40
+ return;
41
+ }
42
+ });
43
+ agents[id].setUserMessage(req.body.msg);
44
+ });
45
+ const port = config.port || 9811;
46
+ app.listen(port);
47
+ console.log(`Agents is listening on port ${port}`);
48
+ }
49
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":";;;;;AAYA,4CAsCC;AAlDD,+BAA4B;AAC5B,sDAA8D;AAC9D,mCAAoC;AACpC,+BAA0B;AASnB,KAAK,UAAU,gBAAgB,CAAC,KAAgB,EAAE,MAAyB;IAChF,MAAM,MAAM,GAA+B,EAAE,CAAC;IAE9C,MAAM,GAAG,GAAY,IAAA,iBAAO,GAAE,CAAC;IAC/B,GAAG,CAAC,GAAG,CAAC,iBAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAY,EAAE,GAAa,EAAE,EAAE;QACtD,MAAM,GAAG,GAAG,IAAI,SAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,SAAS,GAAG,IAAI,iBAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,IAAA,SAAE,GAAE,CAAC;QAChB,MAAM,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC;QACvB,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAClC,SAAS,CAAC,SAAS,CAAC,CAAC,MAAc,EAAE,MAAgB,EAAE,EAAE;YACvD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClB,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;QACH,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC,GAAY,EAAE,GAAa,EAAE,EAAE;QAC5D,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAY,CAAC;QACnC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACvB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,MAAc,EAAE,MAAgB,EAAE,EAAE;YACxD,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAClB,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CAAC,GAAG,EAAE,CAAC;gBACV,OAAO;YACT,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;IACjC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,28 @@
1
+ import z from "zod";
2
+ import { LLM, StreamFn } from "./llm";
3
+ export type IOMode = 'cli' | 'managed';
4
+ export type StdoutFn = (out: string, finish?: boolean) => void;
5
+ export declare class TerminationError extends Error {
6
+ }
7
+ export declare class AgentTool {
8
+ io_mode: 'cli' | 'managed';
9
+ session_id: string;
10
+ termination_keywords: string[];
11
+ private user_message;
12
+ private stdout;
13
+ llm: LLM;
14
+ constructor(llm: LLM, mode?: IOMode);
15
+ setUserMessage(msg: string): void;
16
+ setOutput(stdout: StdoutFn): void;
17
+ print(q: string, finish?: boolean): void;
18
+ waitForUserInstruction(): Promise<string>;
19
+ askUser(q: string): Promise<string>;
20
+ askLLM<T = string>(q: string, type?: z.ZodTypeAny<T>): Promise<T>;
21
+ validateLLMWithFeedback(q: string, feedback: () => Promise<string>, max_tries?: number): Promise<void>;
22
+ streamLLM(q: string, onOutput: StreamFn): Promise<void>;
23
+ prepareKnowledge(knowledge: string): Promise<void>;
24
+ addInformation(info: string): Promise<void>;
25
+ startLoading(): NodeJS.Timeout;
26
+ removeLoading(l: NodeJS.Timeout): void;
27
+ }
28
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../tools.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAItC,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;AACvC,MAAM,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;AAC/D,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,qBAAa,SAAS;IACb,OAAO,EAAE,KAAK,GAAG,SAAS,CAAS;IACnC,UAAU,SAAQ;IAClB,oBAAoB,EAAE,MAAM,EAAE,CAAM;IAC3C,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,MAAM,CAAuB;IAC9B,GAAG,EAAE,GAAG,CAAC;gBAEJ,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM;IAM5B,cAAc,CAAC,GAAG,EAAE,MAAM;IAI1B,SAAS,CAAC,MAAM,EAAE,QAAQ;IAIjC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;IAa3B,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAuBzC,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBnC,MAAM,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAwBjE,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,GAAE,MAAW;IAS1F,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;IAKvC,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAIlC,cAAc,CAAC,IAAI,EAAE,MAAM;IAIjC,YAAY,IAAI,MAAM,CAAC,OAAO;IAQ9B,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO;CAKhC"}
package/dist/tools.js ADDED
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AgentTool = exports.TerminationError = void 0;
7
+ const enquirer_1 = require("enquirer");
8
+ const zod_1 = __importDefault(require("zod"));
9
+ const promises_1 = require("timers/promises");
10
+ const uuid_1 = require("uuid");
11
+ class TerminationError extends Error {
12
+ }
13
+ exports.TerminationError = TerminationError;
14
+ ;
15
+ class AgentTool {
16
+ io_mode = 'cli';
17
+ session_id = (0, uuid_1.v4)();
18
+ termination_keywords = [];
19
+ user_message = '';
20
+ stdout;
21
+ llm;
22
+ constructor(llm, mode) {
23
+ this.llm = llm;
24
+ this.io_mode = mode ?? this.io_mode;
25
+ console.log(`Start session id = ${this.session_id} with mode = ${this.io_mode}`);
26
+ }
27
+ setUserMessage(msg) {
28
+ this.user_message = msg;
29
+ }
30
+ setOutput(stdout) {
31
+ this.stdout = stdout;
32
+ }
33
+ print(q, finish) {
34
+ const updated_q = '' + q + (finish ? '\n' : '');
35
+ if (this.io_mode == 'cli') {
36
+ process.stdout.write(updated_q);
37
+ }
38
+ else {
39
+ if (this.stdout) {
40
+ this.stdout(updated_q, finish);
41
+ return;
42
+ }
43
+ throw new Error(`Agent with mode = managed must provides stdout function.`);
44
+ }
45
+ }
46
+ async waitForUserInstruction() {
47
+ if (this.io_mode === 'cli') {
48
+ const answers = await (0, enquirer_1.prompt)([{
49
+ type: "input",
50
+ name: "prompt",
51
+ message: '',
52
+ }]);
53
+ return answers.prompt;
54
+ }
55
+ else {
56
+ try {
57
+ while (!this.user_message) {
58
+ await (0, promises_1.setTimeout)(1000);
59
+ }
60
+ if (this.termination_keywords.includes(this.user_message)) {
61
+ throw new TerminationError();
62
+ }
63
+ return this.user_message;
64
+ }
65
+ finally {
66
+ this.user_message = '';
67
+ }
68
+ }
69
+ }
70
+ async askUser(q) {
71
+ if (this.io_mode === 'cli') {
72
+ const answers = await (0, enquirer_1.prompt)([{
73
+ type: "input",
74
+ name: "prompt",
75
+ message: q,
76
+ }]);
77
+ return answers.prompt;
78
+ }
79
+ else {
80
+ try {
81
+ this.print(q, true);
82
+ while (!this.user_message) {
83
+ await (0, promises_1.setTimeout)(1000);
84
+ }
85
+ if (this.termination_keywords.includes(this.user_message)) {
86
+ throw new TerminationError();
87
+ }
88
+ return this.user_message;
89
+ }
90
+ finally {
91
+ this.user_message = '';
92
+ }
93
+ }
94
+ }
95
+ async askLLM(q, type) {
96
+ const l = this.startLoading();
97
+ try {
98
+ if (!type) {
99
+ return await this.llm.askLLM(q);
100
+ }
101
+ const res = await this.llm.askLLM(q, zod_1.default.object({
102
+ answer: type
103
+ }));
104
+ try {
105
+ const result = await zod_1.default.parse(type, res.answer);
106
+ return result;
107
+ }
108
+ catch (error) {
109
+ if (error instanceof zod_1.default.ZodError) {
110
+ this.removeLoading(l);
111
+ return await this.askLLM(`There is an error on your response: ${error.message}, please fix and return correct answer`, type);
112
+ }
113
+ throw new Error(`something when wrong ${error?.toString()}`);
114
+ }
115
+ }
116
+ finally {
117
+ this.removeLoading(l);
118
+ }
119
+ }
120
+ async validateLLMWithFeedback(q, feedback, max_tries = 10) {
121
+ let i = 0;
122
+ while ((!await this.askLLM(q, zod_1.default.boolean())) && i < max_tries) {
123
+ i++;
124
+ const missing_information = await this.askUser(await feedback());
125
+ await this.askLLM(missing_information);
126
+ }
127
+ }
128
+ async streamLLM(q, onOutput) {
129
+ const l = this.startLoading();
130
+ await this.llm.streamLLM(q, onOutput, () => this.removeLoading(l));
131
+ }
132
+ async prepareKnowledge(knowledge) {
133
+ this.llm.addKnowledge(knowledge);
134
+ }
135
+ async addInformation(info) {
136
+ this.llm.addInformation(info);
137
+ }
138
+ startLoading() {
139
+ const spinner = ['|', '/', '-', '\\'];
140
+ let i = 0;
141
+ return setInterval(() => {
142
+ process.stdout.write('\rTalking to AI ' + spinner[i++ % spinner.length]);
143
+ }, 100);
144
+ }
145
+ removeLoading(l) {
146
+ clearInterval(l);
147
+ process.stdout.clearLine(0);
148
+ process.stdout.cursorTo(0);
149
+ }
150
+ }
151
+ exports.AgentTool = AgentTool;
152
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@ssww.one/framework",
3
+ "version": "0.0.1",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "scripts": {
10
+ "build": "rm -rf dist && tsc"
11
+ },
12
+ "files": [
13
+ "dist",
14
+ "package.json"
15
+ ],
16
+
17
+ "keywords": [],
18
+ "author": "",
19
+ "license": "ISC",
20
+ "devDependencies": {
21
+ "@types/express": "^5.0.6",
22
+ "@types/node": "^25.4.0",
23
+ "@types/uuid": "^10.0.0",
24
+ "typescript": "^5.9.3"
25
+ },
26
+ "dependencies": {
27
+ "enquirer": "^2.4.1",
28
+ "express": "^5.2.1",
29
+ "openai": "^6.27.0",
30
+ "typeorm": "^0.3.28",
31
+ "uuid": "^13.0.0",
32
+ "zod": "^4.3.6"
33
+ }
34
+ }