@alpic-ai/api 0.0.0-staging.ga391f46 → 0.0.0-staging.ga4f671b
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.mjs +22 -15
- 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.29.
|
|
5
|
+
//#region ../../node_modules/.pnpm/@modelcontextprotocol+sdk@1.29.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
|
*/
|
|
@@ -369,6 +369,12 @@ const environmentSchema$1 = z.object({
|
|
|
369
369
|
updatedAt: z.coerce.date()
|
|
370
370
|
});
|
|
371
371
|
const environmentWithDomainsSchema = environmentSchema$1.extend({ domains: z.array(environmentDomainSchema) });
|
|
372
|
+
z.object({
|
|
373
|
+
sessionReplayEnabled: z.boolean(),
|
|
374
|
+
collectRequestPayload: z.boolean(),
|
|
375
|
+
collectResponsePayload: z.boolean(),
|
|
376
|
+
collectErrorMessage: z.boolean()
|
|
377
|
+
});
|
|
372
378
|
z.object({
|
|
373
379
|
id: z.string(),
|
|
374
380
|
createdAt: z.coerce.date(),
|
|
@@ -567,10 +573,10 @@ const toolDefinitionSchema = z.object({
|
|
|
567
573
|
}).optional()
|
|
568
574
|
});
|
|
569
575
|
const positiveTestCaseSchema = z.object({
|
|
570
|
-
scenario: z.string(),
|
|
571
|
-
userPrompt: z.string(),
|
|
572
|
-
toolTriggered: z.string().optional(),
|
|
573
|
-
expectedOutput: z.string().optional()
|
|
576
|
+
scenario: z.string().describe("Short label for what this case demonstrates."),
|
|
577
|
+
userPrompt: z.string().describe("A realistic, standalone user message a reviewer can paste and run with no prior state or multi-turn setup. Vary phrasing and tone across cases."),
|
|
578
|
+
toolTriggered: z.string().optional().describe("The tool this prompt should invoke."),
|
|
579
|
+
expectedOutput: z.string().optional().describe("What the user should see, including post-interaction behaviour where relevant.")
|
|
574
580
|
}).partial().describe("Each case: Scenario, User prompt, Tool triggered, Expected output.");
|
|
575
581
|
const screenshotEntrySchema = z.object({
|
|
576
582
|
prompt: z.string(),
|
|
@@ -886,10 +892,10 @@ const negativeTestCaseSchema = z.object({
|
|
|
886
892
|
}).partial().describe("Each case: Scenario + User prompt (the app should NOT trigger).");
|
|
887
893
|
const chatgptToolJustificationSchema = z.object({
|
|
888
894
|
toolName: z.string(),
|
|
889
|
-
readOnlyJustification: z.string(),
|
|
890
|
-
openWorldJustification: z.string(),
|
|
891
|
-
destructiveJustification: z.string()
|
|
892
|
-
}).describe("Per-tool justification of each MCP annotation value (one sentence per hint).");
|
|
895
|
+
readOnlyJustification: z.string().describe("One sentence on what the tool reads and returns."),
|
|
896
|
+
openWorldJustification: z.string().describe("One sentence on whether the tool reaches external systems beyond your own service."),
|
|
897
|
+
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.\"")
|
|
898
|
+
}).describe("Per-tool justification of each MCP annotation value (one specific sentence per hint).");
|
|
893
899
|
/**
|
|
894
900
|
* Base copy fields, defined once and reused by both the submission form and per-locale
|
|
895
901
|
* translations so the constraints (tagline ≤ 30 chars) never drift. The translation generation
|
|
@@ -911,8 +917,8 @@ const chatgptSubmissionFormDataSchema = z.object({
|
|
|
911
917
|
logoLight: z.string().describe("Logo icon for light mode. Square PNG, no borders or rounded corners (clients apply circular cropping)."),
|
|
912
918
|
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."),
|
|
913
919
|
appName: z.string().describe("The name users will see in ChatGPT and in the Apps Directory."),
|
|
914
|
-
tagline: chatgptTaglineSchema.describe("Plain-language phrase focused on function and user value
|
|
915
|
-
description: chatgptDescriptionSchema.describe("Clear, engaging description highlighting what the app does and why people will love it. Appears publicly on the directory page."),
|
|
920
|
+
tagline: chatgptTaglineSchema.describe("Plain-language phrase focused on function and user value, 30 chars max. Avoid generic superlatives like \"the best …\"."),
|
|
921
|
+
description: chatgptDescriptionSchema.describe("Clear, engaging description highlighting what the app does and why people will love it. Appears publicly on the directory page. End it by naming the product categories or intents the app does NOT cover, so ChatGPT learns when not to route to it (define exclusions by absent categories or wrong intents, never by naming other brands)."),
|
|
916
922
|
category: chatgptCategorySchema.describe("Category from the OpenAI taxonomy."),
|
|
917
923
|
developerName: z.string().describe("Developer name shown publicly on the app's directory page."),
|
|
918
924
|
companyUrl: z.url().describe("Your company's main website URL."),
|
|
@@ -924,10 +930,10 @@ const chatgptSubmissionFormDataSchema = z.object({
|
|
|
924
930
|
serverUrl: z.url().describe("URL of the MCP server."),
|
|
925
931
|
authentication: chatgptAuthenticationSchema.describe("OAuth 2.0 or No auth. OAuth configuration is auto-discovered from the MCP server's metadata."),
|
|
926
932
|
tools: z.array(toolDefinitionSchema).describe("List of tools exposed by the MCP server (auto-populated from the production server's manifest)."),
|
|
927
|
-
toolJustifications: z.array(chatgptToolJustificationSchema).describe("Per-tool justification of `readOnlyHint`, `openWorldHint`, and `destructiveHint` annotation values."),
|
|
928
|
-
testCases: z.array(positiveTestCaseSchema).describe("At least 5 positive test cases. Each: Scenario, User prompt, Tool triggered, Expected output.
|
|
929
|
-
negativeTestCases: z.array(negativeTestCaseSchema).describe("3 negative test cases
|
|
930
|
-
screenshots: z.array(screenshotEntrySchema).describe("In-app screenshots paired with the user prompt that produced them. Widget apps must show the widget UI; non-widget apps show the model response. Min 1, max
|
|
933
|
+
toolJustifications: z.array(chatgptToolJustificationSchema).describe("Per-tool justification of `readOnlyHint`, `openWorldHint`, and `destructiveHint` annotation values. One short, specific sentence per hint describing what the tool actually does."),
|
|
934
|
+
testCases: z.array(positiveTestCaseSchema).describe("At least 5 positive test cases. Each: Scenario, User prompt, Tool triggered, Expected output. Collectively cover the full capability across different flow stages (initial search or browse, market or locale handling, post-interaction detail, an action ChatGPT performs on the user's behalf, and a conversion or secondary tool) rather than five variations of the same first step."),
|
|
935
|
+
negativeTestCases: z.array(negativeTestCaseSchema).describe("3 negative test cases: prompts where the app should NOT trigger but the model might think it is relevant. These become production routing metadata that teaches ChatGPT when to stay silent, so pick tight near-misses: a product category the app does not carry, the right brand or domain but an intent the app does not serve, or a boundary with a sibling app."),
|
|
936
|
+
screenshots: z.array(screenshotEntrySchema).max(3).describe("In-app screenshots paired with the user prompt that produced them. Widget apps must show the widget UI; non-widget apps show the model response. Min 1, max 3 entries, all public. Images: 706px wide, 400–860px tall, PNG."),
|
|
931
937
|
translations: z.array(chatgptTranslationSchema).describe("Per-locale translation of tagline + description. English (US) is the default."),
|
|
932
938
|
allowedCountries: chatgptAllowedCountriesSchema.describe("Availability: all supported countries, or an allow-list / block-list of specific ones (ISO alpha-2)."),
|
|
933
939
|
releaseNotes: z.string().describe("Publicly displayed on the app details page.")
|
|
@@ -1158,6 +1164,7 @@ claudeSubmissionFormDataSchema.pick({
|
|
|
1158
1164
|
const submissionMetaFieldsSchema = z.object({
|
|
1159
1165
|
id: z.string(),
|
|
1160
1166
|
environmentId: z.string(),
|
|
1167
|
+
auditId: z.string().nullable(),
|
|
1161
1168
|
createdAt: z.coerce.date(),
|
|
1162
1169
|
updatedAt: z.coerce.date()
|
|
1163
1170
|
});
|
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.ga4f671b",
|
|
4
4
|
"description": "Contract for the Alpic API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.mjs",
|
|
@@ -17,17 +17,17 @@
|
|
|
17
17
|
"author": "Alpic",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@orpc/contract": "^1.14.
|
|
20
|
+
"@orpc/contract": "^1.14.6",
|
|
21
21
|
"ms": "^2.1.3",
|
|
22
22
|
"zod": "^4.4.3"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@orpc/openapi": "^1.14.
|
|
26
|
-
"@orpc/zod": "^1.14.
|
|
25
|
+
"@orpc/openapi": "^1.14.6",
|
|
26
|
+
"@orpc/zod": "^1.14.6",
|
|
27
27
|
"@total-typescript/tsconfig": "^1.0.4",
|
|
28
28
|
"@types/ms": "^2.1.0",
|
|
29
29
|
"shx": "^0.4.0",
|
|
30
|
-
"tsdown": "^0.22.
|
|
30
|
+
"tsdown": "^0.22.2",
|
|
31
31
|
"typescript": "^6.0.3",
|
|
32
32
|
"vitest": "^4.1.8",
|
|
33
33
|
"@alpic-ai/domains": "0.0.0"
|