archal 0.9.18 → 0.9.19
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/clone-assets/apify/tools.json +30 -64
- package/clone-assets/github/tools.json +6 -0
- package/clone-assets/supabase/tools.json +74 -14
- package/dist/cli.cjs +39277 -26395
- package/dist/index.cjs +1 -1
- package/dist/seed/dynamic-generator.cjs +256 -133
- package/dist/vitest/{chunk-IVXSSEYS.js → chunk-L36NXAU6.js} +165 -100
- package/dist/vitest/{chunk-CTSN67QR.js → chunk-WZ7SA4CK.js} +298 -117
- package/dist/vitest/index.cjs +509 -269
- package/dist/vitest/index.js +2 -2
- package/dist/vitest/runtime/hosted-session-reaper.cjs +293 -112
- package/dist/vitest/runtime/hosted-session-reaper.js +1 -1
- package/dist/vitest/runtime/setup-files.js +2 -2
- package/package.json +9 -9
- package/skills/attach/SKILL.md +402 -0
- package/skills/onboard/SKILL.md +12 -0
|
@@ -591,8 +591,9 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
591
591
|
icon: "AP",
|
|
592
592
|
name: "Apify",
|
|
593
593
|
description: "Actors, runs, datasets, key-value stores, and request queues.",
|
|
594
|
-
toolCount:
|
|
595
|
-
transport: "rest"
|
|
594
|
+
toolCount: 43,
|
|
595
|
+
transport: "rest",
|
|
596
|
+
opsCoverage: null
|
|
596
597
|
},
|
|
597
598
|
{
|
|
598
599
|
id: "discord",
|
|
@@ -600,7 +601,17 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
600
601
|
name: "Discord",
|
|
601
602
|
description: "Guilds, channels, messages, webhooks, threads, commands, and interaction responses.",
|
|
602
603
|
toolCount: 67,
|
|
603
|
-
transport: "both"
|
|
604
|
+
transport: "both",
|
|
605
|
+
opsCoverage: 14
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
id: "firecrawl",
|
|
609
|
+
icon: "FC",
|
|
610
|
+
name: "Firecrawl",
|
|
611
|
+
description: "Scraping, crawling, mapping, search, and extraction.",
|
|
612
|
+
toolCount: 6,
|
|
613
|
+
transport: "rest",
|
|
614
|
+
opsCoverage: 77
|
|
604
615
|
},
|
|
605
616
|
{
|
|
606
617
|
id: "github",
|
|
@@ -608,7 +619,8 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
608
619
|
name: "GitHub",
|
|
609
620
|
description: "Repos, issues, pull requests, branches, and commits.",
|
|
610
621
|
toolCount: 26,
|
|
611
|
-
transport: "both"
|
|
622
|
+
transport: "both",
|
|
623
|
+
opsCoverage: 96
|
|
612
624
|
},
|
|
613
625
|
{
|
|
614
626
|
id: "google-workspace",
|
|
@@ -616,7 +628,17 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
616
628
|
name: "Google Workspace",
|
|
617
629
|
description: "Gmail, Calendar, Drive, Sheets, and Contacts.",
|
|
618
630
|
toolCount: 249,
|
|
619
|
-
transport: "both"
|
|
631
|
+
transport: "both",
|
|
632
|
+
opsCoverage: 64
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
id: "hubspot",
|
|
636
|
+
icon: "HS",
|
|
637
|
+
name: "HubSpot",
|
|
638
|
+
description: "CRM contacts, companies, deals, tickets, and engagements.",
|
|
639
|
+
toolCount: 45,
|
|
640
|
+
transport: "rest",
|
|
641
|
+
opsCoverage: 10
|
|
620
642
|
},
|
|
621
643
|
{
|
|
622
644
|
id: "jira",
|
|
@@ -624,7 +646,8 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
624
646
|
name: "Jira",
|
|
625
647
|
description: "Issues, projects, boards, sprints, and versions.",
|
|
626
648
|
toolCount: 49,
|
|
627
|
-
transport: "both"
|
|
649
|
+
transport: "both",
|
|
650
|
+
opsCoverage: 80
|
|
628
651
|
},
|
|
629
652
|
{
|
|
630
653
|
id: "linear",
|
|
@@ -632,7 +655,8 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
632
655
|
name: "Linear",
|
|
633
656
|
description: "Issues, projects, teams, cycles, and workflows.",
|
|
634
657
|
toolCount: 42,
|
|
635
|
-
transport: "both"
|
|
658
|
+
transport: "both",
|
|
659
|
+
opsCoverage: 98
|
|
636
660
|
},
|
|
637
661
|
{
|
|
638
662
|
id: "ramp",
|
|
@@ -640,7 +664,17 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
640
664
|
name: "Ramp",
|
|
641
665
|
description: "Cards, funds, expenses, reimbursements, bills, and travel.",
|
|
642
666
|
toolCount: 46,
|
|
643
|
-
transport: "mcp"
|
|
667
|
+
transport: "mcp",
|
|
668
|
+
opsCoverage: null
|
|
669
|
+
},
|
|
670
|
+
{
|
|
671
|
+
id: "sendgrid",
|
|
672
|
+
icon: "SG",
|
|
673
|
+
name: "SendGrid",
|
|
674
|
+
description: "Mail send, contacts, lists, templates, and stats.",
|
|
675
|
+
toolCount: 28,
|
|
676
|
+
transport: "rest",
|
|
677
|
+
opsCoverage: 100
|
|
644
678
|
},
|
|
645
679
|
{
|
|
646
680
|
id: "slack",
|
|
@@ -648,7 +682,8 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
648
682
|
name: "Slack",
|
|
649
683
|
description: "Channels, messages, threads, users, and reactions.",
|
|
650
684
|
toolCount: 8,
|
|
651
|
-
transport: "both"
|
|
685
|
+
transport: "both",
|
|
686
|
+
opsCoverage: 100
|
|
652
687
|
},
|
|
653
688
|
{
|
|
654
689
|
id: "stripe",
|
|
@@ -656,7 +691,8 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
656
691
|
name: "Stripe",
|
|
657
692
|
description: "Customers, payments, subscriptions, invoices, and refunds.",
|
|
658
693
|
toolCount: 28,
|
|
659
|
-
transport: "both"
|
|
694
|
+
transport: "both",
|
|
695
|
+
opsCoverage: null
|
|
660
696
|
},
|
|
661
697
|
{
|
|
662
698
|
id: "supabase",
|
|
@@ -664,7 +700,8 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
664
700
|
name: "Supabase",
|
|
665
701
|
description: "SQL, migrations, logs, branches, and project metadata.",
|
|
666
702
|
toolCount: 29,
|
|
667
|
-
transport: "both"
|
|
703
|
+
transport: "both",
|
|
704
|
+
opsCoverage: 100
|
|
668
705
|
},
|
|
669
706
|
{
|
|
670
707
|
id: "tavily",
|
|
@@ -672,7 +709,35 @@ var GENERATED_TWIN_CATALOG = [
|
|
|
672
709
|
name: "Tavily",
|
|
673
710
|
description: "Search, extract, crawl, map, research, usage, and API key operations.",
|
|
674
711
|
toolCount: 11,
|
|
675
|
-
transport: "rest"
|
|
712
|
+
transport: "rest",
|
|
713
|
+
opsCoverage: 100
|
|
714
|
+
},
|
|
715
|
+
{
|
|
716
|
+
id: "telegram",
|
|
717
|
+
icon: "TG",
|
|
718
|
+
name: "Telegram",
|
|
719
|
+
description: "Bot messages, chats, updates, and webhooks.",
|
|
720
|
+
toolCount: 32,
|
|
721
|
+
transport: "both",
|
|
722
|
+
opsCoverage: null
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
id: "twilio",
|
|
726
|
+
icon: "TW",
|
|
727
|
+
name: "Twilio",
|
|
728
|
+
description: "Messages, calls, phone numbers, and verifications.",
|
|
729
|
+
toolCount: 35,
|
|
730
|
+
transport: "rest",
|
|
731
|
+
opsCoverage: 92
|
|
732
|
+
},
|
|
733
|
+
{
|
|
734
|
+
id: "unipile",
|
|
735
|
+
icon: "UP",
|
|
736
|
+
name: "Unipile",
|
|
737
|
+
description: "LinkedIn and email messaging, accounts, and chats.",
|
|
738
|
+
toolCount: 24,
|
|
739
|
+
transport: "rest",
|
|
740
|
+
opsCoverage: 100
|
|
676
741
|
}
|
|
677
742
|
];
|
|
678
743
|
var GENERATED_STARTABLE_TWIN_IDS = [
|
|
@@ -975,11 +1040,10 @@ function trimEnv(name) {
|
|
|
975
1040
|
}
|
|
976
1041
|
function parsePositiveInteger(rawValue, fallback, minimum = 1) {
|
|
977
1042
|
if (!rawValue) return fallback;
|
|
978
|
-
const
|
|
979
|
-
if (
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
return parsed;
|
|
1043
|
+
const normalized = rawValue.trim();
|
|
1044
|
+
if (!/^[1-9]\d*$/.test(normalized)) return fallback;
|
|
1045
|
+
const parsed = Number(normalized);
|
|
1046
|
+
return Number.isSafeInteger(parsed) && parsed >= minimum ? parsed : fallback;
|
|
983
1047
|
}
|
|
984
1048
|
function normalizeApiBaseUrl(value) {
|
|
985
1049
|
if (!value) return null;
|
|
@@ -1312,12 +1376,14 @@ var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__
|
|
|
1312
1376
|
mod
|
|
1313
1377
|
));
|
|
1314
1378
|
|
|
1315
|
-
// ../seedgen/dist/chunk-
|
|
1379
|
+
// ../seedgen/dist/chunk-OUL4HJ5I.js
|
|
1316
1380
|
var import_stream = require("stream");
|
|
1317
1381
|
var import_crypto = __toESM(require("crypto"), 1);
|
|
1318
1382
|
var import_async_hooks = require("async_hooks");
|
|
1319
1383
|
var import_os = require("os");
|
|
1320
1384
|
var import_path = require("path");
|
|
1385
|
+
var import_os2 = require("os");
|
|
1386
|
+
var import_path2 = require("path");
|
|
1321
1387
|
var require_code = __commonJS({
|
|
1322
1388
|
"../../node_modules/.pnpm/ajv@8.18.0/node_modules/ajv/dist/compile/codegen/code.js"(exports2) {
|
|
1323
1389
|
"use strict";
|
|
@@ -4228,7 +4294,7 @@ var require_compile = __commonJS({
|
|
|
4228
4294
|
const schOrFunc = root.refs[ref2];
|
|
4229
4295
|
if (schOrFunc)
|
|
4230
4296
|
return schOrFunc;
|
|
4231
|
-
let _sch =
|
|
4297
|
+
let _sch = resolve6.call(this, root, ref2);
|
|
4232
4298
|
if (_sch === void 0) {
|
|
4233
4299
|
const schema = (_a2 = root.localRefs) === null || _a2 === void 0 ? void 0 : _a2[ref2];
|
|
4234
4300
|
const { schemaId } = this.opts;
|
|
@@ -4255,7 +4321,7 @@ var require_compile = __commonJS({
|
|
|
4255
4321
|
function sameSchemaEnv(s1, s2) {
|
|
4256
4322
|
return s1.schema === s2.schema && s1.root === s2.root && s1.baseId === s2.baseId;
|
|
4257
4323
|
}
|
|
4258
|
-
function
|
|
4324
|
+
function resolve6(root, ref2) {
|
|
4259
4325
|
let sch;
|
|
4260
4326
|
while (typeof (sch = this.refs[ref2]) == "string")
|
|
4261
4327
|
ref2 = sch;
|
|
@@ -4822,55 +4888,55 @@ var require_fast_uri = __commonJS({
|
|
|
4822
4888
|
}
|
|
4823
4889
|
return uri;
|
|
4824
4890
|
}
|
|
4825
|
-
function
|
|
4891
|
+
function resolve6(baseURI, relativeURI, options) {
|
|
4826
4892
|
const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
|
|
4827
4893
|
const resolved = resolveComponent(parse32(baseURI, schemelessOptions), parse32(relativeURI, schemelessOptions), schemelessOptions, true);
|
|
4828
4894
|
schemelessOptions.skipEscape = true;
|
|
4829
4895
|
return serialize(resolved, schemelessOptions);
|
|
4830
4896
|
}
|
|
4831
|
-
function resolveComponent(base,
|
|
4897
|
+
function resolveComponent(base, relative3, options, skipNormalization) {
|
|
4832
4898
|
const target = {};
|
|
4833
4899
|
if (!skipNormalization) {
|
|
4834
4900
|
base = parse32(serialize(base, options), options);
|
|
4835
|
-
|
|
4901
|
+
relative3 = parse32(serialize(relative3, options), options);
|
|
4836
4902
|
}
|
|
4837
4903
|
options = options || {};
|
|
4838
|
-
if (!options.tolerant &&
|
|
4839
|
-
target.scheme =
|
|
4840
|
-
target.userinfo =
|
|
4841
|
-
target.host =
|
|
4842
|
-
target.port =
|
|
4843
|
-
target.path = removeDotSegments(
|
|
4844
|
-
target.query =
|
|
4904
|
+
if (!options.tolerant && relative3.scheme) {
|
|
4905
|
+
target.scheme = relative3.scheme;
|
|
4906
|
+
target.userinfo = relative3.userinfo;
|
|
4907
|
+
target.host = relative3.host;
|
|
4908
|
+
target.port = relative3.port;
|
|
4909
|
+
target.path = removeDotSegments(relative3.path || "");
|
|
4910
|
+
target.query = relative3.query;
|
|
4845
4911
|
} else {
|
|
4846
|
-
if (
|
|
4847
|
-
target.userinfo =
|
|
4848
|
-
target.host =
|
|
4849
|
-
target.port =
|
|
4850
|
-
target.path = removeDotSegments(
|
|
4851
|
-
target.query =
|
|
4912
|
+
if (relative3.userinfo !== void 0 || relative3.host !== void 0 || relative3.port !== void 0) {
|
|
4913
|
+
target.userinfo = relative3.userinfo;
|
|
4914
|
+
target.host = relative3.host;
|
|
4915
|
+
target.port = relative3.port;
|
|
4916
|
+
target.path = removeDotSegments(relative3.path || "");
|
|
4917
|
+
target.query = relative3.query;
|
|
4852
4918
|
} else {
|
|
4853
|
-
if (!
|
|
4919
|
+
if (!relative3.path) {
|
|
4854
4920
|
target.path = base.path;
|
|
4855
|
-
if (
|
|
4856
|
-
target.query =
|
|
4921
|
+
if (relative3.query !== void 0) {
|
|
4922
|
+
target.query = relative3.query;
|
|
4857
4923
|
} else {
|
|
4858
4924
|
target.query = base.query;
|
|
4859
4925
|
}
|
|
4860
4926
|
} else {
|
|
4861
|
-
if (
|
|
4862
|
-
target.path = removeDotSegments(
|
|
4927
|
+
if (relative3.path[0] === "/") {
|
|
4928
|
+
target.path = removeDotSegments(relative3.path);
|
|
4863
4929
|
} else {
|
|
4864
4930
|
if ((base.userinfo !== void 0 || base.host !== void 0 || base.port !== void 0) && !base.path) {
|
|
4865
|
-
target.path = "/" +
|
|
4931
|
+
target.path = "/" + relative3.path;
|
|
4866
4932
|
} else if (!base.path) {
|
|
4867
|
-
target.path =
|
|
4933
|
+
target.path = relative3.path;
|
|
4868
4934
|
} else {
|
|
4869
|
-
target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) +
|
|
4935
|
+
target.path = base.path.slice(0, base.path.lastIndexOf("/") + 1) + relative3.path;
|
|
4870
4936
|
}
|
|
4871
4937
|
target.path = removeDotSegments(target.path);
|
|
4872
4938
|
}
|
|
4873
|
-
target.query =
|
|
4939
|
+
target.query = relative3.query;
|
|
4874
4940
|
}
|
|
4875
4941
|
target.userinfo = base.userinfo;
|
|
4876
4942
|
target.host = base.host;
|
|
@@ -4878,7 +4944,7 @@ var require_fast_uri = __commonJS({
|
|
|
4878
4944
|
}
|
|
4879
4945
|
target.scheme = base.scheme;
|
|
4880
4946
|
}
|
|
4881
|
-
target.fragment =
|
|
4947
|
+
target.fragment = relative3.fragment;
|
|
4882
4948
|
return target;
|
|
4883
4949
|
}
|
|
4884
4950
|
function equal(uriA, uriB, options) {
|
|
@@ -5049,7 +5115,7 @@ var require_fast_uri = __commonJS({
|
|
|
5049
5115
|
var fastUri = {
|
|
5050
5116
|
SCHEMES,
|
|
5051
5117
|
normalize,
|
|
5052
|
-
resolve:
|
|
5118
|
+
resolve: resolve6,
|
|
5053
5119
|
resolveComponent,
|
|
5054
5120
|
equal,
|
|
5055
5121
|
serialize,
|
|
@@ -27125,6 +27191,62 @@ var toolSearchInputSchema = external_exports3.object({
|
|
|
27125
27191
|
/** Max results. Defaults to 10; capped at 100. */
|
|
27126
27192
|
limit: external_exports3.number().int().positive().max(TOOL_SEARCH_MAX_LIMIT).optional()
|
|
27127
27193
|
});
|
|
27194
|
+
var RecordingManifestEntrySchema = external_exports3.object({
|
|
27195
|
+
filename: external_exports3.string(),
|
|
27196
|
+
sha256: external_exports3.string().regex(/^[0-9a-f]{64}$/, "sha256 must be 64 lowercase hex chars"),
|
|
27197
|
+
size: external_exports3.number().optional(),
|
|
27198
|
+
sizeBytes: external_exports3.number().optional(),
|
|
27199
|
+
uploadedAt: external_exports3.string().optional(),
|
|
27200
|
+
// Optional symbolic tags that map fixture-oracle / replay lookups onto this
|
|
27201
|
+
// recording. Lets twins keep tag→file resolution inside the manifest itself
|
|
27202
|
+
// rather than depending on a separate provenance.json (which is excluded
|
|
27203
|
+
// from the in-tree fixture allowlist for graduated twins). Codex P2 on
|
|
27204
|
+
// tavily #3603 — fixture-oracle previously required provenance.json to
|
|
27205
|
+
// resolve `rest-profile:tavily:tavily_search_basic` → filename.
|
|
27206
|
+
tags: external_exports3.array(external_exports3.string()).optional()
|
|
27207
|
+
}).loose();
|
|
27208
|
+
var RecordingManifestSchema = external_exports3.object({
|
|
27209
|
+
service: external_exports3.string().min(1),
|
|
27210
|
+
version: external_exports3.number().int(),
|
|
27211
|
+
container: external_exports3.string().min(1),
|
|
27212
|
+
baseUrl: external_exports3.string().optional(),
|
|
27213
|
+
entries: external_exports3.array(RecordingManifestEntrySchema)
|
|
27214
|
+
}).loose();
|
|
27215
|
+
var DEFAULT_BASE_URL = process.env["ARCHAL_FIXTURE_BASE_URL"] ?? "https://archalforge8f96908966.blob.core.windows.net/archal-fixture-artifacts?sv=2023-11-03&spr=https&se=2031-05-10T00%3A00%3A00Z&sr=c&sp=rl&sig=r3%2FC3EwzilSHls8z3Pn5ZR%2BkinwQw1C6%2BDKObIZSIu0%3D";
|
|
27216
|
+
var DEFAULT_CACHE_ROOT = process.env["ARCHAL_FIXTURE_CACHE_ROOT"] ?? (0, import_path2.resolve)((0, import_os2.homedir)(), ".archal", "forge", "recordings-cache");
|
|
27217
|
+
function warnIfSasExpiresSoon(baseUrl) {
|
|
27218
|
+
if (process.env["ARCHAL_FIXTURE_SAS_WARN"] === "0") return;
|
|
27219
|
+
const queryIdx = baseUrl.indexOf("?");
|
|
27220
|
+
if (queryIdx < 0) return;
|
|
27221
|
+
const query = baseUrl.slice(queryIdx + 1);
|
|
27222
|
+
const seParam = query.split("&").find((p) => p.startsWith("se="));
|
|
27223
|
+
if (!seParam) return;
|
|
27224
|
+
const seValue = decodeURIComponent(seParam.slice(3));
|
|
27225
|
+
const expiresAt = Date.parse(seValue);
|
|
27226
|
+
if (Number.isNaN(expiresAt)) return;
|
|
27227
|
+
const now = Date.now();
|
|
27228
|
+
const daysRemaining = Math.floor((expiresAt - now) / (1e3 * 60 * 60 * 24));
|
|
27229
|
+
if (daysRemaining < 365) {
|
|
27230
|
+
console.warn(
|
|
27231
|
+
`[recording-fetcher] SAS token in ARCHAL_FIXTURE_BASE_URL expires in ${daysRemaining}d (${seValue}). Rotate via scripts/rotate-fixture-sas.mjs before expiry.`
|
|
27232
|
+
);
|
|
27233
|
+
}
|
|
27234
|
+
}
|
|
27235
|
+
warnIfSasExpiresSoon(DEFAULT_BASE_URL);
|
|
27236
|
+
var DEFAULT_CACHE_ROOT2 = process.env["ARCHAL_LEGACY_ASSET_CACHE_ROOT"] ?? (0, import_path.resolve)((0, import_os.homedir)(), ".archal", "forge", "legacy-assets-cache");
|
|
27237
|
+
var LegacyAssetEntrySchema = external_exports3.object({
|
|
27238
|
+
relativePath: external_exports3.string().min(1),
|
|
27239
|
+
sha256: external_exports3.string().regex(/^[0-9a-f]{64}$/, "sha256 must be 64 lowercase hex chars"),
|
|
27240
|
+
sizeBytes: external_exports3.number().optional(),
|
|
27241
|
+
uploadedAt: external_exports3.string().optional()
|
|
27242
|
+
}).loose();
|
|
27243
|
+
var LegacyAssetManifestSchema = external_exports3.object({
|
|
27244
|
+
service: external_exports3.string().min(1),
|
|
27245
|
+
version: external_exports3.number().int(),
|
|
27246
|
+
container: external_exports3.string().min(1),
|
|
27247
|
+
layout: external_exports3.string().optional(),
|
|
27248
|
+
entries: external_exports3.array(LegacyAssetEntrySchema)
|
|
27249
|
+
}).loose();
|
|
27128
27250
|
var manifest_default = [
|
|
27129
27251
|
{
|
|
27130
27252
|
name: "apify",
|
|
@@ -27173,6 +27295,12 @@ var manifest_default = [
|
|
|
27173
27295
|
package: "@archal/twin-firecrawl",
|
|
27174
27296
|
path: "twins/firecrawl",
|
|
27175
27297
|
stage: "internal",
|
|
27298
|
+
display: {
|
|
27299
|
+
icon: "FC",
|
|
27300
|
+
name: "Firecrawl",
|
|
27301
|
+
description: "Scraping, crawling, mapping, search, and extraction.",
|
|
27302
|
+
toolCount: 6
|
|
27303
|
+
},
|
|
27176
27304
|
transport: "rest",
|
|
27177
27305
|
hostedRuntime: { enabled: true, requiresDist: true, requiresEmptySeed: true },
|
|
27178
27306
|
cli: { bundleAssets: false, bundleToolSnapshot: false },
|
|
@@ -27240,6 +27368,12 @@ var manifest_default = [
|
|
|
27240
27368
|
package: "@archal/twin-hubspot",
|
|
27241
27369
|
path: "twins/hubspot",
|
|
27242
27370
|
stage: "internal",
|
|
27371
|
+
display: {
|
|
27372
|
+
icon: "HS",
|
|
27373
|
+
name: "HubSpot",
|
|
27374
|
+
description: "CRM contacts, companies, deals, tickets, and engagements.",
|
|
27375
|
+
toolCount: 45
|
|
27376
|
+
},
|
|
27243
27377
|
transport: "rest",
|
|
27244
27378
|
hostedRuntime: { enabled: true, requiresDist: true, requiresEmptySeed: true },
|
|
27245
27379
|
cli: { bundleAssets: false, bundleToolSnapshot: false },
|
|
@@ -27316,6 +27450,12 @@ var manifest_default = [
|
|
|
27316
27450
|
package: "@archal/twin-sendgrid",
|
|
27317
27451
|
path: "twins/sendgrid",
|
|
27318
27452
|
stage: "internal",
|
|
27453
|
+
display: {
|
|
27454
|
+
icon: "SG",
|
|
27455
|
+
name: "SendGrid",
|
|
27456
|
+
description: "Mail send, contacts, lists, templates, and stats.",
|
|
27457
|
+
toolCount: 28
|
|
27458
|
+
},
|
|
27319
27459
|
transport: "rest",
|
|
27320
27460
|
hostedRuntime: { enabled: true, requiresDist: true, requiresEmptySeed: true },
|
|
27321
27461
|
cli: { bundleAssets: false, bundleToolSnapshot: false },
|
|
@@ -27412,6 +27552,12 @@ var manifest_default = [
|
|
|
27412
27552
|
package: "@archal/twin-telegram",
|
|
27413
27553
|
path: "twins/telegram",
|
|
27414
27554
|
stage: "internal",
|
|
27555
|
+
display: {
|
|
27556
|
+
icon: "TG",
|
|
27557
|
+
name: "Telegram",
|
|
27558
|
+
description: "Bot messages, chats, updates, and webhooks.",
|
|
27559
|
+
toolCount: 32
|
|
27560
|
+
},
|
|
27415
27561
|
transport: "both",
|
|
27416
27562
|
hostedRuntime: { enabled: true, requiresDist: true, requiresEmptySeed: true },
|
|
27417
27563
|
cli: { bundleAssets: false, bundleToolSnapshot: false },
|
|
@@ -27424,6 +27570,12 @@ var manifest_default = [
|
|
|
27424
27570
|
package: "@archal/twin-twilio",
|
|
27425
27571
|
path: "twins/twilio",
|
|
27426
27572
|
stage: "internal",
|
|
27573
|
+
display: {
|
|
27574
|
+
icon: "TW",
|
|
27575
|
+
name: "Twilio",
|
|
27576
|
+
description: "Messages, calls, phone numbers, and verifications.",
|
|
27577
|
+
toolCount: 35
|
|
27578
|
+
},
|
|
27427
27579
|
transport: "rest",
|
|
27428
27580
|
hostedRuntime: { enabled: true, requiresDist: true, requiresEmptySeed: true },
|
|
27429
27581
|
cli: { bundleAssets: false, bundleToolSnapshot: false },
|
|
@@ -27436,6 +27588,12 @@ var manifest_default = [
|
|
|
27436
27588
|
package: "@archal/twin-unipile",
|
|
27437
27589
|
path: "twins/unipile",
|
|
27438
27590
|
stage: "internal",
|
|
27591
|
+
display: {
|
|
27592
|
+
icon: "UP",
|
|
27593
|
+
name: "Unipile",
|
|
27594
|
+
description: "LinkedIn and email messaging, accounts, and chats.",
|
|
27595
|
+
toolCount: 24
|
|
27596
|
+
},
|
|
27439
27597
|
transport: "rest",
|
|
27440
27598
|
hostedRuntime: { enabled: true, requiresDist: true, requiresEmptySeed: true },
|
|
27441
27599
|
cli: { bundleAssets: false, bundleToolSnapshot: false },
|
|
@@ -27580,48 +27738,6 @@ var SCENARIO_RISK_RULES = [
|
|
|
27580
27738
|
var SCENARIO_RISK_TAXONOMY = SCENARIO_RISK_RULES.map(
|
|
27581
27739
|
({ id, label, description }) => ({ id, label, description })
|
|
27582
27740
|
);
|
|
27583
|
-
var RecordingManifestEntrySchema = external_exports3.object({
|
|
27584
|
-
filename: external_exports3.string(),
|
|
27585
|
-
sha256: external_exports3.string().regex(/^[0-9a-f]{64}$/, "sha256 must be 64 lowercase hex chars"),
|
|
27586
|
-
size: external_exports3.number().optional(),
|
|
27587
|
-
sizeBytes: external_exports3.number().optional(),
|
|
27588
|
-
uploadedAt: external_exports3.string().optional(),
|
|
27589
|
-
// Optional symbolic tags that map fixture-oracle / replay lookups onto this
|
|
27590
|
-
// recording. Lets twins keep tag→file resolution inside the manifest itself
|
|
27591
|
-
// rather than depending on a separate provenance.json (which is excluded
|
|
27592
|
-
// from the in-tree fixture allowlist for graduated twins). Codex P2 on
|
|
27593
|
-
// tavily #3603 — fixture-oracle previously required provenance.json to
|
|
27594
|
-
// resolve `rest-profile:tavily:tavily_search_basic` → filename.
|
|
27595
|
-
tags: external_exports3.array(external_exports3.string()).optional()
|
|
27596
|
-
}).loose();
|
|
27597
|
-
var RecordingManifestSchema = external_exports3.object({
|
|
27598
|
-
service: external_exports3.string().min(1),
|
|
27599
|
-
version: external_exports3.number().int(),
|
|
27600
|
-
container: external_exports3.string().min(1),
|
|
27601
|
-
baseUrl: external_exports3.string().optional(),
|
|
27602
|
-
entries: external_exports3.array(RecordingManifestEntrySchema)
|
|
27603
|
-
}).loose();
|
|
27604
|
-
var DEFAULT_BASE_URL = process.env["ARCHAL_FIXTURE_BASE_URL"] ?? "https://archalforge8f96908966.blob.core.windows.net/archal-fixture-artifacts?sv=2023-11-03&spr=https&se=2031-05-10T00%3A00%3A00Z&sr=c&sp=rl&sig=r3%2FC3EwzilSHls8z3Pn5ZR%2BkinwQw1C6%2BDKObIZSIu0%3D";
|
|
27605
|
-
var DEFAULT_CACHE_ROOT = process.env["ARCHAL_FIXTURE_CACHE_ROOT"] ?? (0, import_path.resolve)((0, import_os.homedir)(), ".archal", "forge", "recordings-cache");
|
|
27606
|
-
function warnIfSasExpiresSoon(baseUrl) {
|
|
27607
|
-
if (process.env["ARCHAL_FIXTURE_SAS_WARN"] === "0") return;
|
|
27608
|
-
const queryIdx = baseUrl.indexOf("?");
|
|
27609
|
-
if (queryIdx < 0) return;
|
|
27610
|
-
const query = baseUrl.slice(queryIdx + 1);
|
|
27611
|
-
const seParam = query.split("&").find((p) => p.startsWith("se="));
|
|
27612
|
-
if (!seParam) return;
|
|
27613
|
-
const seValue = decodeURIComponent(seParam.slice(3));
|
|
27614
|
-
const expiresAt = Date.parse(seValue);
|
|
27615
|
-
if (Number.isNaN(expiresAt)) return;
|
|
27616
|
-
const now = Date.now();
|
|
27617
|
-
const daysRemaining = Math.floor((expiresAt - now) / (1e3 * 60 * 60 * 24));
|
|
27618
|
-
if (daysRemaining < 365) {
|
|
27619
|
-
console.warn(
|
|
27620
|
-
`[recording-fetcher] SAS token in ARCHAL_FIXTURE_BASE_URL expires in ${daysRemaining}d (${seValue}). Rotate via scripts/rotate-fixture-sas.mjs before expiry.`
|
|
27621
|
-
);
|
|
27622
|
-
}
|
|
27623
|
-
}
|
|
27624
|
-
warnIfSasExpiresSoon(DEFAULT_BASE_URL);
|
|
27625
27741
|
|
|
27626
27742
|
// ../../node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.mjs
|
|
27627
27743
|
var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 78, 5, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 199, 7, 137, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 55, 9, 266, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 233, 0, 3, 0, 8, 1, 6, 0, 475, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
|
|
@@ -34311,10 +34427,10 @@ var LINEAR_ENTITY_DEFS = {
|
|
|
34311
34427
|
}
|
|
34312
34428
|
};
|
|
34313
34429
|
|
|
34314
|
-
// ../seedgen/dist/chunk-
|
|
34430
|
+
// ../seedgen/dist/chunk-CIYCQV32.js
|
|
34315
34431
|
var import_fs = require("fs");
|
|
34316
34432
|
var import_url = require("url");
|
|
34317
|
-
var
|
|
34433
|
+
var import_path3 = __toESM(require("path"), 1);
|
|
34318
34434
|
var ENV_TOKEN_FALLBACK_TTL_SECONDS2 = 24 * 60 * 60;
|
|
34319
34435
|
var GENERATED_TWIN_CATALOG2 = [
|
|
34320
34436
|
{
|
|
@@ -34322,8 +34438,9 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34322
34438
|
icon: "AP",
|
|
34323
34439
|
name: "Apify",
|
|
34324
34440
|
description: "Actors, runs, datasets, key-value stores, and request queues.",
|
|
34325
|
-
toolCount:
|
|
34326
|
-
transport: "rest"
|
|
34441
|
+
toolCount: 43,
|
|
34442
|
+
transport: "rest",
|
|
34443
|
+
opsCoverage: null
|
|
34327
34444
|
},
|
|
34328
34445
|
{
|
|
34329
34446
|
id: "discord",
|
|
@@ -34331,7 +34448,17 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34331
34448
|
name: "Discord",
|
|
34332
34449
|
description: "Guilds, channels, messages, webhooks, threads, commands, and interaction responses.",
|
|
34333
34450
|
toolCount: 67,
|
|
34334
|
-
transport: "both"
|
|
34451
|
+
transport: "both",
|
|
34452
|
+
opsCoverage: 14
|
|
34453
|
+
},
|
|
34454
|
+
{
|
|
34455
|
+
id: "firecrawl",
|
|
34456
|
+
icon: "FC",
|
|
34457
|
+
name: "Firecrawl",
|
|
34458
|
+
description: "Scraping, crawling, mapping, search, and extraction.",
|
|
34459
|
+
toolCount: 6,
|
|
34460
|
+
transport: "rest",
|
|
34461
|
+
opsCoverage: 77
|
|
34335
34462
|
},
|
|
34336
34463
|
{
|
|
34337
34464
|
id: "github",
|
|
@@ -34339,7 +34466,8 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34339
34466
|
name: "GitHub",
|
|
34340
34467
|
description: "Repos, issues, pull requests, branches, and commits.",
|
|
34341
34468
|
toolCount: 26,
|
|
34342
|
-
transport: "both"
|
|
34469
|
+
transport: "both",
|
|
34470
|
+
opsCoverage: 96
|
|
34343
34471
|
},
|
|
34344
34472
|
{
|
|
34345
34473
|
id: "google-workspace",
|
|
@@ -34347,7 +34475,17 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34347
34475
|
name: "Google Workspace",
|
|
34348
34476
|
description: "Gmail, Calendar, Drive, Sheets, and Contacts.",
|
|
34349
34477
|
toolCount: 249,
|
|
34350
|
-
transport: "both"
|
|
34478
|
+
transport: "both",
|
|
34479
|
+
opsCoverage: 64
|
|
34480
|
+
},
|
|
34481
|
+
{
|
|
34482
|
+
id: "hubspot",
|
|
34483
|
+
icon: "HS",
|
|
34484
|
+
name: "HubSpot",
|
|
34485
|
+
description: "CRM contacts, companies, deals, tickets, and engagements.",
|
|
34486
|
+
toolCount: 45,
|
|
34487
|
+
transport: "rest",
|
|
34488
|
+
opsCoverage: 10
|
|
34351
34489
|
},
|
|
34352
34490
|
{
|
|
34353
34491
|
id: "jira",
|
|
@@ -34355,7 +34493,8 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34355
34493
|
name: "Jira",
|
|
34356
34494
|
description: "Issues, projects, boards, sprints, and versions.",
|
|
34357
34495
|
toolCount: 49,
|
|
34358
|
-
transport: "both"
|
|
34496
|
+
transport: "both",
|
|
34497
|
+
opsCoverage: 80
|
|
34359
34498
|
},
|
|
34360
34499
|
{
|
|
34361
34500
|
id: "linear",
|
|
@@ -34363,7 +34502,8 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34363
34502
|
name: "Linear",
|
|
34364
34503
|
description: "Issues, projects, teams, cycles, and workflows.",
|
|
34365
34504
|
toolCount: 42,
|
|
34366
|
-
transport: "both"
|
|
34505
|
+
transport: "both",
|
|
34506
|
+
opsCoverage: 98
|
|
34367
34507
|
},
|
|
34368
34508
|
{
|
|
34369
34509
|
id: "ramp",
|
|
@@ -34371,7 +34511,17 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34371
34511
|
name: "Ramp",
|
|
34372
34512
|
description: "Cards, funds, expenses, reimbursements, bills, and travel.",
|
|
34373
34513
|
toolCount: 46,
|
|
34374
|
-
transport: "mcp"
|
|
34514
|
+
transport: "mcp",
|
|
34515
|
+
opsCoverage: null
|
|
34516
|
+
},
|
|
34517
|
+
{
|
|
34518
|
+
id: "sendgrid",
|
|
34519
|
+
icon: "SG",
|
|
34520
|
+
name: "SendGrid",
|
|
34521
|
+
description: "Mail send, contacts, lists, templates, and stats.",
|
|
34522
|
+
toolCount: 28,
|
|
34523
|
+
transport: "rest",
|
|
34524
|
+
opsCoverage: 100
|
|
34375
34525
|
},
|
|
34376
34526
|
{
|
|
34377
34527
|
id: "slack",
|
|
@@ -34379,7 +34529,8 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34379
34529
|
name: "Slack",
|
|
34380
34530
|
description: "Channels, messages, threads, users, and reactions.",
|
|
34381
34531
|
toolCount: 8,
|
|
34382
|
-
transport: "both"
|
|
34532
|
+
transport: "both",
|
|
34533
|
+
opsCoverage: 100
|
|
34383
34534
|
},
|
|
34384
34535
|
{
|
|
34385
34536
|
id: "stripe",
|
|
@@ -34387,7 +34538,8 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34387
34538
|
name: "Stripe",
|
|
34388
34539
|
description: "Customers, payments, subscriptions, invoices, and refunds.",
|
|
34389
34540
|
toolCount: 28,
|
|
34390
|
-
transport: "both"
|
|
34541
|
+
transport: "both",
|
|
34542
|
+
opsCoverage: null
|
|
34391
34543
|
},
|
|
34392
34544
|
{
|
|
34393
34545
|
id: "supabase",
|
|
@@ -34395,7 +34547,8 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34395
34547
|
name: "Supabase",
|
|
34396
34548
|
description: "SQL, migrations, logs, branches, and project metadata.",
|
|
34397
34549
|
toolCount: 29,
|
|
34398
|
-
transport: "both"
|
|
34550
|
+
transport: "both",
|
|
34551
|
+
opsCoverage: 100
|
|
34399
34552
|
},
|
|
34400
34553
|
{
|
|
34401
34554
|
id: "tavily",
|
|
@@ -34403,7 +34556,35 @@ var GENERATED_TWIN_CATALOG2 = [
|
|
|
34403
34556
|
name: "Tavily",
|
|
34404
34557
|
description: "Search, extract, crawl, map, research, usage, and API key operations.",
|
|
34405
34558
|
toolCount: 11,
|
|
34406
|
-
transport: "rest"
|
|
34559
|
+
transport: "rest",
|
|
34560
|
+
opsCoverage: 100
|
|
34561
|
+
},
|
|
34562
|
+
{
|
|
34563
|
+
id: "telegram",
|
|
34564
|
+
icon: "TG",
|
|
34565
|
+
name: "Telegram",
|
|
34566
|
+
description: "Bot messages, chats, updates, and webhooks.",
|
|
34567
|
+
toolCount: 32,
|
|
34568
|
+
transport: "both",
|
|
34569
|
+
opsCoverage: null
|
|
34570
|
+
},
|
|
34571
|
+
{
|
|
34572
|
+
id: "twilio",
|
|
34573
|
+
icon: "TW",
|
|
34574
|
+
name: "Twilio",
|
|
34575
|
+
description: "Messages, calls, phone numbers, and verifications.",
|
|
34576
|
+
toolCount: 35,
|
|
34577
|
+
transport: "rest",
|
|
34578
|
+
opsCoverage: 92
|
|
34579
|
+
},
|
|
34580
|
+
{
|
|
34581
|
+
id: "unipile",
|
|
34582
|
+
icon: "UP",
|
|
34583
|
+
name: "Unipile",
|
|
34584
|
+
description: "LinkedIn and email messaging, accounts, and chats.",
|
|
34585
|
+
toolCount: 24,
|
|
34586
|
+
transport: "rest",
|
|
34587
|
+
opsCoverage: 100
|
|
34407
34588
|
}
|
|
34408
34589
|
];
|
|
34409
34590
|
var GENERATED_STARTABLE_TWIN_IDS2 = [
|
|
@@ -34548,13 +34729,13 @@ var LLM_PRICING_FAMILY_RATES2 = [
|
|
|
34548
34729
|
{ match: /^deepseek-v4-flash/i, rate: LLM_PRICING_USD_PER_M_TOKENS2["deepseek-v4-flash"] }
|
|
34549
34730
|
];
|
|
34550
34731
|
function resolveWorkerScriptPath() {
|
|
34551
|
-
const thisDir =
|
|
34732
|
+
const thisDir = import_path3.default.dirname((0, import_url.fileURLToPath)(__archal_import_meta_url));
|
|
34552
34733
|
const candidates = [
|
|
34553
34734
|
// Source or unbundled output: executor.js and subprocess-worker.js live together.
|
|
34554
|
-
|
|
34735
|
+
import_path3.default.join(thisDir, "subprocess-worker.js"),
|
|
34555
34736
|
// tsup bundles executor into a root chunk while keeping the worker entry
|
|
34556
34737
|
// at dist/codegen/subprocess-worker.js.
|
|
34557
|
-
|
|
34738
|
+
import_path3.default.join(thisDir, "codegen", "subprocess-worker.js")
|
|
34558
34739
|
];
|
|
34559
34740
|
return candidates.find((candidate) => (0, import_fs.existsSync)(candidate));
|
|
34560
34741
|
}
|
|
@@ -34656,7 +34837,7 @@ var NO_COLOR = "NO_COLOR" in process.env || process.env["TERM"] === "dumb";
|
|
|
34656
34837
|
var import_async_hooks2 = require("async_hooks");
|
|
34657
34838
|
var runSessionContext = new import_async_hooks2.AsyncLocalStorage();
|
|
34658
34839
|
|
|
34659
|
-
// ../seedgen/dist/chunk-
|
|
34840
|
+
// ../seedgen/dist/chunk-JD4OJDYX.js
|
|
34660
34841
|
var MANAGED_SEED_BACKEND_INITIAL_COOLDOWN_MS = 30 * 1e3;
|
|
34661
34842
|
var MANAGED_SEED_BACKEND_MAX_COOLDOWN_MS = 5 * 60 * 1e3;
|
|
34662
34843
|
|
|
@@ -35043,13 +35224,13 @@ ALTER TABLE users ENABLE ROW LEVEL SECURITY;
|
|
|
35043
35224
|
CREATE POLICY "users_select" ON users FOR SELECT USING (true);
|
|
35044
35225
|
CREATE POLICY "users_update_own" ON users FOR UPDATE USING (id = current_setting('app.user_id', true)::int);`;
|
|
35045
35226
|
|
|
35046
|
-
// ../seedgen/dist/chunk-
|
|
35047
|
-
var
|
|
35048
|
-
var
|
|
35049
|
-
var CACHE_DIR = (0,
|
|
35227
|
+
// ../seedgen/dist/chunk-KEUOYX5N.js
|
|
35228
|
+
var import_path4 = require("path");
|
|
35229
|
+
var import_os3 = require("os");
|
|
35230
|
+
var CACHE_DIR = (0, import_path4.join)((0, import_os3.homedir)(), ".archal", "seed-cache");
|
|
35050
35231
|
var MAX_AGE_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
35051
35232
|
|
|
35052
|
-
// ../seedgen/dist/chunk-
|
|
35233
|
+
// ../seedgen/dist/chunk-KAB6MOBH.js
|
|
35053
35234
|
var import_crypto2 = require("crypto");
|
|
35054
35235
|
function buildSeedPromptHashInput() {
|
|
35055
35236
|
return [
|