runmat 0.2.7

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 (54) hide show
  1. package/README.md +228 -0
  2. package/dist/fs/default.d.ts +7 -0
  3. package/dist/fs/default.d.ts.map +1 -0
  4. package/dist/fs/default.js +21 -0
  5. package/dist/fs/default.js.map +1 -0
  6. package/dist/fs/index.d.ts +6 -0
  7. package/dist/fs/index.d.ts.map +1 -0
  8. package/dist/fs/index.js +5 -0
  9. package/dist/fs/index.js.map +1 -0
  10. package/dist/fs/indexeddb.d.ts +16 -0
  11. package/dist/fs/indexeddb.d.ts.map +1 -0
  12. package/dist/fs/indexeddb.js +186 -0
  13. package/dist/fs/indexeddb.js.map +1 -0
  14. package/dist/fs/memory.d.ts +41 -0
  15. package/dist/fs/memory.d.ts.map +1 -0
  16. package/dist/fs/memory.js +429 -0
  17. package/dist/fs/memory.js.map +1 -0
  18. package/dist/fs/path.d.ts +5 -0
  19. package/dist/fs/path.d.ts.map +1 -0
  20. package/dist/fs/path.js +56 -0
  21. package/dist/fs/path.js.map +1 -0
  22. package/dist/fs/provider-types.d.ts +28 -0
  23. package/dist/fs/provider-types.d.ts.map +1 -0
  24. package/dist/fs/provider-types.js +2 -0
  25. package/dist/fs/provider-types.js.map +1 -0
  26. package/dist/fs/remote.d.ts +10 -0
  27. package/dist/fs/remote.d.ts.map +1 -0
  28. package/dist/fs/remote.js +200 -0
  29. package/dist/fs/remote.js.map +1 -0
  30. package/dist/fusion-plan.d.ts +15 -0
  31. package/dist/fusion-plan.d.ts.map +1 -0
  32. package/dist/fusion-plan.js +59 -0
  33. package/dist/fusion-plan.js.map +1 -0
  34. package/dist/index.d.ts +434 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +619 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/test/node-sync-xhr.d.ts +2 -0
  39. package/dist/test/node-sync-xhr.d.ts.map +1 -0
  40. package/dist/test/node-sync-xhr.js +163 -0
  41. package/dist/test/node-sync-xhr.js.map +1 -0
  42. package/dist/test/setup.d.ts +2 -0
  43. package/dist/test/setup.d.ts.map +1 -0
  44. package/dist/test/setup.js +6 -0
  45. package/dist/test/setup.js.map +1 -0
  46. package/dist/webgpu-shims.d.ts +14 -0
  47. package/dist/webgpu-shims.d.ts.map +1 -0
  48. package/dist/webgpu-shims.js +85 -0
  49. package/dist/webgpu-shims.js.map +1 -0
  50. package/dist/workspace-hover.d.ts +69 -0
  51. package/dist/workspace-hover.d.ts.map +1 -0
  52. package/dist/workspace-hover.js +168 -0
  53. package/dist/workspace-hover.js.map +1 -0
  54. package/package.json +62 -0
@@ -0,0 +1,200 @@
1
+ import { normalizePath } from "./path.js";
2
+ const DEFAULT_CHUNK_BYTES = 8 * 1024 * 1024;
3
+ export function createRemoteFsProvider(options) {
4
+ if (!options.baseUrl) {
5
+ throw new Error("Remote provider requires options.baseUrl");
6
+ }
7
+ const chunkBytes = Math.max(64 * 1024, options.chunkBytes ?? DEFAULT_CHUNK_BYTES);
8
+ const timeout = options.timeoutMs ?? 120_000;
9
+ const client = new RemoteHttpClient(options.baseUrl, timeout, options.authToken, options.headers);
10
+ return {
11
+ readFile(path) {
12
+ const normalized = normalizePath(path);
13
+ if (normalized === "/") {
14
+ throw new Error("remote fs: cannot read '/'");
15
+ }
16
+ const meta = client.fetchMetadata(normalized);
17
+ const length = meta.len ?? 0;
18
+ if (length === 0) {
19
+ return new Uint8Array();
20
+ }
21
+ const buffer = new Uint8Array(length);
22
+ let offset = 0;
23
+ while (offset < length) {
24
+ const size = Math.min(chunkBytes, length - offset);
25
+ const chunk = client.readChunk(normalized, offset, size);
26
+ buffer.set(chunk, offset);
27
+ offset += chunk.length;
28
+ }
29
+ return buffer;
30
+ },
31
+ writeFile(path, data) {
32
+ const normalized = normalizePath(path);
33
+ if (normalized === "/") {
34
+ throw new Error("remote fs: cannot overwrite '/'");
35
+ }
36
+ const bytes = toUint8Array(data);
37
+ let offset = 0;
38
+ let chunkIndex = 0;
39
+ while (offset < bytes.length) {
40
+ const end = Math.min(offset + chunkBytes, bytes.length);
41
+ const chunk = bytes.subarray(offset, end);
42
+ client.writeChunk(normalized, offset, chunk, chunkIndex === 0);
43
+ offset = end;
44
+ chunkIndex += 1;
45
+ }
46
+ if (bytes.length === 0) {
47
+ client.writeChunk(normalized, 0, new Uint8Array(), true);
48
+ }
49
+ },
50
+ removeFile(path) {
51
+ client.delete("/fs/file", { path: normalizePath(path) });
52
+ },
53
+ metadata(path) {
54
+ return client.fetchMetadata(normalizePath(path));
55
+ },
56
+ symlinkMetadata(path) {
57
+ return client.fetchMetadata(normalizePath(path));
58
+ },
59
+ readDir(path) {
60
+ const payload = client.getJson("/fs/dir", { path: normalizePath(path) });
61
+ return payload.map(mapDirEntry);
62
+ },
63
+ canonicalize(path) {
64
+ const result = client.getJson("/fs/canonicalize", {
65
+ path: normalizePath(path)
66
+ });
67
+ return result.path;
68
+ },
69
+ createDir(path) {
70
+ client.postJson("/fs/mkdir", { path: normalizePath(path), recursive: false });
71
+ },
72
+ createDirAll(path) {
73
+ client.postJson("/fs/mkdir", { path: normalizePath(path), recursive: true });
74
+ },
75
+ removeDir(path) {
76
+ client.delete("/fs/dir", { path: normalizePath(path), recursive: "false" });
77
+ },
78
+ removeDirAll(path) {
79
+ client.delete("/fs/dir", { path: normalizePath(path), recursive: "true" });
80
+ },
81
+ rename(from, to) {
82
+ client.postJson("/fs/rename", {
83
+ from: normalizePath(from),
84
+ to: normalizePath(to)
85
+ });
86
+ },
87
+ setReadonly(path, readonly) {
88
+ client.postJson("/fs/set-readonly", {
89
+ path: normalizePath(path),
90
+ readonly: Boolean(readonly)
91
+ });
92
+ }
93
+ };
94
+ }
95
+ class RemoteHttpClient {
96
+ baseUrl;
97
+ timeoutMs;
98
+ authToken;
99
+ extraHeaders;
100
+ constructor(baseUrl, timeoutMs, authToken, extraHeaders = {}) {
101
+ this.baseUrl = baseUrl;
102
+ this.timeoutMs = timeoutMs;
103
+ this.authToken = authToken;
104
+ this.extraHeaders = extraHeaders;
105
+ }
106
+ fetchMetadata(path) {
107
+ const payload = this.getJson("/fs/metadata", { path });
108
+ return {
109
+ fileType: payload.fileType,
110
+ len: payload.len,
111
+ modified: payload.modified,
112
+ readonly: payload.readonly
113
+ };
114
+ }
115
+ readChunk(path, offset, length) {
116
+ const response = this.send("GET", "/fs/read", {
117
+ path,
118
+ offset: String(offset),
119
+ length: String(length)
120
+ }, "arraybuffer");
121
+ return new Uint8Array(response ?? []);
122
+ }
123
+ writeChunk(path, offset, data, truncate) {
124
+ const query = {
125
+ path,
126
+ offset: String(offset)
127
+ };
128
+ if (truncate) {
129
+ query.truncate = "true";
130
+ }
131
+ this.send("PUT", "/fs/write", query, "arraybuffer", data);
132
+ }
133
+ delete(route, query) {
134
+ this.send("DELETE", route, query, "json");
135
+ }
136
+ postJson(route, body) {
137
+ this.send("POST", route, {}, "json", JSON.stringify(body), "application/json");
138
+ }
139
+ getJson(route, query) {
140
+ return this.send("GET", route, query, "json");
141
+ }
142
+ send(method, route, query, responseType, body, contentType) {
143
+ const xhr = new XMLHttpRequest();
144
+ xhr.open(method, buildUrl(this.baseUrl, route, query), false);
145
+ xhr.timeout = this.timeoutMs;
146
+ xhr.responseType = responseType;
147
+ const headers = {
148
+ "X-RunMat-Client": "remote-fs",
149
+ ...this.extraHeaders
150
+ };
151
+ if (this.authToken) {
152
+ headers.Authorization = `Bearer ${this.authToken}`;
153
+ }
154
+ if (contentType) {
155
+ headers["Content-Type"] = contentType;
156
+ }
157
+ for (const [key, value] of Object.entries(headers)) {
158
+ xhr.setRequestHeader(key, value);
159
+ }
160
+ const sendBody = body === undefined ? null : body;
161
+ try {
162
+ xhr.send(sendBody);
163
+ }
164
+ catch (error) {
165
+ throw new Error(`remote fs http error: ${String(error)}`);
166
+ }
167
+ if (xhr.status < 200 || xhr.status >= 300) {
168
+ throw new Error(`remote fs request failed (${xhr.status}): ${xhr.responseText || xhr.statusText}`);
169
+ }
170
+ return xhr.response;
171
+ }
172
+ }
173
+ function buildUrl(base, route, query) {
174
+ const url = new URL(route.replace(/^\//, ""), base.endsWith("/") ? base : `${base}/`);
175
+ const params = new URLSearchParams();
176
+ for (const [key, value] of Object.entries(query)) {
177
+ if (value !== undefined && value !== null) {
178
+ params.append(key, value);
179
+ }
180
+ }
181
+ url.search = params.toString();
182
+ return url.toString();
183
+ }
184
+ function mapDirEntry(entry) {
185
+ return {
186
+ path: entry.path,
187
+ fileName: entry.fileName,
188
+ fileType: entry.fileType
189
+ };
190
+ }
191
+ function toUint8Array(data) {
192
+ if (data instanceof Uint8Array) {
193
+ return data;
194
+ }
195
+ if (data instanceof ArrayBuffer) {
196
+ return new Uint8Array(data);
197
+ }
198
+ return new Uint8Array(data.buffer, data.byteOffset, data.byteLength);
199
+ }
200
+ //# sourceMappingURL=remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/fs/remote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ExecuteResult, FusionPlanSnapshot, RunMatSessionHandle } from "./index.js";
2
+ export interface FusionPlanAdapterOptions {
3
+ session: RunMatSessionHandle;
4
+ onPlanChange?: (plan: FusionPlanSnapshot | null) => void;
5
+ }
6
+ export interface FusionPlanAdapter {
7
+ readonly enabled: boolean;
8
+ readonly plan: FusionPlanSnapshot | null;
9
+ setEnabled(enabled: boolean): void;
10
+ handleExecutionResult(result: ExecuteResult): void;
11
+ subscribe(listener: (plan: FusionPlanSnapshot | null) => void): () => void;
12
+ dispose(): void;
13
+ }
14
+ export declare function createFusionPlanAdapter(options: FusionPlanAdapterOptions): FusionPlanAdapter;
15
+ //# sourceMappingURL=fusion-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fusion-plan.d.ts","sourceRoot":"","sources":["../src/fusion-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEzF,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC1D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACzC,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACnD,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3E,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,wBAAwB,GAAG,iBAAiB,CA0D5F"}
@@ -0,0 +1,59 @@
1
+ export function createFusionPlanAdapter(options) {
2
+ let enabled = false;
3
+ let currentPlan = null;
4
+ const listeners = new Set();
5
+ const notify = () => {
6
+ options.onPlanChange?.(currentPlan);
7
+ for (const listener of listeners) {
8
+ try {
9
+ listener(currentPlan);
10
+ }
11
+ catch (error) {
12
+ console.error("FusionPlanAdapter listener failed", error);
13
+ }
14
+ }
15
+ };
16
+ const setEnabledInternal = (next) => {
17
+ if (enabled === next) {
18
+ return;
19
+ }
20
+ enabled = next;
21
+ try {
22
+ options.session.setFusionPlanEnabled(next);
23
+ }
24
+ catch (error) {
25
+ console.warn("Failed to toggle fusion plan emission", error);
26
+ }
27
+ };
28
+ return {
29
+ get enabled() {
30
+ return enabled;
31
+ },
32
+ get plan() {
33
+ return currentPlan;
34
+ },
35
+ setEnabled(next) {
36
+ setEnabledInternal(next);
37
+ if (!next) {
38
+ currentPlan = null;
39
+ notify();
40
+ }
41
+ },
42
+ handleExecutionResult(result) {
43
+ currentPlan = result.fusionPlan ?? null;
44
+ notify();
45
+ },
46
+ subscribe(listener) {
47
+ listeners.add(listener);
48
+ return () => listeners.delete(listener);
49
+ },
50
+ dispose() {
51
+ if (enabled) {
52
+ setEnabledInternal(false);
53
+ }
54
+ listeners.clear();
55
+ currentPlan = null;
56
+ },
57
+ };
58
+ }
59
+ //# sourceMappingURL=fusion-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fusion-plan.js","sourceRoot":"","sources":["../src/fusion-plan.ts"],"names":[],"mappings":"AAgBA,MAAM,UAAU,uBAAuB,CAAC,OAAiC;IACvE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,WAAW,GAA8B,IAAI,CAAC;IAClD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6C,CAAC;IAEvE,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,OAAO,CAAC,YAAY,EAAE,CAAC,WAAW,CAAC,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAE,EAAE;QAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,CAAC;YACH,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,OAAO;YACT,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,IAAI,IAAI;YACN,OAAO,WAAW,CAAC;QACrB,CAAC;QACD,UAAU,CAAC,IAAa;YACtB,kBAAkB,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,WAAW,GAAG,IAAI,CAAC;gBACnB,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;QACD,qBAAqB,CAAC,MAAqB;YACzC,WAAW,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;YACxC,MAAM,EAAE,CAAC;QACX,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO;YACL,IAAI,OAAO,EAAE,CAAC;gBACZ,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;YACD,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,WAAW,GAAG,IAAI,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}