@chrryai/waffles 2.4.42 → 2.4.43
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.
- package/dist/index.d.mts +100 -1
- package/dist/index.d.ts +100 -1
- package/dist/index.js +351 -20
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +330 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -2
package/dist/index.mjs
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import * as dotenv from 'dotenv';
|
|
2
2
|
import { request } from '@playwright/test';
|
|
3
3
|
import { faker } from '@faker-js/faker';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
import { randomUUID } from 'crypto';
|
|
6
|
+
import { Effect } from 'effect';
|
|
4
7
|
|
|
5
|
-
|
|
8
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
9
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
10
|
+
}) : x)(function(x) {
|
|
11
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
12
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
13
|
+
});
|
|
6
14
|
var APIClient = class {
|
|
7
15
|
context = null;
|
|
8
16
|
baseURL;
|
|
@@ -118,6 +126,211 @@ var scheduledJobFactory = {
|
|
|
118
126
|
return Array.from({ length: count }, () => this.build(overrides));
|
|
119
127
|
}
|
|
120
128
|
};
|
|
129
|
+
var BRANCH_STORAGE_KEY = "chrry-branch-agents";
|
|
130
|
+
function getStorage() {
|
|
131
|
+
if (typeof globalThis === "undefined") return {};
|
|
132
|
+
try {
|
|
133
|
+
const raw = globalThis[BRANCH_STORAGE_KEY];
|
|
134
|
+
if (raw) return JSON.parse(raw);
|
|
135
|
+
} catch {
|
|
136
|
+
}
|
|
137
|
+
return {};
|
|
138
|
+
}
|
|
139
|
+
function setStorage(data) {
|
|
140
|
+
if (typeof globalThis !== "undefined") {
|
|
141
|
+
globalThis[BRANCH_STORAGE_KEY] = JSON.stringify(data);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function fileStoragePath() {
|
|
145
|
+
try {
|
|
146
|
+
const cwd = process.cwd();
|
|
147
|
+
return `${cwd}/.chrry/branch-agents.json`;
|
|
148
|
+
} catch {
|
|
149
|
+
return void 0;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function loadFileStorage() {
|
|
153
|
+
const path = fileStoragePath();
|
|
154
|
+
if (!path) return {};
|
|
155
|
+
try {
|
|
156
|
+
const fs = __require("fs");
|
|
157
|
+
if (fs.existsSync(path)) {
|
|
158
|
+
return JSON.parse(fs.readFileSync(path, "utf-8"));
|
|
159
|
+
}
|
|
160
|
+
} catch {
|
|
161
|
+
}
|
|
162
|
+
return {};
|
|
163
|
+
}
|
|
164
|
+
function saveFileStorage(data) {
|
|
165
|
+
const path = fileStoragePath();
|
|
166
|
+
if (!path) return;
|
|
167
|
+
try {
|
|
168
|
+
const fs = __require("fs");
|
|
169
|
+
const dir = path.replace("/branch-agents.json", "");
|
|
170
|
+
if (!fs.existsSync(dir)) {
|
|
171
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
172
|
+
}
|
|
173
|
+
fs.writeFileSync(path, JSON.stringify(data, null, 2));
|
|
174
|
+
} catch {
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function getAllWorkspaces() {
|
|
178
|
+
const mem = getStorage();
|
|
179
|
+
const file = loadFileStorage();
|
|
180
|
+
return { ...file, ...mem };
|
|
181
|
+
}
|
|
182
|
+
function setAllWorkspaces(data) {
|
|
183
|
+
setStorage(data);
|
|
184
|
+
saveFileStorage(data);
|
|
185
|
+
}
|
|
186
|
+
function getCurrentBranch() {
|
|
187
|
+
const envBranch = process.env.CHRRY_BRANCH || process.env.GIT_BRANCH || process.env.GITHUB_HEAD_REF || process.env.CF_PAGES_BRANCH;
|
|
188
|
+
if (envBranch) return envBranch;
|
|
189
|
+
try {
|
|
190
|
+
const branch = execSync("git branch --show-current", {
|
|
191
|
+
encoding: "utf-8",
|
|
192
|
+
stdio: ["pipe", "pipe", "ignore"]
|
|
193
|
+
}).trim();
|
|
194
|
+
if (branch) return branch;
|
|
195
|
+
} catch {
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
const desc = execSync("git describe --all --contains HEAD", {
|
|
199
|
+
encoding: "utf-8",
|
|
200
|
+
stdio: ["pipe", "pipe", "ignore"]
|
|
201
|
+
}).trim();
|
|
202
|
+
if (desc) return desc.replace(/^heads\//, "");
|
|
203
|
+
} catch {
|
|
204
|
+
}
|
|
205
|
+
return void 0;
|
|
206
|
+
}
|
|
207
|
+
function parseBranchName(fullBranch) {
|
|
208
|
+
const parts = fullBranch.split("/");
|
|
209
|
+
if (parts.length >= 2) {
|
|
210
|
+
return {
|
|
211
|
+
namespace: parts.slice(0, -1).join("/"),
|
|
212
|
+
branchName: parts[parts.length - 1]
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
namespace: "default",
|
|
217
|
+
branchName: fullBranch
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
function generateAgentId(namespace, branchName) {
|
|
221
|
+
return `agent-${namespace}-${branchName}-${randomUUID().slice(0, 8)}`;
|
|
222
|
+
}
|
|
223
|
+
function createBranchWorkspace(fullBranchName, overrides) {
|
|
224
|
+
const { namespace, branchName } = parseBranchName(fullBranchName);
|
|
225
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
226
|
+
return {
|
|
227
|
+
id: randomUUID(),
|
|
228
|
+
namespace,
|
|
229
|
+
branchName,
|
|
230
|
+
fullBranchName,
|
|
231
|
+
agentId: overrides?.agentId || generateAgentId(namespace, branchName),
|
|
232
|
+
systemPrompt: overrides?.systemPrompt || defaultSystemPrompt(namespace, branchName),
|
|
233
|
+
instructions: overrides?.instructions || [],
|
|
234
|
+
memories: overrides?.memories || [],
|
|
235
|
+
characterProfile: overrides?.characterProfile,
|
|
236
|
+
evolutionScore: overrides?.evolutionScore ?? 0,
|
|
237
|
+
lastCommitSha: overrides?.lastCommitSha,
|
|
238
|
+
metadata: overrides?.metadata || {
|
|
239
|
+
createdBy: "branch-agent-system",
|
|
240
|
+
version: "1.0"
|
|
241
|
+
},
|
|
242
|
+
createdOn: overrides?.createdOn || now,
|
|
243
|
+
updatedOn: now
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
function defaultSystemPrompt(namespace, branchName) {
|
|
247
|
+
return `You are the AI agent for the branch "${namespace}/${branchName}".
|
|
248
|
+
Your knowledge, memories, and behavior are isolated to this branch.
|
|
249
|
+
When switching branches, save your current context and load the new one.
|
|
250
|
+
Collaborate with other branch agents via @namespace/branch mentions.`;
|
|
251
|
+
}
|
|
252
|
+
function loadBranchWorkspace(fullBranchName) {
|
|
253
|
+
const workspaces = getAllWorkspaces();
|
|
254
|
+
return workspaces[fullBranchName];
|
|
255
|
+
}
|
|
256
|
+
function saveBranchWorkspace(workspace) {
|
|
257
|
+
const workspaces = getAllWorkspaces();
|
|
258
|
+
workspace.updatedOn = (/* @__PURE__ */ new Date()).toISOString();
|
|
259
|
+
workspaces[workspace.fullBranchName] = workspace;
|
|
260
|
+
setAllWorkspaces(workspaces);
|
|
261
|
+
return workspace;
|
|
262
|
+
}
|
|
263
|
+
function getOrCreateBranchWorkspace(fullBranchName) {
|
|
264
|
+
const existing = loadBranchWorkspace(fullBranchName);
|
|
265
|
+
if (existing) return existing;
|
|
266
|
+
const created = createBranchWorkspace(fullBranchName);
|
|
267
|
+
return saveBranchWorkspace(created);
|
|
268
|
+
}
|
|
269
|
+
function switchBranchContext(newBranch, previousBranch) {
|
|
270
|
+
const { namespace, branchName } = parseBranchName(newBranch);
|
|
271
|
+
if (previousBranch) {
|
|
272
|
+
const prevWorkspace = loadBranchWorkspace(previousBranch);
|
|
273
|
+
if (prevWorkspace) {
|
|
274
|
+
saveBranchWorkspace(prevWorkspace);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
const workspace = getOrCreateBranchWorkspace(newBranch);
|
|
278
|
+
return {
|
|
279
|
+
currentBranch: newBranch,
|
|
280
|
+
namespace,
|
|
281
|
+
branchName,
|
|
282
|
+
workspace,
|
|
283
|
+
previousBranch
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
function autoDetectAndSwitch(previousBranch) {
|
|
287
|
+
const current = getCurrentBranch();
|
|
288
|
+
if (!current) return void 0;
|
|
289
|
+
if (current === previousBranch) {
|
|
290
|
+
return {
|
|
291
|
+
currentBranch: current,
|
|
292
|
+
...parseBranchName(current),
|
|
293
|
+
workspace: loadBranchWorkspace(current),
|
|
294
|
+
previousBranch
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
return switchBranchContext(current, previousBranch);
|
|
298
|
+
}
|
|
299
|
+
function deleteBranchWorkspace(fullBranchName) {
|
|
300
|
+
const workspaces = getAllWorkspaces();
|
|
301
|
+
if (!workspaces[fullBranchName]) return false;
|
|
302
|
+
delete workspaces[fullBranchName];
|
|
303
|
+
setAllWorkspaces(workspaces);
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
function recordMutation(fullBranchName, mutation) {
|
|
307
|
+
const workspace = loadBranchWorkspace(fullBranchName);
|
|
308
|
+
if (!workspace) return void 0;
|
|
309
|
+
const mutations = workspace.metadata.mutations || [];
|
|
310
|
+
mutations.push({
|
|
311
|
+
...mutation,
|
|
312
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
313
|
+
});
|
|
314
|
+
const successCount = mutations.filter((m) => m.success).length;
|
|
315
|
+
workspace.evolutionScore = mutations.length > 0 ? successCount / mutations.length : 0;
|
|
316
|
+
workspace.metadata.mutations = mutations.slice(-100);
|
|
317
|
+
return saveBranchWorkspace(workspace);
|
|
318
|
+
}
|
|
319
|
+
function getCurrentBranchSafe() {
|
|
320
|
+
return Effect.sync(() => getCurrentBranch()).pipe(
|
|
321
|
+
Effect.catchAll((e) => Effect.succeed(void 0))
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
function switchBranchContextSafe(newBranch, previousBranch) {
|
|
325
|
+
return Effect.sync(() => switchBranchContext(newBranch, previousBranch)).pipe(
|
|
326
|
+
Effect.catchAll((e) => Effect.fail(String(e)))
|
|
327
|
+
);
|
|
328
|
+
}
|
|
329
|
+
function autoDetectAndSwitchSafe(previousBranch) {
|
|
330
|
+
return Effect.sync(() => autoDetectAndSwitch(previousBranch)).pipe(
|
|
331
|
+
Effect.catchAll((e) => Effect.fail(String(e)))
|
|
332
|
+
);
|
|
333
|
+
}
|
|
121
334
|
|
|
122
335
|
// src/agent/chopstickExpert.ts
|
|
123
336
|
var modelPricing = {
|
|
@@ -353,21 +566,8 @@ var presets = {
|
|
|
353
566
|
reasoning: ["Free preset"]
|
|
354
567
|
}
|
|
355
568
|
};
|
|
356
|
-
var sushiSwaps = {
|
|
357
|
-
"deepseek/deepseek-v3.2": "nvidia/nemotron-3-super-120b-a12b:free",
|
|
358
|
-
"deepseek/deepseek-r1": "qwen/qwen3.6-plus",
|
|
359
|
-
"minimax/minimax-m2.5": "qwen/qwen3.6-plus",
|
|
360
|
-
"minimax/minimax-m2.7": "qwen/qwen3.6-plus"
|
|
361
|
-
};
|
|
362
569
|
function swapModel(modelId, preferFree) {
|
|
363
|
-
|
|
364
|
-
return {
|
|
365
|
-
modelId: "nvidia/nemotron-3-super-120b-a12b:free",
|
|
366
|
-
swapped: modelId !== "nvidia/nemotron-3-super-120b-a12b:free"
|
|
367
|
-
};
|
|
368
|
-
}
|
|
369
|
-
const swapped = sushiSwaps[modelId];
|
|
370
|
-
return swapped ? { modelId: swapped, swapped: true } : { modelId, swapped: false };
|
|
570
|
+
return { modelId, swapped: false };
|
|
371
571
|
}
|
|
372
572
|
function optimizeChopStick(ctx) {
|
|
373
573
|
const reasoning = [];
|
|
@@ -413,14 +613,10 @@ function optimizeChopStick(ctx) {
|
|
|
413
613
|
reasoning.push("Analysis requirement");
|
|
414
614
|
}
|
|
415
615
|
if (ctx.allowsModelSwap) {
|
|
416
|
-
|
|
616
|
+
swapModel(
|
|
417
617
|
modelId,
|
|
418
618
|
ctx.preferFree || (ctx.creditsLeft ?? 10) < 5
|
|
419
619
|
);
|
|
420
|
-
if (swap.swapped) {
|
|
421
|
-
modelId = swap.modelId;
|
|
422
|
-
reasoning.push(`Sushi swap`);
|
|
423
|
-
}
|
|
424
620
|
}
|
|
425
621
|
const pricing = modelPricing[modelId];
|
|
426
622
|
return {
|
|
@@ -515,6 +711,119 @@ function buildRamenPayload(base, ctx) {
|
|
|
515
711
|
};
|
|
516
712
|
}
|
|
517
713
|
|
|
714
|
+
// src/agent/goldenRatio.ts
|
|
715
|
+
var FIBONACCI = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144];
|
|
716
|
+
var DEFAULT_TRIGGERS = [
|
|
717
|
+
{
|
|
718
|
+
feature: "memory",
|
|
719
|
+
homeApp: "hippo",
|
|
720
|
+
threadThreshold: 3,
|
|
721
|
+
messageThreshold: 2
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
feature: "kanban",
|
|
725
|
+
homeApp: "focus",
|
|
726
|
+
threadThreshold: 5,
|
|
727
|
+
messageThreshold: 3
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
feature: "characterProfile",
|
|
731
|
+
homeApp: "hippo",
|
|
732
|
+
threadThreshold: 5,
|
|
733
|
+
messageThreshold: 5
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
feature: "placeholders",
|
|
737
|
+
homeApp: "hippo",
|
|
738
|
+
threadThreshold: 8,
|
|
739
|
+
messageThreshold: 5
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
feature: "instructions",
|
|
743
|
+
homeApp: "sushi",
|
|
744
|
+
threadThreshold: 8,
|
|
745
|
+
messageThreshold: 8
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
feature: "vectorEmbed",
|
|
749
|
+
homeApp: "grape",
|
|
750
|
+
threadThreshold: 13,
|
|
751
|
+
messageThreshold: 8
|
|
752
|
+
}
|
|
753
|
+
];
|
|
754
|
+
function getDefaultTriggers() {
|
|
755
|
+
return DEFAULT_TRIGGERS.map((t) => ({ ...t }));
|
|
756
|
+
}
|
|
757
|
+
function getUserGoldenRatioConfig(userConfig) {
|
|
758
|
+
const defaults = Object.fromEntries(
|
|
759
|
+
DEFAULT_TRIGGERS.map((t) => [
|
|
760
|
+
t.feature,
|
|
761
|
+
{
|
|
762
|
+
threadThreshold: t.threadThreshold,
|
|
763
|
+
messageThreshold: t.messageThreshold,
|
|
764
|
+
enabled: true
|
|
765
|
+
}
|
|
766
|
+
])
|
|
767
|
+
);
|
|
768
|
+
if (!userConfig) return defaults;
|
|
769
|
+
for (const key of Object.keys(userConfig)) {
|
|
770
|
+
const cfg = userConfig[key];
|
|
771
|
+
if (!cfg) continue;
|
|
772
|
+
defaults[key] = {
|
|
773
|
+
threadThreshold: cfg.threadThreshold ?? defaults[key].threadThreshold,
|
|
774
|
+
messageThreshold: cfg.messageThreshold ?? defaults[key].messageThreshold,
|
|
775
|
+
enabled: cfg.enabled ?? true
|
|
776
|
+
};
|
|
777
|
+
}
|
|
778
|
+
return defaults;
|
|
779
|
+
}
|
|
780
|
+
function evaluateGoldenRatio(userThreadCount, threadMessageCount, lastTriggeredFeatures, userConfig) {
|
|
781
|
+
const config2 = getUserGoldenRatioConfig(userConfig);
|
|
782
|
+
const triggeredSet = new Set(lastTriggeredFeatures);
|
|
783
|
+
return DEFAULT_TRIGGERS.map((trigger) => {
|
|
784
|
+
const cfg = config2[trigger.feature];
|
|
785
|
+
const isTriggered = cfg.enabled && userThreadCount >= cfg.threadThreshold && threadMessageCount >= cfg.messageThreshold;
|
|
786
|
+
return {
|
|
787
|
+
feature: trigger.feature,
|
|
788
|
+
homeApp: trigger.homeApp,
|
|
789
|
+
triggered: isTriggered,
|
|
790
|
+
alreadyTriggered: triggeredSet.has(trigger.feature),
|
|
791
|
+
threadThreshold: cfg.threadThreshold,
|
|
792
|
+
messageThreshold: cfg.messageThreshold,
|
|
793
|
+
userThreadCount,
|
|
794
|
+
threadMessageCount
|
|
795
|
+
};
|
|
796
|
+
});
|
|
797
|
+
}
|
|
798
|
+
function getNewlyTriggeredFeatures(userThreadCount, threadMessageCount, lastTriggeredFeatures, userConfig) {
|
|
799
|
+
return evaluateGoldenRatio(
|
|
800
|
+
userThreadCount,
|
|
801
|
+
threadMessageCount,
|
|
802
|
+
lastTriggeredFeatures,
|
|
803
|
+
userConfig
|
|
804
|
+
).filter((e) => e.triggered && !e.alreadyTriggered);
|
|
805
|
+
}
|
|
806
|
+
function getNextFibonacciThreshold(value) {
|
|
807
|
+
const next = FIBONACCI.find((f) => f > value);
|
|
808
|
+
return next ?? FIBONACCI[FIBONACCI.length - 1];
|
|
809
|
+
}
|
|
810
|
+
function formatFibonacciPreview(userThreadCount, threadMessageCount, userConfig) {
|
|
811
|
+
const config2 = getUserGoldenRatioConfig(userConfig);
|
|
812
|
+
return DEFAULT_TRIGGERS.map((trigger) => {
|
|
813
|
+
const cfg = config2[trigger.feature];
|
|
814
|
+
const ready = cfg.enabled && userThreadCount >= cfg.threadThreshold && threadMessageCount >= cfg.messageThreshold;
|
|
815
|
+
return {
|
|
816
|
+
feature: trigger.feature,
|
|
817
|
+
homeApp: trigger.homeApp,
|
|
818
|
+
progressThread: Math.min(1, userThreadCount / cfg.threadThreshold),
|
|
819
|
+
progressMessage: Math.min(1, threadMessageCount / cfg.messageThreshold),
|
|
820
|
+
ready,
|
|
821
|
+
nextThresholdThread: cfg.threadThreshold,
|
|
822
|
+
nextThresholdMessage: cfg.messageThreshold
|
|
823
|
+
};
|
|
824
|
+
});
|
|
825
|
+
}
|
|
826
|
+
|
|
518
827
|
// src/index.ts
|
|
519
828
|
dotenv.config();
|
|
520
829
|
var TEST_GUEST_FINGERPRINTS = (process.env.TEST_GUEST_FINGERPRINTS?.split(",") || []).filter((fp) => fp);
|
|
@@ -626,6 +935,6 @@ var log = ({ page }) => {
|
|
|
626
935
|
});
|
|
627
936
|
};
|
|
628
937
|
|
|
629
|
-
export { APIClient, TEST_GUEST_FINGERPRINTS, TEST_MEMBER_EMAILS, TEST_MEMBER_FINGERPRINTS, TEST_URL, VEX_LIVE_FINGERPRINT, VEX_LIVE_FINGERPRINTS, VEX_LIVE_FINGERPRINT_2, VEX_LIVE_FINGERPRINT_3, VEX_TEST_EMAIL, VEX_TEST_EMAIL_2, VEX_TEST_EMAIL_3, VEX_TEST_EMAIL_4, VEX_TEST_FINGERPRINT, VEX_TEST_FINGERPRINT_2, VEX_TEST_FINGERPRINT_3, VEX_TEST_FINGERPRINT_4, VEX_TEST_PASSWORD, VEX_TEST_PASSWORD_2, VEX_TEST_PASSWORD_3, VEX_TEST_PASSWORD_4, buildRamenPayload, buildStoreKnowledgeBase, capitalizeFirstLetter, getJoinWeights, getModelCredits, getPreset, getURL, isCI, log, modelPricing, optimizeChopStick, presets, scheduledJobFactory, simulateInputPaste, simulatePaste, storeApps, wait };
|
|
938
|
+
export { APIClient, DEFAULT_TRIGGERS, FIBONACCI, TEST_GUEST_FINGERPRINTS, TEST_MEMBER_EMAILS, TEST_MEMBER_FINGERPRINTS, TEST_URL, VEX_LIVE_FINGERPRINT, VEX_LIVE_FINGERPRINTS, VEX_LIVE_FINGERPRINT_2, VEX_LIVE_FINGERPRINT_3, VEX_TEST_EMAIL, VEX_TEST_EMAIL_2, VEX_TEST_EMAIL_3, VEX_TEST_EMAIL_4, VEX_TEST_FINGERPRINT, VEX_TEST_FINGERPRINT_2, VEX_TEST_FINGERPRINT_3, VEX_TEST_FINGERPRINT_4, VEX_TEST_PASSWORD, VEX_TEST_PASSWORD_2, VEX_TEST_PASSWORD_3, VEX_TEST_PASSWORD_4, autoDetectAndSwitch, autoDetectAndSwitchSafe, buildRamenPayload, buildStoreKnowledgeBase, capitalizeFirstLetter, createBranchWorkspace, deleteBranchWorkspace, evaluateGoldenRatio, formatFibonacciPreview, generateAgentId, getCurrentBranch, getCurrentBranchSafe, getDefaultTriggers, getJoinWeights, getModelCredits, getNewlyTriggeredFeatures, getNextFibonacciThreshold, getOrCreateBranchWorkspace, getPreset, getURL, getUserGoldenRatioConfig, isCI, loadBranchWorkspace, log, modelPricing, optimizeChopStick, parseBranchName, presets, recordMutation, saveBranchWorkspace, scheduledJobFactory, simulateInputPaste, simulatePaste, storeApps, switchBranchContext, switchBranchContextSafe, wait };
|
|
630
939
|
//# sourceMappingURL=index.mjs.map
|
|
631
940
|
//# sourceMappingURL=index.mjs.map
|