tjs-lang 0.6.19 → 0.6.26

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/CLAUDE.md +29 -24
  2. package/bin/dev.ts +9 -0
  3. package/demo/docs.json +49 -1
  4. package/demo/src/playground-shared.ts +8 -39
  5. package/demo/src/tjs-playground.ts +8 -0
  6. package/demo/src/tjs-runtime-iframe.ts +10 -0
  7. package/demo/src/ts-playground.ts +8 -0
  8. package/package.json +1 -1
  9. package/src/cli/commands/run.ts +4 -1
  10. package/src/cli/tjs.ts +1 -1
  11. package/src/lang/codegen.test.ts +26 -27
  12. package/src/lang/emitters/dts.test.ts +22 -0
  13. package/src/lang/emitters/dts.ts +5 -1
  14. package/src/lang/emitters/js-tests.ts +13 -19
  15. package/src/lang/emitters/js.ts +39 -7
  16. package/src/lang/parser-transforms.ts +18 -5
  17. package/src/lang/roundtrip.test.ts +1 -1
  18. package/src/lang/runtime.ts +88 -2
  19. package/src/lang/wasm.ts +1 -1
  20. package/dist/bin/benchmarks.d.ts +0 -9
  21. package/dist/bin/dev.d.ts +0 -1
  22. package/dist/bin/docs.d.ts +0 -1
  23. package/dist/bin/select-local-models.d.ts +0 -1
  24. package/dist/examples/modules/dist/main.d.ts +0 -34
  25. package/dist/examples/modules/dist/math.d.ts +0 -120
  26. package/dist/index.js +0 -426
  27. package/dist/index.js.map +0 -45
  28. package/dist/scripts/build-demo.d.ts +0 -2
  29. package/dist/scripts/build.d.ts +0 -11
  30. package/dist/scripts/seed-blog-rules.d.ts +0 -2
  31. package/dist/scripts/seed-stored-function.d.ts +0 -2
  32. package/dist/src/atoms/batteries.d.ts +0 -4
  33. package/dist/src/atoms/browser.d.ts +0 -4
  34. package/dist/src/atoms/index.d.ts +0 -4
  35. package/dist/src/batteries/audit.d.ts +0 -9
  36. package/dist/src/batteries/index.d.ts +0 -28
  37. package/dist/src/batteries/llm.d.ts +0 -18
  38. package/dist/src/batteries/models.d.ts +0 -19
  39. package/dist/src/batteries/store.d.ts +0 -13
  40. package/dist/src/builder.d.ts +0 -127
  41. package/dist/src/bun-plugin/tjs-plugin.d.ts +0 -12
  42. package/dist/src/cli/commands/check.d.ts +0 -4
  43. package/dist/src/cli/commands/convert.d.ts +0 -20
  44. package/dist/src/cli/commands/emit.d.ts +0 -34
  45. package/dist/src/cli/commands/run.d.ts +0 -6
  46. package/dist/src/cli/commands/test.d.ts +0 -21
  47. package/dist/src/cli/commands/types.d.ts +0 -4
  48. package/dist/src/cli/create-app.d.ts +0 -9
  49. package/dist/src/cli/playground.d.ts +0 -9
  50. package/dist/src/cli/tjs.d.ts +0 -15
  51. package/dist/src/cli/tjsx.d.ts +0 -16
  52. package/dist/src/index.d.ts +0 -11
  53. package/dist/src/inference.types.d.ts +0 -1
  54. package/dist/src/lang/core.d.ts +0 -56
  55. package/dist/src/lang/docs.d.ts +0 -69
  56. package/dist/src/lang/emitters/ast.d.ts +0 -24
  57. package/dist/src/lang/emitters/dts.d.ts +0 -48
  58. package/dist/src/lang/emitters/from-ts.d.ts +0 -94
  59. package/dist/src/lang/emitters/js-tests.d.ts +0 -70
  60. package/dist/src/lang/emitters/js-wasm.d.ts +0 -15
  61. package/dist/src/lang/emitters/js.d.ts +0 -175
  62. package/dist/src/lang/eval.d.ts +0 -63
  63. package/dist/src/lang/index.d.ts +0 -216
  64. package/dist/src/lang/inference.d.ts +0 -40
  65. package/dist/src/lang/linter.d.ts +0 -53
  66. package/dist/src/lang/metadata-cache.d.ts +0 -172
  67. package/dist/src/lang/parser-params.d.ts +0 -37
  68. package/dist/src/lang/parser-transforms.d.ts +0 -281
  69. package/dist/src/lang/parser-types.d.ts +0 -175
  70. package/dist/src/lang/parser.d.ts +0 -56
  71. package/dist/src/lang/runtime.d.ts +0 -454
  72. package/dist/src/lang/schema.d.ts +0 -35
  73. package/dist/src/lang/tests.d.ts +0 -94
  74. package/dist/src/lang/transpiler.d.ts +0 -25
  75. package/dist/src/lang/types.d.ts +0 -147
  76. package/dist/src/lang/wasm.d.ts +0 -83
  77. package/dist/src/rbac/index.d.ts +0 -85
  78. package/dist/src/rbac/rules.d.ts +0 -184
  79. package/dist/src/runtime.d.ts +0 -4
  80. package/dist/src/store/index.d.ts +0 -3
  81. package/dist/src/store/indexeddb.d.ts +0 -6
  82. package/dist/src/store/interface.d.ts +0 -90
  83. package/dist/src/store/memory.d.ts +0 -10
  84. package/dist/src/test-examples.d.ts +0 -41
  85. package/dist/src/test-utils.d.ts +0 -86
  86. package/dist/src/transpiler/index.d.ts +0 -6
  87. package/dist/src/transpiler/parser.d.ts +0 -4
  88. package/dist/src/transpiler/transformer.d.ts +0 -4
  89. package/dist/src/transpiler/type-system/inference.d.ts +0 -1
  90. package/dist/src/transpiler/types.d.ts +0 -4
  91. package/dist/src/types/LegalDate.d.ts +0 -241
  92. package/dist/src/types/Timestamp.d.ts +0 -233
  93. package/dist/src/types/Type.d.ts +0 -234
  94. package/dist/src/types/index.d.ts +0 -8
  95. package/dist/src/vm/atoms/batteries.d.ts +0 -6
  96. package/dist/src/vm/atoms/browser.d.ts +0 -18
  97. package/dist/src/vm/atoms/index.d.ts +0 -10
  98. package/dist/src/vm/index.d.ts +0 -12
  99. package/dist/src/vm/runtime.d.ts +0 -333
  100. package/dist/src/vm/vm.d.ts +0 -28
  101. package/dist/src/vm.d.ts +0 -4
  102. package/dist/test-preprocess.d.ts +0 -1
  103. package/dist/tjs-batteries.js +0 -4
  104. package/dist/tjs-batteries.js.map +0 -15
  105. package/dist/tjs-full.js +0 -426
  106. package/dist/tjs-full.js.map +0 -45
  107. package/dist/tjs-src/runtime.d.ts +0 -1
  108. package/dist/tjs-transpiler.js +0 -3
  109. package/dist/tjs-transpiler.js.map +0 -11
  110. package/dist/tjs-vm.js +0 -54
  111. package/dist/tjs-vm.js.map +0 -22
@@ -1,333 +0,0 @@
1
- /**
2
- * AgentError wraps errors as values for monadic error flow.
3
- * When an atom fails, it stores an AgentError instead of throwing.
4
- * Subsequent atoms check for errors and pass them through without executing.
5
- */
6
- export declare class AgentError {
7
- readonly $error: true;
8
- readonly message: string;
9
- readonly op: string;
10
- readonly cause?: Error;
11
- constructor(message: string, op: string, cause?: Error);
12
- toString(): string;
13
- toJSON(): {
14
- $error: true;
15
- message: string;
16
- op: string;
17
- };
18
- }
19
- /**
20
- * Check if a value is an AgentError
21
- */
22
- export declare function isAgentError(value: any): value is AgentError;
23
- export type OpCode = string;
24
- export interface Capabilities {
25
- fetch?: (url: string, init?: any) => Promise<any>;
26
- store?: {
27
- get: (key: string) => Promise<any>;
28
- set: (key: string, value: any) => Promise<void>;
29
- query?: (query: any) => Promise<any[]>;
30
- vectorSearch?: (collection: string, vector: number[], k?: number, filter?: any) => Promise<any[]>;
31
- };
32
- llm?: {
33
- predict: (prompt: string, options?: any) => Promise<string>;
34
- embed?: (text: string) => Promise<number[]>;
35
- };
36
- agent?: {
37
- run: (agentId: string, input: any) => Promise<any>;
38
- };
39
- xml?: {
40
- parse: (xml: string) => Promise<any>;
41
- };
42
- code?: {
43
- /** Transpile AsyncJS source to AST */
44
- transpile: (source: string) => {
45
- op: string;
46
- steps: any[];
47
- };
48
- };
49
- [key: string]: any;
50
- }
51
- export interface TraceEvent {
52
- op: string;
53
- input: any;
54
- stateDiff: Record<string, any>;
55
- result?: any;
56
- error?: string;
57
- fuelBefore: number;
58
- fuelAfter: number;
59
- timestamp: string;
60
- }
61
- /** Cost override: static number or dynamic function */
62
- export type CostOverride = number | ((input: any, ctx: RuntimeContext) => number);
63
- export interface RuntimeContext {
64
- fuel: {
65
- current: number;
66
- };
67
- args: Record<string, any>;
68
- state: Record<string, any>;
69
- consts: Set<string>;
70
- capabilities: Capabilities;
71
- resolver: (op: string) => Atom<any, any> | undefined;
72
- output?: any;
73
- error?: AgentError;
74
- memo?: Map<string, any>;
75
- trace?: TraceEvent[];
76
- warnings?: string[];
77
- signal?: AbortSignal;
78
- costOverrides?: Record<string, CostOverride>;
79
- context?: Record<string, any>;
80
- runCodeDepth?: number;
81
- }
82
- export type AtomExec = (step: any, ctx: RuntimeContext) => Promise<void>;
83
- export interface AtomDef {
84
- op: OpCode;
85
- inputSchema: any;
86
- outputSchema?: any;
87
- exec: AtomExec;
88
- docs?: string;
89
- timeoutMs?: number;
90
- cost?: number | ((input: any, ctx: RuntimeContext) => number);
91
- }
92
- export interface Atom<I, O> extends AtomDef {
93
- create(input: I): I & {
94
- op: string;
95
- };
96
- }
97
- export interface AtomOptions {
98
- docs?: string;
99
- timeoutMs?: number;
100
- cost?: number | ((input: any, ctx: RuntimeContext) => number);
101
- }
102
- export interface RunResult {
103
- result: any;
104
- error?: AgentError;
105
- fuelUsed: number;
106
- trace?: TraceEvent[];
107
- warnings?: string[];
108
- }
109
- /**
110
- * Stored procedure entry with AST and expiry metadata
111
- */
112
- export interface StoredProcedure {
113
- ast: any;
114
- createdAt: number;
115
- expiresAt: number;
116
- }
117
- /**
118
- * Module-level procedure store. In production, replace with a proper cache.
119
- * Default TTL: 1 hour. Max AST size: 100KB.
120
- */
121
- export declare const procedureStore: Map<string, StoredProcedure>;
122
- /** Default TTL for stored procedures: 1 hour */
123
- export declare const DEFAULT_PROCEDURE_TTL: number;
124
- /** Default max AST size: 100KB */
125
- export declare const DEFAULT_MAX_AST_SIZE: number;
126
- /** Token prefix for identifying procedure tokens */
127
- export declare const PROCEDURE_TOKEN_PREFIX = "proc_";
128
- /**
129
- * Check if a string is a procedure token
130
- */
131
- export declare function isProcedureToken(value: any): value is string;
132
- /**
133
- * Resolve a procedure token to its AST.
134
- * Returns the AST or throws an error if expired/not found.
135
- */
136
- export declare function resolveProcedureToken(token: string): any;
137
- /**
138
- * Creates a child scope for the context.
139
- * Uses prototype inheritance so reads fall through to parent, but writes stay local.
140
- */
141
- export declare function createChildScope(ctx: RuntimeContext): RuntimeContext;
142
- export declare function resolveValue(val: any, ctx: RuntimeContext): any;
143
- export type ExprNode = {
144
- $expr: 'literal';
145
- value: any;
146
- } | {
147
- $expr: 'ident';
148
- name: string;
149
- } | {
150
- $expr: 'member';
151
- object: ExprNode;
152
- property: string;
153
- computed?: boolean;
154
- optional?: boolean;
155
- } | {
156
- $expr: 'binary';
157
- op: string;
158
- left: ExprNode;
159
- right: ExprNode;
160
- } | {
161
- $expr: 'unary';
162
- op: string;
163
- argument: ExprNode;
164
- } | {
165
- $expr: 'logical';
166
- op: '&&' | '||' | '??';
167
- left: ExprNode;
168
- right: ExprNode;
169
- } | {
170
- $expr: 'conditional';
171
- test: ExprNode;
172
- consequent: ExprNode;
173
- alternate: ExprNode;
174
- } | {
175
- $expr: 'array';
176
- elements: ExprNode[];
177
- } | {
178
- $expr: 'object';
179
- properties: {
180
- key: string;
181
- value: ExprNode;
182
- }[];
183
- } | {
184
- $expr: 'call';
185
- callee: string;
186
- arguments: ExprNode[];
187
- } | {
188
- $expr: 'methodCall';
189
- object: ExprNode;
190
- method: string;
191
- arguments: ExprNode[];
192
- optional?: boolean;
193
- };
194
- /**
195
- * Built-in objects available in expressions.
196
- * These are Proxy objects that provide JS-like APIs mapped to safe implementations.
197
- */
198
- export declare const builtins: Record<string, any>;
199
- /**
200
- * Evaluates an expression node against the runtime context.
201
- * This replaces JSEP for new code - expressions are already parsed by Acorn.
202
- * Each node evaluation consumes a small amount of fuel to prevent runaway expressions.
203
- */
204
- export declare function evaluateExpr(node: ExprNode, ctx: RuntimeContext): any;
205
- export declare function defineAtom<I extends Record<string, any>, O = any>(op: string, inputSchema: any, // s.Schema<I>
206
- outputSchema: any | undefined, // s.Schema<O>
207
- fn: (input: I, ctx: RuntimeContext) => Promise<O>, options?: AtomOptions | string): Atom<I, O>;
208
- export declare const seq: Atom<Record<string, any>, void>;
209
- export declare const iff: Atom<Record<string, any>, void>;
210
- export declare const whileLoop: Atom<Record<string, any>, void>;
211
- export declare const ret: Atom<any, any>;
212
- export declare const tryCatch: Atom<Record<string, any>, void>;
213
- export declare const errorAtom: Atom<Record<string, any>, void>;
214
- export declare const varSet: Atom<Record<string, any>, void>;
215
- export declare const constSet: Atom<Record<string, any>, void>;
216
- export declare const varGet: Atom<Record<string, any>, any>;
217
- export declare const varsImport: Atom<Record<string, any>, void>;
218
- export declare const varsLet: Atom<Record<string, any>, void>;
219
- export declare const varsExport: Atom<Record<string, any>, Record<string, any>>;
220
- export declare const scope: Atom<Record<string, any>, void>;
221
- export declare const map: Atom<Record<string, any>, any[]>;
222
- export declare const filter: Atom<Record<string, any>, any[]>;
223
- export declare const reduce: Atom<Record<string, any>, any>;
224
- export declare const find: Atom<Record<string, any>, any>;
225
- export declare const push: Atom<Record<string, any>, any>;
226
- export declare const len: Atom<Record<string, any>, number>;
227
- export declare const split: Atom<Record<string, any>, any>;
228
- export declare const join: Atom<Record<string, any>, any>;
229
- export declare const template: Atom<{
230
- tmpl: string;
231
- vars: Record<string, any>;
232
- }, any>;
233
- export declare const regexMatch: Atom<Record<string, any>, boolean>;
234
- export declare const pick: Atom<{
235
- obj: Record<string, any>;
236
- keys: string[];
237
- }, any>;
238
- export declare const omit: Atom<{
239
- obj: Record<string, any>;
240
- keys: string[];
241
- }, any>;
242
- export declare const merge: Atom<Record<string, any>, any>;
243
- export declare const keys: Atom<Record<string, any>, string[]>;
244
- export declare const fetch: Atom<Record<string, any>, any>;
245
- export declare const storeGet: Atom<Record<string, any>, any>;
246
- export declare const storeSet: Atom<Record<string, any>, void | undefined>;
247
- export declare const storeQuery: Atom<Record<string, any>, any[] | never[]>;
248
- export declare const vectorSearch: Atom<Record<string, any>, any[] | never[]>;
249
- export declare const llmPredict: Atom<Record<string, any>, string>;
250
- export declare const agentRun: Atom<Record<string, any>, any>;
251
- export declare const transpileCode: Atom<Record<string, any>, {
252
- op: string;
253
- steps: any[];
254
- }>;
255
- export declare const runCode: Atom<Record<string, any>, any>;
256
- export declare const jsonParse: Atom<Record<string, any>, any>;
257
- export declare const jsonStringify: Atom<Record<string, any>, string>;
258
- export declare const xmlParse: Atom<Record<string, any>, any>;
259
- export declare const memoize: Atom<Record<string, any>, any>;
260
- export declare const cache: Atom<Record<string, any>, any>;
261
- export declare const random: Atom<Record<string, any>, any>;
262
- export declare const uuid: Atom<Record<string, any>, string>;
263
- export declare const hash: Atom<Record<string, any>, string>;
264
- export declare const consoleLog: Atom<Record<string, any>, void>;
265
- export declare const consoleWarn: Atom<Record<string, any>, void>;
266
- export declare const consoleError: Atom<Record<string, any>, void>;
267
- export declare const storeProcedure: Atom<Record<string, any>, string>;
268
- export declare const releaseProcedure: Atom<Record<string, any>, boolean>;
269
- export declare const clearExpiredProcedures: Atom<Record<string, any>, number>;
270
- export declare const coreAtoms: {
271
- seq: Atom<Record<string, any>, void>;
272
- if: Atom<Record<string, any>, void>;
273
- while: Atom<Record<string, any>, void>;
274
- return: Atom<any, any>;
275
- try: Atom<Record<string, any>, void>;
276
- Error: Atom<Record<string, any>, void>;
277
- varSet: Atom<Record<string, any>, void>;
278
- constSet: Atom<Record<string, any>, void>;
279
- varGet: Atom<Record<string, any>, any>;
280
- varsImport: Atom<Record<string, any>, void>;
281
- varsLet: Atom<Record<string, any>, void>;
282
- varsExport: Atom<Record<string, any>, Record<string, any>>;
283
- scope: Atom<Record<string, any>, void>;
284
- map: Atom<Record<string, any>, any[]>;
285
- filter: Atom<Record<string, any>, any[]>;
286
- reduce: Atom<Record<string, any>, any>;
287
- find: Atom<Record<string, any>, any>;
288
- push: Atom<Record<string, any>, any>;
289
- len: Atom<Record<string, any>, number>;
290
- split: Atom<Record<string, any>, any>;
291
- join: Atom<Record<string, any>, any>;
292
- template: Atom<{
293
- tmpl: string;
294
- vars: Record<string, any>;
295
- }, any>;
296
- regexMatch: Atom<Record<string, any>, boolean>;
297
- pick: Atom<{
298
- obj: Record<string, any>;
299
- keys: string[];
300
- }, any>;
301
- omit: Atom<{
302
- obj: Record<string, any>;
303
- keys: string[];
304
- }, any>;
305
- merge: Atom<Record<string, any>, any>;
306
- keys: Atom<Record<string, any>, string[]>;
307
- httpFetch: Atom<Record<string, any>, any>;
308
- storeGet: Atom<Record<string, any>, any>;
309
- storeSet: Atom<Record<string, any>, void | undefined>;
310
- storeQuery: Atom<Record<string, any>, any[] | never[]>;
311
- storeVectorSearch: Atom<Record<string, any>, any[] | never[]>;
312
- llmPredict: Atom<Record<string, any>, string>;
313
- agentRun: Atom<Record<string, any>, any>;
314
- transpileCode: Atom<Record<string, any>, {
315
- op: string;
316
- steps: any[];
317
- }>;
318
- runCode: Atom<Record<string, any>, any>;
319
- jsonParse: Atom<Record<string, any>, any>;
320
- jsonStringify: Atom<Record<string, any>, string>;
321
- xmlParse: Atom<Record<string, any>, any>;
322
- memoize: Atom<Record<string, any>, any>;
323
- cache: Atom<Record<string, any>, any>;
324
- random: Atom<Record<string, any>, any>;
325
- uuid: Atom<Record<string, any>, string>;
326
- hash: Atom<Record<string, any>, string>;
327
- consoleLog: Atom<Record<string, any>, void>;
328
- consoleWarn: Atom<Record<string, any>, void>;
329
- consoleError: Atom<Record<string, any>, void>;
330
- storeProcedure: Atom<Record<string, any>, string>;
331
- releaseProcedure: Atom<Record<string, any>, boolean>;
332
- clearExpiredProcedures: Atom<Record<string, any>, number>;
333
- };
@@ -1,28 +0,0 @@
1
- import { type Atom, type Capabilities, type RunResult, type CostOverride, coreAtoms } from './runtime';
2
- import { type BaseNode, type BuilderType } from '../builder';
3
- export declare class AgentVM<M extends Record<string, Atom<any, any>>> {
4
- readonly atoms: typeof coreAtoms & M;
5
- constructor(customAtoms?: M);
6
- get builder(): BuilderType<typeof coreAtoms & M>;
7
- get Agent(): BuilderType<typeof coreAtoms & M>;
8
- /** @deprecated Use `Agent` instead */
9
- get A99(): BuilderType<typeof coreAtoms & M>;
10
- resolve(op: string): Atom<any, any>;
11
- getTools(filter?: 'flow' | 'all' | string[]): {
12
- type: string;
13
- function: {
14
- name: string;
15
- description: string | undefined;
16
- parameters: any;
17
- };
18
- }[];
19
- run(astOrToken: BaseNode | string, args?: Record<string, any>, options?: {
20
- fuel?: number;
21
- capabilities?: Capabilities;
22
- trace?: boolean;
23
- timeoutMs?: number;
24
- signal?: AbortSignal;
25
- costOverrides?: Record<string, CostOverride>;
26
- context?: Record<string, any>;
27
- }): Promise<RunResult>;
28
- }
package/dist/src/vm.d.ts DELETED
@@ -1,4 +0,0 @@
1
- /**
2
- * @deprecated Import from './vm/vm' instead
3
- */
4
- export * from './vm/vm';
@@ -1 +0,0 @@
1
- export {};
@@ -1,4 +0,0 @@
1
- var b=Object.defineProperty;var B=(f)=>f;function I(f,n){this[f]=B.bind(null,n)}var s=(f,n)=>{for(var r in n)b(f,r,{get:n[r],enumerable:!0,configurable:!0,set:I.bind(n,r)})};var U=(f,n)=>()=>(f&&(n=f(f=0)),n);var N=((f)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(f,{get:(n,r)=>(typeof require<"u"?require:n)[r]}):f)(function(f){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+f+'" is not supported')});var J={};s(J,{sep:()=>T,resolve:()=>S,relative:()=>O,posix:()=>W,parse:()=>k,normalize:()=>$,join:()=>H,isAbsolute:()=>G,format:()=>j,extname:()=>V,dirname:()=>y,delimiter:()=>x,default:()=>ff,basename:()=>R,_makeLong:()=>Y});function h(f){if(typeof f!=="string")throw TypeError("Path must be a string. Received "+JSON.stringify(f))}function z(f,n){var r="",u=0,i=-1,t=0,e;for(var g=0;g<=f.length;++g){if(g<f.length)e=f.charCodeAt(g);else if(e===47)break;else e=47;if(e===47){if(i===g-1||t===1);else if(i!==g-1&&t===2){if(r.length<2||u!==2||r.charCodeAt(r.length-1)!==46||r.charCodeAt(r.length-2)!==46){if(r.length>2){var l=r.lastIndexOf("/");if(l!==r.length-1){if(l===-1)r="",u=0;else r=r.slice(0,l),u=r.length-1-r.lastIndexOf("/");i=g,t=0;continue}}else if(r.length===2||r.length===1){r="",u=0,i=g,t=0;continue}}if(n){if(r.length>0)r+="/..";else r="..";u=2}}else{if(r.length>0)r+="/"+f.slice(i+1,g);else r=f.slice(i+1,g);u=g-i-1}i=g,t=0}else if(e===46&&t!==-1)++t;else t=-1}return r}function p(f,n){var r=n.dir||n.root,u=n.base||(n.name||"")+(n.ext||"");if(!r)return u;if(r===n.root)return r+u;return r+f+u}function S(){var f="",n=!1,r;for(var u=arguments.length-1;u>=-1&&!n;u--){var i;if(u>=0)i=arguments[u];else{if(r===void 0)r=process.cwd();i=r}if(h(i),i.length===0)continue;f=i+"/"+f,n=i.charCodeAt(0)===47}if(f=z(f,!n),n)if(f.length>0)return"/"+f;else return"/";else if(f.length>0)return f;else return"."}function $(f){if(h(f),f.length===0)return".";var n=f.charCodeAt(0)===47,r=f.charCodeAt(f.length-1)===47;if(f=z(f,!n),f.length===0&&!n)f=".";if(f.length>0&&r)f+="/";if(n)return"/"+f;return f}function G(f){return h(f),f.length>0&&f.charCodeAt(0)===47}function H(){if(arguments.length===0)return".";var f;for(var n=0;n<arguments.length;++n){var r=arguments[n];if(h(r),r.length>0)if(f===void 0)f=r;else f+="/"+r}if(f===void 0)return".";return $(f)}function O(f,n){if(h(f),h(n),f===n)return"";if(f=S(f),n=S(n),f===n)return"";var r=1;for(;r<f.length;++r)if(f.charCodeAt(r)!==47)break;var u=f.length,i=u-r,t=1;for(;t<n.length;++t)if(n.charCodeAt(t)!==47)break;var e=n.length,g=e-t,l=i<g?i:g,v=-1,L=0;for(;L<=l;++L){if(L===l){if(g>l){if(n.charCodeAt(t+L)===47)return n.slice(t+L+1);else if(L===0)return n.slice(t+L)}else if(i>l){if(f.charCodeAt(r+L)===47)v=L;else if(L===0)v=0}break}var d=f.charCodeAt(r+L),_=n.charCodeAt(t+L);if(d!==_)break;else if(d===47)v=L}var M="";for(L=r+v+1;L<=u;++L)if(L===u||f.charCodeAt(L)===47)if(M.length===0)M+="..";else M+="/..";if(M.length>0)return M+n.slice(t+v);else{if(t+=v,n.charCodeAt(t)===47)++t;return n.slice(t)}}function Y(f){return f}function y(f){if(h(f),f.length===0)return".";var n=f.charCodeAt(0),r=n===47,u=-1,i=!0;for(var t=f.length-1;t>=1;--t)if(n=f.charCodeAt(t),n===47){if(!i){u=t;break}}else i=!1;if(u===-1)return r?"/":".";if(r&&u===1)return"//";return f.slice(0,u)}function R(f,n){if(n!==void 0&&typeof n!=="string")throw TypeError('"ext" argument must be a string');h(f);var r=0,u=-1,i=!0,t;if(n!==void 0&&n.length>0&&n.length<=f.length){if(n.length===f.length&&n===f)return"";var e=n.length-1,g=-1;for(t=f.length-1;t>=0;--t){var l=f.charCodeAt(t);if(l===47){if(!i){r=t+1;break}}else{if(g===-1)i=!1,g=t+1;if(e>=0)if(l===n.charCodeAt(e)){if(--e===-1)u=t}else e=-1,u=g}}if(r===u)u=g;else if(u===-1)u=f.length;return f.slice(r,u)}else{for(t=f.length-1;t>=0;--t)if(f.charCodeAt(t)===47){if(!i){r=t+1;break}}else if(u===-1)i=!1,u=t+1;if(u===-1)return"";return f.slice(r,u)}}function V(f){h(f);var n=-1,r=0,u=-1,i=!0,t=0;for(var e=f.length-1;e>=0;--e){var g=f.charCodeAt(e);if(g===47){if(!i){r=e+1;break}continue}if(u===-1)i=!1,u=e+1;if(g===46){if(n===-1)n=e;else if(t!==1)t=1}else if(n!==-1)t=-1}if(n===-1||u===-1||t===0||t===1&&n===u-1&&n===r+1)return"";return f.slice(n,u)}function j(f){if(f===null||typeof f!=="object")throw TypeError('The "pathObject" argument must be of type Object. Received type '+typeof f);return p("/",f)}function k(f){h(f);var n={root:"",dir:"",base:"",ext:"",name:""};if(f.length===0)return n;var r=f.charCodeAt(0),u=r===47,i;if(u)n.root="/",i=1;else i=0;var t=-1,e=0,g=-1,l=!0,v=f.length-1,L=0;for(;v>=i;--v){if(r=f.charCodeAt(v),r===47){if(!l){e=v+1;break}continue}if(g===-1)l=!1,g=v+1;if(r===46){if(t===-1)t=v;else if(L!==1)L=1}else if(t!==-1)L=-1}if(t===-1||g===-1||L===0||L===1&&t===g-1&&t===e+1){if(g!==-1)if(e===0&&u)n.base=n.name=f.slice(1,g);else n.base=n.name=f.slice(e,g)}else{if(e===0&&u)n.name=f.slice(1,t),n.base=f.slice(1,g);else n.name=f.slice(e,t),n.base=f.slice(e,g);n.ext=f.slice(t,g)}if(e>0)n.dir=f.slice(0,e-1);else if(u)n.dir="/";return n}var T="/",x=":",W,ff;var q=U(()=>{W=((f)=>(f.posix=f,f))({resolve:S,normalize:$,isAbsolute:G,join:H,relative:O,_makeLong:Y,dirname:y,basename:R,extname:V,format:j,parse:k,sep:T,delimiter:x,win32:null,posix:null}),ff=W});var X=new Map,w=new Map;function c(f,n){if(f.length!==n.length)throw Error("Vectors must have the same length for cosine similarity.");let r=0,u=0,i=0;for(let t=0;t<f.length;t++)r+=f[t]*n[t],u+=f[t]*f[t],i+=n[t]*n[t];if(u=Math.sqrt(u),i=Math.sqrt(i),u===0||i===0)return 0;return r/(u*i)}function P(){return{async get(f){return X.get(f)},async set(f,n){X.set(f,n)},async createCollection(f,n,r){if(w.has(f))console.warn(`Collection '${f}' already exists. Overwriting.`);w.set(f,[])},async vectorAdd(f,n){let r=w.get(f);if(!r)throw Error(`Collection '${f}' not found. Create it first.`);if(!n.embedding||!Array.isArray(n.embedding))throw Error("Document must have an 'embedding' property that is an array of numbers.");r.push(n)},async vectorSearch(f,n,r=5){let u=w.get(f);if(!u)throw Error(`Collection '${f}' not found. Create it first.`);let i=u.map((t)=>({doc:t,score:c(n,t.embedding)}));return i.sort((t,e)=>e.score-t.score),i.slice(0,r).map((t)=>t.doc)}}}function a(f){if(typeof f==="string")return{role:"user",content:f};let n=[{type:"text",text:f.text}];for(let r of f.images||[])n.push({type:"image_url",image_url:{url:r}});return{role:"user",content:n}}var m="http://localhost:1234/v1";function Z(f,n=m){return{async predict(r,u,i,t){try{let e=t?f.getStructuredLLM():f.getLLM(),g=[{role:"system",content:r},a(u)],l=await fetch(`${n}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:e.id,messages:g,temperature:0.7,tools:i,response_format:t})});if(!l.ok)throw Error(`LLM Error: ${l.status} ${l.statusText}`);return(await l.json()).choices[0]?.message??{content:""}}catch(e){if(e.cause?.code==="ECONNREFUSED")throw Error("No LLM provider configured. Please start LM Studio or provide an API key.");throw e}},async embed(r){try{let u=f.getEmbedding(),i=await fetch(`${n}/embeddings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:u.id,input:r})});if(!i.ok)throw Error(`Embedding Error: ${i.status}`);return(await i.json()).data[0]?.embedding??[]}catch(u){if(u.cause?.code==="ECONNREFUSED")throw Error("No LLM provider configured. Please start LM Studio or provide an API key.");throw u}}}}var A=typeof window<"u"&&typeof window.localStorage<"u";async function nf(f){try{if(A){let n=window.localStorage.getItem(".models.cache.json");if(!n)return null;let r=JSON.parse(n);if(r.baseUrl!==f)return null;if(Date.now()-r.timestamp>86400000)return null;return r.models}else{let n=await import("node:fs/promises"),u=(await Promise.resolve().then(() => (q(),J))).join(process.cwd(),".models.cache.json");try{let i=await n.readFile(u,"utf-8"),t=JSON.parse(i);if(t.baseUrl!==f)return null;if(Date.now()-t.timestamp>86400000)return null;return t.models}catch{return null}}}catch(n){return console.warn("⚠️ Error reading model cache:",n),null}}async function rf(f,n){let r={timestamp:Date.now(),baseUrl:f,models:n};try{if(A)window.localStorage.setItem(".models.cache.json",JSON.stringify(r));else{let u=await import("node:fs/promises"),t=(await Promise.resolve().then(() => (q(),J))).join(process.cwd(),".models.cache.json");await u.writeFile(t,JSON.stringify(r,null,2))}}catch(u){console.error("❌ Error writing model cache:",u)}}var C=async(f,n)=>{let r=new AbortController,u=setTimeout(()=>r.abort(),60000);try{let i=await fetch(f,{...n,signal:r.signal});return clearTimeout(u),i}catch(i){throw clearTimeout(u),i}};async function tf(f,n){try{let r={type:"json_schema",json_schema:{name:"test",strict:!1,schema:{type:"object",properties:{status:{type:"string"}}}}},u=await C(`${f}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:n,messages:[{role:"system",content:"You respond in JSON."},{role:"user",content:'Return JSON: {"status": "ok"}'}],response_format:r,max_tokens:20})});if(!u.ok){if(u.status===400)return uf(f,n);return{ok:!1,msg:`HTTP ${u.status}`}}let i=await u.json();return JSON.parse(i.choices[0].message.content),{ok:!0,msg:"OK (Schema)"}}catch(r){return{ok:!1,msg:r.message||"Error"}}}async function uf(f,n){try{if((await C(`${f}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:n,messages:[{role:"user",content:'JSON: {"a":1}'}],response_format:{type:"json_object"},max_tokens:10})})).ok)return{ok:!0,msg:"OK (Legacy Mode)"};return{ok:!1,msg:"Not Supported"}}catch{return{ok:!1,msg:"Legacy Fail"}}}async function ef(f,n){try{return(await C(`${f}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:n,messages:[{role:"user",content:"hi"}],max_tokens:1})})).ok}catch{return!1}}async function gf(f,n){try{let r=await C(`${f}/embeddings`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:n,input:"test"})});if(!r.ok)return null;return(await r.json()).data[0]?.embedding?.length??null}catch{return null}}var Lf="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==";async function lf(f,n){try{return(await C(`${f}/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:n,messages:[{role:"user",content:[{type:"text",text:"What color is this?"},{type:"image_url",image_url:{url:Lf}}]}],max_tokens:10})})).ok}catch{return!1}}async function F(f){let n=await nf(f),r=[];try{let e=await fetch(`${f}/models`);if(!e.ok)throw Error("Could not connect");r=(await e.json()).data.map((l)=>l.id).sort()}catch(e){if(n)return console.log("⚠️ LM Studio unavailable, using cached model audit."),n;return console.error("❌ Failed to connect to LM Studio."),[]}if(n){let e=n.map((g)=>g.id).sort();if(JSON.stringify(r)===JSON.stringify(e))return console.log("✅ Using cached model audit."),n;console.log("\uD83D\uDD0D Model list changed. Re-running audit...")}console.log("\uD83D\uDD0D Scanning models (this may take a moment)...");let u=[],i=r.map((e)=>({id:e})),t;if(!A)t=await import("node:readline");for(let e of i){if(!A&&t)t.cursorTo(process.stdout,0),process.stdout.write(`\uD83D\uDC49 Testing: ${e.id}...`),t.clearLine(process.stdout,1);let g="Unknown",l=!1,v=!1,L="",d=void 0,_=await ef(f,e.id),M=await gf(f,e.id);if(M)d=M;if(_){g="LLM";let D=await tf(f,e.id);if(l=D.ok,v=await lf(f,e.id),L=l?D.msg:`Fail: ${D.msg}`,v)L+=" +Vision"}else if(M)g="Embedding",L=`OK (Dim: ${M})`;else L="LLM Fail";u.push({id:e.id,type:g,structuredOutput:l,vision:v,dimension:d,status:L})}if(!A&&t)t.cursorTo(process.stdout,0),t.clearLine(process.stdout,0);return console.log(`
2
- `),console.table(u),await rf(f,u),console.log("\uD83D\uDCDD Audit results saved to cache."),u}var vf="http://localhost:1234/v1";class K{baseUrl;models=[];defaultLLM=null;defaultEmbedding=null;defaultStructuredLLM=null;constructor(f=vf){this.baseUrl=f}async audit(){this.models=await F(this.baseUrl),this.selectDefaults()}selectDefaults(){if(this.defaultEmbedding=this.models.find((f)=>f.type==="Embedding")||null,this.defaultLLM=this.models.find((f)=>f.type==="LLM")||null,this.defaultStructuredLLM=this.models.find((f)=>f.type==="LLM"&&f.structuredOutput)||null,!this.defaultEmbedding)console.warn("⚠️ No embedding model found.");if(!this.defaultLLM)console.warn("⚠️ No LLM found.");if(!this.defaultStructuredLLM)console.warn("⚠️ No LLM with structured output support found.")}getModels(){return this.models}_setDefaultModel(f,n,r,u){let i=this.models.find((t)=>t.id===f&&r(t));if(!i)throw Error(`Model '${f}' not found or is not ${u}.`);this[n]=i}setDefaultLLM(f){this._setDefaultModel(f,"defaultLLM",(n)=>n.type==="LLM","an LLM")}setDefaultEmbedding(f){this._setDefaultModel(f,"defaultEmbedding",(n)=>n.dimension!==void 0,"an embedding model")}setDefaultStructuredLLM(f){this._setDefaultModel(f,"defaultStructuredLLM",(n)=>n.type==="LLM"&&n.structuredOutput,"a structured-output LLM")}getLLM(){if(!this.defaultLLM)throw Error("No LLM available.");return this.defaultLLM}getEmbedding(){if(!this.defaultEmbedding)throw Error("No embedding model available.");return this.defaultEmbedding}getStructuredLLM(){if(!this.defaultStructuredLLM)throw Error("No structured-output LLM available.");return this.defaultStructuredLLM}}var Mf=typeof window<"u",hf=Mf&&window.location.protocol==="https:",E=null,Q=null,o=!1;async function df(){if(o)return{localModels:E,llm:Q};if(o=!0,hf)return console.log("\uD83D\uDCE1 HTTPS detected - local LLM endpoints disabled. Use HTTP for local LLM support."),{localModels:null,llm:null};try{E=new K,await E.audit(),Q=Z(E)}catch(f){console.warn("⚠️ Could not connect to local LLM:",f)}return{localModels:E,llm:Q}}async function Af(){let{localModels:f,llm:n}=await df();return{vector:n?{embed:n.embed}:void 0,store:P(),llmBattery:n,models:f}}async function Jf(){return Af()}var qf={store:P(),llmBattery:null,vector:void 0,models:null};export{P as getStoreCapabilityDefault,Jf as getStandardCapabilities,Z as getLLMCapability,Af as getBatteries,qf as batteries,K as LocalModels};
3
-
4
- //# debugId=D19E0E009AF3856564756E2164756E21
@@ -1,15 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["node:path", "../src/batteries/store.ts", "../src/batteries/llm.ts", "../src/batteries/audit.ts", "../src/batteries/models.ts", "../src/batteries/index.ts"],
4
- "sourcesContent": [
5
- "function assertPath(path){if(typeof path!==\"string\")throw TypeError(\"Path must be a string. Received \"+JSON.stringify(path))}function normalizeStringPosix(path,allowAboveRoot){var res=\"\",lastSegmentLength=0,lastSlash=-1,dots=0,code;for(var i=0;i<=path.length;++i){if(i<path.length)code=path.charCodeAt(i);else if(code===47)break;else code=47;if(code===47){if(lastSlash===i-1||dots===1);else if(lastSlash!==i-1&&dots===2){if(res.length<2||lastSegmentLength!==2||res.charCodeAt(res.length-1)!==46||res.charCodeAt(res.length-2)!==46){if(res.length>2){var lastSlashIndex=res.lastIndexOf(\"/\");if(lastSlashIndex!==res.length-1){if(lastSlashIndex===-1)res=\"\",lastSegmentLength=0;else res=res.slice(0,lastSlashIndex),lastSegmentLength=res.length-1-res.lastIndexOf(\"/\");lastSlash=i,dots=0;continue}}else if(res.length===2||res.length===1){res=\"\",lastSegmentLength=0,lastSlash=i,dots=0;continue}}if(allowAboveRoot){if(res.length>0)res+=\"/..\";else res=\"..\";lastSegmentLength=2}}else{if(res.length>0)res+=\"/\"+path.slice(lastSlash+1,i);else res=path.slice(lastSlash+1,i);lastSegmentLength=i-lastSlash-1}lastSlash=i,dots=0}else if(code===46&&dots!==-1)++dots;else dots=-1}return res}function _format(sep,pathObject){var dir=pathObject.dir||pathObject.root,base=pathObject.base||(pathObject.name||\"\")+(pathObject.ext||\"\");if(!dir)return base;if(dir===pathObject.root)return dir+base;return dir+sep+base}function resolve(){var resolvedPath=\"\",resolvedAbsolute=!1,cwd;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path;if(i>=0)path=arguments[i];else{if(cwd===void 0)cwd=process.cwd();path=cwd}if(assertPath(path),path.length===0)continue;resolvedPath=path+\"/\"+resolvedPath,resolvedAbsolute=path.charCodeAt(0)===47}if(resolvedPath=normalizeStringPosix(resolvedPath,!resolvedAbsolute),resolvedAbsolute)if(resolvedPath.length>0)return\"/\"+resolvedPath;else return\"/\";else if(resolvedPath.length>0)return resolvedPath;else return\".\"}function normalize(path){if(assertPath(path),path.length===0)return\".\";var isAbsolute=path.charCodeAt(0)===47,trailingSeparator=path.charCodeAt(path.length-1)===47;if(path=normalizeStringPosix(path,!isAbsolute),path.length===0&&!isAbsolute)path=\".\";if(path.length>0&&trailingSeparator)path+=\"/\";if(isAbsolute)return\"/\"+path;return path}function isAbsolute(path){return assertPath(path),path.length>0&&path.charCodeAt(0)===47}function join(){if(arguments.length===0)return\".\";var joined;for(var i=0;i<arguments.length;++i){var arg=arguments[i];if(assertPath(arg),arg.length>0)if(joined===void 0)joined=arg;else joined+=\"/\"+arg}if(joined===void 0)return\".\";return normalize(joined)}function relative(from,to){if(assertPath(from),assertPath(to),from===to)return\"\";if(from=resolve(from),to=resolve(to),from===to)return\"\";var fromStart=1;for(;fromStart<from.length;++fromStart)if(from.charCodeAt(fromStart)!==47)break;var fromEnd=from.length,fromLen=fromEnd-fromStart,toStart=1;for(;toStart<to.length;++toStart)if(to.charCodeAt(toStart)!==47)break;var toEnd=to.length,toLen=toEnd-toStart,length=fromLen<toLen?fromLen:toLen,lastCommonSep=-1,i=0;for(;i<=length;++i){if(i===length){if(toLen>length){if(to.charCodeAt(toStart+i)===47)return to.slice(toStart+i+1);else if(i===0)return to.slice(toStart+i)}else if(fromLen>length){if(from.charCodeAt(fromStart+i)===47)lastCommonSep=i;else if(i===0)lastCommonSep=0}break}var fromCode=from.charCodeAt(fromStart+i),toCode=to.charCodeAt(toStart+i);if(fromCode!==toCode)break;else if(fromCode===47)lastCommonSep=i}var out=\"\";for(i=fromStart+lastCommonSep+1;i<=fromEnd;++i)if(i===fromEnd||from.charCodeAt(i)===47)if(out.length===0)out+=\"..\";else out+=\"/..\";if(out.length>0)return out+to.slice(toStart+lastCommonSep);else{if(toStart+=lastCommonSep,to.charCodeAt(toStart)===47)++toStart;return to.slice(toStart)}}function _makeLong(path){return path}function dirname(path){if(assertPath(path),path.length===0)return\".\";var code=path.charCodeAt(0),hasRoot=code===47,end=-1,matchedSlash=!0;for(var i=path.length-1;i>=1;--i)if(code=path.charCodeAt(i),code===47){if(!matchedSlash){end=i;break}}else matchedSlash=!1;if(end===-1)return hasRoot?\"/\":\".\";if(hasRoot&&end===1)return\"//\";return path.slice(0,end)}function basename(path,ext){if(ext!==void 0&&typeof ext!==\"string\")throw TypeError('\"ext\" argument must be a string');assertPath(path);var start=0,end=-1,matchedSlash=!0,i;if(ext!==void 0&&ext.length>0&&ext.length<=path.length){if(ext.length===path.length&&ext===path)return\"\";var extIdx=ext.length-1,firstNonSlashEnd=-1;for(i=path.length-1;i>=0;--i){var code=path.charCodeAt(i);if(code===47){if(!matchedSlash){start=i+1;break}}else{if(firstNonSlashEnd===-1)matchedSlash=!1,firstNonSlashEnd=i+1;if(extIdx>=0)if(code===ext.charCodeAt(extIdx)){if(--extIdx===-1)end=i}else extIdx=-1,end=firstNonSlashEnd}}if(start===end)end=firstNonSlashEnd;else if(end===-1)end=path.length;return path.slice(start,end)}else{for(i=path.length-1;i>=0;--i)if(path.charCodeAt(i)===47){if(!matchedSlash){start=i+1;break}}else if(end===-1)matchedSlash=!1,end=i+1;if(end===-1)return\"\";return path.slice(start,end)}}function extname(path){assertPath(path);var startDot=-1,startPart=0,end=-1,matchedSlash=!0,preDotState=0;for(var i=path.length-1;i>=0;--i){var code=path.charCodeAt(i);if(code===47){if(!matchedSlash){startPart=i+1;break}continue}if(end===-1)matchedSlash=!1,end=i+1;if(code===46){if(startDot===-1)startDot=i;else if(preDotState!==1)preDotState=1}else if(startDot!==-1)preDotState=-1}if(startDot===-1||end===-1||preDotState===0||preDotState===1&&startDot===end-1&&startDot===startPart+1)return\"\";return path.slice(startDot,end)}function format(pathObject){if(pathObject===null||typeof pathObject!==\"object\")throw TypeError('The \"pathObject\" argument must be of type Object. Received type '+typeof pathObject);return _format(\"/\",pathObject)}function parse(path){assertPath(path);var ret={root:\"\",dir:\"\",base:\"\",ext:\"\",name:\"\"};if(path.length===0)return ret;var code=path.charCodeAt(0),isAbsolute2=code===47,start;if(isAbsolute2)ret.root=\"/\",start=1;else start=0;var startDot=-1,startPart=0,end=-1,matchedSlash=!0,i=path.length-1,preDotState=0;for(;i>=start;--i){if(code=path.charCodeAt(i),code===47){if(!matchedSlash){startPart=i+1;break}continue}if(end===-1)matchedSlash=!1,end=i+1;if(code===46){if(startDot===-1)startDot=i;else if(preDotState!==1)preDotState=1}else if(startDot!==-1)preDotState=-1}if(startDot===-1||end===-1||preDotState===0||preDotState===1&&startDot===end-1&&startDot===startPart+1){if(end!==-1)if(startPart===0&&isAbsolute2)ret.base=ret.name=path.slice(1,end);else ret.base=ret.name=path.slice(startPart,end)}else{if(startPart===0&&isAbsolute2)ret.name=path.slice(1,startDot),ret.base=path.slice(1,end);else ret.name=path.slice(startPart,startDot),ret.base=path.slice(startPart,end);ret.ext=path.slice(startDot,end)}if(startPart>0)ret.dir=path.slice(0,startPart-1);else if(isAbsolute2)ret.dir=\"/\";return ret}var sep=\"/\",delimiter=\":\",posix=((p)=>(p.posix=p,p))({resolve,normalize,isAbsolute,join,relative,_makeLong,dirname,basename,extname,format,parse,sep,delimiter,win32:null,posix:null});var path_default=posix;export{sep,resolve,relative,posix,parse,normalize,join,isAbsolute,format,extname,dirname,delimiter,path_default as default,basename,_makeLong};",
6
- "/**\n * Store Capability Battery\n * Provides Key-Value storage and lightweight in-memory Vector Search.\n */\n\nexport interface StoreCapability {\n get(key: string): Promise<any>\n set(key: string, val: any): Promise<void>\n createCollection(\n name: string,\n schema?: any,\n dimension?: number\n ): Promise<void>\n vectorAdd(collection: string, doc: any): Promise<void>\n vectorSearch(collection: string, vector: number[], k?: number): Promise<any[]>\n}\n\n// In-memory KV store fallback\nconst kvStore = new Map<string, any>()\n// In-memory Vector store fallback\nconst collections = new Map<string, any[]>()\n\nexport function cosineSimilarity(vecA: number[], vecB: number[]): number {\n if (vecA.length !== vecB.length) {\n throw new Error('Vectors must have the same length for cosine similarity.')\n }\n let dotProduct = 0\n let magA = 0\n let magB = 0\n for (let i = 0; i < vecA.length; i++) {\n dotProduct += vecA[i] * vecB[i]\n magA += vecA[i] * vecA[i]\n magB += vecB[i] * vecB[i]\n }\n magA = Math.sqrt(magA)\n magB = Math.sqrt(magB)\n if (magA === 0 || magB === 0) {\n return 0\n }\n return dotProduct / (magA * magB)\n}\n\nexport function getStoreCapability(): StoreCapability {\n return {\n async get(key: string) {\n return kvStore.get(key)\n },\n\n async set(key: string, val: any) {\n kvStore.set(key, val)\n },\n\n async createCollection(name: string, _schema?: any, _dimension?: number) {\n if (collections.has(name)) {\n console.warn(`Collection '${name}' already exists. Overwriting.`)\n }\n collections.set(name, [])\n },\n\n async vectorAdd(collection: string, doc: any) {\n const db = collections.get(collection)\n if (!db)\n throw new Error(\n `Collection '${collection}' not found. Create it first.`\n )\n if (!doc.embedding || !Array.isArray(doc.embedding)) {\n throw new Error(\n \"Document must have an 'embedding' property that is an array of numbers.\"\n )\n }\n db.push(doc)\n },\n\n async vectorSearch(collection: string, vector: number[], k = 5) {\n const db = collections.get(collection)\n if (!db)\n throw new Error(\n `Collection '${collection}' not found. Create it first.`\n )\n\n const scoredDocs = db.map((doc) => ({\n doc,\n score: cosineSimilarity(vector, doc.embedding),\n }))\n\n scoredDocs.sort((a, b) => b.score - a.score)\n\n return scoredDocs.slice(0, k).map((item) => item.doc)\n },\n }\n}\n",
7
- "import { LocalModels } from './models'\n\n/**\n * LLM Capability Battery\n * Bridges to local LM Studio instance via HTTP.\n */\n\n/**\n * User content can be a simple string or multimodal with images.\n * Images should be URLs or data URIs (data:image/...;base64,...)\n */\nexport type UserContent = string | { text: string; images?: string[] }\n\nexport interface LLMCapability {\n predict(\n system: string,\n user: UserContent,\n tools?: any[],\n responseFormat?: any\n ): Promise<any>\n embed(text: string): Promise<number[]>\n}\n\n/**\n * Build user message content - supports text-only or multimodal (text + images)\n */\nfunction buildUserMessage(user: UserContent): { role: string; content: any } {\n if (typeof user === 'string') {\n return { role: 'user', content: user }\n }\n\n // Multimodal: array of content blocks (OpenAI vision format)\n const content: any[] = [{ type: 'text', text: user.text }]\n\n for (const img of user.images || []) {\n content.push({\n type: 'image_url',\n image_url: {\n url: img, // Can be URL or data:image/...;base64,...\n },\n })\n }\n\n return { role: 'user', content }\n}\n\nconst DEFAULT_BASE_URL = 'http://localhost:1234/v1'\n\nexport function getLLMCapability(\n models: LocalModels,\n baseUrl = DEFAULT_BASE_URL\n): LLMCapability {\n return {\n async predict(\n system: string,\n user: UserContent,\n tools?: any[],\n responseFormat?: any\n ): Promise<any> {\n try {\n const model = responseFormat\n ? models.getStructuredLLM()\n : models.getLLM()\n const messages = [\n { role: 'system', content: system },\n buildUserMessage(user),\n ]\n\n const response = await fetch(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: model.id,\n messages,\n temperature: 0.7,\n tools,\n response_format: responseFormat,\n }),\n })\n\n if (!response.ok) {\n throw new Error(\n `LLM Error: ${response.status} ${response.statusText}`\n )\n }\n\n const data = await response.json()\n return data.choices[0]?.message ?? { content: '' }\n } catch (e: any) {\n if (e.cause?.code === 'ECONNREFUSED') {\n throw new Error(\n 'No LLM provider configured. Please start LM Studio or provide an API key.'\n )\n }\n throw e\n }\n },\n\n async embed(text: string): Promise<number[]> {\n try {\n const model = models.getEmbedding()\n const response = await fetch(`${baseUrl}/embeddings`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: model.id,\n input: text,\n }),\n })\n\n if (!response.ok) {\n throw new Error(`Embedding Error: ${response.status}`)\n }\n\n const data = await response.json()\n return data.data[0]?.embedding ?? []\n } catch (e: any) {\n if (e.cause?.code === 'ECONNREFUSED') {\n throw new Error(\n 'No LLM provider configured. Please start LM Studio or provide an API key.'\n )\n }\n throw e\n }\n },\n }\n}\n",
8
- "const TIMEOUT_MS = 60000\nconst CACHE_FILE = '.models.cache.json'\nconst CACHE_TTL_MS = 24 * 60 * 60 * 1000 // 24 hours\n\nexport interface ModelAudit {\n id: string\n type: 'LLM' | 'Embedding' | 'Unknown'\n structuredOutput: boolean\n vision: boolean\n dimension?: number\n status: string\n}\n\ninterface CacheData {\n timestamp: number\n baseUrl: string\n models: ModelAudit[]\n}\n\nconst isBrowser =\n typeof window !== 'undefined' && typeof window.localStorage !== 'undefined'\n\nasync function readCache(baseUrl: string): Promise<ModelAudit[] | null> {\n try {\n if (isBrowser) {\n const cached = window.localStorage.getItem(CACHE_FILE)\n if (!cached) return null\n const data: CacheData = JSON.parse(cached)\n // Check TTL and baseUrl match\n if (data.baseUrl !== baseUrl) return null\n if (Date.now() - data.timestamp > CACHE_TTL_MS) return null\n return data.models\n } else {\n // Node.js: read from file\n const fs = await import('node:fs/promises')\n const path = await import('node:path')\n const cacheFile = path.join(process.cwd(), CACHE_FILE)\n try {\n const content = await fs.readFile(cacheFile, 'utf-8')\n const data: CacheData = JSON.parse(content)\n // Check TTL and baseUrl match\n if (data.baseUrl !== baseUrl) return null\n if (Date.now() - data.timestamp > CACHE_TTL_MS) return null\n return data.models\n } catch {\n return null // File doesn't exist or can't be read\n }\n }\n } catch (e) {\n console.warn('⚠️ Error reading model cache:', e)\n return null\n }\n}\n\nasync function writeCache(\n baseUrl: string,\n models: ModelAudit[]\n): Promise<void> {\n const data: CacheData = {\n timestamp: Date.now(),\n baseUrl,\n models,\n }\n try {\n if (isBrowser) {\n window.localStorage.setItem(CACHE_FILE, JSON.stringify(data))\n } else {\n // Node.js: write to file\n const fs = await import('node:fs/promises')\n const path = await import('node:path')\n const cacheFile = path.join(process.cwd(), CACHE_FILE)\n await fs.writeFile(cacheFile, JSON.stringify(data, null, 2))\n }\n } catch (e) {\n console.error('❌ Error writing model cache:', e)\n }\n}\n\n// ... (fetchWithTimeout, checkStructured, etc. remain the same)\nconst fetchWithTimeout = async (url: string, options: RequestInit) => {\n const controller = new AbortController()\n const id = setTimeout(() => controller.abort(), TIMEOUT_MS)\n try {\n const res = await fetch(url, { ...options, signal: controller.signal })\n clearTimeout(id)\n return res\n } catch (error) {\n clearTimeout(id)\n throw error\n }\n}\n\nasync function checkStructured(\n baseUrl: string,\n modelId: string\n): Promise<{ ok: boolean; msg?: string }> {\n try {\n const schemaPayload = {\n type: 'json_schema',\n json_schema: {\n name: 'test',\n strict: false,\n schema: {\n type: 'object',\n properties: { status: { type: 'string' } },\n },\n },\n }\n const res = await fetchWithTimeout(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: modelId,\n messages: [\n { role: 'system', content: 'You respond in JSON.' },\n { role: 'user', content: 'Return JSON: {\"status\": \"ok\"}' },\n ],\n response_format: schemaPayload,\n max_tokens: 20,\n }),\n })\n if (!res.ok) {\n if (res.status === 400) {\n return checkStructuredLegacy(baseUrl, modelId)\n }\n return { ok: false, msg: `HTTP ${res.status}` }\n }\n const data = await res.json()\n JSON.parse(data.choices[0].message.content)\n return { ok: true, msg: 'OK (Schema)' }\n } catch (e: any) {\n return { ok: false, msg: e.message || 'Error' }\n }\n}\n\nasync function checkStructuredLegacy(\n baseUrl: string,\n modelId: string\n): Promise<{ ok: boolean; msg?: string }> {\n try {\n const res = await fetchWithTimeout(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: modelId,\n messages: [{ role: 'user', content: 'JSON: {\"a\":1}' }],\n response_format: { type: 'json_object' },\n max_tokens: 10,\n }),\n })\n if (res.ok) return { ok: true, msg: 'OK (Legacy Mode)' }\n return { ok: false, msg: 'Not Supported' }\n } catch {\n return { ok: false, msg: 'Legacy Fail' }\n }\n}\n\nasync function checkLLM(baseUrl: string, modelId: string): Promise<boolean> {\n try {\n const res = await fetchWithTimeout(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: modelId,\n messages: [{ role: 'user', content: 'hi' }],\n max_tokens: 1,\n }),\n })\n return res.ok\n } catch {\n return false\n }\n}\n\nasync function checkEmbedding(\n baseUrl: string,\n modelId: string\n): Promise<number | null> {\n try {\n const res = await fetchWithTimeout(`${baseUrl}/embeddings`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ model: modelId, input: 'test' }),\n })\n if (!res.ok) return null\n const data = await res.json()\n return data.data[0]?.embedding?.length ?? null\n } catch {\n return null\n }\n}\n\n// Tiny 1x1 red PNG as base64 for vision testing\nconst TINY_TEST_IMAGE =\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg=='\n\nasync function checkVision(baseUrl: string, modelId: string): Promise<boolean> {\n try {\n const res = await fetchWithTimeout(`${baseUrl}/chat/completions`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n model: modelId,\n messages: [\n {\n role: 'user',\n content: [\n { type: 'text', text: 'What color is this?' },\n { type: 'image_url', image_url: { url: TINY_TEST_IMAGE } },\n ],\n },\n ],\n max_tokens: 10,\n }),\n })\n // If the model accepts the multimodal format without error, it supports vision\n return res.ok\n } catch {\n return false\n }\n}\n\nexport async function auditModels(baseUrl: string): Promise<ModelAudit[]> {\n // 1. Try to load from cache first (file-based with 24h TTL)\n const cachedData = await readCache(baseUrl)\n\n // 2. Get current model list from server\n let serverModelIds: string[] = []\n try {\n const res = await fetch(`${baseUrl}/models`)\n if (!res.ok) throw new Error('Could not connect')\n const data = (await res.json()) as { data: { id: string }[] }\n serverModelIds = data.data.map((m) => m.id).sort()\n } catch (e) {\n // If we have cache and server is unavailable, use cache\n if (cachedData) {\n console.log('⚠️ LM Studio unavailable, using cached model audit.')\n return cachedData\n }\n console.error('❌ Failed to connect to LM Studio.')\n return []\n }\n\n // 3. Check if cache is still valid (same models)\n if (cachedData) {\n const cachedModelIds = cachedData.map((m) => m.id).sort()\n if (JSON.stringify(serverModelIds) === JSON.stringify(cachedModelIds)) {\n console.log('✅ Using cached model audit.')\n return cachedData\n }\n console.log('🔍 Model list changed. Re-running audit...')\n }\n\n // 4. Run full audit\n console.log('🔍 Scanning models (this may take a moment)...')\n const results: ModelAudit[] = []\n const modelList = serverModelIds.map((id) => ({ id }))\n\n let readline: typeof import('node:readline') | undefined\n if (!isBrowser) {\n readline = await import('node:readline')\n }\n\n for (const model of modelList) {\n if (!isBrowser && readline) {\n readline.cursorTo(process.stdout, 0)\n process.stdout.write(`👉 Testing: ${model.id}...`)\n readline.clearLine(process.stdout, 1)\n }\n let type: ModelAudit['type'] = 'Unknown'\n let structured = false\n let vision = false\n let statusMsg = ''\n let dimension: number | undefined = undefined\n\n const isLLM = await checkLLM(baseUrl, model.id)\n const dim = await checkEmbedding(baseUrl, model.id)\n\n if (dim) {\n dimension = dim\n }\n\n if (isLLM) {\n type = 'LLM'\n const structRes = await checkStructured(baseUrl, model.id)\n structured = structRes.ok\n vision = await checkVision(baseUrl, model.id)\n statusMsg = structured ? structRes.msg! : `Fail: ${structRes.msg}`\n if (vision) statusMsg += ' +Vision'\n } else if (dim) {\n type = 'Embedding'\n statusMsg = `OK (Dim: ${dim})`\n } else {\n statusMsg = 'LLM Fail'\n }\n\n results.push({\n id: model.id,\n type,\n structuredOutput: structured,\n vision,\n dimension,\n status: statusMsg,\n })\n }\n if (!isBrowser && readline) {\n readline.cursorTo(process.stdout, 0)\n readline.clearLine(process.stdout, 0)\n }\n\n console.log('\\n')\n console.table(results)\n\n // 5. Save to cache\n await writeCache(baseUrl, results)\n console.log(`📝 Audit results saved to cache.`)\n\n return results\n}\n",
9
- "import { auditModels, type ModelAudit } from './audit'\n\nconst DEFAULT_BASE_URL = 'http://localhost:1234/v1'\n\nexport class LocalModels {\n private models: ModelAudit[] = []\n private defaultLLM: ModelAudit | null = null\n private defaultEmbedding: ModelAudit | null = null\n private defaultStructuredLLM: ModelAudit | null = null\n\n constructor(private baseUrl = DEFAULT_BASE_URL) {}\n\n async audit() {\n this.models = await auditModels(this.baseUrl)\n this.selectDefaults()\n }\n\n private selectDefaults() {\n this.defaultEmbedding =\n this.models.find((m) => m.type === 'Embedding') || null\n this.defaultLLM = this.models.find((m) => m.type === 'LLM') || null\n this.defaultStructuredLLM =\n this.models.find((m) => m.type === 'LLM' && m.structuredOutput) || null\n\n if (!this.defaultEmbedding) {\n console.warn('⚠️ No embedding model found.')\n }\n if (!this.defaultLLM) {\n console.warn('⚠️ No LLM found.')\n }\n if (!this.defaultStructuredLLM) {\n console.warn('⚠️ No LLM with structured output support found.')\n }\n }\n\n getModels() {\n return this.models\n }\n\n private _setDefaultModel(\n modelId: string,\n property: 'defaultLLM' | 'defaultEmbedding' | 'defaultStructuredLLM',\n predicate: (model: ModelAudit) => boolean,\n errorType: string\n ) {\n const model = this.models.find((m) => m.id === modelId && predicate(m))\n if (!model) {\n throw new Error(`Model '${modelId}' not found or is not ${errorType}.`)\n }\n this[property] = model\n }\n\n setDefaultLLM(modelId: string) {\n this._setDefaultModel(\n modelId,\n 'defaultLLM',\n (m) => m.type === 'LLM',\n 'an LLM'\n )\n }\n\n setDefaultEmbedding(modelId: string) {\n this._setDefaultModel(\n modelId,\n 'defaultEmbedding',\n (m) => m.dimension !== undefined,\n 'an embedding model'\n )\n }\n\n setDefaultStructuredLLM(modelId: string) {\n this._setDefaultModel(\n modelId,\n 'defaultStructuredLLM',\n (m) => m.type === 'LLM' && m.structuredOutput,\n 'a structured-output LLM'\n )\n }\n\n getLLM() {\n if (!this.defaultLLM) {\n throw new Error('No LLM available.')\n }\n return this.defaultLLM\n }\n\n getEmbedding() {\n if (!this.defaultEmbedding) {\n throw new Error('No embedding model available.')\n }\n return this.defaultEmbedding\n }\n\n getStructuredLLM() {\n if (!this.defaultStructuredLLM) {\n throw new Error('No structured-output LLM available.')\n }\n return this.defaultStructuredLLM\n }\n}\n",
10
- "import { getStoreCapability as getStoreCapabilityDefault } from './store'\nimport { getLLMCapability } from './llm'\nimport { LocalModels } from './models'\n\n// Check if we're in a browser on HTTPS (can't connect to local HTTP endpoints)\nconst isBrowser = typeof window !== 'undefined'\nconst isHttps = isBrowser && window.location.protocol === 'https:'\n\n// Lazy initialization - don't audit on import\nlet localModels: LocalModels | null = null\nlet llm: ReturnType<typeof getLLMCapability> | null = null\nlet initializationAttempted = false\n\nasync function ensureInitialized() {\n if (initializationAttempted) {\n return { localModels, llm }\n }\n initializationAttempted = true\n\n // Skip local LLM initialization on HTTPS (mixed content would block it anyway)\n if (isHttps) {\n console.log(\n '📡 HTTPS detected - local LLM endpoints disabled. Use HTTP for local LLM support.'\n )\n return { localModels: null, llm: null }\n }\n\n try {\n localModels = new LocalModels()\n await localModels.audit()\n llm = getLLMCapability(localModels)\n } catch (e) {\n console.warn('⚠️ Could not connect to local LLM:', e)\n }\n return { localModels, llm }\n}\n\nexport async function getBatteries() {\n const { localModels, llm } = await ensureInitialized()\n return {\n vector: llm ? { embed: llm.embed } : undefined,\n store: getStoreCapabilityDefault(),\n llmBattery: llm,\n models: localModels,\n }\n}\n\nexport async function getStandardCapabilities() {\n return getBatteries()\n}\n\n// For non-async access (after initialization)\nexport { LocalModels, getLLMCapability, getStoreCapabilityDefault }\n\n// Synchronous batteries object for tests and simple use cases\nexport const batteries = {\n store: getStoreCapabilityDefault(),\n llmBattery: null as ReturnType<typeof getLLMCapability> | null,\n vector: undefined as\n | { embed: (text: string) => Promise<number[]> }\n | undefined,\n models: null as LocalModels | null,\n}\n"
11
- ],
12
- "mappings": "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",
13
- "debugId": "D19E0E009AF3856564756E2164756E21",
14
- "names": []
15
- }