@alpic-ai/api 0.0.0-staging.g84dfc77 → 0.0.0-staging.g8555f7e
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 +904 -1
- package/dist/index.mjs +276 -67
- package/package.json +5 -5
package/dist/index.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { z } from "zod";
|
|
|
2
2
|
import * as z$1 from "zod/v4";
|
|
3
3
|
import { oc } from "@orpc/contract";
|
|
4
4
|
import ms from "ms";
|
|
5
|
-
//#region ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.
|
|
5
|
+
//#region ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.30.0_supports-color@7.2.0_zod@4.4.3/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/auth.js
|
|
6
6
|
/**
|
|
7
7
|
* Reusable URL validation that disallows javascript: scheme
|
|
8
8
|
*/
|
|
@@ -169,11 +169,21 @@ z$1.object({
|
|
|
169
169
|
token: z$1.string(),
|
|
170
170
|
token_type_hint: z$1.string().optional()
|
|
171
171
|
}).strip();
|
|
172
|
-
|
|
172
|
+
//#endregion
|
|
173
|
+
//#region ../domains/dist/index.mjs
|
|
174
|
+
const AI_PLATFORMS = ["chatgpt", "claudeai"];
|
|
175
|
+
const platformSchema = z.enum(AI_PLATFORMS);
|
|
173
176
|
const PLATFORM_LABELS = {
|
|
174
177
|
chatgpt: "ChatGPT",
|
|
175
178
|
claudeai: "Claude.ai"
|
|
176
179
|
};
|
|
180
|
+
const WAF_PLATFORMS = [
|
|
181
|
+
"akamai",
|
|
182
|
+
"cloudflare",
|
|
183
|
+
"fastly"
|
|
184
|
+
];
|
|
185
|
+
const ALLOWED_PLATFORMS = [...AI_PLATFORMS, ...WAF_PLATFORMS];
|
|
186
|
+
const allowedPlatformSchema = z.enum(ALLOWED_PLATFORMS);
|
|
177
187
|
const auditStatusSchema = z.enum([
|
|
178
188
|
"pending",
|
|
179
189
|
"partial",
|
|
@@ -273,33 +283,18 @@ const deploymentSummarySchema = z.object({
|
|
|
273
283
|
createdAt: z.coerce.date(),
|
|
274
284
|
updatedAt: z.coerce.date()
|
|
275
285
|
});
|
|
276
|
-
/**
|
|
277
|
-
* Public environment
|
|
278
|
-
*
|
|
279
|
-
* Answers anonymously and exposes no OAuth metadata.
|
|
280
|
-
*/
|
|
286
|
+
/** Public environment: answers anonymously and exposes no OAuth metadata. */
|
|
281
287
|
const publicEnvironmentSchema = z.object({
|
|
282
288
|
allowsAnonymous: z.literal(true),
|
|
283
289
|
oAuthMetadata: z.strictObject({})
|
|
284
290
|
});
|
|
285
|
-
/**
|
|
286
|
-
* Protected environment with an external resource metadata URL
|
|
287
|
-
*
|
|
288
|
-
* An external resource metadata URL is returned in the WWW-Authenticate header during the first 401 response.
|
|
289
|
-
* Everything that follows is handled outside of the MCP server scope.
|
|
290
|
-
*/
|
|
291
|
+
/** Protected environment whose external resource metadata URL is returned in the WWW-Authenticate header on the first 401; everything after is handled outside the MCP server scope. */
|
|
291
292
|
const externalResourceMetadataEnvironmentSchema = z.object({
|
|
292
293
|
allowsAnonymous: z.boolean(),
|
|
293
294
|
oAuthMetadata: z.object({ externalResourceMetadataUrl: z.url() }),
|
|
294
295
|
scope: z.string().optional()
|
|
295
296
|
});
|
|
296
|
-
/**
|
|
297
|
-
* Protected environment with an external authorization server URL
|
|
298
|
-
*
|
|
299
|
-
* The server itself exposes the /.well-known/oauth-protected-resource endpoint.
|
|
300
|
-
* An external authorization server URL is returned when requesting the endpoint.
|
|
301
|
-
* Everything that follows is handled outside of the MCP server scope.
|
|
302
|
-
*/
|
|
297
|
+
/** Protected environment whose own /.well-known/oauth-protected-resource endpoint points at an external authorization server; everything after is handled outside the MCP server scope. */
|
|
303
298
|
const externalAuthorizationServerEnvironmentSchema = z.object({
|
|
304
299
|
allowsAnonymous: z.boolean(),
|
|
305
300
|
oAuthMetadata: z.object({
|
|
@@ -308,12 +303,7 @@ const externalAuthorizationServerEnvironmentSchema = z.object({
|
|
|
308
303
|
}),
|
|
309
304
|
scope: z.string().optional()
|
|
310
305
|
});
|
|
311
|
-
/**
|
|
312
|
-
* Standalone protected environment
|
|
313
|
-
*
|
|
314
|
-
* The server itself exposes the /.well-known/oauth-protected-resource endpoint.
|
|
315
|
-
* The server itself exposes the /.well-known/oauth-authorization-server endpoint.
|
|
316
|
-
*/
|
|
306
|
+
/** Standalone protected environment: the server itself exposes both the /.well-known/oauth-protected-resource and /.well-known/oauth-authorization-server endpoints. */
|
|
317
307
|
const standaloneEnvironmentSchema = z.object({
|
|
318
308
|
allowsAnonymous: z.boolean(),
|
|
319
309
|
oAuthMetadata: z.object({
|
|
@@ -322,13 +312,7 @@ const standaloneEnvironmentSchema = z.object({
|
|
|
322
312
|
}),
|
|
323
313
|
scope: z.string().optional()
|
|
324
314
|
});
|
|
325
|
-
/**
|
|
326
|
-
* Protected environment without OAuth discovery
|
|
327
|
-
*
|
|
328
|
-
* The server enforces authentication but exposes no OAuth discovery metadata.
|
|
329
|
-
* Neither /.well-known/oauth-protected-resource nor /.well-known/oauth-authorization-server
|
|
330
|
-
* are advertised. Clients must obtain credentials out-of-band.
|
|
331
|
-
*/
|
|
315
|
+
/** Protected environment that enforces authentication but advertises no OAuth discovery metadata; clients must obtain credentials out-of-band. */
|
|
332
316
|
const protectedWithoutDiscoveryEnvironmentSchema = z.object({
|
|
333
317
|
allowsAnonymous: z.literal(false),
|
|
334
318
|
oAuthMetadata: z.strictObject({}),
|
|
@@ -376,7 +360,6 @@ z.union([
|
|
|
376
360
|
legacyStandaloneEnvironmentSchema,
|
|
377
361
|
legacyProtectedWithoutDiscoveryEnvironmentSchema
|
|
378
362
|
]);
|
|
379
|
-
const allowedPlatformSchema = platformSchema;
|
|
380
363
|
const playgroundModelSchema = z.enum([
|
|
381
364
|
"global.anthropic.claude-haiku-4-5-20251001-v1:0",
|
|
382
365
|
"global.anthropic.claude-sonnet-4-5-20250929-v1:0",
|
|
@@ -416,7 +399,8 @@ z.object({
|
|
|
416
399
|
collectRequestPayload: z.boolean(),
|
|
417
400
|
collectResponsePayload: z.boolean(),
|
|
418
401
|
collectErrorMessage: z.boolean(),
|
|
419
|
-
collectUserData: z.boolean()
|
|
402
|
+
collectUserData: z.boolean(),
|
|
403
|
+
identityTraitKey: z.string().min(1).max(200).nullable()
|
|
420
404
|
});
|
|
421
405
|
z.object({
|
|
422
406
|
id: z.string(),
|
|
@@ -523,6 +507,246 @@ z.enum([
|
|
|
523
507
|
"DEBUG",
|
|
524
508
|
"ERROR"
|
|
525
509
|
]);
|
|
510
|
+
/** Only names a vendor actually ships belong here: lookalikes like `claude-code-test` are customers' own scripts. */
|
|
511
|
+
const MCP_CLIENT_GROUPS = [
|
|
512
|
+
{
|
|
513
|
+
id: "claude_code",
|
|
514
|
+
label: "Claude Code",
|
|
515
|
+
vendor: "anthropic",
|
|
516
|
+
rawNames: ["claude-code", "Anthropic/ClaudeCodeDesktop"]
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
id: "claude",
|
|
520
|
+
label: "Claude",
|
|
521
|
+
vendor: "anthropic",
|
|
522
|
+
rawNames: [
|
|
523
|
+
"Anthropic/ClaudeAI",
|
|
524
|
+
"claude-ai",
|
|
525
|
+
"claude",
|
|
526
|
+
"Claude",
|
|
527
|
+
"claude-desktop",
|
|
528
|
+
"claude-desktop-3p"
|
|
529
|
+
]
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
id: "claude_mobile",
|
|
533
|
+
label: "Claude mobile",
|
|
534
|
+
vendor: "anthropic",
|
|
535
|
+
rawNames: ["claude-ios", "ClaudeAndroid"]
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
id: "claude_cowork",
|
|
539
|
+
label: "Claude Cowork",
|
|
540
|
+
vendor: "anthropic",
|
|
541
|
+
rawNames: ["Anthropic/Cowork"]
|
|
542
|
+
},
|
|
543
|
+
{
|
|
544
|
+
id: "claude_toolbox",
|
|
545
|
+
label: "Claude Toolbox",
|
|
546
|
+
vendor: "anthropic",
|
|
547
|
+
rawNames: ["Anthropic/Toolbox", "Anthropic/toolbox-bootstrap"]
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
id: "anthropic_api",
|
|
551
|
+
label: "Anthropic API",
|
|
552
|
+
vendor: "anthropic",
|
|
553
|
+
rawNames: ["Anthropic/API"]
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
id: "anthropic_connector_refresh",
|
|
557
|
+
label: "Anthropic (connector refresh)",
|
|
558
|
+
vendor: "anthropic",
|
|
559
|
+
rawNames: ["Anthropic"]
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
id: "codex",
|
|
563
|
+
label: "Codex",
|
|
564
|
+
vendor: "openai",
|
|
565
|
+
rawNames: [
|
|
566
|
+
"codex-mcp-client",
|
|
567
|
+
"codex",
|
|
568
|
+
"Codex",
|
|
569
|
+
"codex-cli",
|
|
570
|
+
"openai-mcp (Codex)"
|
|
571
|
+
]
|
|
572
|
+
},
|
|
573
|
+
{
|
|
574
|
+
id: "chatgpt",
|
|
575
|
+
label: "ChatGPT",
|
|
576
|
+
vendor: "openai",
|
|
577
|
+
rawNames: ["openai-mcp (ChatGPT)"]
|
|
578
|
+
},
|
|
579
|
+
{
|
|
580
|
+
id: "openai_responses_api",
|
|
581
|
+
label: "OpenAI Responses API",
|
|
582
|
+
vendor: "openai",
|
|
583
|
+
rawNames: ["openai-mcp (Responses API)"]
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
id: "openai_agent_builder",
|
|
587
|
+
label: "OpenAI Agent Builder",
|
|
588
|
+
vendor: "openai",
|
|
589
|
+
rawNames: ["openai-mcp (Agent Builder)"]
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
id: "openai_other",
|
|
593
|
+
label: "OpenAI Other",
|
|
594
|
+
vendor: "openai",
|
|
595
|
+
rawNames: ["openai-mcp"]
|
|
596
|
+
},
|
|
597
|
+
{
|
|
598
|
+
id: "cursor",
|
|
599
|
+
label: "Cursor",
|
|
600
|
+
vendor: "cursor",
|
|
601
|
+
rawNames: [
|
|
602
|
+
"cursor-vscode",
|
|
603
|
+
"Cursor",
|
|
604
|
+
"cursor"
|
|
605
|
+
]
|
|
606
|
+
},
|
|
607
|
+
{
|
|
608
|
+
id: "cline",
|
|
609
|
+
label: "Cline",
|
|
610
|
+
vendor: "cline",
|
|
611
|
+
rawNames: [
|
|
612
|
+
"Cline",
|
|
613
|
+
"cline",
|
|
614
|
+
"@cline/core"
|
|
615
|
+
]
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
id: "github_copilot",
|
|
619
|
+
label: "GitHub Copilot",
|
|
620
|
+
vendor: "githubCopilot",
|
|
621
|
+
rawNames: [
|
|
622
|
+
"Copilot",
|
|
623
|
+
"github-copilot-developer",
|
|
624
|
+
"Copilot MCP Gateway",
|
|
625
|
+
"Xcode/copilot-xcode"
|
|
626
|
+
]
|
|
627
|
+
},
|
|
628
|
+
{
|
|
629
|
+
id: "gemini_cli",
|
|
630
|
+
label: "Gemini CLI",
|
|
631
|
+
vendor: "google",
|
|
632
|
+
rawNames: ["gemini-cli-mcp-client", "gemini-cli"]
|
|
633
|
+
},
|
|
634
|
+
{
|
|
635
|
+
id: "antigravity",
|
|
636
|
+
label: "Antigravity",
|
|
637
|
+
vendor: "google",
|
|
638
|
+
rawNames: ["antigravity-client"]
|
|
639
|
+
},
|
|
640
|
+
{
|
|
641
|
+
id: "gemini",
|
|
642
|
+
label: "Gemini",
|
|
643
|
+
vendor: "google",
|
|
644
|
+
rawNames: ["Gemini", "google-ai-edge-gallery"]
|
|
645
|
+
},
|
|
646
|
+
{
|
|
647
|
+
id: "windsurf",
|
|
648
|
+
label: "Windsurf",
|
|
649
|
+
vendor: "windsurf",
|
|
650
|
+
rawNames: ["Windsurf", "windsurf-client"]
|
|
651
|
+
},
|
|
652
|
+
{
|
|
653
|
+
id: "mistral",
|
|
654
|
+
label: "Mistral / Le Chat",
|
|
655
|
+
vendor: "mistral",
|
|
656
|
+
rawNames: ["Mistral"],
|
|
657
|
+
rawNamePrefixes: ["connector:custom-mcp:"]
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
id: "n8n",
|
|
661
|
+
label: "n8n",
|
|
662
|
+
vendor: "n8n",
|
|
663
|
+
rawNames: [
|
|
664
|
+
"@n8n/n8n-nodes-langchain.mcpClient",
|
|
665
|
+
"@n8n/n8n-nodes-langchain.mcpClientTool",
|
|
666
|
+
"n8n"
|
|
667
|
+
]
|
|
668
|
+
},
|
|
669
|
+
{
|
|
670
|
+
id: "alpic_playground",
|
|
671
|
+
label: "Alpic Playground",
|
|
672
|
+
vendor: "alpic",
|
|
673
|
+
rawNames: ["alpic-playground", "playground"]
|
|
674
|
+
},
|
|
675
|
+
{
|
|
676
|
+
id: "opencode",
|
|
677
|
+
label: "opencode",
|
|
678
|
+
vendor: "opencode",
|
|
679
|
+
rawNames: ["opencode"]
|
|
680
|
+
},
|
|
681
|
+
{
|
|
682
|
+
id: "zed",
|
|
683
|
+
label: "Zed",
|
|
684
|
+
vendor: "zed",
|
|
685
|
+
rawNames: ["Zed", "zed"]
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
id: "zapier",
|
|
689
|
+
label: "Zapier",
|
|
690
|
+
vendor: "zapier",
|
|
691
|
+
rawNames: ["Zapier", "zapier"]
|
|
692
|
+
},
|
|
693
|
+
{
|
|
694
|
+
id: "make",
|
|
695
|
+
label: "Make",
|
|
696
|
+
vendor: "make",
|
|
697
|
+
rawNames: ["Make", "make"]
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
id: "librechat",
|
|
701
|
+
label: "LibreChat",
|
|
702
|
+
vendor: "mcp",
|
|
703
|
+
rawNames: ["LibreChat", "librechat"]
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
id: "jan",
|
|
707
|
+
label: "Jan",
|
|
708
|
+
vendor: "mcp",
|
|
709
|
+
rawNames: ["Jan", "jan"]
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
id: "goose",
|
|
713
|
+
label: "goose",
|
|
714
|
+
vendor: "mcp",
|
|
715
|
+
rawNames: ["goose", "Goose"]
|
|
716
|
+
},
|
|
717
|
+
{
|
|
718
|
+
id: "mcphost",
|
|
719
|
+
label: "mcphost",
|
|
720
|
+
vendor: "mcp",
|
|
721
|
+
rawNames: ["mcphost"]
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
id: "mcporter",
|
|
725
|
+
label: "mcporter",
|
|
726
|
+
vendor: "mcp",
|
|
727
|
+
rawNames: ["mcporter"]
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
id: "rmcp",
|
|
731
|
+
label: "rmcp",
|
|
732
|
+
vendor: "mcp",
|
|
733
|
+
rawNames: ["rmcp"]
|
|
734
|
+
},
|
|
735
|
+
{
|
|
736
|
+
id: "unnamed_client",
|
|
737
|
+
label: "Unnamed client",
|
|
738
|
+
vendor: "mcp",
|
|
739
|
+
rawNames: [
|
|
740
|
+
"mcp",
|
|
741
|
+
"unknown",
|
|
742
|
+
""
|
|
743
|
+
]
|
|
744
|
+
}
|
|
745
|
+
];
|
|
746
|
+
/** A source pattern, not a RegExp, because analytics renders the same rule into ClickHouse RE2, which shares this syntax. */
|
|
747
|
+
const MCP_REMOTE_WRAPPER_SUFFIX = String.raw` \(via mcp-remote [^\n]+?\)$`;
|
|
748
|
+
new RegExp(MCP_REMOTE_WRAPPER_SUFFIX);
|
|
749
|
+
new Map(MCP_CLIENT_GROUPS.map((group) => [group.id, group]));
|
|
526
750
|
const runtimeSchema = z.enum([
|
|
527
751
|
"python3.13",
|
|
528
752
|
"python3.14",
|
|
@@ -600,15 +824,7 @@ z.object({
|
|
|
600
824
|
serverFields: serverFieldsSchema$1,
|
|
601
825
|
source: z.enum(["registry", "defaults"])
|
|
602
826
|
});
|
|
603
|
-
/**
|
|
604
|
-
* Returns a variant of a `maxLength`-constrained string that clamps (truncates) instead of
|
|
605
|
-
* rejecting on overflow — used for AI-generated copy where the model routinely overshoots.
|
|
606
|
-
*
|
|
607
|
-
* NOTE: this rebuilds the schema from scratch, carrying over only `maxLength` (as a clamp),
|
|
608
|
-
* `minLength`, and the description. Any other validators on the source field (`.regex()`,
|
|
609
|
-
* `.email()`, custom refinements) are intentionally dropped — this helper is meant for plain
|
|
610
|
-
* free-text length caps only. A field with `null` `maxLength` is returned unchanged.
|
|
611
|
-
*/
|
|
827
|
+
/** Clamps instead of rejecting on max-length overflow (for AI-generated copy that overshoots); intentionally carries over only maxLength, minLength, and description, dropping any other validators. */
|
|
612
828
|
const clampStringField = (field) => {
|
|
613
829
|
const max = field.maxLength;
|
|
614
830
|
if (max === null) return field;
|
|
@@ -954,11 +1170,7 @@ const chatgptToolJustificationSchema = z.object({
|
|
|
954
1170
|
openWorldJustification: z.string().describe("One sentence on whether the tool reaches external systems beyond your own service."),
|
|
955
1171
|
destructiveJustification: z.string().describe("One sentence on whether the tool changes data. For a read-only tool, state the full triad: \"No data is created, modified, or deleted.\"")
|
|
956
1172
|
}).describe("Per-tool justification of each MCP annotation value (one specific sentence per hint).");
|
|
957
|
-
/**
|
|
958
|
-
* Base copy fields, defined once and reused by both the submission form and per-locale
|
|
959
|
-
* translations so the constraints (tagline ≤ 30 chars) never drift. The translation generation
|
|
960
|
-
* path wraps these in {@link clampStringField} since the LLM tends to overshoot the limit.
|
|
961
|
-
*/
|
|
1173
|
+
/** Defined once and reused by both the submission form and per-locale translations so the tagline ≤ 30 chars constraint never drifts. */
|
|
962
1174
|
const chatgptTaglineSchema = z.string().max(30);
|
|
963
1175
|
const chatgptDescriptionSchema = z.string();
|
|
964
1176
|
const chatgptTranslationSchema = z.object({
|
|
@@ -967,10 +1179,7 @@ const chatgptTranslationSchema = z.object({
|
|
|
967
1179
|
description: chatgptDescriptionSchema
|
|
968
1180
|
}).describe("Locale-scoped override for tagline + description. English (US) is the default.");
|
|
969
1181
|
chatgptTranslationSchema.extend({ tagline: clampStringField(chatgptTaglineSchema) });
|
|
970
|
-
/**
|
|
971
|
-
* Field order mirrors the ChatGPT (OpenAI) submission spreadsheet, grouped by section.
|
|
972
|
-
* When adding/removing/reordering fields, keep this in sync with the sheet.
|
|
973
|
-
*/
|
|
1182
|
+
/** Field order mirrors the ChatGPT (OpenAI) submission spreadsheet, grouped by section; keep it in sync with the sheet. */
|
|
974
1183
|
const chatgptSubmissionFormDataSchema = z.object({
|
|
975
1184
|
logoLight: z.string().describe("Logo icon for light mode. Square PNG, no borders or rounded corners (clients apply circular cropping)."),
|
|
976
1185
|
logoDark: z.string().optional().describe("Optional dark-mode logo icon. Square PNG, same specs as the light icon. Leave empty if the light icon also works on dark backgrounds."),
|
|
@@ -1067,11 +1276,7 @@ const claudePolicyAcknowledgementSchema = z.enum([
|
|
|
1067
1276
|
"My connector does not collect conversation data beyond what is needed for its function.",
|
|
1068
1277
|
"Public documentation for this connector will be live by the publish date."
|
|
1069
1278
|
]);
|
|
1070
|
-
/**
|
|
1071
|
-
* Field order mirrors the claude.ai directory submission wizard
|
|
1072
|
-
* (`claude.ai/admin-settings/directory/submissions/new`), grouped by step.
|
|
1073
|
-
* When adding/removing/reordering fields, keep this in sync with the wizard.
|
|
1074
|
-
*/
|
|
1279
|
+
/** Field order mirrors the claude.ai directory submission wizard (`claude.ai/admin-settings/directory/submissions/new`), grouped by step; keep it in sync with the wizard. */
|
|
1075
1280
|
const claudeSubmissionFormDataSchema = z.object({
|
|
1076
1281
|
serverUrl: z.url().describe(`The full https:// URL where your MCP server is hosted and reachable. In the claude.ai wizard this is read live
|
|
1077
1282
|
from the custom connector you select — the connection is used to verify the URL and the tool list at submission time.
|
|
@@ -1163,12 +1368,7 @@ claudeSubmissionFormDataSchema.pick({
|
|
|
1163
1368
|
connectionRequirements: claudeSubmissionFormDataSchema.shape.connectionRequirements.optional(),
|
|
1164
1369
|
testInstructions: claudeSubmissionFormDataSchema.shape.testInstructions.optional()
|
|
1165
1370
|
});
|
|
1166
|
-
/**
|
|
1167
|
-
* Narrative fields the LLM-backed generation step produces for Claude submissions.
|
|
1168
|
-
* This schema accepts the slightly loose shape returned by AI generation, then normalizes it into
|
|
1169
|
-
* the strict form shape. Keep transforms here rather than in callers so generation leniency is
|
|
1170
|
-
* colocated with the Claude contract.
|
|
1171
|
-
*/
|
|
1371
|
+
/** Loose shape returned by AI generation for Claude narrative fields; transforms live here so generation leniency stays colocated with the Claude contract. */
|
|
1172
1372
|
const claudeAiGeneratedFormDataRawSchema = z.object({
|
|
1173
1373
|
oneLiner: claudeSubmissionFormDataSchema.shape.oneLiner,
|
|
1174
1374
|
description: claudeSubmissionFormDataSchema.shape.description,
|
|
@@ -1260,7 +1460,10 @@ const RESERVED_KEYS = [
|
|
|
1260
1460
|
"BUILD_ARG_START_COMMAND",
|
|
1261
1461
|
"ALPIC_HOST",
|
|
1262
1462
|
"ALPIC_CUSTOM_DOMAINS",
|
|
1263
|
-
"ALPIC_INTENT_META_KEY"
|
|
1463
|
+
"ALPIC_INTENT_META_KEY",
|
|
1464
|
+
"ALPIC_FEEDBACK_META_KEY",
|
|
1465
|
+
"ALPIC_EVENTS_META_KEY",
|
|
1466
|
+
"ALPIC_IDENTIFY_META_KEY"
|
|
1264
1467
|
];
|
|
1265
1468
|
const environmentVariableSchema = z.object({
|
|
1266
1469
|
key: z.string().min(2, "Key must be at least 2 characters").regex(/^[a-zA-Z]([a-zA-Z0-9_])+$/, "Key must start with a letter and contain only letters, numbers, and underscores").refine((key) => !RESERVED_KEYS.includes(key), "This key is reserved and cannot be used as an environment variable key"),
|
|
@@ -1576,7 +1779,8 @@ const deployEnvironmentContractV1 = oc.route({
|
|
|
1576
1779
|
successDescription: "The environment has been deployed successfully"
|
|
1577
1780
|
}).errors({
|
|
1578
1781
|
NOT_FOUND: {},
|
|
1579
|
-
BAD_REQUEST: {}
|
|
1782
|
+
BAD_REQUEST: {},
|
|
1783
|
+
CONFLICT: {}
|
|
1580
1784
|
}).input(z.object({
|
|
1581
1785
|
environmentId: z.string().describe("The ID of the environment to deploy"),
|
|
1582
1786
|
token: z.string().describe("The token to identify the source archive").optional(),
|
|
@@ -1905,5 +2109,10 @@ const contract = {
|
|
|
1905
2109
|
get: { v1: getBeaconContractV1 }
|
|
1906
2110
|
}
|
|
1907
2111
|
};
|
|
2112
|
+
const { uploadArtifact: _discard, ...deploymentsForDocs } = contract.deployments;
|
|
2113
|
+
const contractForDocs = {
|
|
2114
|
+
...contract,
|
|
2115
|
+
deployments: deploymentsForDocs
|
|
2116
|
+
};
|
|
1908
2117
|
//#endregion
|
|
1909
|
-
export { AUTH_SCOPE_ANY, AUTH_SCOPE_USER, PLATFORM_LABELS, buildSettingsSchema, contract, createEnvironmentContractV1, deploymentStatusSchema, environmentVariableSchema, environmentVariablesSchema, playgroundExamplePromptSchema, playgroundHeaderSchema, runtimeSchema, serverFieldsSchema, transportSchema, updateEnvironmentVariableSchema };
|
|
2118
|
+
export { AUTH_SCOPE_ANY, AUTH_SCOPE_USER, PLATFORM_LABELS, buildSettingsSchema, contract, contractForDocs, createEnvironmentContractV1, deploymentStatusSchema, environmentVariableSchema, environmentVariablesSchema, playgroundExamplePromptSchema, playgroundHeaderSchema, runtimeSchema, serverFieldsSchema, transportSchema, updateEnvironmentVariableSchema };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alpic-ai/api",
|
|
3
|
-
"version": "0.0.0-staging.
|
|
3
|
+
"version": "0.0.0-staging.g8555f7e",
|
|
4
4
|
"description": "Contract for the Alpic API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -33,17 +33,17 @@
|
|
|
33
33
|
"author": "Alpic",
|
|
34
34
|
"license": "ISC",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@orpc/contract": "^1.14.
|
|
36
|
+
"@orpc/contract": "^1.14.13",
|
|
37
37
|
"ms": "^2.1.3",
|
|
38
38
|
"zod": "^4.4.3"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
|
-
"@orpc/openapi": "^1.14.
|
|
42
|
-
"@orpc/zod": "^1.14.
|
|
41
|
+
"@orpc/openapi": "^1.14.13",
|
|
42
|
+
"@orpc/zod": "^1.14.13",
|
|
43
43
|
"@total-typescript/tsconfig": "^1.0.4",
|
|
44
44
|
"@types/ms": "^2.1.0",
|
|
45
45
|
"shx": "^0.4.0",
|
|
46
|
-
"tsdown": "^0.22.
|
|
46
|
+
"tsdown": "^0.22.14",
|
|
47
47
|
"typescript": "^6.0.3",
|
|
48
48
|
"vitest": "^4.1.10",
|
|
49
49
|
"@alpic-ai/domains": "0.0.0"
|