struere 0.7.0 → 0.7.1

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.
@@ -13559,9 +13559,9 @@ var require_readdirp = __commonJS((exports, module) => {
13559
13559
  async _formatEntry(dirent, path) {
13560
13560
  let entry;
13561
13561
  try {
13562
- const basename2 = this._isDirent ? dirent.name : dirent;
13563
- const fullPath = sysPath.resolve(sysPath.join(path, basename2));
13564
- entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename: basename2 };
13562
+ const basename3 = this._isDirent ? dirent.name : dirent;
13563
+ const fullPath = sysPath.resolve(sysPath.join(path, basename3));
13564
+ entry = { path: sysPath.relative(this._root, fullPath), fullPath, basename: basename3 };
13565
13565
  entry[this._statsProp] = this._isDirent ? dirent : await this._stat(fullPath);
13566
13566
  } catch (err) {
13567
13567
  this._onError(err);
@@ -15484,16 +15484,16 @@ var require_nodefs_handler = __commonJS((exports, module) => {
15484
15484
  _watchWithNodeFs(path, listener) {
15485
15485
  const opts = this.fsw.options;
15486
15486
  const directory = sysPath.dirname(path);
15487
- const basename2 = sysPath.basename(path);
15487
+ const basename3 = sysPath.basename(path);
15488
15488
  const parent = this.fsw._getWatchedDir(directory);
15489
- parent.add(basename2);
15489
+ parent.add(basename3);
15490
15490
  const absolutePath = sysPath.resolve(path);
15491
15491
  const options = { persistent: opts.persistent };
15492
15492
  if (!listener)
15493
15493
  listener = EMPTY_FN;
15494
15494
  let closer;
15495
15495
  if (opts.usePolling) {
15496
- options.interval = opts.enableBinaryInterval && isBinaryPath(basename2) ? opts.binaryInterval : opts.interval;
15496
+ options.interval = opts.enableBinaryInterval && isBinaryPath(basename3) ? opts.binaryInterval : opts.interval;
15497
15497
  closer = setFsWatchFileListener(path, absolutePath, options, {
15498
15498
  listener,
15499
15499
  rawEmitter: this.fsw._emitRaw
@@ -15512,10 +15512,10 @@ var require_nodefs_handler = __commonJS((exports, module) => {
15512
15512
  return;
15513
15513
  }
15514
15514
  const dirname4 = sysPath.dirname(file);
15515
- const basename2 = sysPath.basename(file);
15515
+ const basename3 = sysPath.basename(file);
15516
15516
  const parent = this.fsw._getWatchedDir(dirname4);
15517
15517
  let prevStats = stats;
15518
- if (parent.has(basename2))
15518
+ if (parent.has(basename3))
15519
15519
  return;
15520
15520
  const listener = async (path, newStats) => {
15521
15521
  if (!this.fsw._throttle(THROTTLE_MODE_WATCH, file, 5))
@@ -15538,9 +15538,9 @@ var require_nodefs_handler = __commonJS((exports, module) => {
15538
15538
  prevStats = newStats2;
15539
15539
  }
15540
15540
  } catch (error) {
15541
- this.fsw._remove(dirname4, basename2);
15541
+ this.fsw._remove(dirname4, basename3);
15542
15542
  }
15543
- } else if (parent.has(basename2)) {
15543
+ } else if (parent.has(basename3)) {
15544
15544
  const at = newStats.atimeMs;
15545
15545
  const mt = newStats.mtimeMs;
15546
15546
  if (!at || at <= mt || mt !== prevStats.mtimeMs) {
@@ -19351,7 +19351,7 @@ var esm_default4 = createPrompt((config, done) => {
19351
19351
  return `${lines}${cursorHide}`;
19352
19352
  });
19353
19353
  // src/cli/commands/init.ts
19354
- import { basename } from "path";
19354
+ import { basename as basename2 } from "path";
19355
19355
 
19356
19356
  // src/cli/utils/credentials.ts
19357
19357
  import { homedir } from "os";
@@ -20549,20 +20549,23 @@ import { existsSync as existsSync6, mkdirSync as mkdirSync4, writeFileSync as wr
20549
20549
  // src/cli/utils/loader.ts
20550
20550
  var import_yaml = __toESM(require_dist(), 1);
20551
20551
  import { existsSync as existsSync5, readdirSync, readFileSync as readFileSync3, writeFileSync as writeFileSync4, unlinkSync as unlinkSync2 } from "fs";
20552
- import { join as join5, dirname as dirname2 } from "path";
20552
+ import { join as join5, dirname as dirname2, basename } from "path";
20553
20553
  var IMPORT_STRUERE_RE = /import\s+\{[^}]*\}\s*from\s*['"]struere['"]\s*;?\n?/g;
20554
+ var importCounter = 0;
20554
20555
  async function importUserFile(filePath) {
20555
20556
  const source = readFileSync3(filePath, "utf-8");
20557
+ const uid = `${Date.now()}-${importCounter++}`;
20556
20558
  if (!source.includes("'struere'") && !source.includes('"struere"')) {
20557
- return await import(`${filePath}?update=${Date.now()}`);
20559
+ return await import(`${filePath}?v=${uid}`);
20558
20560
  }
20559
20561
  const stripped = source.replace(IMPORT_STRUERE_RE, "");
20560
20562
  const inlined = VIRTUAL_MODULE_SOURCE.trim() + `
20561
20563
  ` + stripped;
20562
- const tmpPath = join5(dirname2(filePath), `.struere-tmp-${Date.now()}.ts`);
20564
+ const name = basename(filePath, ".ts");
20565
+ const tmpPath = join5(dirname2(filePath), `.struere-tmp-${name}-${uid}.ts`);
20563
20566
  writeFileSync4(tmpPath, inlined);
20564
20567
  try {
20565
- return await import(`${tmpPath}?update=${Date.now()}`);
20568
+ return await import(`${tmpPath}?v=${uid}`);
20566
20569
  } finally {
20567
20570
  try {
20568
20571
  unlinkSync2(tmpPath);
@@ -20855,7 +20858,7 @@ async function runInit(cwd, selectedOrg) {
20855
20858
  }
20856
20859
  console.log(source_default.gray(" Organization:"), source_default.cyan(org.name));
20857
20860
  console.log();
20858
- const projectName = slugify(basename(cwd));
20861
+ const projectName = slugify(basename2(cwd));
20859
20862
  spinner.start("Creating project structure");
20860
20863
  const scaffoldResult = scaffoldProject(cwd, {
20861
20864
  projectName,
@@ -20939,7 +20942,7 @@ var initCommand = new Command("init").description("Initialize a new Struere orga
20939
20942
  console.log();
20940
20943
  let projectName = projectNameArg;
20941
20944
  if (!projectName) {
20942
- projectName = slugify(basename(cwd));
20945
+ projectName = slugify(basename2(cwd));
20943
20946
  }
20944
20947
  projectName = slugify(projectName);
20945
20948
  spinner.start("Creating project structure");
@@ -21009,6 +21012,13 @@ var BUILTIN_TOOLS = [
21009
21012
  "calendar.update",
21010
21013
  "calendar.delete",
21011
21014
  "calendar.freeBusy",
21015
+ "whatsapp.send",
21016
+ "whatsapp.sendTemplate",
21017
+ "whatsapp.sendInteractive",
21018
+ "whatsapp.sendMedia",
21019
+ "whatsapp.listTemplates",
21020
+ "whatsapp.getConversation",
21021
+ "whatsapp.getStatus",
21012
21022
  "agent.chat"
21013
21023
  ];
21014
21024
  function extractSyncPayload(resources) {
@@ -21149,6 +21159,13 @@ function getBuiltinToolDescription(name) {
21149
21159
  "calendar.update": "Update an existing Google Calendar event",
21150
21160
  "calendar.delete": "Delete a Google Calendar event",
21151
21161
  "calendar.freeBusy": "Check free/busy availability on a user's Google Calendar",
21162
+ "whatsapp.send": "Send a text message via WhatsApp",
21163
+ "whatsapp.sendTemplate": "Send a pre-approved template message via WhatsApp (works outside 24h window)",
21164
+ "whatsapp.sendInteractive": "Send an interactive button message via WhatsApp (max 3 buttons)",
21165
+ "whatsapp.sendMedia": "Send an image or audio message via WhatsApp",
21166
+ "whatsapp.listTemplates": "List available WhatsApp message templates",
21167
+ "whatsapp.getConversation": "Get WhatsApp conversation history with a phone number",
21168
+ "whatsapp.getStatus": "Get WhatsApp connection status for this organization",
21152
21169
  "agent.chat": "Send a message to another agent and get its response"
21153
21170
  };
21154
21171
  return descriptions[name] || name;
@@ -21290,6 +21307,93 @@ function getBuiltinToolParameters(name) {
21290
21307
  },
21291
21308
  required: ["userId", "timeMin", "timeMax"]
21292
21309
  },
21310
+ "whatsapp.send": {
21311
+ type: "object",
21312
+ properties: {
21313
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
21314
+ text: { type: "string", description: "The text message to send" }
21315
+ },
21316
+ required: ["to", "text"]
21317
+ },
21318
+ "whatsapp.sendTemplate": {
21319
+ type: "object",
21320
+ properties: {
21321
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
21322
+ templateName: { type: "string", description: "Name of the approved template to send" },
21323
+ language: { type: "string", description: 'Template language code (e.g., "en_US")' },
21324
+ components: {
21325
+ type: "array",
21326
+ description: "Optional template components with parameter values",
21327
+ items: {
21328
+ type: "object",
21329
+ properties: {
21330
+ type: { type: "string", description: 'Component type (e.g., "body", "header")' },
21331
+ parameters: {
21332
+ type: "array",
21333
+ items: {
21334
+ type: "object",
21335
+ properties: {
21336
+ type: { type: "string", description: 'Parameter type (e.g., "text")' },
21337
+ text: { type: "string", description: "Parameter text value" },
21338
+ parameterName: { type: "string", description: "Named parameter name (for NAMED format templates)" }
21339
+ },
21340
+ required: ["type"]
21341
+ }
21342
+ }
21343
+ },
21344
+ required: ["type", "parameters"]
21345
+ }
21346
+ }
21347
+ },
21348
+ required: ["to", "templateName", "language"]
21349
+ },
21350
+ "whatsapp.sendInteractive": {
21351
+ type: "object",
21352
+ properties: {
21353
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
21354
+ bodyText: { type: "string", description: "The message body text" },
21355
+ buttons: {
21356
+ type: "array",
21357
+ description: "Action buttons (1-3 buttons, max 20 chars per title)",
21358
+ items: {
21359
+ type: "object",
21360
+ properties: {
21361
+ id: { type: "string", description: "Unique button identifier returned on click" },
21362
+ title: { type: "string", description: "Button label shown to user (max 20 characters)" }
21363
+ },
21364
+ required: ["id", "title"]
21365
+ }
21366
+ },
21367
+ footerText: { type: "string", description: "Optional footer text below the buttons" }
21368
+ },
21369
+ required: ["to", "bodyText", "buttons"]
21370
+ },
21371
+ "whatsapp.sendMedia": {
21372
+ type: "object",
21373
+ properties: {
21374
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
21375
+ mediaUrl: { type: "string", description: "Public URL of the media file to send" },
21376
+ mediaType: { type: "string", enum: ["image", "audio"], description: "Type of media to send" },
21377
+ caption: { type: "string", description: "Optional caption (only supported for images)" }
21378
+ },
21379
+ required: ["to", "mediaUrl", "mediaType"]
21380
+ },
21381
+ "whatsapp.listTemplates": {
21382
+ type: "object",
21383
+ properties: {}
21384
+ },
21385
+ "whatsapp.getConversation": {
21386
+ type: "object",
21387
+ properties: {
21388
+ phoneNumber: { type: "string", description: "Phone number to get conversation history for" },
21389
+ limit: { type: "number", description: "Maximum number of messages to return" }
21390
+ },
21391
+ required: ["phoneNumber"]
21392
+ },
21393
+ "whatsapp.getStatus": {
21394
+ type: "object",
21395
+ properties: {}
21396
+ },
21293
21397
  "agent.chat": {
21294
21398
  type: "object",
21295
21399
  properties: {
@@ -23056,7 +23160,7 @@ entitiesCommand.command("search <type> <query>").description("Search entities").
23056
23160
  // package.json
23057
23161
  var package_default = {
23058
23162
  name: "struere",
23059
- version: "0.7.0",
23163
+ version: "0.7.1",
23060
23164
  description: "Build, test, and deploy AI agents",
23061
23165
  keywords: [
23062
23166
  "ai",
package/dist/cli/index.js CHANGED
@@ -9,7 +9,7 @@ import { Command as Command3 } from "commander";
9
9
  import chalk3 from "chalk";
10
10
  import ora3 from "ora";
11
11
  import { select } from "@inquirer/prompts";
12
- import { basename } from "path";
12
+ import { basename as basename2 } from "path";
13
13
 
14
14
  // src/cli/utils/credentials.ts
15
15
  import { homedir } from "os";
@@ -1214,21 +1214,24 @@ import { existsSync as existsSync6, mkdirSync as mkdirSync4, writeFileSync as wr
1214
1214
 
1215
1215
  // src/cli/utils/loader.ts
1216
1216
  import { existsSync as existsSync5, readdirSync, readFileSync as readFileSync3, writeFileSync as writeFileSync4, unlinkSync as unlinkSync2 } from "fs";
1217
- import { join as join5, dirname as dirname2 } from "path";
1217
+ import { join as join5, dirname as dirname2, basename } from "path";
1218
1218
  import YAML from "yaml";
1219
1219
  var IMPORT_STRUERE_RE = /import\s+\{[^}]*\}\s*from\s*['"]struere['"]\s*;?\n?/g;
1220
+ var importCounter = 0;
1220
1221
  async function importUserFile(filePath) {
1221
1222
  const source = readFileSync3(filePath, "utf-8");
1223
+ const uid = `${Date.now()}-${importCounter++}`;
1222
1224
  if (!source.includes("'struere'") && !source.includes('"struere"')) {
1223
- return await import(`${filePath}?update=${Date.now()}`);
1225
+ return await import(`${filePath}?v=${uid}`);
1224
1226
  }
1225
1227
  const stripped = source.replace(IMPORT_STRUERE_RE, "");
1226
1228
  const inlined = VIRTUAL_MODULE_SOURCE.trim() + `
1227
1229
  ` + stripped;
1228
- const tmpPath = join5(dirname2(filePath), `.struere-tmp-${Date.now()}.ts`);
1230
+ const name = basename(filePath, ".ts");
1231
+ const tmpPath = join5(dirname2(filePath), `.struere-tmp-${name}-${uid}.ts`);
1229
1232
  writeFileSync4(tmpPath, inlined);
1230
1233
  try {
1231
- return await import(`${tmpPath}?update=${Date.now()}`);
1234
+ return await import(`${tmpPath}?v=${uid}`);
1232
1235
  } finally {
1233
1236
  try {
1234
1237
  unlinkSync2(tmpPath);
@@ -1521,7 +1524,7 @@ async function runInit(cwd, selectedOrg) {
1521
1524
  }
1522
1525
  console.log(chalk3.gray(" Organization:"), chalk3.cyan(org.name));
1523
1526
  console.log();
1524
- const projectName = slugify(basename(cwd));
1527
+ const projectName = slugify(basename2(cwd));
1525
1528
  spinner.start("Creating project structure");
1526
1529
  const scaffoldResult = scaffoldProject(cwd, {
1527
1530
  projectName,
@@ -1605,7 +1608,7 @@ var initCommand = new Command3("init").description("Initialize a new Struere org
1605
1608
  console.log();
1606
1609
  let projectName = projectNameArg;
1607
1610
  if (!projectName) {
1608
- projectName = slugify(basename(cwd));
1611
+ projectName = slugify(basename2(cwd));
1609
1612
  }
1610
1613
  projectName = slugify(projectName);
1611
1614
  spinner.start("Creating project structure");
@@ -1679,6 +1682,13 @@ var BUILTIN_TOOLS = [
1679
1682
  "calendar.update",
1680
1683
  "calendar.delete",
1681
1684
  "calendar.freeBusy",
1685
+ "whatsapp.send",
1686
+ "whatsapp.sendTemplate",
1687
+ "whatsapp.sendInteractive",
1688
+ "whatsapp.sendMedia",
1689
+ "whatsapp.listTemplates",
1690
+ "whatsapp.getConversation",
1691
+ "whatsapp.getStatus",
1682
1692
  "agent.chat"
1683
1693
  ];
1684
1694
  function extractSyncPayload(resources) {
@@ -1819,6 +1829,13 @@ function getBuiltinToolDescription(name) {
1819
1829
  "calendar.update": "Update an existing Google Calendar event",
1820
1830
  "calendar.delete": "Delete a Google Calendar event",
1821
1831
  "calendar.freeBusy": "Check free/busy availability on a user's Google Calendar",
1832
+ "whatsapp.send": "Send a text message via WhatsApp",
1833
+ "whatsapp.sendTemplate": "Send a pre-approved template message via WhatsApp (works outside 24h window)",
1834
+ "whatsapp.sendInteractive": "Send an interactive button message via WhatsApp (max 3 buttons)",
1835
+ "whatsapp.sendMedia": "Send an image or audio message via WhatsApp",
1836
+ "whatsapp.listTemplates": "List available WhatsApp message templates",
1837
+ "whatsapp.getConversation": "Get WhatsApp conversation history with a phone number",
1838
+ "whatsapp.getStatus": "Get WhatsApp connection status for this organization",
1822
1839
  "agent.chat": "Send a message to another agent and get its response"
1823
1840
  };
1824
1841
  return descriptions[name] || name;
@@ -1960,6 +1977,93 @@ function getBuiltinToolParameters(name) {
1960
1977
  },
1961
1978
  required: ["userId", "timeMin", "timeMax"]
1962
1979
  },
1980
+ "whatsapp.send": {
1981
+ type: "object",
1982
+ properties: {
1983
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
1984
+ text: { type: "string", description: "The text message to send" }
1985
+ },
1986
+ required: ["to", "text"]
1987
+ },
1988
+ "whatsapp.sendTemplate": {
1989
+ type: "object",
1990
+ properties: {
1991
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
1992
+ templateName: { type: "string", description: "Name of the approved template to send" },
1993
+ language: { type: "string", description: 'Template language code (e.g., "en_US")' },
1994
+ components: {
1995
+ type: "array",
1996
+ description: "Optional template components with parameter values",
1997
+ items: {
1998
+ type: "object",
1999
+ properties: {
2000
+ type: { type: "string", description: 'Component type (e.g., "body", "header")' },
2001
+ parameters: {
2002
+ type: "array",
2003
+ items: {
2004
+ type: "object",
2005
+ properties: {
2006
+ type: { type: "string", description: 'Parameter type (e.g., "text")' },
2007
+ text: { type: "string", description: "Parameter text value" },
2008
+ parameterName: { type: "string", description: "Named parameter name (for NAMED format templates)" }
2009
+ },
2010
+ required: ["type"]
2011
+ }
2012
+ }
2013
+ },
2014
+ required: ["type", "parameters"]
2015
+ }
2016
+ }
2017
+ },
2018
+ required: ["to", "templateName", "language"]
2019
+ },
2020
+ "whatsapp.sendInteractive": {
2021
+ type: "object",
2022
+ properties: {
2023
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
2024
+ bodyText: { type: "string", description: "The message body text" },
2025
+ buttons: {
2026
+ type: "array",
2027
+ description: "Action buttons (1-3 buttons, max 20 chars per title)",
2028
+ items: {
2029
+ type: "object",
2030
+ properties: {
2031
+ id: { type: "string", description: "Unique button identifier returned on click" },
2032
+ title: { type: "string", description: "Button label shown to user (max 20 characters)" }
2033
+ },
2034
+ required: ["id", "title"]
2035
+ }
2036
+ },
2037
+ footerText: { type: "string", description: "Optional footer text below the buttons" }
2038
+ },
2039
+ required: ["to", "bodyText", "buttons"]
2040
+ },
2041
+ "whatsapp.sendMedia": {
2042
+ type: "object",
2043
+ properties: {
2044
+ to: { type: "string", description: 'Recipient phone number in E.164 format (e.g., "+15551234567")' },
2045
+ mediaUrl: { type: "string", description: "Public URL of the media file to send" },
2046
+ mediaType: { type: "string", enum: ["image", "audio"], description: "Type of media to send" },
2047
+ caption: { type: "string", description: "Optional caption (only supported for images)" }
2048
+ },
2049
+ required: ["to", "mediaUrl", "mediaType"]
2050
+ },
2051
+ "whatsapp.listTemplates": {
2052
+ type: "object",
2053
+ properties: {}
2054
+ },
2055
+ "whatsapp.getConversation": {
2056
+ type: "object",
2057
+ properties: {
2058
+ phoneNumber: { type: "string", description: "Phone number to get conversation history for" },
2059
+ limit: { type: "number", description: "Maximum number of messages to return" }
2060
+ },
2061
+ required: ["phoneNumber"]
2062
+ },
2063
+ "whatsapp.getStatus": {
2064
+ type: "object",
2065
+ properties: {}
2066
+ },
1963
2067
  "agent.chat": {
1964
2068
  type: "object",
1965
2069
  properties: {
@@ -3750,7 +3854,7 @@ entitiesCommand.command("search <type> <query>").description("Search entities").
3750
3854
  // package.json
3751
3855
  var package_default = {
3752
3856
  name: "struere",
3753
- version: "0.7.0",
3857
+ version: "0.7.1",
3754
3858
  description: "Build, test, and deploy AI agents",
3755
3859
  keywords: [
3756
3860
  "ai",
@@ -1 +1 @@
1
- {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/extractor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/extractor.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,MAAM,aAAa,CAAA;AAuB/H,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,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAc5E;AA8ED,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;CACjB,CASA"}
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,MAAM,aAAa,CAAA;AA2B/H,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,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAc5E;AA8ED,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;CACjB,CASA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "struere",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "Build, test, and deploy AI agents",
5
5
  "keywords": [
6
6
  "ai",