@flowy-agent-store/protocol 0.1.0-beta.7 → 0.1.0-beta.8

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.cjs CHANGED
@@ -64,7 +64,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
64
64
  * faces deliberately never do; both methods are WebSocket-only, so the
65
65
  * documented route split becomes `48 / 73` (doc `32`).
66
66
  */
67
- const APP_SERVER_PROTOCOL_VERSION = "fp-8";
67
+ const APP_SERVER_PROTOCOL_VERSION = "fp-12";
68
68
  /**
69
69
  * Format version of {@link ExpertPack}.
70
70
  *
package/dist/index.d.cts CHANGED
@@ -63,7 +63,7 @@
63
63
  * faces deliberately never do; both methods are WebSocket-only, so the
64
64
  * documented route split becomes `48 / 73` (doc `32`).
65
65
  */
66
- export declare const APP_SERVER_PROTOCOL_VERSION = "fp-8";
66
+ export declare const APP_SERVER_PROTOCOL_VERSION = "fp-12";
67
67
  export interface JsonRpcRequest {
68
68
  jsonrpc: "2.0";
69
69
  id: number | string;
@@ -883,6 +883,31 @@ export interface SkillDeleteResult {
883
883
  revealed_origin?: SkillOrigin | null;
884
884
  }
885
885
  export type ConnectorStatus = "installed" | "configured" | "authorization_required" | "authenticated" | "connected" | "degraded" | "error" | "reauthorization_required";
886
+ /** `connector/register` — a connector the host never imported (doc `34` §6.5). */
887
+ export interface ConnectorRegistration {
888
+ /** Its name on this host. Re-registering the same name updates it. */
889
+ name: string;
890
+ description?: string | null;
891
+ /**
892
+ * The template the host will store and later resolve — the same shape it keeps
893
+ * for a marketplace connector. Whatever `${secret:NAME}` its URL, headers or env
894
+ * name becomes the credential form; `values` carries the connector's own
895
+ * non-secret settings.
896
+ */
897
+ transport: ConnectorTransport;
898
+ }
899
+ /** The transport template, mirroring the host's own stored shape. */
900
+ export type ConnectorTransport = {
901
+ type: "http" | "sse";
902
+ url: string;
903
+ headers?: Record<string, string>;
904
+ values?: Record<string, string>;
905
+ } | {
906
+ type: "stdio";
907
+ command: string;
908
+ args?: string[];
909
+ env?: Record<string, string>;
910
+ };
886
911
  export interface ConnectorSummary {
887
912
  id: string;
888
913
  name: string;
@@ -897,6 +922,58 @@ export interface ConnectorSummary {
897
922
  * Absent for builtin hosts and for markets that ship no icon for the entry.
898
923
  */
899
924
  avatar_url?: string | null;
925
+ /**
926
+ * What the connector needs the user to fill in, when the host can describe it
927
+ * (doc `34` §6.1). Absent for a connector with no declaration and nothing to
928
+ * ask for.
929
+ *
930
+ * **Never carries a secret value**: `fields[].value` exists only for `plain`
931
+ * fields, which are the connector's own settings (`HOST`, `PORT`), and
932
+ * `missing` holds key names.
933
+ */
934
+ credential?: ConnectorCredential | null;
935
+ }
936
+ /** Both languages, already resolved by the host (doc `34` §5.2). */
937
+ export interface LocalizedString {
938
+ zh: string;
939
+ en: string;
940
+ }
941
+ /** How a connector authenticates. */
942
+ export type CredentialMode = "none" | "oauth" | "token";
943
+ /** What the caller has to do about it. */
944
+ export type CredentialStatus = "not_required" | "requires_input" | "configured" | "error";
945
+ /** One row of the credential form. */
946
+ export interface CredentialField {
947
+ key: string;
948
+ /** `secret` (the host's credential store) or `plain` (the connector's own value). */
949
+ kind: "secret" | "plain";
950
+ required: boolean;
951
+ label: LocalizedString;
952
+ placeholder: LocalizedString;
953
+ description: LocalizedString;
954
+ /** Only for `plain`: the value in effect. A secret's value never crosses the wire. */
955
+ value?: string | null;
956
+ }
957
+ /** The credential form and its state, as this caller sees them (doc `34` §6.1). */
958
+ export interface ConnectorCredential {
959
+ connector_id: string;
960
+ mode: CredentialMode;
961
+ status: CredentialStatus;
962
+ /** Key names still missing for this caller — never values. */
963
+ missing: string[];
964
+ fields: CredentialField[];
965
+ /**
966
+ * Form-level text from the marketplace declaration (doc `34` §5.2).
967
+ *
968
+ * A `token-schema.json` declares its title, its description and its "where do I
969
+ * get a key" link **once, for the form** — the market ships no per-field links,
970
+ * and copying the form's onto every field reads as "how do I get a key" under
971
+ * `PORT`.
972
+ */
973
+ title?: LocalizedString | null;
974
+ description?: LocalizedString | null;
975
+ doc_url?: LocalizedString | null;
976
+ doc_label?: LocalizedString | null;
900
977
  }
901
978
  export interface ConnectorTool {
902
979
  name: string;
@@ -1238,7 +1315,8 @@ export interface StoreInstallResult {
1238
1315
  entry_name: string;
1239
1316
  snapshot_id: string;
1240
1317
  version: string;
1241
- /** true when the components were already registered (no-op install). */
1318
+ /** true when the components were already registered (no-op install), or — for
1319
+ * an update — when the entry was already at the advertised version. */
1242
1320
  reused: boolean;
1243
1321
  installed_count: number;
1244
1322
  warnings: string[];
@@ -1247,6 +1325,15 @@ export interface StoreInstallResult {
1247
1325
  * store install is as branchable as a direct `install/run`. Absent on a host
1248
1326
  * that predates the field. */
1249
1327
  outcomes?: InstallOutcome[];
1328
+ /** Version the entry was installed at before this call (`store/update-entry`
1329
+ * only; absent means "this was an install"). */
1330
+ previous_version?: string | null;
1331
+ /** The snapshot that was replaced. Same rule as `previous_version`. */
1332
+ previous_snapshot_id?: string | null;
1333
+ /** Components of the replaced snapshot whose runtime artifacts were actually
1334
+ * released. `0` on an install, on a no-op update, and when a failed update
1335
+ * left the previous installation in place. */
1336
+ released_count?: number;
1250
1337
  }
1251
1338
  export interface LocalizedText {
1252
1339
  en?: string | null;
package/dist/index.d.mts CHANGED
@@ -63,7 +63,7 @@
63
63
  * faces deliberately never do; both methods are WebSocket-only, so the
64
64
  * documented route split becomes `48 / 73` (doc `32`).
65
65
  */
66
- export declare const APP_SERVER_PROTOCOL_VERSION = "fp-8";
66
+ export declare const APP_SERVER_PROTOCOL_VERSION = "fp-12";
67
67
  export interface JsonRpcRequest {
68
68
  jsonrpc: "2.0";
69
69
  id: number | string;
@@ -883,6 +883,31 @@ export interface SkillDeleteResult {
883
883
  revealed_origin?: SkillOrigin | null;
884
884
  }
885
885
  export type ConnectorStatus = "installed" | "configured" | "authorization_required" | "authenticated" | "connected" | "degraded" | "error" | "reauthorization_required";
886
+ /** `connector/register` — a connector the host never imported (doc `34` §6.5). */
887
+ export interface ConnectorRegistration {
888
+ /** Its name on this host. Re-registering the same name updates it. */
889
+ name: string;
890
+ description?: string | null;
891
+ /**
892
+ * The template the host will store and later resolve — the same shape it keeps
893
+ * for a marketplace connector. Whatever `${secret:NAME}` its URL, headers or env
894
+ * name becomes the credential form; `values` carries the connector's own
895
+ * non-secret settings.
896
+ */
897
+ transport: ConnectorTransport;
898
+ }
899
+ /** The transport template, mirroring the host's own stored shape. */
900
+ export type ConnectorTransport = {
901
+ type: "http" | "sse";
902
+ url: string;
903
+ headers?: Record<string, string>;
904
+ values?: Record<string, string>;
905
+ } | {
906
+ type: "stdio";
907
+ command: string;
908
+ args?: string[];
909
+ env?: Record<string, string>;
910
+ };
886
911
  export interface ConnectorSummary {
887
912
  id: string;
888
913
  name: string;
@@ -897,6 +922,58 @@ export interface ConnectorSummary {
897
922
  * Absent for builtin hosts and for markets that ship no icon for the entry.
898
923
  */
899
924
  avatar_url?: string | null;
925
+ /**
926
+ * What the connector needs the user to fill in, when the host can describe it
927
+ * (doc `34` §6.1). Absent for a connector with no declaration and nothing to
928
+ * ask for.
929
+ *
930
+ * **Never carries a secret value**: `fields[].value` exists only for `plain`
931
+ * fields, which are the connector's own settings (`HOST`, `PORT`), and
932
+ * `missing` holds key names.
933
+ */
934
+ credential?: ConnectorCredential | null;
935
+ }
936
+ /** Both languages, already resolved by the host (doc `34` §5.2). */
937
+ export interface LocalizedString {
938
+ zh: string;
939
+ en: string;
940
+ }
941
+ /** How a connector authenticates. */
942
+ export type CredentialMode = "none" | "oauth" | "token";
943
+ /** What the caller has to do about it. */
944
+ export type CredentialStatus = "not_required" | "requires_input" | "configured" | "error";
945
+ /** One row of the credential form. */
946
+ export interface CredentialField {
947
+ key: string;
948
+ /** `secret` (the host's credential store) or `plain` (the connector's own value). */
949
+ kind: "secret" | "plain";
950
+ required: boolean;
951
+ label: LocalizedString;
952
+ placeholder: LocalizedString;
953
+ description: LocalizedString;
954
+ /** Only for `plain`: the value in effect. A secret's value never crosses the wire. */
955
+ value?: string | null;
956
+ }
957
+ /** The credential form and its state, as this caller sees them (doc `34` §6.1). */
958
+ export interface ConnectorCredential {
959
+ connector_id: string;
960
+ mode: CredentialMode;
961
+ status: CredentialStatus;
962
+ /** Key names still missing for this caller — never values. */
963
+ missing: string[];
964
+ fields: CredentialField[];
965
+ /**
966
+ * Form-level text from the marketplace declaration (doc `34` §5.2).
967
+ *
968
+ * A `token-schema.json` declares its title, its description and its "where do I
969
+ * get a key" link **once, for the form** — the market ships no per-field links,
970
+ * and copying the form's onto every field reads as "how do I get a key" under
971
+ * `PORT`.
972
+ */
973
+ title?: LocalizedString | null;
974
+ description?: LocalizedString | null;
975
+ doc_url?: LocalizedString | null;
976
+ doc_label?: LocalizedString | null;
900
977
  }
901
978
  export interface ConnectorTool {
902
979
  name: string;
@@ -1238,7 +1315,8 @@ export interface StoreInstallResult {
1238
1315
  entry_name: string;
1239
1316
  snapshot_id: string;
1240
1317
  version: string;
1241
- /** true when the components were already registered (no-op install). */
1318
+ /** true when the components were already registered (no-op install), or — for
1319
+ * an update — when the entry was already at the advertised version. */
1242
1320
  reused: boolean;
1243
1321
  installed_count: number;
1244
1322
  warnings: string[];
@@ -1247,6 +1325,15 @@ export interface StoreInstallResult {
1247
1325
  * store install is as branchable as a direct `install/run`. Absent on a host
1248
1326
  * that predates the field. */
1249
1327
  outcomes?: InstallOutcome[];
1328
+ /** Version the entry was installed at before this call (`store/update-entry`
1329
+ * only; absent means "this was an install"). */
1330
+ previous_version?: string | null;
1331
+ /** The snapshot that was replaced. Same rule as `previous_version`. */
1332
+ previous_snapshot_id?: string | null;
1333
+ /** Components of the replaced snapshot whose runtime artifacts were actually
1334
+ * released. `0` on an install, on a no-op update, and when a failed update
1335
+ * left the previous installation in place. */
1336
+ released_count?: number;
1250
1337
  }
1251
1338
  export interface LocalizedText {
1252
1339
  en?: string | null;
package/dist/index.mjs CHANGED
@@ -63,7 +63,7 @@
63
63
  * faces deliberately never do; both methods are WebSocket-only, so the
64
64
  * documented route split becomes `48 / 73` (doc `32`).
65
65
  */
66
- const APP_SERVER_PROTOCOL_VERSION = "fp-8";
66
+ const APP_SERVER_PROTOCOL_VERSION = "fp-12";
67
67
  /**
68
68
  * Format version of {@link ExpertPack}.
69
69
  *
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flowy-agent-store/protocol",
3
- "version": "0.1.0-beta.7",
3
+ "version": "0.1.0-beta.8",
4
4
  "description": "Versioned App Server Protocol types and wire errors (no runtime, no DOM/Node deps)",
5
5
  "type": "module",
6
6
  "license": "Apache-2.0",