@crewx/sdk 0.9.0-rc.124 → 0.9.0-rc.125

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.
@@ -0,0 +1,27 @@
1
+ export type AppDevCheckItem = {
2
+ readonly rule: 'manifest' | 'external_resource' | 'output_unsafe_string' | 'output_invalid' | 'output_size' | 'call_duration';
3
+ readonly severity: 'error' | 'warning' | 'ok';
4
+ readonly code: string;
5
+ readonly where: string;
6
+ readonly detail?: Record<string, string | number>;
7
+ };
8
+ export type ExternalResourceKind = 'script' | 'style' | 'image' | 'font' | 'media' | 'frame' | 'object' | 'form' | 'navigation' | 'css' | 'script_network';
9
+ export interface ExternalResourceFinding {
10
+ readonly line: number;
11
+ readonly column: number;
12
+ readonly url: string;
13
+ readonly directive: string;
14
+ readonly kind: ExternalResourceKind;
15
+ }
16
+ export interface InspectSkillBackendOutputOptions {
17
+ readonly actionId: string;
18
+ readonly dataPaths?: readonly string[];
19
+ readonly durationMs?: number;
20
+ readonly timedOut?: boolean;
21
+ }
22
+ export interface ScanExternalResourcesOptions {
23
+ readonly csp: string;
24
+ }
25
+ export declare function inspectSkillBackendOutput(stdoutText: string, options: InspectSkillBackendOutputOptions): AppDevCheckItem[];
26
+ export declare function scanExternalResources(html: string, options: ScanExternalResourcesOptions): ExternalResourceFinding[];
27
+ export declare function externalResourceCheckItems(entryRelativePath: string, findings: readonly ExternalResourceFinding[]): AppDevCheckItem[];
@@ -1,14 +1,45 @@
1
+ import type { UiDefinitionLineageEntry } from '../ui-instance/lineage.js';
1
2
  import type { JsonObject, UiDefinition } from '../ui-instance/types.js';
2
3
  import type { UiPluginHandlerMetadata, UiPluginManifestV2, UiPluginNormalizedManifestV2 } from '../ui-plugin/types.js';
3
4
  import { AppDiscoveryFsError, NodeAppDiscoveryFs, NodeAppDiscoveryFsAdapter, defaultAppDiscoveryFs, defaultNodeAppDiscoveryFs, type AppDiscoveryFsErrorCode } from './node-app-discovery-fs.js';
4
5
  import type { McpAppRegistry } from './types.js';
5
6
  export type WorkspaceAppSource = 'apps' | 'skills';
7
+ export type WorkspaceAppDiscoverySource = WorkspaceAppSource | 'bundled';
8
+ export interface ProductAppBundleInput {
9
+ readonly root: string;
10
+ readonly expectedIndexHash: string;
11
+ }
12
+ export interface ProductAppBundleProvenance {
13
+ readonly kind: 'bundled';
14
+ readonly indexHash: string;
15
+ readonly packageDir: string;
16
+ }
17
+ export interface ProductAppBundleFileHash {
18
+ readonly path: string;
19
+ readonly sha256: string;
20
+ }
21
+ export interface ProductAppBundleDefinitionIdentity {
22
+ readonly id: string;
23
+ readonly version: number;
24
+ readonly hash: string;
25
+ }
26
+ export interface ProductAppBundlePackageIndex {
27
+ readonly packageDir: string;
28
+ readonly appId: string;
29
+ readonly definition: ProductAppBundleDefinitionIdentity;
30
+ readonly lineage: readonly UiDefinitionLineageEntry[];
31
+ readonly files: readonly ProductAppBundleFileHash[];
32
+ }
33
+ export interface ProductAppBundleIndex {
34
+ readonly version: 1;
35
+ readonly packages: readonly ProductAppBundlePackageIndex[];
36
+ }
6
37
  export type WorkspaceAppDiscoveryIncompleteReason = 'time_limit';
7
- export type WorkspaceAppDiagnosticCode = 'MANIFEST_MISSING' | 'MANIFEST_INVALID' | 'ENTRY_INVALID' | 'INITIAL_STATE_INVALID' | 'DUPLICATE_ID' | 'RESERVED_ID' | 'PATH_ESCAPED' | 'LIMIT_EXCEEDED' | 'EXEC_DENIED';
38
+ export type WorkspaceAppDiagnosticCode = 'MANIFEST_MISSING' | 'MANIFEST_INVALID' | 'ENTRY_INVALID' | 'INITIAL_STATE_INVALID' | 'DUPLICATE_ID' | 'RESERVED_ID' | 'BUNDLE_INTEGRITY' | 'LINEAGE_INVALID' | 'LINEAGE_STALE' | 'PATH_ESCAPED' | 'LIMIT_EXCEEDED' | 'EXEC_DENIED';
8
39
  export interface WorkspaceAppDiagnostic {
9
40
  readonly code: WorkspaceAppDiagnosticCode;
10
41
  readonly pluginId?: string;
11
- readonly source: WorkspaceAppSource;
42
+ readonly source: WorkspaceAppDiscoverySource;
12
43
  readonly relativePath: string;
13
44
  }
14
45
  export type McpAppDiscoveryDiagnostic = WorkspaceAppDiagnostic;
@@ -46,12 +77,14 @@ export interface WorkspaceAppDiscoveryOptions {
46
77
  readonly reservedAppIds?: Iterable<string>;
47
78
  readonly reservedDefinitionIds?: Iterable<string>;
48
79
  readonly reservedToolNames?: Iterable<string>;
80
+ readonly productBundle?: ProductAppBundleInput;
49
81
  }
50
82
  export interface WorkspaceAppToolNames {
51
83
  readonly read: string;
52
84
  readonly action?: string;
53
85
  }
54
86
  export interface WorkspaceAppResourceSnapshot {
87
+ readonly provenance?: ProductAppBundleProvenance;
55
88
  readonly entry: {
56
89
  readonly path: 'ui/index.html';
57
90
  readonly hash: string;
@@ -63,12 +96,11 @@ export interface WorkspaceAppResourceSnapshot {
63
96
  readonly bytes: readonly number[];
64
97
  };
65
98
  }
66
- export interface WorkspaceAppCandidate {
99
+ interface WorkspaceAppCandidateBase {
67
100
  readonly appId: string;
68
101
  readonly pluginId: string;
69
102
  readonly definitionId: string;
70
103
  readonly version: number;
71
- readonly source: WorkspaceAppSource;
72
104
  readonly relativePath: string;
73
105
  readonly manifest: UiPluginManifestV2;
74
106
  readonly normalized: UiPluginNormalizedManifestV2;
@@ -88,11 +120,21 @@ export interface WorkspaceAppCandidate {
88
120
  readonly sourceHash: string;
89
121
  readonly toolNames: WorkspaceAppToolNames;
90
122
  }
123
+ export type WorkspaceAppCandidate = WorkspaceAppCandidateBase & ({
124
+ readonly source: WorkspaceAppSource;
125
+ readonly provenance?: never;
126
+ readonly lineage?: never;
127
+ } | {
128
+ readonly source?: never;
129
+ readonly provenance: ProductAppBundleProvenance;
130
+ readonly lineage: readonly UiDefinitionLineageEntry[];
131
+ });
91
132
  export interface WorkspaceAppDiscoveryResult {
92
133
  readonly apps: readonly WorkspaceAppCandidate[];
93
134
  readonly diagnostics: readonly WorkspaceAppDiagnostic[];
94
135
  readonly complete: boolean;
95
136
  readonly incompleteReason?: WorkspaceAppDiscoveryIncompleteReason;
137
+ readonly productBundleIndexHash?: string;
96
138
  readonly candidates?: readonly WorkspaceAppCandidate[];
97
139
  }
98
140
  export declare const WORKSPACE_APP_TOOL_PREFIX = "crewx_local_app_";
@@ -4,7 +4,7 @@ export { INSTALLED_APP_ENTRY, InstalledAppRefError, buildInstalledAppRef, valida
4
4
  export type { BuildInstalledAppRefInput, InstalledAppPackageFile, InstalledAppRef, InstalledAppRefErrorCode, } from './installed-app-ref.js';
5
5
  export { MAX_HTML_LENGTH, createMcpAppRegistry, createBuiltinMcpAppRegistry, buildMcpAppLocalRegistration, createMcpAppLocalRegistration, registerLocalMcpApp, createMcpAppWorkspaceRegistry, createWorkspaceAppRegistry, createWorkspaceMcpAppRegistry, registerMcpApp, resolveMcpAppResource, resolveLocalMcpAppResource, requireMcpAppResource, toMcpAppToolRegistration, } from './registry.js';
6
6
  export { AppDiscoveryFsError, NodeAppDiscoveryFs, NodeAppDiscoveryFsAdapter, defaultAppDiscoveryFs, defaultNodeAppDiscoveryFs, deriveWorkspaceAppToolName, deriveWorkspaceAppToolNames, discoverWorkspaceAppCandidates, discoverWorkspaceApps, LOCAL_APP_TOOL_PREFIX, MCP_APP_WORKSPACE_TOOL_PREFIX, scanWorkspaceApps, WORKSPACE_APP_TOOL_PREFIX, } from './discovery.js';
7
- export type { AppDiscoveryBytes, AppDiscoveryDiagnostic, AppDiscoveryDirectoryEntry, AppDiscoveryDirectoryEntryKind, AppDiscoveryDirectoryListing, AppDiscoveryFileSystem, AppDiscoveryFsErrorCode, AppDiscoveryMaybePromise, WorkspaceAppDiscoveryOptions as AppDiscoveryOptions, McpAppDiscoveryDiagnostic, WorkspaceAppBuiltinCatalog, WorkspaceAppCandidate, WorkspaceAppDiscoveryIncompleteReason, WorkspaceAppDiscoveryOptions, WorkspaceAppDiscoveryResult, WorkspaceAppDiagnostic, WorkspaceAppDiagnosticCode, WorkspaceAppResourceSnapshot, WorkspaceAppReservedCatalog, WorkspaceAppSource, WorkspaceAppToolNames, } from './discovery.js';
7
+ export type { AppDiscoveryBytes, AppDiscoveryDiagnostic, AppDiscoveryDirectoryEntry, AppDiscoveryDirectoryEntryKind, AppDiscoveryDirectoryListing, AppDiscoveryFileSystem, AppDiscoveryFsErrorCode, AppDiscoveryMaybePromise, WorkspaceAppDiscoveryOptions as AppDiscoveryOptions, McpAppDiscoveryDiagnostic, WorkspaceAppBuiltinCatalog, WorkspaceAppCandidate, WorkspaceAppDiscoveryIncompleteReason, WorkspaceAppDiscoveryOptions, WorkspaceAppDiscoveryResult, WorkspaceAppDiagnostic, WorkspaceAppDiagnosticCode, WorkspaceAppDiscoverySource, WorkspaceAppResourceSnapshot, WorkspaceAppReservedCatalog, WorkspaceAppSource, WorkspaceAppToolNames, ProductAppBundleDefinitionIdentity, ProductAppBundleFileHash, ProductAppBundleIndex, ProductAppBundleInput, ProductAppBundlePackageIndex, ProductAppBundleProvenance, } from './discovery.js';
8
8
  export { createWorkspaceAppCatalog, discoverWorkspaceAppCatalog, hashAppDefinition, hashCrewxAppDefinition, listWorkspaceApps, } from './catalog.js';
9
9
  export type { CrewxAppBuiltinCatalog, CrewxAppCapability, CrewxAppCatalogOptions, CrewxAppCatalogResult, CrewxAppDefinitionHashInput, CrewxAppDefinitionSummary, CrewxAppDiagnostic, CrewxAppDiagnosticCode, CrewxAppDiagnosticSource, CrewxAppInstalledProjection, CrewxAppLocalDefinitionRef, CrewxAppOrigin, CrewxAppOwnership, CrewxAppShareability, CrewxAppSharingAvailability, CrewxAppSummary, } from './types.js';
10
10
  export { MCP_APP_PROJECTION_MAX_BYTES, buildMcpAppStateDescriptor, buildMcpAppStateProjections, buildTerminalMcpAppStateDescriptor, buildTerminalMcpAppStateProjections, createMcpAppToolResult, serializeMcpAppStateJson, serializeMcpAppStateXml, } from './projection.js';
@@ -18,6 +18,8 @@ export { buildStateSetHandler, createStateSetHandler, } from './state-set.js';
18
18
  export type { StateSetHandlerBuildInput } from './state-set.js';
19
19
  export { SKILL_BACKEND_DEFAULT_TIMEOUT_MS, SKILL_BACKEND_MAX_INPUT_BYTES, SKILL_BACKEND_MAX_OUTPUT_BYTES, SKILL_BACKEND_SCHEMA_VERSION, buildSkillBackendHandler, } from './skill-backend.js';
20
20
  export type { SkillBackendExecutionPort, SkillBackendExecutionRequest, SkillBackendExecutionResponse, SkillBackendHandlerBuildInput, SkillBackendInfrastructureErrorCode, SkillBackendPayload, } from './skill-backend.js';
21
+ export { externalResourceCheckItems, inspectSkillBackendOutput, scanExternalResources, } from './dev-checks.js';
22
+ export type { AppDevCheckItem, ExternalResourceFinding, ExternalResourceKind, InspectSkillBackendOutputOptions, ScanExternalResourcesOptions, } from './dev-checks.js';
21
23
  export { MCP_APP_HOST_TOOL_ALLOWLIST, MCP_APP_LOCAL_RESOURCE_MIME_TYPE, MCP_APP_RESOURCE_MIME_TYPE, MCP_APP_RESOURCE_URI_PREFIX, } from './types.js';
22
24
  export type { McpAppActionDispatcherToolInput, McpAppActionToolDescriptor, McpAppActionToolInput, McpAppButtonDescriptor, McpAppButtonInput, McpAppDescriptor, McpAppDescriptorInput, McpAppInputSchema, McpAppTone, McpUiResourceCsp, McpAppRegistry, McpAppResource, McpAppServerStateInput, McpAppStateDescriptor, McpAppStateProjections, McpAppHostToolInput, McpAppHostToolName, McpAppReadToolInput, McpAppSingleActionToolInput, McpAppToolCommonInput, McpAppToolDescriptor, McpAppToolInput, McpAppToolMetadata, McpAppToolRegistration, McpAppToolResult, McpAppToolVisibility, McpAppInstanceResourceBinding, McpAppMcpResourceBinding, McpAppResourceBinding, McpAppLocalResource, McpAppLocalRegistrationInput, McpAppLocalReadToolDescriptor, McpAppLocalActionToolDescriptor, McpAppLocalSingleActionToolDescriptor, McpAppLocalToolDiagnostic, McpAppLocalToolDescriptor, McpAppLocalRegistration, McpAppBuiltinRegistration, McpAppResolvedRegistration, McpAppLocalLauncher, McpAppBuiltinLauncher, McpAppLauncher, WorkspaceAppLauncher, WorkspaceAppResolvedRegistration, McpAppWorkspaceRegistry, WorkspaceAppRegistry, McpAppWorkspaceRegistryInput, } from './types.js';
23
25
  export { buildWorkspaceAppSnapshot, discoverWorkspaceAppSnapshot, reconfirmWorkspaceAppSnapshot, } from './workspace-snapshot.js';
@@ -22,6 +22,7 @@ export type SkillBackendExecutionResponse = {
22
22
  readonly result?: JsonObject;
23
23
  };
24
24
  export interface SkillBackendExecutionRequest {
25
+ readonly requestId?: string;
25
26
  readonly instanceId: string;
26
27
  readonly appId: string;
27
28
  readonly definitionId: string;
@@ -1,5 +1,5 @@
1
1
  import type { JsonObject, UiDefinition, UiDefinitionRef, UiDefinitionDisplayMode, UiDefinitionUsage, UiInstance, UiInstanceStatus, UiActionConfirmation, UiActionHandlerRegistration } from '../ui-instance/types.js';
2
- import type { AppDiscoveryFileSystem } from './discovery.js';
2
+ import type { AppDiscoveryFileSystem, ProductAppBundleInput, ProductAppBundleProvenance } from './discovery.js';
3
3
  export declare const MCP_APP_RESOURCE_MIME_TYPE: "text/html;profile=mcp-app";
4
4
  export declare const MCP_APP_RESOURCE_URI_PREFIX = "ui://crewx/";
5
5
  export type McpAppToolVisibility = 'model' | 'app';
@@ -184,6 +184,7 @@ export interface McpAppLocalLauncher {
184
184
  readonly tone?: McpAppTone;
185
185
  readonly builtinOnly: false;
186
186
  readonly definition: UiDefinitionRef;
187
+ readonly provenance?: ProductAppBundleProvenance;
187
188
  readonly entryHash: string;
188
189
  readonly resourceBinding: McpAppInstanceResourceBinding;
189
190
  readonly tools: readonly McpAppLocalToolDescriptor[];
@@ -363,9 +364,10 @@ export interface CrewxAppSummary {
363
364
  readonly marketplaceContentId?: string;
364
365
  readonly slug?: string;
365
366
  readonly definitionHash: string;
367
+ readonly provenance?: ProductAppBundleProvenance;
366
368
  }
367
- export type CrewxAppDiagnosticCode = 'MANIFEST_MISSING' | 'MANIFEST_INVALID' | 'ENTRY_INVALID' | 'INITIAL_STATE_INVALID' | 'DUPLICATE_ID' | 'RESERVED_ID' | 'PATH_ESCAPED' | 'LIMIT_EXCEEDED' | 'EXEC_DENIED' | 'SKILL_INVALID' | 'SKILL_READ_FAILED' | 'INSTALLED_MISSING' | 'INSTALLED_CONTENT_ID_MISSING' | 'INSTALLED_IDENTITY_MISMATCH' | 'BUILTIN_INVALID';
368
- export type CrewxAppDiagnosticSource = 'apps' | 'skills' | 'node_modules' | 'builtin' | 'installed';
369
+ export type CrewxAppDiagnosticCode = 'MANIFEST_MISSING' | 'MANIFEST_INVALID' | 'ENTRY_INVALID' | 'INITIAL_STATE_INVALID' | 'DUPLICATE_ID' | 'RESERVED_ID' | 'BUNDLE_INTEGRITY' | 'LINEAGE_INVALID' | 'LINEAGE_STALE' | 'PATH_ESCAPED' | 'LIMIT_EXCEEDED' | 'EXEC_DENIED' | 'SKILL_INVALID' | 'SKILL_READ_FAILED' | 'INSTALLED_MISSING' | 'INSTALLED_CONTENT_ID_MISSING' | 'INSTALLED_IDENTITY_MISMATCH' | 'BUILTIN_INVALID';
370
+ export type CrewxAppDiagnosticSource = 'apps' | 'skills' | 'bundled' | 'node_modules' | 'builtin' | 'installed';
369
371
  export interface CrewxAppDiagnostic {
370
372
  readonly code: CrewxAppDiagnosticCode;
371
373
  readonly source: CrewxAppDiagnosticSource;
@@ -384,6 +386,7 @@ export interface CrewxAppInstalledProjection {
384
386
  export type CrewxAppBuiltinCatalog = Pick<McpAppRegistry, 'listMcpApps' | 'listMcpAppTools'>;
385
387
  export interface CrewxAppCatalogOptions {
386
388
  readonly filesystem?: AppDiscoveryFileSystem;
389
+ readonly productBundle?: ProductAppBundleInput;
387
390
  readonly builtinCatalog?: CrewxAppBuiltinCatalog;
388
391
  readonly installed?: readonly CrewxAppInstalledProjection[];
389
392
  }
@@ -1,11 +1,12 @@
1
- import { type AppDiscoveryFileSystem, type WorkspaceAppDiscoveryIncompleteReason, type WorkspaceAppDiagnostic, type WorkspaceAppDiscoveryOptions, type WorkspaceAppDiscoveryResult, type WorkspaceAppSource } from './discovery.js';
1
+ import { type AppDiscoveryFileSystem, type WorkspaceAppDiscoveryIncompleteReason, type WorkspaceAppDiagnostic, type WorkspaceAppDiscoveryOptions, type WorkspaceAppDiscoveryResult, type WorkspaceAppSource, type ProductAppBundleProvenance } from './discovery.js';
2
2
  import { type SkillBackendExecutionPort } from './skill-backend.js';
3
3
  import type { JsonObject, UiActionHandlerRegistration, UiDefinition, UiDefinitionRef } from '../ui-instance/types.js';
4
4
  import type { McpAppLauncher, McpAppLocalResource, McpAppRegistry, McpAppWorkspaceRegistry } from './types.js';
5
5
  export interface WorkspaceAppSnapshotResource extends McpAppLocalResource {
6
6
  readonly appId: string;
7
7
  readonly definition: UiDefinitionRef;
8
- readonly source: WorkspaceAppSource;
8
+ readonly source?: WorkspaceAppSource;
9
+ readonly provenance?: ProductAppBundleProvenance;
9
10
  }
10
11
  export interface WorkspaceAppSnapshotInitialState {
11
12
  readonly appId: string;
@@ -0,0 +1,36 @@
1
+ CREATE TABLE IF NOT EXISTS `ui_instance_repins` (
2
+ `instance_id` text NOT NULL,
3
+ `from_version` integer NOT NULL,
4
+ `from_hash` text NOT NULL,
5
+ `to_version` integer NOT NULL,
6
+ `to_hash` text NOT NULL,
7
+ `from_revision` integer NOT NULL,
8
+ `to_revision` integer,
9
+ `status` text NOT NULL,
10
+ `code` text,
11
+ `attempts` integer DEFAULT 1 NOT NULL,
12
+ `first_at` integer NOT NULL,
13
+ `last_at` integer NOT NULL,
14
+ PRIMARY KEY(`instance_id`, `to_hash`),
15
+ CONSTRAINT "ui_instance_repins_instance_id_ck" CHECK(length("ui_instance_repins"."instance_id") BETWEEN 5 AND 128 AND "ui_instance_repins"."instance_id" GLOB 'uic_*'),
16
+ CONSTRAINT "ui_instance_repins_from_version_ck" CHECK("ui_instance_repins"."from_version" >= 1),
17
+ CONSTRAINT "ui_instance_repins_to_version_ck" CHECK("ui_instance_repins"."to_version" >= 1),
18
+ CONSTRAINT "ui_instance_repins_from_hash_ck" CHECK(length("ui_instance_repins"."from_hash") = 64 AND "ui_instance_repins"."from_hash" NOT GLOB '*[^0-9a-f]*'),
19
+ CONSTRAINT "ui_instance_repins_to_hash_ck" CHECK(length("ui_instance_repins"."to_hash") = 64 AND "ui_instance_repins"."to_hash" NOT GLOB '*[^0-9a-f]*'),
20
+ CONSTRAINT "ui_instance_repins_from_revision_ck" CHECK("ui_instance_repins"."from_revision" >= 0),
21
+ CONSTRAINT "ui_instance_repins_to_revision_ck" CHECK("ui_instance_repins"."to_revision" IS NULL OR "ui_instance_repins"."to_revision" >= 0),
22
+ CONSTRAINT "ui_instance_repins_status_ck" CHECK("ui_instance_repins"."status" IN ('applied', 'deferred', 'failed')),
23
+ CONSTRAINT "ui_instance_repins_attempts_ck" CHECK("ui_instance_repins"."attempts" >= 1),
24
+ CONSTRAINT "ui_instance_repins_dates_ck" CHECK("ui_instance_repins"."first_at" >= 0 AND "ui_instance_repins"."last_at" >= "ui_instance_repins"."first_at"),
25
+ CONSTRAINT "ui_instance_repins_result_ck" CHECK((
26
+ ("ui_instance_repins"."status" = 'applied' AND "ui_instance_repins"."code" IS NULL
27
+ AND "ui_instance_repins"."to_revision" = "ui_instance_repins"."from_revision" + 1)
28
+ OR
29
+ ("ui_instance_repins"."status" IN ('deferred', 'failed') AND "ui_instance_repins"."code" IS NOT NULL
30
+ AND "ui_instance_repins"."to_revision" IS NULL)
31
+ ))
32
+ );
33
+ --> statement-breakpoint
34
+ ALTER TABLE `ui_action_receipts` ADD `definition_id` text;--> statement-breakpoint
35
+ ALTER TABLE `ui_action_receipts` ADD `definition_version` integer;--> statement-breakpoint
36
+ ALTER TABLE `ui_action_receipts` ADD `definition_hash` text;