@alfe.ai/integration-manifest 0.3.0 → 0.3.2

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/README.md CHANGED
@@ -135,3 +135,8 @@ pnpm --filter @alfe.ai/integration-manifest test
135
135
 
136
136
  - `yaml` — YAML parsing
137
137
  - `zod` — Schema validation
138
+
139
+ ## Links
140
+
141
+ - 🌐 Website: <https://alfe.ai>
142
+ - 📚 Docs: <https://docs.alfe.ai>
package/dist/index.d.ts CHANGED
@@ -15,7 +15,7 @@ import { z } from "zod";
15
15
  * caught at runtime when the integrations service tries to resolve the
16
16
  * provider and gets nothing back.
17
17
  */
18
- declare const KNOWN_CONNECT_PROVIDER_IDS: readonly ["atlassian", "custom", "discord", "github", "google", "microsoft", "mobile", "myob", "notion", "salesforce", "slack", "xero"];
18
+ declare const KNOWN_CONNECT_PROVIDER_IDS: readonly ["atlassian", "ctrader", "custom", "discord", "github", "google", "microsoft", "mobile", "myob", "notion", "salesforce", "slack", "xero"];
19
19
  type KnownConnectProviderId = (typeof KNOWN_CONNECT_PROVIDER_IDS)[number];
20
20
  /**
21
21
  * `custom` is a special provider id: it doesn't correspond to a fixed
@@ -283,29 +283,8 @@ declare const IntegrationManifestSchema: z.ZodObject<{
283
283
  requires_credentials: z.ZodOptional<z.ZodString>;
284
284
  hook_managed: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
285
285
  }, z.core.$strip>>>>;
286
- requires_connection: z.ZodOptional<z.ZodArray<z.ZodEnum<{
287
- atlassian: "atlassian";
288
- custom: "custom";
289
- discord: "discord";
290
- github: "github";
291
- google: "google";
292
- microsoft: "microsoft";
293
- mobile: "mobile";
294
- myob: "myob";
295
- notion: "notion";
296
- salesforce: "salesforce";
297
- slack: "slack";
298
- xero: "xero";
299
- }>>>;
300
- channel_type: z.ZodOptional<z.ZodEnum<{
301
- discord: "discord";
302
- slack: "slack";
303
- whatsapp: "whatsapp";
304
- sms: "sms";
305
- voice: "voice";
306
- google_chat: "google_chat";
307
- teams: "teams";
308
- }>>;
286
+ requires_connection: z.ZodOptional<z.ZodArray<z.ZodString>>;
287
+ channel_type: z.ZodOptional<z.ZodString>;
309
288
  expected_credentials: z.ZodOptional<z.ZodArray<z.ZodObject<{
310
289
  key: z.ZodString;
311
290
  type: z.ZodEnum<{
@@ -542,16 +521,25 @@ interface IntegrationManifest {
542
521
  * Connect provider ids whose credentials this integration resolves at
543
522
  * runtime. OR-semantics: any one in the list satisfies activation. See
544
523
  * the `requires_connection` field in `schema.ts` for full semantics.
545
- * Typed as `KnownConnectProviderId[]` so consumers get compile-time
546
- * narrowing matching the schema's runtime validation.
524
+ *
525
+ * Typed as `KnownConnectProviderId | (string & {})` — the union keeps
526
+ * IDE autocomplete for known provider ids while the `string` arm mirrors
527
+ * the RUNTIME parser, which is intentionally lenient (an unknown id is a
528
+ * no-op credential hint, never an install-blocking error). Do NOT narrow
529
+ * this back to `KnownConnectProviderId[]`: that reintroduces the
530
+ * forward-compat hazard where an older daemon crashes on a newly-added id.
547
531
  */
548
- requires_connection?: KnownConnectProviderId[];
532
+ requires_connection?: (KnownConnectProviderId | (string & {}))[];
549
533
  /**
550
534
  * Channel type this integration adapts. Populated on integrations under
551
535
  * the submodule's `channels/<id>/` folder that map to a single channel
552
536
  * type. See `channel_type` in `schema.ts` for full semantics.
537
+ *
538
+ * Typed as `ChannelType | (string & {})` for the same forward-compat
539
+ * reason as `requires_connection` — the runtime parser accepts any
540
+ * string so a newly-added channel type can't strand an older daemon.
553
541
  */
554
- channel_type?: ChannelType;
542
+ channel_type?: ChannelType | (string & {});
555
543
  /**
556
544
  * Credential fields the manifest expects a Custom Connection's owner
557
545
  * to fill in at create time. Used ONLY by manifests authored against
package/dist/index.js CHANGED
@@ -24,6 +24,7 @@ import { parse } from "yaml";
24
24
  */
25
25
  const KNOWN_CONNECT_PROVIDER_IDS = [
26
26
  "atlassian",
27
+ "ctrader",
27
28
  "custom",
28
29
  "discord",
29
30
  "github",
@@ -235,8 +236,8 @@ const IntegrationManifestSchema = z.object({
235
236
  hooks: IntegrationHooksSchema.optional().default({}),
236
237
  commands: z.array(CommandDeclarationSchema).optional().default([]),
237
238
  mcp_servers: z.array(McpServerDeclarationSchema).optional().default([]),
238
- requires_connection: z.array(z.enum(KNOWN_CONNECT_PROVIDER_IDS)).optional(),
239
- channel_type: ChannelTypeSchema.optional(),
239
+ requires_connection: z.array(z.string().min(1)).optional(),
240
+ channel_type: z.string().min(1).optional(),
240
241
  expected_credentials: z.array(CredentialFieldSpecSchema).optional(),
241
242
  repository: z.url().optional(),
242
243
  supported_agents: z.array(RuntimeKeySchema).optional(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfe.ai/integration-manifest",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Integration manifest schema, types, and parser for Alfe integration platform",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -19,6 +19,14 @@
19
19
  "dist"
20
20
  ],
21
21
  "license": "UNLICENSED",
22
+ "homepage": "https://alfe.ai",
23
+ "author": "Alfe (https://alfe.ai)",
24
+ "keywords": [
25
+ "alfe",
26
+ "ai-agents",
27
+ "agent",
28
+ "llm"
29
+ ],
22
30
  "scripts": {
23
31
  "build": "tsdown",
24
32
  "dev": "tsdown --watch",