psadk 1.4.1 → 1.4.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.
Files changed (111) hide show
  1. package/build/main/index.d.ts +1 -0
  2. package/build/main/index.js +2 -1
  3. package/build/main/lib/PSAI.d.ts +11 -2
  4. package/build/main/lib/PSAI.js +145 -28
  5. package/build/main/lib/agent-core/agent-loop.d.ts +2 -2
  6. package/build/main/lib/agent-core/agent-loop.js +69 -65
  7. package/build/main/lib/agent-core/agent.d.ts +8 -8
  8. package/build/main/lib/agent-core/agent.js +61 -44
  9. package/build/main/lib/agent-core/harness/agent-harness.d.ts +4 -4
  10. package/build/main/lib/agent-core/harness/agent-harness.js +156 -112
  11. package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +5 -5
  12. package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +31 -28
  13. package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +5 -5
  14. package/build/main/lib/agent-core/harness/compaction/compaction.js +99 -78
  15. package/build/main/lib/agent-core/harness/compaction/utils.d.ts +2 -2
  16. package/build/main/lib/agent-core/harness/compaction/utils.js +30 -30
  17. package/build/main/lib/agent-core/harness/env/nodejs.d.ts +1 -1
  18. package/build/main/lib/agent-core/harness/env/nodejs.js +80 -75
  19. package/build/main/lib/agent-core/harness/execution-env.d.ts +3 -3
  20. package/build/main/lib/agent-core/harness/execution-env.js +3 -3
  21. package/build/main/lib/agent-core/harness/messages.d.ts +7 -7
  22. package/build/main/lib/agent-core/harness/messages.js +36 -22
  23. package/build/main/lib/agent-core/harness/prompt-templates.d.ts +2 -2
  24. package/build/main/lib/agent-core/harness/prompt-templates.js +31 -27
  25. package/build/main/lib/agent-core/harness/session/repo/jsonl.d.ts +2 -2
  26. package/build/main/lib/agent-core/harness/session/repo/jsonl.js +17 -11
  27. package/build/main/lib/agent-core/harness/session/repo/memory.d.ts +2 -2
  28. package/build/main/lib/agent-core/harness/session/repo/memory.js +8 -4
  29. package/build/main/lib/agent-core/harness/session/repo/shared.d.ts +3 -3
  30. package/build/main/lib/agent-core/harness/session/repo/shared.js +5 -5
  31. package/build/main/lib/agent-core/harness/session/session.d.ts +3 -3
  32. package/build/main/lib/agent-core/harness/session/session.js +26 -23
  33. package/build/main/lib/agent-core/harness/session/storage/jsonl.d.ts +2 -2
  34. package/build/main/lib/agent-core/harness/session/storage/jsonl.js +11 -11
  35. package/build/main/lib/agent-core/harness/session/storage/memory.d.ts +2 -2
  36. package/build/main/lib/agent-core/harness/session/storage/memory.js +10 -6
  37. package/build/main/lib/agent-core/harness/skills.d.ts +2 -2
  38. package/build/main/lib/agent-core/harness/skills.js +55 -48
  39. package/build/main/lib/agent-core/harness/system-prompt.d.ts +1 -1
  40. package/build/main/lib/agent-core/harness/system-prompt.js +16 -16
  41. package/build/main/lib/agent-core/harness/types.d.ts +43 -43
  42. package/build/main/lib/agent-core/harness/types.js +2 -2
  43. package/build/main/lib/agent-core/harness/utils/shell-output.d.ts +2 -2
  44. package/build/main/lib/agent-core/harness/utils/shell-output.js +18 -14
  45. package/build/main/lib/agent-core/harness/utils/truncate.d.ts +1 -1
  46. package/build/main/lib/agent-core/harness/utils/truncate.js +27 -24
  47. package/build/main/lib/agent-core/index.d.ts +19 -19
  48. package/build/main/lib/agent-core/index.js +20 -20
  49. package/build/main/lib/agent-core/proxy.d.ts +18 -18
  50. package/build/main/lib/agent-core/proxy.js +77 -61
  51. package/build/main/lib/agent-core/types.d.ts +16 -16
  52. package/build/main/lib/tools/PSRetrievalTool.d.ts +127 -0
  53. package/build/main/lib/tools/PSRetrievalTool.js +172 -0
  54. package/build/main/lib/utils/helpers.d.ts +34 -0
  55. package/build/main/lib/utils/helpers.js +280 -1
  56. package/build/module/index.d.ts +1 -0
  57. package/build/module/index.js +2 -1
  58. package/build/module/lib/PSAI.d.ts +11 -2
  59. package/build/module/lib/PSAI.js +145 -28
  60. package/build/module/lib/agent-core/agent-loop.d.ts +2 -2
  61. package/build/module/lib/agent-core/agent-loop.js +69 -65
  62. package/build/module/lib/agent-core/agent.d.ts +8 -8
  63. package/build/module/lib/agent-core/agent.js +61 -44
  64. package/build/module/lib/agent-core/harness/agent-harness.d.ts +4 -4
  65. package/build/module/lib/agent-core/harness/agent-harness.js +156 -112
  66. package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +5 -5
  67. package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +31 -28
  68. package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +5 -5
  69. package/build/module/lib/agent-core/harness/compaction/compaction.js +99 -78
  70. package/build/module/lib/agent-core/harness/compaction/utils.d.ts +2 -2
  71. package/build/module/lib/agent-core/harness/compaction/utils.js +30 -30
  72. package/build/module/lib/agent-core/harness/env/nodejs.d.ts +1 -1
  73. package/build/module/lib/agent-core/harness/env/nodejs.js +80 -75
  74. package/build/module/lib/agent-core/harness/execution-env.d.ts +3 -3
  75. package/build/module/lib/agent-core/harness/execution-env.js +3 -3
  76. package/build/module/lib/agent-core/harness/messages.d.ts +7 -7
  77. package/build/module/lib/agent-core/harness/messages.js +36 -22
  78. package/build/module/lib/agent-core/harness/prompt-templates.d.ts +2 -2
  79. package/build/module/lib/agent-core/harness/prompt-templates.js +31 -27
  80. package/build/module/lib/agent-core/harness/session/repo/jsonl.d.ts +2 -2
  81. package/build/module/lib/agent-core/harness/session/repo/jsonl.js +17 -11
  82. package/build/module/lib/agent-core/harness/session/repo/memory.d.ts +2 -2
  83. package/build/module/lib/agent-core/harness/session/repo/memory.js +8 -4
  84. package/build/module/lib/agent-core/harness/session/repo/shared.d.ts +3 -3
  85. package/build/module/lib/agent-core/harness/session/repo/shared.js +5 -5
  86. package/build/module/lib/agent-core/harness/session/session.d.ts +3 -3
  87. package/build/module/lib/agent-core/harness/session/session.js +26 -23
  88. package/build/module/lib/agent-core/harness/session/storage/jsonl.d.ts +2 -2
  89. package/build/module/lib/agent-core/harness/session/storage/jsonl.js +11 -11
  90. package/build/module/lib/agent-core/harness/session/storage/memory.d.ts +2 -2
  91. package/build/module/lib/agent-core/harness/session/storage/memory.js +10 -6
  92. package/build/module/lib/agent-core/harness/skills.d.ts +2 -2
  93. package/build/module/lib/agent-core/harness/skills.js +55 -48
  94. package/build/module/lib/agent-core/harness/system-prompt.d.ts +1 -1
  95. package/build/module/lib/agent-core/harness/system-prompt.js +16 -16
  96. package/build/module/lib/agent-core/harness/types.d.ts +43 -43
  97. package/build/module/lib/agent-core/harness/types.js +2 -2
  98. package/build/module/lib/agent-core/harness/utils/shell-output.d.ts +2 -2
  99. package/build/module/lib/agent-core/harness/utils/shell-output.js +18 -14
  100. package/build/module/lib/agent-core/harness/utils/truncate.d.ts +1 -1
  101. package/build/module/lib/agent-core/harness/utils/truncate.js +27 -24
  102. package/build/module/lib/agent-core/index.d.ts +19 -19
  103. package/build/module/lib/agent-core/index.js +20 -20
  104. package/build/module/lib/agent-core/proxy.d.ts +18 -18
  105. package/build/module/lib/agent-core/proxy.js +77 -61
  106. package/build/module/lib/agent-core/types.d.ts +16 -16
  107. package/build/module/lib/tools/PSRetrievalTool.d.ts +127 -0
  108. package/build/module/lib/tools/PSRetrievalTool.js +172 -0
  109. package/build/module/lib/utils/helpers.d.ts +34 -0
  110. package/build/module/lib/utils/helpers.js +280 -1
  111. package/package.json +1 -1
@@ -0,0 +1,172 @@
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.PSRetrievalTool = void 0;
7
+ /* eslint-disable @typescript-eslint/no-explicit-any */
8
+ const v4_1 = require("zod/v4");
9
+ const PSAgentTool_1 = require("../PSAgentTool");
10
+ const debuglogger_1 = __importDefault(require("../utils/debuglogger"));
11
+ const dlog = (0, debuglogger_1.default)('PSAI:RetrievalTool:');
12
+ // ---------------------------------------------------------------------------
13
+ // Default result formatter
14
+ // ---------------------------------------------------------------------------
15
+ function defaultFormatResult(entity, similarity, index) {
16
+ const pct = (Math.max(0, Math.min(1, similarity)) * 100).toFixed(1);
17
+ return [
18
+ `## Result ${index + 1} (Similarity: ${pct}%)`,
19
+ '**Content:**',
20
+ '```',
21
+ entity.content.trim(),
22
+ '```',
23
+ '',
24
+ ].join('\n');
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Tool implementation
28
+ // ---------------------------------------------------------------------------
29
+ /**
30
+ * PSRetrievalTool — A tool for semantic similarity search over embedded
31
+ * documents.
32
+ *
33
+ * The tool is storage-agnostic: consumers provide an {@link IEmbeddingRepository}
34
+ * implementation for their own database/vector store, and an
35
+ * {@link IEmbeddingProvider} for embedding queries.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * // Basic usage (PSAI implements IEmbeddingProvider)
40
+ * const tool = new PSRetrievalTool({
41
+ * repository: myEmbeddingRepo,
42
+ * embeddingProvider: psai,
43
+ * });
44
+ * ```
45
+ *
46
+ * @example
47
+ * ```ts
48
+ * // Multiple retrieval tools with custom names
49
+ * const docsTool = new PSRetrievalTool({
50
+ * repository: docsRepo,
51
+ * embeddingProvider: psai,
52
+ * name: 'search_docs',
53
+ * description: 'Search the documentation knowledge base.',
54
+ * });
55
+ *
56
+ * const ticketsTool = new PSRetrievalTool({
57
+ * repository: ticketsRepo,
58
+ * embeddingProvider: psai,
59
+ * name: 'search_tickets',
60
+ * description: 'Search past support tickets.',
61
+ * });
62
+ * ```
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * // Custom result formatting
67
+ * const tool = new PSRetrievalTool({
68
+ * repository: myRepo,
69
+ * embeddingProvider: psai,
70
+ * formatResult: (entity, similarity, index) => {
71
+ * const meta = (entity as any).metadata || {};
72
+ * return `**${index + 1}.** [${(similarity * 100).toFixed(0)}%] ${meta.title ?? 'Untitled'}\n${entity.content}\n`;
73
+ * },
74
+ * });
75
+ * ```
76
+ */
77
+ class PSRetrievalTool extends PSAgentTool_1.PSAgentTool {
78
+ static toolName = 'search_knowledge_base';
79
+ repository;
80
+ embeddingProvider;
81
+ topK;
82
+ formatResult;
83
+ constructor(options) {
84
+ const toolName = options.name || PSRetrievalTool.toolName;
85
+ const toolDescription = options.description ||
86
+ 'Search for information in the knowledge base using semantic search. ' +
87
+ 'Use this tool whenever you need to find specific information, answer ' +
88
+ 'questions based on documented knowledge, look up facts, retrieve ' +
89
+ 'context about topics, or search through any uploaded documents. ' +
90
+ 'This tool searches through all available source documents and returns ' +
91
+ 'the most relevant text chunks based on meaning similarity, not just ' +
92
+ 'keyword matching.';
93
+ super({
94
+ name: toolName,
95
+ description: toolDescription,
96
+ type: 'API',
97
+ local_execution: true,
98
+ hitl: true,
99
+ inputschema: {
100
+ url: `http://localhost/${toolName}`,
101
+ method: 'POST',
102
+ requestBody: v4_1.z.toJSONSchema(v4_1.z
103
+ .object({
104
+ query: v4_1.z.string().meta({
105
+ title: 'query',
106
+ description: 'The search query — can be a question, topic, concept, or ' +
107
+ 'any text describing what information you need. The search ' +
108
+ 'uses semantic similarity, so the query should be descriptive.',
109
+ }),
110
+ top_k: v4_1.z.number().min(1).max(20).optional().meta({
111
+ title: 'top_k',
112
+ description: 'Number of most relevant results to return (default: 5, max: 20).',
113
+ }),
114
+ })
115
+ .meta({
116
+ title: `${toolName}_request_body`,
117
+ description: `Parameters for searching the knowledge base.`,
118
+ }), { io: 'input' }),
119
+ },
120
+ });
121
+ this.repository = options.repository;
122
+ this.embeddingProvider = options.embeddingProvider;
123
+ this.topK = options.topK || 5;
124
+ this.formatResult = options.formatResult || defaultFormatResult;
125
+ }
126
+ async run(input, log) {
127
+ if (!input?.query || typeof input.query !== 'string') {
128
+ throw new Error('Invalid query provided. Please check the input schema, ' +
129
+ 'ensure inputs are wrapped in requestBody, and try again.');
130
+ }
131
+ const logger = log || dlog;
132
+ try {
133
+ const query = input.query;
134
+ const rawTopK = input.top_k ?? this.topK;
135
+ const k = Math.min(Math.max(1, typeof rawTopK === 'number' ? rawTopK : Number(rawTopK) || this.topK), 20);
136
+ logger.info(`Searching for: "${query}" (top ${k} results)`);
137
+ // 1. Embed the query
138
+ const queryEmbedding = await this.embeddingProvider.embedQuery(query);
139
+ // 2. Similarity search via the repository
140
+ const results = await this.repository.findSimilar(queryEmbedding, k);
141
+ logger.info(`Found ${results.length} relevant results`);
142
+ if (results.length === 0) {
143
+ return {
144
+ status: 'success',
145
+ result: 'No relevant information found in the source documents.',
146
+ };
147
+ }
148
+ // 3. Format results
149
+ const formattedResults = results
150
+ .map((r, index) => this.formatResult(r.entity, r.similarity, index))
151
+ .join('\n');
152
+ return {
153
+ status: 'success',
154
+ result: [
155
+ `Found ${results.length} relevant chunks for query: "${query}"`,
156
+ '',
157
+ formattedResults,
158
+ ].join('\n'),
159
+ };
160
+ }
161
+ catch (error) {
162
+ const errorMessage = error instanceof Error ? error.message : String(error);
163
+ logger.error(`Retrieval search failed: ${errorMessage}`);
164
+ return {
165
+ status: 'error',
166
+ error: `Failed to search knowledge base: ${errorMessage}`,
167
+ };
168
+ }
169
+ }
170
+ }
171
+ exports.PSRetrievalTool = PSRetrievalTool;
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFNSZXRyaWV2YWxUb29sLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi90b29scy9QU1JldHJpZXZhbFRvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsdURBQXVEO0FBQ3ZELCtCQUEyQjtBQUczQixnREFBNkM7QUFDN0MsdUVBQStDO0FBRS9DLE1BQU0sSUFBSSxHQUFHLElBQUEscUJBQVcsRUFBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBb0ZoRCw4RUFBOEU7QUFDOUUsMkJBQTJCO0FBQzNCLDhFQUE4RTtBQUU5RSxTQUFTLG1CQUFtQixDQUMxQixNQUFTLEVBQ1QsVUFBa0IsRUFDbEIsS0FBYTtJQUViLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEUsT0FBTztRQUNMLGFBQWEsS0FBSyxHQUFHLENBQUMsaUJBQWlCLEdBQUcsSUFBSTtRQUM5QyxjQUFjO1FBQ2QsS0FBSztRQUNMLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO1FBQ3JCLEtBQUs7UUFDTCxFQUFFO0tBQ0gsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDZixDQUFDO0FBRUQsOEVBQThFO0FBQzlFLHNCQUFzQjtBQUN0Qiw4RUFBOEU7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NHO0FBQ0gsTUFBYSxlQUVYLFNBQVEseUJBQVc7SUFDWixNQUFNLENBQVUsUUFBUSxHQUFHLHVCQUF1QixDQUFDO0lBQ2xELFVBQVUsQ0FBMEI7SUFDcEMsaUJBQWlCLENBQXFCO0lBQ3RDLElBQUksQ0FBUztJQUNiLFlBQVksQ0FJUjtJQUVaLFlBQVksT0FBa0M7UUFDNUMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDO1FBQzFELE1BQU0sZUFBZSxHQUNuQixPQUFPLENBQUMsV0FBVztZQUNuQixzRUFBc0U7Z0JBQ3BFLHVFQUF1RTtnQkFDdkUsbUVBQW1FO2dCQUNuRSxrRUFBa0U7Z0JBQ2xFLHdFQUF3RTtnQkFDeEUsc0VBQXNFO2dCQUN0RSxtQkFBbUIsQ0FBQztRQUV4QixLQUFLLENBQUM7WUFDSixJQUFJLEVBQUUsUUFBUTtZQUNkLFdBQVcsRUFBRSxlQUFlO1lBQzVCLElBQUksRUFBRSxLQUFLO1lBQ1gsZUFBZSxFQUFFLElBQUk7WUFDckIsSUFBSSxFQUFFLElBQUk7WUFDVixXQUFXLEVBQUU7Z0JBQ1gsR0FBRyxFQUFFLG9CQUFvQixRQUFRLEVBQUU7Z0JBQ25DLE1BQU0sRUFBRSxNQUFNO2dCQUNkLFdBQVcsRUFBRSxNQUFDLENBQUMsWUFBWSxDQUN6QixNQUFDO3FCQUNFLE1BQU0sQ0FBQztvQkFDTixLQUFLLEVBQUUsTUFBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDckIsS0FBSyxFQUFFLE9BQU87d0JBQ2QsV0FBVyxFQUNULDJEQUEyRDs0QkFDM0QsNERBQTREOzRCQUM1RCwrREFBK0Q7cUJBQ2xFLENBQUM7b0JBQ0YsS0FBSyxFQUFFLE1BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQzt3QkFDL0MsS0FBSyxFQUFFLE9BQU87d0JBQ2QsV0FBVyxFQUNULGtFQUFrRTtxQkFDckUsQ0FBQztpQkFDSCxDQUFDO3FCQUNELElBQUksQ0FBQztvQkFDSixLQUFLLEVBQUUsR0FBRyxRQUFRLGVBQWU7b0JBQ2pDLFdBQVcsRUFBRSw4Q0FBOEM7aUJBQzVELENBQUMsRUFDSixFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsQ0FDaEI7YUFDRjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ25ELElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLG1CQUFtQixDQUFDO0lBQ2xFLENBQUM7SUFFTSxLQUFLLENBQUMsR0FBRyxDQUNkLEtBQTBCLEVBQzFCLEdBQW1CO1FBRW5CLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUNiLHlEQUF5RDtnQkFDdkQsMERBQTBELENBQzdELENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQztRQUUzQixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBVyxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztZQUN6QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNoQixJQUFJLENBQUMsR0FBRyxDQUNOLENBQUMsRUFDRCxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQ3JFLEVBQ0QsRUFBRSxDQUNILENBQUM7WUFFRixNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixLQUFLLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUU1RCxxQkFBcUI7WUFDckIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXRFLDBDQUEwQztZQUMxQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUVyRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsT0FBTyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsQ0FBQztZQUV4RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU87b0JBQ0wsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLE1BQU0sRUFBRSx3REFBd0Q7aUJBQ2pFLENBQUM7WUFDSixDQUFDO1lBRUQsb0JBQW9CO1lBQ3BCLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTztpQkFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7aUJBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVkLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLE1BQU0sRUFBRTtvQkFDTixTQUFTLE9BQU8sQ0FBQyxNQUFNLGdDQUFnQyxLQUFLLEdBQUc7b0JBQy9ELEVBQUU7b0JBQ0YsZ0JBQWdCO2lCQUNqQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDYixDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLFlBQVksR0FDaEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDekQsT0FBTztnQkFDTCxNQUFNLEVBQUUsT0FBTztnQkFDZixLQUFLLEVBQUUsb0NBQW9DLFlBQVksRUFBRTthQUMxRCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7O0FBaElILDBDQWlJQyJ9
@@ -1,3 +1,36 @@
1
+ /**
2
+ * Parse an SSE ReadableStream from the /responses endpoint and re-emit it as
3
+ * an SSE ReadableStream whose chunks are in Chat Completions format.
4
+ *
5
+ * The output format is identical to what /chat/completions?stream=true
6
+ * produces: lines of `data: {...}\n\n` terminated by `data: [DONE]\n\n`.
7
+ */
8
+ interface ChatCompletion {
9
+ id: string;
10
+ object: 'chat.completion';
11
+ created: number;
12
+ model: string;
13
+ choices: Array<{
14
+ index: number;
15
+ message: {
16
+ role: string;
17
+ content: string | null;
18
+ refusal: null;
19
+ };
20
+ finish_reason: string;
21
+ }>;
22
+ usage: {
23
+ prompt_tokens: number;
24
+ completion_tokens: number;
25
+ total_tokens: number;
26
+ };
27
+ }
28
+ /**
29
+ * Convert a /responses API response object into a /chat/completions response
30
+ * object so callers can handle both with identical code.
31
+ */
32
+ export declare function convertResponseToChatCompletion(response: any): ChatCompletion;
33
+ export declare function convertResponsesStreamToChatStream(responseStream: ReadableStream<Uint8Array>, model: string): ReadableStream<Uint8Array>;
1
34
  export declare function sleep(ms: number): Promise<unknown>;
2
35
  export declare function formatFileSize(bytes: number, decimalPoint?: number): string;
3
36
  export declare function truncateString(str: string, num: number): string;
@@ -11,3 +44,4 @@ export declare function unEscapeHTML(text: string): string;
11
44
  * @returns A new schema object without the $schema property
12
45
  */
13
46
  export declare function removeSchemaMetadata(schema: any): any;
47
+ export {};
@@ -1,10 +1,289 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.convertResponseToChatCompletion = convertResponseToChatCompletion;
4
+ exports.convertResponsesStreamToChatStream = convertResponsesStreamToChatStream;
3
5
  exports.sleep = sleep;
4
6
  exports.formatFileSize = formatFileSize;
5
7
  exports.truncateString = truncateString;
6
8
  exports.unEscapeHTML = unEscapeHTML;
7
9
  exports.removeSchemaMetadata = removeSchemaMetadata;
10
+ const uuid_1 = require("uuid");
11
+ /**
12
+ * Stateful converter: call `convertEvent(event)` for each parsed SSE event
13
+ * object from the /responses stream and receive zero-or-more
14
+ * ChatCompletionChunk objects back.
15
+ */
16
+ class ResponseToChatStreamConverter {
17
+ responseId = '';
18
+ model;
19
+ created;
20
+ toolCallIndex = 0;
21
+ toolCallsMap = new Map();
22
+ hasEmittedRole = false;
23
+ hasEmittedReasoningRole = false;
24
+ constructor(model = 'gpt-4o') {
25
+ this.model = model;
26
+ this.created = Math.floor(Date.now() / 1000);
27
+ }
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ convertEvent(event) {
30
+ // Capture response id from lifecycle events
31
+ if ((event?.type === 'response.created' ||
32
+ event?.type === 'response.in_progress' ||
33
+ event?.type === 'response.completed') &&
34
+ event?.response?.id) {
35
+ this.responseId = event.response.id;
36
+ }
37
+ // Text delta
38
+ if (event?.type === 'response.output_text.delta' &&
39
+ typeof event?.delta === 'string') {
40
+ if (!this.hasEmittedRole) {
41
+ this.hasEmittedRole = true;
42
+ return [this.roleChunk(), this.textChunk(event.delta)];
43
+ }
44
+ return [this.textChunk(event.delta)];
45
+ }
46
+ // Reasoning delta (plain or encrypted)
47
+ const isReasoning = event?.type === 'response.reasoning.delta' ||
48
+ (typeof event?.type === 'string' &&
49
+ event.type.startsWith('response.reasoning'));
50
+ if (isReasoning) {
51
+ const delta = event?.delta || '';
52
+ if (delta) {
53
+ if (!this.hasEmittedReasoningRole) {
54
+ this.hasEmittedReasoningRole = true;
55
+ return [this.reasoningRoleChunk(), this.reasoningChunk(delta)];
56
+ }
57
+ return [this.reasoningChunk(delta)];
58
+ }
59
+ }
60
+ // Tool call start
61
+ if (event?.type === 'response.output_item.added' &&
62
+ event?.item?.type === 'function_call') {
63
+ const item = event.item;
64
+ const toolCallId = item.id || `tool-${(0, uuid_1.v4)()}`;
65
+ const index = this.toolCallIndex++;
66
+ this.toolCallsMap.set(toolCallId, index);
67
+ return [
68
+ this.toolCallStartChunk(toolCallId, item.call_id, item.name, index),
69
+ ];
70
+ }
71
+ // Tool call arguments delta
72
+ if (event?.type === 'response.function_call_arguments.delta') {
73
+ const delta = event.delta || '';
74
+ const itemId = event.item_id || event.call_id;
75
+ const index = this.toolCallsMap.get(itemId);
76
+ if (index !== undefined) {
77
+ return [this.toolCallDeltaChunk(delta, index)];
78
+ }
79
+ }
80
+ // Final chunk with usage
81
+ if (event?.type === 'response.completed' && event?.response?.usage) {
82
+ return this.finalChunks(event.response.usage);
83
+ }
84
+ return [];
85
+ }
86
+ id() {
87
+ return this.responseId || (0, uuid_1.v4)();
88
+ }
89
+ roleChunk() {
90
+ return {
91
+ id: this.id(),
92
+ object: 'chat.completion.chunk',
93
+ created: this.created,
94
+ model: this.model,
95
+ choices: [
96
+ { index: 0, delta: { role: 'assistant', content: '', refusal: null } },
97
+ ],
98
+ };
99
+ }
100
+ textChunk(content) {
101
+ return {
102
+ id: this.id(),
103
+ object: 'chat.completion.chunk',
104
+ created: this.created,
105
+ model: this.model,
106
+ choices: [{ index: 0, delta: { content } }],
107
+ };
108
+ }
109
+ reasoningRoleChunk() {
110
+ return {
111
+ id: this.id(),
112
+ object: 'chat.completion.chunk',
113
+ created: this.created,
114
+ model: this.model,
115
+ choices: [
116
+ { index: 0, delta: { role: 'reasoning', content: '', refusal: null } },
117
+ ],
118
+ };
119
+ }
120
+ reasoningChunk(reasoning) {
121
+ return {
122
+ id: this.id(),
123
+ object: 'chat.completion.chunk',
124
+ created: this.created,
125
+ model: this.model,
126
+ choices: [{ index: 0, delta: { reasoning } }],
127
+ };
128
+ }
129
+ toolCallStartChunk(id, call_id, name, index) {
130
+ return {
131
+ id: this.id(),
132
+ object: 'chat.completion.chunk',
133
+ created: this.created,
134
+ model: this.model,
135
+ choices: [
136
+ {
137
+ index: 0,
138
+ delta: {
139
+ tool_calls: [
140
+ {
141
+ index,
142
+ id,
143
+ call_id,
144
+ type: 'function',
145
+ function: { name, arguments: '' },
146
+ },
147
+ ],
148
+ },
149
+ },
150
+ ],
151
+ };
152
+ }
153
+ toolCallDeltaChunk(arguments_delta, index) {
154
+ return {
155
+ id: this.id(),
156
+ object: 'chat.completion.chunk',
157
+ created: this.created,
158
+ model: this.model,
159
+ choices: [
160
+ {
161
+ index: 0,
162
+ delta: {
163
+ tool_calls: [{ index, function: { arguments: arguments_delta } }],
164
+ },
165
+ },
166
+ ],
167
+ };
168
+ }
169
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
170
+ finalChunks(usage) {
171
+ const stopChunk = {
172
+ id: this.id(),
173
+ object: 'chat.completion.chunk',
174
+ created: this.created,
175
+ model: this.model,
176
+ choices: [{ index: 0, delta: {}, finish_reason: 'stop' }],
177
+ };
178
+ const usageChunk = {
179
+ id: this.id(),
180
+ object: 'chat.completion.chunk',
181
+ created: this.created,
182
+ model: this.model,
183
+ choices: [],
184
+ usage: {
185
+ prompt_tokens: usage.input_tokens,
186
+ completion_tokens: usage.output_tokens,
187
+ total_tokens: usage.total_tokens,
188
+ },
189
+ };
190
+ return [stopChunk, usageChunk];
191
+ }
192
+ }
193
+ /**
194
+ * Convert a /responses API response object into a /chat/completions response
195
+ * object so callers can handle both with identical code.
196
+ */
197
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
198
+ function convertResponseToChatCompletion(response) {
199
+ // Extract the assistant message item from output[]
200
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
201
+ const messageItem = response.output?.find((item) => item.type === 'message');
202
+ // Pull the text out of content[]
203
+ const content = response.output_text ?? '';
204
+ const role = messageItem?.role ?? 'assistant';
205
+ const finishReason = messageItem?.status === 'completed'
206
+ ? 'stop'
207
+ : (messageItem?.status ?? 'stop');
208
+ // Map usage — Responses API uses input_tokens/output_tokens
209
+ const u = response.usage ?? {};
210
+ const promptTokens = u.input_tokens ?? 0;
211
+ const completionTokens = u.output_tokens ?? 0;
212
+ return {
213
+ id: response.id ?? '',
214
+ object: 'chat.completion',
215
+ created: response.created_at ?? Math.floor(Date.now() / 1000),
216
+ model: response.model ?? '',
217
+ choices: [
218
+ {
219
+ index: 0,
220
+ message: {
221
+ role,
222
+ content,
223
+ refusal: null,
224
+ },
225
+ finish_reason: finishReason,
226
+ },
227
+ ],
228
+ usage: {
229
+ prompt_tokens: promptTokens,
230
+ completion_tokens: completionTokens,
231
+ total_tokens: u.total_tokens ?? promptTokens + completionTokens,
232
+ },
233
+ };
234
+ }
235
+ function convertResponsesStreamToChatStream(responseStream, model) {
236
+ const converter = new ResponseToChatStreamConverter(model);
237
+ const encoder = new TextEncoder();
238
+ const decoder = new TextDecoder();
239
+ let buffer = '';
240
+ const { readable, writable } = new TransformStream();
241
+ const writer = writable.getWriter();
242
+ // Drive the upstream reader independently — never block the consumer.
243
+ (async () => {
244
+ const reader = responseStream.getReader();
245
+ try {
246
+ while (true) {
247
+ const { done, value } = await reader.read();
248
+ if (done) {
249
+ await writer.write(encoder.encode('data: [DONE]\n\n'));
250
+ await writer.close();
251
+ return;
252
+ }
253
+ buffer += decoder.decode(value, { stream: true });
254
+ const lines = buffer.split('\n');
255
+ buffer = lines.pop() ?? ''; // keep last incomplete line
256
+ for (const line of lines) {
257
+ const trimmed = line.trim();
258
+ if (!trimmed || trimmed === ':')
259
+ continue; // keepalive / comment
260
+ if (trimmed.startsWith('data: ')) {
261
+ const jsonStr = trimmed.slice(6).trim();
262
+ if (jsonStr === '[DONE]') {
263
+ await writer.write(encoder.encode('data: [DONE]\n\n'));
264
+ await writer.close();
265
+ return;
266
+ }
267
+ try {
268
+ const event = JSON.parse(jsonStr);
269
+ const chunks = converter.convertEvent(event);
270
+ for (const chunk of chunks) {
271
+ await writer.write(encoder.encode(`data: ${JSON.stringify(chunk)}\n\n`));
272
+ }
273
+ }
274
+ catch {
275
+ // unparseable SSE line — skip silently
276
+ }
277
+ }
278
+ }
279
+ }
280
+ }
281
+ catch (err) {
282
+ await writer.abort(err);
283
+ }
284
+ })();
285
+ return readable;
286
+ }
8
287
  async function sleep(ms) {
9
288
  return new Promise((resolve) => setTimeout(resolve, ms));
10
289
  }
@@ -58,4 +337,4 @@ function removeSchemaMetadata(schema) {
58
337
  const { $schema, ...schemaWithoutMetadata } = schema;
59
338
  return schemaWithoutMetadata;
60
339
  }
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNCQUVDO0FBRUQsd0NBT0M7QUFFRCx3Q0FLQztBQUVELG9DQWlCQztBQVdELG9EQVFDO0FBeERNLEtBQUssVUFBVSxLQUFLLENBQUMsRUFBVTtJQUNwQyxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQWdCLGNBQWMsQ0FBQyxLQUFhLEVBQUUsWUFBWSxHQUFHLENBQUM7SUFDNUQsSUFBSSxLQUFLLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2xDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNmLE1BQU0sRUFBRSxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQy9DLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELE9BQU8sVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsU0FBZ0IsY0FBYyxDQUFDLEdBQVcsRUFBRSxHQUFXO0lBQ3JELElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuQyxDQUFDO0FBRUQsU0FBZ0IsWUFBWSxDQUFDLElBQVk7SUFDdkMsTUFBTSxHQUFHLEdBQTJCO1FBQ2xDLE9BQU8sRUFBRSxHQUFHO1FBQ1osTUFBTSxFQUFFLEdBQUc7UUFDWCxNQUFNLEVBQUUsR0FBRztRQUNYLFFBQVEsRUFBRSxHQUFHO1FBQ2IsUUFBUSxFQUFFLEdBQUc7S0FDZCxDQUFDO0lBQ0YsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQ0FBZ0MsRUFBRSxVQUFVLENBQUM7UUFDckUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDSCw2QkFBNkI7SUFDN0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRTtRQUN2RCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqRCxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILDhEQUE4RDtBQUM5RCxTQUFnQixvQkFBb0IsQ0FBQyxNQUFXO0lBQzlDLElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDMUMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcscUJBQXFCLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFDckQsT0FBTyxxQkFBcUIsQ0FBQztBQUMvQixDQUFDIn0=
340
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdXRpbHMvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRSQSwwRUEyQ0M7QUFFRCxnRkE0REM7QUFFRCxzQkFFQztBQUVELHdDQU9DO0FBRUQsd0NBS0M7QUFFRCxvQ0FpQkM7QUFXRCxvREFRQztBQS9iRCwrQkFBb0M7QUFtQ3BDOzs7O0dBSUc7QUFDSCxNQUFNLDZCQUE2QjtJQUN6QixVQUFVLEdBQVcsRUFBRSxDQUFDO0lBQ2YsS0FBSyxDQUFTO0lBQ2QsT0FBTyxDQUFTO0lBQ3pCLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDbEIsWUFBWSxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO0lBQ3pDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsdUJBQXVCLEdBQUcsS0FBSyxDQUFDO0lBRXhDLFlBQVksS0FBSyxHQUFHLFFBQVE7UUFDMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsOERBQThEO0lBQzlELFlBQVksQ0FBQyxLQUFVO1FBQ3JCLDRDQUE0QztRQUM1QyxJQUNFLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxrQkFBa0I7WUFDakMsS0FBSyxFQUFFLElBQUksS0FBSyxzQkFBc0I7WUFDdEMsS0FBSyxFQUFFLElBQUksS0FBSyxvQkFBb0IsQ0FBQztZQUN2QyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFDbkIsQ0FBQztZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEMsQ0FBQztRQUVELGFBQWE7UUFDYixJQUNFLEtBQUssRUFBRSxJQUFJLEtBQUssNEJBQTRCO1lB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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "psadk",
3
3
  "email": "rakesh.ravuri@publicissapient.com",
4
- "version": "1.4.1",
4
+ "version": "1.4.3",
5
5
  "description": "ps adk adapter",
6
6
  "main": "build/main/index.js",
7
7
  "typings": "build/main/index.d.ts",