codebuff 1.0.99

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 (153) hide show
  1. package/README.md +70 -0
  2. package/dist/chat-storage.d.ts +29 -0
  3. package/dist/chat-storage.js +125 -0
  4. package/dist/chat-storage.js.map +1 -0
  5. package/dist/cli.d.ts +37 -0
  6. package/dist/cli.js +416 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/client.d.ts +41 -0
  9. package/dist/client.js +443 -0
  10. package/dist/client.js.map +1 -0
  11. package/dist/code-map/languages.d.ts +12 -0
  12. package/dist/code-map/languages.js +129 -0
  13. package/dist/code-map/languages.js.map +1 -0
  14. package/dist/code-map/parse.d.ts +11 -0
  15. package/dist/code-map/parse.js +127 -0
  16. package/dist/code-map/parse.js.map +1 -0
  17. package/dist/code-map/test-langs/test.d.ts +11 -0
  18. package/dist/code-map/test-langs/test.js +23 -0
  19. package/dist/code-map/test-langs/test.js.map +1 -0
  20. package/dist/code-map/tree-sitter-queries/readme.md +23 -0
  21. package/dist/code-map/tree-sitter-queries/tree-sitter-c-tags.scm +11 -0
  22. package/dist/code-map/tree-sitter-queries/tree-sitter-c_sharp-tags.scm +13 -0
  23. package/dist/code-map/tree-sitter-queries/tree-sitter-cpp-tags.scm +17 -0
  24. package/dist/code-map/tree-sitter-queries/tree-sitter-go-tags.scm +26 -0
  25. package/dist/code-map/tree-sitter-queries/tree-sitter-java-tags.scm +19 -0
  26. package/dist/code-map/tree-sitter-queries/tree-sitter-javascript-tags.scm +15 -0
  27. package/dist/code-map/tree-sitter-queries/tree-sitter-php-tags.scm +26 -0
  28. package/dist/code-map/tree-sitter-queries/tree-sitter-python-tags.scm +9 -0
  29. package/dist/code-map/tree-sitter-queries/tree-sitter-ruby-tags.scm +58 -0
  30. package/dist/code-map/tree-sitter-queries/tree-sitter-rust-tags.scm +26 -0
  31. package/dist/code-map/tree-sitter-queries/tree-sitter-typescript-tags.scm +15 -0
  32. package/dist/code-map/tsconfig.tsbuildinfo +1 -0
  33. package/dist/common/actions.d.ts +1062 -0
  34. package/dist/common/actions.js +180 -0
  35. package/dist/common/actions.js.map +1 -0
  36. package/dist/common/billing/quota-manager.d.ts +59 -0
  37. package/dist/common/billing/quota-manager.js +200 -0
  38. package/dist/common/billing/quota-manager.js.map +1 -0
  39. package/dist/common/constants.d.ts +24 -0
  40. package/dist/common/constants.js +73 -0
  41. package/dist/common/constants.js.map +1 -0
  42. package/dist/common/db/drizzle.config.d.ts +2 -0
  43. package/dist/common/db/drizzle.config.js +17 -0
  44. package/dist/common/db/drizzle.config.js.map +1 -0
  45. package/dist/common/db/env.d.mts +1 -0
  46. package/dist/common/db/env.mjs +26 -0
  47. package/dist/common/db/env.mjs.map +1 -0
  48. package/dist/common/db/index.d.ts +6 -0
  49. package/dist/common/db/index.js +35 -0
  50. package/dist/common/db/index.js.map +1 -0
  51. package/dist/common/db/schema.d.ts +994 -0
  52. package/dist/common/db/schema.js +113 -0
  53. package/dist/common/db/schema.js.map +1 -0
  54. package/dist/common/env.d.mts +1 -0
  55. package/dist/common/env.mjs +34 -0
  56. package/dist/common/env.mjs.map +1 -0
  57. package/dist/common/project-file-tree.d.ts +9 -0
  58. package/dist/common/project-file-tree.js +157 -0
  59. package/dist/common/project-file-tree.js.map +1 -0
  60. package/dist/common/types/referral.d.ts +2 -0
  61. package/dist/common/types/referral.js +5 -0
  62. package/dist/common/types/referral.js.map +1 -0
  63. package/dist/common/types/usage.d.ts +21 -0
  64. package/dist/common/types/usage.js +12 -0
  65. package/dist/common/types/usage.js.map +1 -0
  66. package/dist/common/util/__tests__/string.test.d.ts +1 -0
  67. package/dist/common/util/__tests__/string.test.js +83 -0
  68. package/dist/common/util/__tests__/string.test.js.map +1 -0
  69. package/dist/common/util/array.d.ts +6 -0
  70. package/dist/common/util/array.js +32 -0
  71. package/dist/common/util/array.js.map +1 -0
  72. package/dist/common/util/changes.d.ts +6 -0
  73. package/dist/common/util/changes.js +72 -0
  74. package/dist/common/util/changes.js.map +1 -0
  75. package/dist/common/util/credentials.d.ts +25 -0
  76. package/dist/common/util/credentials.js +24 -0
  77. package/dist/common/util/credentials.js.map +1 -0
  78. package/dist/common/util/dates.d.ts +1 -0
  79. package/dist/common/util/dates.js +13 -0
  80. package/dist/common/util/dates.js.map +1 -0
  81. package/dist/common/util/file.d.ts +106 -0
  82. package/dist/common/util/file.js +138 -0
  83. package/dist/common/util/file.js.map +1 -0
  84. package/dist/common/util/git.d.ts +4 -0
  85. package/dist/common/util/git.js +40 -0
  86. package/dist/common/util/git.js.map +1 -0
  87. package/dist/common/util/helpers.d.ts +1 -0
  88. package/dist/common/util/helpers.js +6 -0
  89. package/dist/common/util/helpers.js.map +1 -0
  90. package/dist/common/util/object.d.ts +18 -0
  91. package/dist/common/util/object.js +91 -0
  92. package/dist/common/util/object.js.map +1 -0
  93. package/dist/common/util/patch.d.ts +1 -0
  94. package/dist/common/util/patch.js +215 -0
  95. package/dist/common/util/patch.js.map +1 -0
  96. package/dist/common/util/promise.d.ts +1 -0
  97. package/dist/common/util/promise.js +33 -0
  98. package/dist/common/util/promise.js.map +1 -0
  99. package/dist/common/util/referral.d.ts +1 -0
  100. package/dist/common/util/referral.js +6 -0
  101. package/dist/common/util/referral.js.map +1 -0
  102. package/dist/common/util/server/referral.d.ts +14 -0
  103. package/dist/common/util/server/referral.js +85 -0
  104. package/dist/common/util/server/referral.js.map +1 -0
  105. package/dist/common/util/string.d.ts +3 -0
  106. package/dist/common/util/string.js +60 -0
  107. package/dist/common/util/string.js.map +1 -0
  108. package/dist/common/util/stripe.d.ts +2 -0
  109. package/dist/common/util/stripe.js +19 -0
  110. package/dist/common/util/stripe.js.map +1 -0
  111. package/dist/common/util/tools.d.ts +2 -0
  112. package/dist/common/util/tools.js +13 -0
  113. package/dist/common/util/tools.js.map +1 -0
  114. package/dist/common/websockets/websocket-client.d.ts +40 -0
  115. package/dist/common/websockets/websocket-client.js +187 -0
  116. package/dist/common/websockets/websocket-client.js.map +1 -0
  117. package/dist/common/websockets/websocket-schema.d.ts +2530 -0
  118. package/dist/common/websockets/websocket-schema.js +55 -0
  119. package/dist/common/websockets/websocket-schema.js.map +1 -0
  120. package/dist/config.d.ts +2 -0
  121. package/dist/config.js +8 -0
  122. package/dist/config.js.map +1 -0
  123. package/dist/credentials.d.ts +3 -0
  124. package/dist/credentials.js +33 -0
  125. package/dist/credentials.js.map +1 -0
  126. package/dist/fingerprint.d.ts +1 -0
  127. package/dist/fingerprint.js +43 -0
  128. package/dist/fingerprint.js.map +1 -0
  129. package/dist/index.d.ts +2 -0
  130. package/dist/index.js +50 -0
  131. package/dist/index.js.map +1 -0
  132. package/dist/manifold-api.d.ts +8 -0
  133. package/dist/manifold-api.js +32 -0
  134. package/dist/manifold-api.js.map +1 -0
  135. package/dist/menu.d.ts +1 -0
  136. package/dist/menu.js +92 -0
  137. package/dist/menu.js.map +1 -0
  138. package/dist/project-files.d.ts +48 -0
  139. package/dist/project-files.js +324 -0
  140. package/dist/project-files.js.map +1 -0
  141. package/dist/tool-handlers.d.ts +11 -0
  142. package/dist/tool-handlers.js +131 -0
  143. package/dist/tool-handlers.js.map +1 -0
  144. package/dist/update-manicode.d.ts +1 -0
  145. package/dist/update-manicode.js +151 -0
  146. package/dist/update-manicode.js.map +1 -0
  147. package/dist/web-scraper.d.ts +3 -0
  148. package/dist/web-scraper.js +79 -0
  149. package/dist/web-scraper.js.map +1 -0
  150. package/dist/worker-script-project-context.d.ts +1 -0
  151. package/dist/worker-script-project-context.js +13 -0
  152. package/dist/worker-script-project-context.js.map +1 -0
  153. package/package.json +62 -0
@@ -0,0 +1,187 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.APIRealtimeClient = void 0;
4
+ exports.formatState = formatState;
5
+ const ws_1 = require("ws");
6
+ const picocolors_1 = require("picocolors");
7
+ // mqp: useful for debugging
8
+ const VERBOSE_LOGGING = false;
9
+ const TIMEOUT_MS = 30_000;
10
+ const RECONNECT_WAIT_MS = 5_000;
11
+ function formatState(state) {
12
+ switch (state) {
13
+ case ws_1.WebSocket.CONNECTING:
14
+ return 'connecting';
15
+ case ws_1.WebSocket.OPEN:
16
+ return 'open';
17
+ case ws_1.WebSocket.CLOSING:
18
+ return 'closing';
19
+ case ws_1.WebSocket.CLOSED:
20
+ return 'closed';
21
+ default:
22
+ throw new Error('Invalid websocket state.');
23
+ }
24
+ }
25
+ /** Client for the API websocket realtime server. Automatically manages reconnection
26
+ * and resubscription on disconnect, and allows subscribers to get a callback
27
+ * when something is broadcasted. */
28
+ class APIRealtimeClient {
29
+ ws;
30
+ url;
31
+ // Callbacks subscribed to individual actions.
32
+ subscribers;
33
+ txid;
34
+ // all txns that are in flight, with no ack/error/timeout
35
+ txns;
36
+ connectTimeout;
37
+ heartbeat;
38
+ hadError = false;
39
+ onError;
40
+ constructor(url, onError) {
41
+ this.url = url;
42
+ this.txid = 0;
43
+ this.txns = new Map();
44
+ this.subscribers = new Map();
45
+ this.onError = onError;
46
+ }
47
+ get state() {
48
+ return this.ws.readyState;
49
+ }
50
+ close() {
51
+ this.ws.close(1000, 'Closed manually.');
52
+ clearTimeout(this.connectTimeout);
53
+ }
54
+ connect() {
55
+ // you may wish to refer to https://websockets.spec.whatwg.org/
56
+ // in order to check the semantics of events etc.
57
+ this.ws = new ws_1.WebSocket(this.url);
58
+ this.ws.onmessage = (ev) => {
59
+ if (this.hadError) {
60
+ this.hadError = false;
61
+ console.log((0, picocolors_1.green)('Reconnected!'));
62
+ }
63
+ this.receiveMessage(JSON.parse(ev.data));
64
+ };
65
+ this.ws.onerror = (ev) => {
66
+ if (!this.hadError) {
67
+ this.onError();
68
+ this.hadError = true;
69
+ }
70
+ // this can fire without an onclose if this is the first time we ever try
71
+ // to connect, so we need to turn on our reconnect in that case
72
+ this.waitAndReconnect();
73
+ };
74
+ this.ws.onclose = (ev) => {
75
+ // note that if the connection closes due to an error, onerror fires and then this
76
+ if (VERBOSE_LOGGING) {
77
+ console.info(`API websocket closed with code=${ev.code}: ${ev.reason}`);
78
+ }
79
+ clearInterval(this.heartbeat);
80
+ // mqp: we might need to change how the txn stuff works if we ever want to
81
+ // implement "wait until i am subscribed, and then do something" in a component.
82
+ // right now it cannot be reliably used to detect that in the presence of reconnects
83
+ for (const txn of Array.from(this.txns.values())) {
84
+ clearTimeout(txn.timeout);
85
+ txn.reject(new Error('Websocket was closed.'));
86
+ }
87
+ this.txns.clear();
88
+ // 1000 is RFC code for normal on-purpose closure
89
+ if (ev.code !== 1000) {
90
+ this.waitAndReconnect();
91
+ }
92
+ };
93
+ return new Promise((resolve) => {
94
+ this.ws.onopen = (_ev) => {
95
+ if (VERBOSE_LOGGING) {
96
+ console.info('API websocket opened.');
97
+ }
98
+ this.heartbeat = setInterval(async () => this.sendMessage('ping', {}).catch(() => { }), 30000);
99
+ resolve();
100
+ };
101
+ });
102
+ }
103
+ waitAndReconnect() {
104
+ if (this.connectTimeout == null) {
105
+ this.connectTimeout = setTimeout(() => {
106
+ this.connectTimeout = undefined;
107
+ this.connect();
108
+ }, RECONNECT_WAIT_MS);
109
+ }
110
+ }
111
+ receiveMessage(msg) {
112
+ if (VERBOSE_LOGGING) {
113
+ console.info('< Incoming API websocket message: ', msg);
114
+ }
115
+ switch (msg.type) {
116
+ case 'action': {
117
+ const action = msg.data;
118
+ const subscribers = this.subscribers.get(action.type) ?? [];
119
+ for (const callback of subscribers) {
120
+ callback(action);
121
+ }
122
+ return;
123
+ }
124
+ case 'ack': {
125
+ if (msg.txid != null) {
126
+ const txn = this.txns.get(msg.txid);
127
+ if (txn == null) {
128
+ // mqp: only reason this should happen is getting an ack after timeout
129
+ console.warn(`Websocket message with old txid=${msg.txid}.`);
130
+ }
131
+ else {
132
+ clearTimeout(txn.timeout);
133
+ if (msg.error != null) {
134
+ txn.reject(new Error(msg.error));
135
+ }
136
+ else {
137
+ txn.resolve();
138
+ }
139
+ this.txns.delete(msg.txid);
140
+ }
141
+ }
142
+ return;
143
+ }
144
+ default:
145
+ console.warn(`Unknown API websocket message type received: ${msg}`);
146
+ }
147
+ }
148
+ async sendMessage(type, data) {
149
+ if (VERBOSE_LOGGING) {
150
+ console.info(`> Outgoing API websocket ${type} message: `, data);
151
+ }
152
+ if (this.state === ws_1.WebSocket.OPEN) {
153
+ return new Promise((resolve, reject) => {
154
+ const txid = this.txid++;
155
+ const timeout = setTimeout(() => {
156
+ this.txns.delete(txid);
157
+ reject(new Error(`Websocket message with txid ${txid} timed out.`));
158
+ }, TIMEOUT_MS);
159
+ this.txns.set(txid, { resolve, reject, timeout });
160
+ this.ws.send(JSON.stringify({ type, txid, ...data }));
161
+ });
162
+ }
163
+ else {
164
+ // expected if components in the code try to subscribe or unsubscribe
165
+ // while the socket is closed -- in this case we expect to get the state
166
+ // fixed up in the websocket onopen handler when we reconnect
167
+ }
168
+ }
169
+ sendAction(action) {
170
+ return this.sendMessage('action', {
171
+ data: action,
172
+ });
173
+ }
174
+ subscribe(action, callback) {
175
+ const currSubscribers = this.subscribers.get(action) ?? [];
176
+ this.subscribers.set(action, [
177
+ ...currSubscribers,
178
+ callback,
179
+ ]);
180
+ return () => {
181
+ const newSubscribers = currSubscribers.filter((cb) => cb !== callback);
182
+ this.subscribers.set(action, newSubscribers);
183
+ };
184
+ }
185
+ }
186
+ exports.APIRealtimeClient = APIRealtimeClient;
187
+ //# sourceMappingURL=websocket-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-client.js","sourceRoot":"","sources":["../../src/websockets/websocket-client.ts"],"names":[],"mappings":"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"}