struere 0.7.4 → 0.8.0
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/bin/struere.js
CHANGED
|
@@ -19399,6 +19399,9 @@ function getApiKey() {
|
|
|
19399
19399
|
|
|
19400
19400
|
// src/cli/utils/convex.ts
|
|
19401
19401
|
var CONVEX_URL = process.env.STRUERE_CONVEX_URL || "https://rapid-wildebeest-172.convex.cloud";
|
|
19402
|
+
function getSiteUrl() {
|
|
19403
|
+
return CONVEX_URL.replace(".cloud", ".site");
|
|
19404
|
+
}
|
|
19402
19405
|
async function listMyOrganizations(token) {
|
|
19403
19406
|
const response = await fetch(`${CONVEX_URL}/api/query`, {
|
|
19404
19407
|
method: "POST",
|
|
@@ -19469,9 +19472,51 @@ async function getUserInfo(token) {
|
|
|
19469
19472
|
}
|
|
19470
19473
|
};
|
|
19471
19474
|
}
|
|
19475
|
+
async function syncViaHttp(apiKey, payload) {
|
|
19476
|
+
const siteUrl = getSiteUrl();
|
|
19477
|
+
let response;
|
|
19478
|
+
try {
|
|
19479
|
+
response = await fetch(`${siteUrl}/v1/sync`, {
|
|
19480
|
+
method: "POST",
|
|
19481
|
+
headers: {
|
|
19482
|
+
"Content-Type": "application/json",
|
|
19483
|
+
Authorization: `Bearer ${apiKey}`
|
|
19484
|
+
},
|
|
19485
|
+
body: JSON.stringify({
|
|
19486
|
+
agents: payload.agents,
|
|
19487
|
+
entityTypes: payload.entityTypes,
|
|
19488
|
+
roles: payload.roles,
|
|
19489
|
+
evalSuites: payload.evalSuites,
|
|
19490
|
+
triggers: payload.triggers,
|
|
19491
|
+
fixtures: payload.fixtures
|
|
19492
|
+
}),
|
|
19493
|
+
signal: AbortSignal.timeout(30000)
|
|
19494
|
+
});
|
|
19495
|
+
} catch (err) {
|
|
19496
|
+
if (err instanceof DOMException && err.name === "TimeoutError") {
|
|
19497
|
+
return { success: false, error: "Sync request timed out after 30s" };
|
|
19498
|
+
}
|
|
19499
|
+
return { success: false, error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
|
|
19500
|
+
}
|
|
19501
|
+
const text = await response.text();
|
|
19502
|
+
let json;
|
|
19503
|
+
try {
|
|
19504
|
+
json = JSON.parse(text);
|
|
19505
|
+
} catch {
|
|
19506
|
+
return { success: false, error: text || `HTTP ${response.status}` };
|
|
19507
|
+
}
|
|
19508
|
+
if (!response.ok) {
|
|
19509
|
+
const msg = json.error || text;
|
|
19510
|
+
return { success: false, error: msg };
|
|
19511
|
+
}
|
|
19512
|
+
return json;
|
|
19513
|
+
}
|
|
19472
19514
|
async function syncOrganization(payload) {
|
|
19473
19515
|
const credentials = loadCredentials();
|
|
19474
19516
|
const apiKey = getApiKey();
|
|
19517
|
+
if (apiKey && !credentials?.token) {
|
|
19518
|
+
return syncViaHttp(apiKey, payload);
|
|
19519
|
+
}
|
|
19475
19520
|
const token = apiKey || credentials?.token;
|
|
19476
19521
|
if (!token) {
|
|
19477
19522
|
return { success: false, error: "Not authenticated" };
|
|
@@ -19511,13 +19556,34 @@ async function syncOrganization(payload) {
|
|
|
19511
19556
|
return json.value;
|
|
19512
19557
|
}
|
|
19513
19558
|
if (json.status === "error") {
|
|
19514
|
-
return { success: false, error: json.errorMessage || "Unknown error from Convex" };
|
|
19559
|
+
return { success: false, error: json.errorData?.message || json.errorMessage || "Unknown error from Convex" };
|
|
19515
19560
|
}
|
|
19516
19561
|
return { success: false, error: `Unexpected response: ${text}` };
|
|
19517
19562
|
}
|
|
19518
19563
|
async function getSyncState(organizationId, environment) {
|
|
19519
19564
|
const credentials = loadCredentials();
|
|
19520
19565
|
const apiKey = getApiKey();
|
|
19566
|
+
if (apiKey && !credentials?.token) {
|
|
19567
|
+
const siteUrl = getSiteUrl();
|
|
19568
|
+
try {
|
|
19569
|
+
const response2 = await fetch(`${siteUrl}/v1/sync/state`, {
|
|
19570
|
+
method: "POST",
|
|
19571
|
+
headers: {
|
|
19572
|
+
"Content-Type": "application/json",
|
|
19573
|
+
Authorization: `Bearer ${apiKey}`
|
|
19574
|
+
},
|
|
19575
|
+
body: "{}"
|
|
19576
|
+
});
|
|
19577
|
+
if (!response2.ok) {
|
|
19578
|
+
const error = await response2.text();
|
|
19579
|
+
return { error };
|
|
19580
|
+
}
|
|
19581
|
+
const result2 = await response2.json();
|
|
19582
|
+
return { state: result2 };
|
|
19583
|
+
} catch (err) {
|
|
19584
|
+
return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
|
|
19585
|
+
}
|
|
19586
|
+
}
|
|
19521
19587
|
const token = apiKey || credentials?.token;
|
|
19522
19588
|
if (!token) {
|
|
19523
19589
|
return { error: "Not authenticated" };
|
|
@@ -19549,6 +19615,27 @@ async function getSyncState(organizationId, environment) {
|
|
|
19549
19615
|
async function getPullState(organizationId, environment = "development") {
|
|
19550
19616
|
const credentials = loadCredentials();
|
|
19551
19617
|
const apiKey = getApiKey();
|
|
19618
|
+
if (apiKey && !credentials?.token) {
|
|
19619
|
+
const siteUrl = getSiteUrl();
|
|
19620
|
+
try {
|
|
19621
|
+
const response2 = await fetch(`${siteUrl}/v1/sync/pull`, {
|
|
19622
|
+
method: "POST",
|
|
19623
|
+
headers: {
|
|
19624
|
+
"Content-Type": "application/json",
|
|
19625
|
+
Authorization: `Bearer ${apiKey}`
|
|
19626
|
+
},
|
|
19627
|
+
body: "{}"
|
|
19628
|
+
});
|
|
19629
|
+
if (!response2.ok) {
|
|
19630
|
+
const error = await response2.text();
|
|
19631
|
+
return { error };
|
|
19632
|
+
}
|
|
19633
|
+
const result2 = await response2.json();
|
|
19634
|
+
return { state: result2 };
|
|
19635
|
+
} catch (err) {
|
|
19636
|
+
return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
|
|
19637
|
+
}
|
|
19638
|
+
}
|
|
19552
19639
|
const token = apiKey || credentials?.token;
|
|
19553
19640
|
if (!token) {
|
|
19554
19641
|
return { error: "Not authenticated" };
|
|
@@ -20597,7 +20684,13 @@ async function importUserFile(filePath) {
|
|
|
20597
20684
|
const source = readFileSync3(filePath, "utf-8");
|
|
20598
20685
|
const uid = `${Date.now()}-${importCounter++}`;
|
|
20599
20686
|
if (!source.includes("'struere'") && !source.includes('"struere"')) {
|
|
20600
|
-
|
|
20687
|
+
try {
|
|
20688
|
+
return await import(`${filePath}?v=${uid}`);
|
|
20689
|
+
} catch (err) {
|
|
20690
|
+
const detail = err instanceof Error ? err.stack || err.message : String(err);
|
|
20691
|
+
throw new Error(`Import error in ${basename(filePath)}:
|
|
20692
|
+
${detail}`);
|
|
20693
|
+
}
|
|
20601
20694
|
}
|
|
20602
20695
|
const stripped = source.replace(IMPORT_STRUERE_RE, "");
|
|
20603
20696
|
const inlined = VIRTUAL_MODULE_SOURCE.trim() + `
|
|
@@ -20607,6 +20700,10 @@ async function importUserFile(filePath) {
|
|
|
20607
20700
|
writeFileSync4(tmpPath, inlined);
|
|
20608
20701
|
try {
|
|
20609
20702
|
return await import(`${tmpPath}?v=${uid}`);
|
|
20703
|
+
} catch (err) {
|
|
20704
|
+
const detail = err instanceof Error ? err.stack || err.message : String(err);
|
|
20705
|
+
throw new Error(`Import error in ${name}.ts:
|
|
20706
|
+
${detail}`);
|
|
20610
20707
|
} finally {
|
|
20611
20708
|
try {
|
|
20612
20709
|
unlinkSync2(tmpPath);
|
|
@@ -21654,10 +21751,16 @@ function extractHandlerCode(handler) {
|
|
|
21654
21751
|
var devCommand = new Command("dev").description("Sync all resources to development environment").option("--force", "Skip destructive sync confirmation").action(async (options) => {
|
|
21655
21752
|
const spinner = ora();
|
|
21656
21753
|
const cwd = process.cwd();
|
|
21754
|
+
const apiKey = getApiKey();
|
|
21755
|
+
const isHeadless = !!apiKey && !loadCredentials()?.token;
|
|
21657
21756
|
console.log();
|
|
21658
21757
|
console.log(source_default.bold("Struere Dev"));
|
|
21659
21758
|
console.log();
|
|
21660
21759
|
if (!hasProject(cwd)) {
|
|
21760
|
+
if (isHeadless) {
|
|
21761
|
+
console.log(source_default.red("No struere.json found. Cannot run init in headless mode."));
|
|
21762
|
+
process.exit(1);
|
|
21763
|
+
}
|
|
21661
21764
|
console.log(source_default.yellow("No struere.json found - initializing project..."));
|
|
21662
21765
|
console.log();
|
|
21663
21766
|
await runInit(cwd);
|
|
@@ -21671,9 +21774,11 @@ var devCommand = new Command("dev").description("Sync all resources to developme
|
|
|
21671
21774
|
generateTypeDeclarations(cwd);
|
|
21672
21775
|
console.log(source_default.gray("Organization:"), source_default.cyan(project.organization.name));
|
|
21673
21776
|
console.log(source_default.gray("Environment:"), source_default.cyan("development"), "+", source_default.cyan("eval"));
|
|
21777
|
+
if (isHeadless) {
|
|
21778
|
+
console.log(source_default.gray("Auth:"), source_default.cyan("API key (headless)"));
|
|
21779
|
+
}
|
|
21674
21780
|
console.log();
|
|
21675
21781
|
let credentials = loadCredentials();
|
|
21676
|
-
const apiKey = getApiKey();
|
|
21677
21782
|
if (!credentials && !apiKey) {
|
|
21678
21783
|
console.log(source_default.yellow("Not logged in - authenticating..."));
|
|
21679
21784
|
console.log();
|
|
@@ -21706,8 +21811,12 @@ var devCommand = new Command("dev").description("Sync all resources to developme
|
|
|
21706
21811
|
const performSync = async () => {
|
|
21707
21812
|
const resources = await loadAllResources(cwd);
|
|
21708
21813
|
if (resources.errors.length > 0) {
|
|
21709
|
-
|
|
21710
|
-
|
|
21814
|
+
for (const err of resources.errors) {
|
|
21815
|
+
console.log(source_default.red(" \u2716"), err);
|
|
21816
|
+
}
|
|
21817
|
+
throw new Error(`${resources.errors.length} resource loading error(s):
|
|
21818
|
+
${resources.errors.join(`
|
|
21819
|
+
`)}`);
|
|
21711
21820
|
}
|
|
21712
21821
|
const payload = extractSyncPayload(resources);
|
|
21713
21822
|
const devResult = await syncOrganization({
|
|
@@ -21754,7 +21863,8 @@ var devCommand = new Command("dev").description("Sync all resources to developme
|
|
|
21754
21863
|
spinner.fail("Failed to load resources");
|
|
21755
21864
|
console.log(source_default.red("Error:"), error instanceof Error ? error.message : String(error));
|
|
21756
21865
|
}
|
|
21757
|
-
|
|
21866
|
+
const shouldSkipConfirmation = options.force || isHeadless;
|
|
21867
|
+
if (initialSyncOk && !shouldSkipConfirmation && loadedResources) {
|
|
21758
21868
|
spinner.start("Checking remote state");
|
|
21759
21869
|
try {
|
|
21760
21870
|
const { state: remoteState } = await getSyncState(project.organization.id, "development");
|
|
@@ -21817,7 +21927,7 @@ var devCommand = new Command("dev").description("Sync all resources to developme
|
|
|
21817
21927
|
await performSync();
|
|
21818
21928
|
spinner.succeed("Synced to development");
|
|
21819
21929
|
} catch (error) {
|
|
21820
|
-
if (isAuthError(error)) {
|
|
21930
|
+
if (isAuthError(error) && !isHeadless) {
|
|
21821
21931
|
spinner.fail("Session expired - re-authenticating...");
|
|
21822
21932
|
clearCredentials();
|
|
21823
21933
|
credentials = await performLogin();
|
|
@@ -21833,6 +21943,11 @@ var devCommand = new Command("dev").description("Sync all resources to developme
|
|
|
21833
21943
|
spinner.fail("Sync failed");
|
|
21834
21944
|
console.log(source_default.red("Error:"), retryError instanceof Error ? retryError.message : String(retryError));
|
|
21835
21945
|
}
|
|
21946
|
+
} else if (isAuthError(error) && isHeadless) {
|
|
21947
|
+
spinner.fail("API key authentication failed");
|
|
21948
|
+
console.log(source_default.red("Error:"), error instanceof Error ? error.message : String(error));
|
|
21949
|
+
console.log(source_default.gray("Check that STRUERE_API_KEY is valid and not expired."));
|
|
21950
|
+
process.exit(1);
|
|
21836
21951
|
} else if (isOrgAccessError(error)) {
|
|
21837
21952
|
spinner.fail("Organization access denied");
|
|
21838
21953
|
console.log();
|
|
@@ -21864,7 +21979,7 @@ var devCommand = new Command("dev").description("Sync all resources to developme
|
|
|
21864
21979
|
].filter((p) => existsSync7(p));
|
|
21865
21980
|
const watcher = import_chokidar.default.watch(watchPaths, {
|
|
21866
21981
|
ignoreInitial: true,
|
|
21867
|
-
ignored: [/node_modules/, /\.struere-tmp
|
|
21982
|
+
ignored: [/node_modules/, /\.struere-tmp-/, /evals\/runs\//],
|
|
21868
21983
|
persistent: true,
|
|
21869
21984
|
usePolling: false
|
|
21870
21985
|
});
|
|
@@ -21876,7 +21991,7 @@ var devCommand = new Command("dev").description("Sync all resources to developme
|
|
|
21876
21991
|
await performSync();
|
|
21877
21992
|
syncSpinner.succeed("Synced");
|
|
21878
21993
|
} catch (error) {
|
|
21879
|
-
if (isAuthError(error)) {
|
|
21994
|
+
if (isAuthError(error) && !isHeadless) {
|
|
21880
21995
|
syncSpinner.fail("Session expired - re-authenticating...");
|
|
21881
21996
|
clearCredentials();
|
|
21882
21997
|
const newCredentials = await performLogin();
|
|
@@ -23760,8 +23875,11 @@ var runCommand = new Command("run").description("Run an eval suite").argument("<
|
|
|
23760
23875
|
}
|
|
23761
23876
|
let filteredCaseIds;
|
|
23762
23877
|
if (options.case && options.case.length > 0) {
|
|
23763
|
-
const
|
|
23764
|
-
const matched = cases.filter((c) =>
|
|
23878
|
+
const patterns = options.case.map((n) => n.toLowerCase());
|
|
23879
|
+
const matched = cases.filter((c) => {
|
|
23880
|
+
const name = c.name.toLowerCase();
|
|
23881
|
+
return patterns.some((p) => name.includes(p));
|
|
23882
|
+
});
|
|
23765
23883
|
if (matched.length === 0) {
|
|
23766
23884
|
spinner.fail("No cases matched");
|
|
23767
23885
|
console.log(source_default.gray(" Available cases:"));
|
|
@@ -24187,7 +24305,7 @@ templatesCommand.command("status <name>").description("Check template approval s
|
|
|
24187
24305
|
// package.json
|
|
24188
24306
|
var package_default = {
|
|
24189
24307
|
name: "struere",
|
|
24190
|
-
version: "0.
|
|
24308
|
+
version: "0.8.0",
|
|
24191
24309
|
description: "Build, test, and deploy AI agents",
|
|
24192
24310
|
keywords: [
|
|
24193
24311
|
"ai",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiBnC,eAAO,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAiBnC,eAAO,MAAM,UAAU,SAoVnB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"eval.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/eval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAmYnC,eAAO,MAAM,WAAW,SACe,CAAA"}
|
package/dist/cli/index.js
CHANGED
|
@@ -62,6 +62,9 @@ import ora from "ora";
|
|
|
62
62
|
|
|
63
63
|
// src/cli/utils/convex.ts
|
|
64
64
|
var CONVEX_URL = process.env.STRUERE_CONVEX_URL || "https://rapid-wildebeest-172.convex.cloud";
|
|
65
|
+
function getSiteUrl() {
|
|
66
|
+
return CONVEX_URL.replace(".cloud", ".site");
|
|
67
|
+
}
|
|
65
68
|
async function listMyOrganizations(token) {
|
|
66
69
|
const response = await fetch(`${CONVEX_URL}/api/query`, {
|
|
67
70
|
method: "POST",
|
|
@@ -132,9 +135,51 @@ async function getUserInfo(token) {
|
|
|
132
135
|
}
|
|
133
136
|
};
|
|
134
137
|
}
|
|
138
|
+
async function syncViaHttp(apiKey, payload) {
|
|
139
|
+
const siteUrl = getSiteUrl();
|
|
140
|
+
let response;
|
|
141
|
+
try {
|
|
142
|
+
response = await fetch(`${siteUrl}/v1/sync`, {
|
|
143
|
+
method: "POST",
|
|
144
|
+
headers: {
|
|
145
|
+
"Content-Type": "application/json",
|
|
146
|
+
Authorization: `Bearer ${apiKey}`
|
|
147
|
+
},
|
|
148
|
+
body: JSON.stringify({
|
|
149
|
+
agents: payload.agents,
|
|
150
|
+
entityTypes: payload.entityTypes,
|
|
151
|
+
roles: payload.roles,
|
|
152
|
+
evalSuites: payload.evalSuites,
|
|
153
|
+
triggers: payload.triggers,
|
|
154
|
+
fixtures: payload.fixtures
|
|
155
|
+
}),
|
|
156
|
+
signal: AbortSignal.timeout(30000)
|
|
157
|
+
});
|
|
158
|
+
} catch (err) {
|
|
159
|
+
if (err instanceof DOMException && err.name === "TimeoutError") {
|
|
160
|
+
return { success: false, error: "Sync request timed out after 30s" };
|
|
161
|
+
}
|
|
162
|
+
return { success: false, error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
|
|
163
|
+
}
|
|
164
|
+
const text = await response.text();
|
|
165
|
+
let json;
|
|
166
|
+
try {
|
|
167
|
+
json = JSON.parse(text);
|
|
168
|
+
} catch {
|
|
169
|
+
return { success: false, error: text || `HTTP ${response.status}` };
|
|
170
|
+
}
|
|
171
|
+
if (!response.ok) {
|
|
172
|
+
const msg = json.error || text;
|
|
173
|
+
return { success: false, error: msg };
|
|
174
|
+
}
|
|
175
|
+
return json;
|
|
176
|
+
}
|
|
135
177
|
async function syncOrganization(payload) {
|
|
136
178
|
const credentials = loadCredentials();
|
|
137
179
|
const apiKey = getApiKey();
|
|
180
|
+
if (apiKey && !credentials?.token) {
|
|
181
|
+
return syncViaHttp(apiKey, payload);
|
|
182
|
+
}
|
|
138
183
|
const token = apiKey || credentials?.token;
|
|
139
184
|
if (!token) {
|
|
140
185
|
return { success: false, error: "Not authenticated" };
|
|
@@ -174,13 +219,34 @@ async function syncOrganization(payload) {
|
|
|
174
219
|
return json.value;
|
|
175
220
|
}
|
|
176
221
|
if (json.status === "error") {
|
|
177
|
-
return { success: false, error: json.errorMessage || "Unknown error from Convex" };
|
|
222
|
+
return { success: false, error: json.errorData?.message || json.errorMessage || "Unknown error from Convex" };
|
|
178
223
|
}
|
|
179
224
|
return { success: false, error: `Unexpected response: ${text}` };
|
|
180
225
|
}
|
|
181
226
|
async function getSyncState(organizationId, environment) {
|
|
182
227
|
const credentials = loadCredentials();
|
|
183
228
|
const apiKey = getApiKey();
|
|
229
|
+
if (apiKey && !credentials?.token) {
|
|
230
|
+
const siteUrl = getSiteUrl();
|
|
231
|
+
try {
|
|
232
|
+
const response2 = await fetch(`${siteUrl}/v1/sync/state`, {
|
|
233
|
+
method: "POST",
|
|
234
|
+
headers: {
|
|
235
|
+
"Content-Type": "application/json",
|
|
236
|
+
Authorization: `Bearer ${apiKey}`
|
|
237
|
+
},
|
|
238
|
+
body: "{}"
|
|
239
|
+
});
|
|
240
|
+
if (!response2.ok) {
|
|
241
|
+
const error = await response2.text();
|
|
242
|
+
return { error };
|
|
243
|
+
}
|
|
244
|
+
const result2 = await response2.json();
|
|
245
|
+
return { state: result2 };
|
|
246
|
+
} catch (err) {
|
|
247
|
+
return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
184
250
|
const token = apiKey || credentials?.token;
|
|
185
251
|
if (!token) {
|
|
186
252
|
return { error: "Not authenticated" };
|
|
@@ -212,6 +278,27 @@ async function getSyncState(organizationId, environment) {
|
|
|
212
278
|
async function getPullState(organizationId, environment = "development") {
|
|
213
279
|
const credentials = loadCredentials();
|
|
214
280
|
const apiKey = getApiKey();
|
|
281
|
+
if (apiKey && !credentials?.token) {
|
|
282
|
+
const siteUrl = getSiteUrl();
|
|
283
|
+
try {
|
|
284
|
+
const response2 = await fetch(`${siteUrl}/v1/sync/pull`, {
|
|
285
|
+
method: "POST",
|
|
286
|
+
headers: {
|
|
287
|
+
"Content-Type": "application/json",
|
|
288
|
+
Authorization: `Bearer ${apiKey}`
|
|
289
|
+
},
|
|
290
|
+
body: "{}"
|
|
291
|
+
});
|
|
292
|
+
if (!response2.ok) {
|
|
293
|
+
const error = await response2.text();
|
|
294
|
+
return { error };
|
|
295
|
+
}
|
|
296
|
+
const result2 = await response2.json();
|
|
297
|
+
return { state: result2 };
|
|
298
|
+
} catch (err) {
|
|
299
|
+
return { error: `Network error: ${err instanceof Error ? err.message : String(err)}` };
|
|
300
|
+
}
|
|
301
|
+
}
|
|
215
302
|
const token = apiKey || credentials?.token;
|
|
216
303
|
if (!token) {
|
|
217
304
|
return { error: "Not authenticated" };
|
|
@@ -1263,7 +1350,13 @@ async function importUserFile(filePath) {
|
|
|
1263
1350
|
const source = readFileSync3(filePath, "utf-8");
|
|
1264
1351
|
const uid = `${Date.now()}-${importCounter++}`;
|
|
1265
1352
|
if (!source.includes("'struere'") && !source.includes('"struere"')) {
|
|
1266
|
-
|
|
1353
|
+
try {
|
|
1354
|
+
return await import(`${filePath}?v=${uid}`);
|
|
1355
|
+
} catch (err) {
|
|
1356
|
+
const detail = err instanceof Error ? err.stack || err.message : String(err);
|
|
1357
|
+
throw new Error(`Import error in ${basename(filePath)}:
|
|
1358
|
+
${detail}`);
|
|
1359
|
+
}
|
|
1267
1360
|
}
|
|
1268
1361
|
const stripped = source.replace(IMPORT_STRUERE_RE, "");
|
|
1269
1362
|
const inlined = VIRTUAL_MODULE_SOURCE.trim() + `
|
|
@@ -1273,6 +1366,10 @@ async function importUserFile(filePath) {
|
|
|
1273
1366
|
writeFileSync4(tmpPath, inlined);
|
|
1274
1367
|
try {
|
|
1275
1368
|
return await import(`${tmpPath}?v=${uid}`);
|
|
1369
|
+
} catch (err) {
|
|
1370
|
+
const detail = err instanceof Error ? err.stack || err.message : String(err);
|
|
1371
|
+
throw new Error(`Import error in ${name}.ts:
|
|
1372
|
+
${detail}`);
|
|
1276
1373
|
} finally {
|
|
1277
1374
|
try {
|
|
1278
1375
|
unlinkSync2(tmpPath);
|
|
@@ -2324,10 +2421,16 @@ function extractHandlerCode(handler) {
|
|
|
2324
2421
|
var devCommand = new Command4("dev").description("Sync all resources to development environment").option("--force", "Skip destructive sync confirmation").action(async (options) => {
|
|
2325
2422
|
const spinner = ora4();
|
|
2326
2423
|
const cwd = process.cwd();
|
|
2424
|
+
const apiKey = getApiKey();
|
|
2425
|
+
const isHeadless = !!apiKey && !loadCredentials()?.token;
|
|
2327
2426
|
console.log();
|
|
2328
2427
|
console.log(chalk4.bold("Struere Dev"));
|
|
2329
2428
|
console.log();
|
|
2330
2429
|
if (!hasProject(cwd)) {
|
|
2430
|
+
if (isHeadless) {
|
|
2431
|
+
console.log(chalk4.red("No struere.json found. Cannot run init in headless mode."));
|
|
2432
|
+
process.exit(1);
|
|
2433
|
+
}
|
|
2331
2434
|
console.log(chalk4.yellow("No struere.json found - initializing project..."));
|
|
2332
2435
|
console.log();
|
|
2333
2436
|
await runInit(cwd);
|
|
@@ -2341,9 +2444,11 @@ var devCommand = new Command4("dev").description("Sync all resources to developm
|
|
|
2341
2444
|
generateTypeDeclarations(cwd);
|
|
2342
2445
|
console.log(chalk4.gray("Organization:"), chalk4.cyan(project.organization.name));
|
|
2343
2446
|
console.log(chalk4.gray("Environment:"), chalk4.cyan("development"), "+", chalk4.cyan("eval"));
|
|
2447
|
+
if (isHeadless) {
|
|
2448
|
+
console.log(chalk4.gray("Auth:"), chalk4.cyan("API key (headless)"));
|
|
2449
|
+
}
|
|
2344
2450
|
console.log();
|
|
2345
2451
|
let credentials = loadCredentials();
|
|
2346
|
-
const apiKey = getApiKey();
|
|
2347
2452
|
if (!credentials && !apiKey) {
|
|
2348
2453
|
console.log(chalk4.yellow("Not logged in - authenticating..."));
|
|
2349
2454
|
console.log();
|
|
@@ -2376,8 +2481,12 @@ var devCommand = new Command4("dev").description("Sync all resources to developm
|
|
|
2376
2481
|
const performSync = async () => {
|
|
2377
2482
|
const resources = await loadAllResources(cwd);
|
|
2378
2483
|
if (resources.errors.length > 0) {
|
|
2379
|
-
|
|
2380
|
-
|
|
2484
|
+
for (const err of resources.errors) {
|
|
2485
|
+
console.log(chalk4.red(" \u2716"), err);
|
|
2486
|
+
}
|
|
2487
|
+
throw new Error(`${resources.errors.length} resource loading error(s):
|
|
2488
|
+
${resources.errors.join(`
|
|
2489
|
+
`)}`);
|
|
2381
2490
|
}
|
|
2382
2491
|
const payload = extractSyncPayload(resources);
|
|
2383
2492
|
const devResult = await syncOrganization({
|
|
@@ -2424,7 +2533,8 @@ var devCommand = new Command4("dev").description("Sync all resources to developm
|
|
|
2424
2533
|
spinner.fail("Failed to load resources");
|
|
2425
2534
|
console.log(chalk4.red("Error:"), error instanceof Error ? error.message : String(error));
|
|
2426
2535
|
}
|
|
2427
|
-
|
|
2536
|
+
const shouldSkipConfirmation = options.force || isHeadless;
|
|
2537
|
+
if (initialSyncOk && !shouldSkipConfirmation && loadedResources) {
|
|
2428
2538
|
spinner.start("Checking remote state");
|
|
2429
2539
|
try {
|
|
2430
2540
|
const { state: remoteState } = await getSyncState(project.organization.id, "development");
|
|
@@ -2487,7 +2597,7 @@ var devCommand = new Command4("dev").description("Sync all resources to developm
|
|
|
2487
2597
|
await performSync();
|
|
2488
2598
|
spinner.succeed("Synced to development");
|
|
2489
2599
|
} catch (error) {
|
|
2490
|
-
if (isAuthError(error)) {
|
|
2600
|
+
if (isAuthError(error) && !isHeadless) {
|
|
2491
2601
|
spinner.fail("Session expired - re-authenticating...");
|
|
2492
2602
|
clearCredentials();
|
|
2493
2603
|
credentials = await performLogin();
|
|
@@ -2503,6 +2613,11 @@ var devCommand = new Command4("dev").description("Sync all resources to developm
|
|
|
2503
2613
|
spinner.fail("Sync failed");
|
|
2504
2614
|
console.log(chalk4.red("Error:"), retryError instanceof Error ? retryError.message : String(retryError));
|
|
2505
2615
|
}
|
|
2616
|
+
} else if (isAuthError(error) && isHeadless) {
|
|
2617
|
+
spinner.fail("API key authentication failed");
|
|
2618
|
+
console.log(chalk4.red("Error:"), error instanceof Error ? error.message : String(error));
|
|
2619
|
+
console.log(chalk4.gray("Check that STRUERE_API_KEY is valid and not expired."));
|
|
2620
|
+
process.exit(1);
|
|
2506
2621
|
} else if (isOrgAccessError(error)) {
|
|
2507
2622
|
spinner.fail("Organization access denied");
|
|
2508
2623
|
console.log();
|
|
@@ -2534,7 +2649,7 @@ var devCommand = new Command4("dev").description("Sync all resources to developm
|
|
|
2534
2649
|
].filter((p) => existsSync7(p));
|
|
2535
2650
|
const watcher = chokidar.watch(watchPaths, {
|
|
2536
2651
|
ignoreInitial: true,
|
|
2537
|
-
ignored: [/node_modules/, /\.struere-tmp
|
|
2652
|
+
ignored: [/node_modules/, /\.struere-tmp-/, /evals\/runs\//],
|
|
2538
2653
|
persistent: true,
|
|
2539
2654
|
usePolling: false
|
|
2540
2655
|
});
|
|
@@ -2546,7 +2661,7 @@ var devCommand = new Command4("dev").description("Sync all resources to developm
|
|
|
2546
2661
|
await performSync();
|
|
2547
2662
|
syncSpinner.succeed("Synced");
|
|
2548
2663
|
} catch (error) {
|
|
2549
|
-
if (isAuthError(error)) {
|
|
2664
|
+
if (isAuthError(error) && !isHeadless) {
|
|
2550
2665
|
syncSpinner.fail("Session expired - re-authenticating...");
|
|
2551
2666
|
clearCredentials();
|
|
2552
2667
|
const newCredentials = await performLogin();
|
|
@@ -4457,8 +4572,11 @@ var runCommand = new Command12("run").description("Run an eval suite").argument(
|
|
|
4457
4572
|
}
|
|
4458
4573
|
let filteredCaseIds;
|
|
4459
4574
|
if (options.case && options.case.length > 0) {
|
|
4460
|
-
const
|
|
4461
|
-
const matched = cases.filter((c) =>
|
|
4575
|
+
const patterns = options.case.map((n) => n.toLowerCase());
|
|
4576
|
+
const matched = cases.filter((c) => {
|
|
4577
|
+
const name = c.name.toLowerCase();
|
|
4578
|
+
return patterns.some((p) => name.includes(p));
|
|
4579
|
+
});
|
|
4462
4580
|
if (matched.length === 0) {
|
|
4463
4581
|
spinner.fail("No cases matched");
|
|
4464
4582
|
console.log(chalk13.gray(" Available cases:"));
|
|
@@ -4888,7 +5006,7 @@ templatesCommand.command("status <name>").description("Check template approval s
|
|
|
4888
5006
|
// package.json
|
|
4889
5007
|
var package_default = {
|
|
4890
5008
|
name: "struere",
|
|
4891
|
-
version: "0.
|
|
5009
|
+
version: "0.8.0",
|
|
4892
5010
|
description: "Build, test, and deploy AI agents",
|
|
4893
5011
|
keywords: [
|
|
4894
5012
|
"ai",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convex.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/convex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"convex.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/convex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAmClJ,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,WAAW,EAAE,gBAAgB,EAAE,CAAA;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,WAAW,EAAE,aAAa,EAAE,CAAA;IAC5B,UAAU,EAAE,mBAAmB,EAAE,CAAA;IACjC,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,QAAQ,EAAE,iBAAiB,EAAE,CAAA;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAgB5E;AAuGD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAUA"}
|