@shipfox/client-agent 2.0.0 → 4.0.0

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.
@@ -1,2 +1,2 @@
1
1
  $ shipfox-swc
2
- Successfully compiled: 30 files with swc (367.86ms)
2
+ Successfully compiled: 30 files with swc (438.91ms)
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @shipfox/client-agent
2
2
 
3
+ ## 4.0.0
4
+
5
+ ### Patch Changes
6
+
7
+ - 2e5b718: Adds safe browser persistence and bounded callback deduplication across client flows.
8
+ - Updated dependencies [2e5b718]
9
+ - Updated dependencies [6b4a575]
10
+ - Updated dependencies [11b10f7]
11
+ - Updated dependencies [781a45b]
12
+ - @shipfox/client-ui@4.0.0
13
+ - @shipfox/client-shell@4.0.0
14
+ - @shipfox/client-api@4.0.0
15
+
16
+ ## 3.0.1
17
+
18
+ ### Patch Changes
19
+
20
+ - ffc7fc9: Republishes the affected release set after recovering package publication.
21
+ - Updated dependencies [ffc7fc9]
22
+ - @shipfox/client-shell@3.0.1
23
+ - @shipfox/client-ui@3.0.1
24
+ - @shipfox/react-ui@0.3.5
25
+
26
+ ## 3.0.0
27
+
28
+ ### Patch Changes
29
+
30
+ - Updated dependencies [cb58afe]
31
+ - Updated dependencies [d735fe3]
32
+ - Updated dependencies [5b06cd5]
33
+ - @shipfox/react-ui@0.3.4
34
+ - @shipfox/client-shell@3.0.0
35
+ - @shipfox/client-ui@3.0.0
36
+
3
37
  ## 2.0.0
4
38
 
5
39
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"model-provider-onboarding.d.ts","sourceRoot":"","sources":["../../src/state/model-provider-onboarding.ts"],"names":[],"mappings":"AAIA,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAMxE"}
1
+ {"version":3,"file":"model-provider-onboarding.d.ts","sourceRoot":"","sources":["../../src/state/model-provider-onboarding.ts"],"names":[],"mappings":"AAmBA,wBAAgB,kCAAkC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/E;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAIxE"}
@@ -1,24 +1,28 @@
1
- const MODEL_PROVIDER_ONBOARDING_STORAGE_KEY = 'shipfox.modelProviderOnboardingDismissed';
1
+ import { createTypedBrowserStorage, localStorageOrUndefined } from '@shipfox/client-ui';
2
+ const dismissedStorage = createTypedBrowserStorage(localStorageOrUndefined, {
3
+ key: 'shipfox.modelProviderOnboardingDismissed',
4
+ lifetime: 'persistent',
5
+ principalScope: 'workspace',
6
+ serialize: (dismissed)=>JSON.stringify(dismissed),
7
+ parse: (raw)=>{
8
+ try {
9
+ const parsed = JSON.parse(raw);
10
+ return isDismissedMap(parsed) ? parsed : undefined;
11
+ } catch {
12
+ return undefined;
13
+ }
14
+ }
15
+ });
2
16
  export function isModelProviderOnboardingDismissed(workspaceId) {
3
17
  return Boolean(readDismissedMap()[workspaceId]);
4
18
  }
5
19
  export function dismissModelProviderOnboarding(workspaceId) {
6
- if (typeof window === 'undefined') return;
7
20
  const dismissed = readDismissedMap();
8
21
  dismissed[workspaceId] = true;
9
- window.localStorage.setItem(MODEL_PROVIDER_ONBOARDING_STORAGE_KEY, JSON.stringify(dismissed));
22
+ dismissedStorage.write(dismissed);
10
23
  }
11
24
  function readDismissedMap() {
12
- if (typeof window === 'undefined') return {};
13
- try {
14
- const raw = window.localStorage.getItem(MODEL_PROVIDER_ONBOARDING_STORAGE_KEY);
15
- if (!raw) return {};
16
- const parsed = JSON.parse(raw);
17
- if (!isDismissedMap(parsed)) return {};
18
- return parsed;
19
- } catch {
20
- return {};
21
- }
25
+ return dismissedStorage.read() ?? {};
22
26
  }
23
27
  function isDismissedMap(value) {
24
28
  if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/state/model-provider-onboarding.ts"],"sourcesContent":["const MODEL_PROVIDER_ONBOARDING_STORAGE_KEY = 'shipfox.modelProviderOnboardingDismissed';\n\ntype DismissedMap = Record<string, true>;\n\nexport function isModelProviderOnboardingDismissed(workspaceId: string): boolean {\n return Boolean(readDismissedMap()[workspaceId]);\n}\n\nexport function dismissModelProviderOnboarding(workspaceId: string): void {\n if (typeof window === 'undefined') return;\n\n const dismissed = readDismissedMap();\n dismissed[workspaceId] = true;\n window.localStorage.setItem(MODEL_PROVIDER_ONBOARDING_STORAGE_KEY, JSON.stringify(dismissed));\n}\n\nfunction readDismissedMap(): DismissedMap {\n if (typeof window === 'undefined') return {};\n\n try {\n const raw = window.localStorage.getItem(MODEL_PROVIDER_ONBOARDING_STORAGE_KEY);\n if (!raw) return {};\n const parsed: unknown = JSON.parse(raw);\n if (!isDismissedMap(parsed)) return {};\n return parsed;\n } catch {\n return {};\n }\n}\n\nfunction isDismissedMap(value: unknown): value is DismissedMap {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n return Object.values(value).every((entry) => entry === true);\n}\n"],"names":["MODEL_PROVIDER_ONBOARDING_STORAGE_KEY","isModelProviderOnboardingDismissed","workspaceId","Boolean","readDismissedMap","dismissModelProviderOnboarding","window","dismissed","localStorage","setItem","JSON","stringify","raw","getItem","parsed","parse","isDismissedMap","value","Array","isArray","Object","values","every","entry"],"mappings":"AAAA,MAAMA,wCAAwC;AAI9C,OAAO,SAASC,mCAAmCC,WAAmB;IACpE,OAAOC,QAAQC,kBAAkB,CAACF,YAAY;AAChD;AAEA,OAAO,SAASG,+BAA+BH,WAAmB;IAChE,IAAI,OAAOI,WAAW,aAAa;IAEnC,MAAMC,YAAYH;IAClBG,SAAS,CAACL,YAAY,GAAG;IACzBI,OAAOE,YAAY,CAACC,OAAO,CAACT,uCAAuCU,KAAKC,SAAS,CAACJ;AACpF;AAEA,SAASH;IACP,IAAI,OAAOE,WAAW,aAAa,OAAO,CAAC;IAE3C,IAAI;QACF,MAAMM,MAAMN,OAAOE,YAAY,CAACK,OAAO,CAACb;QACxC,IAAI,CAACY,KAAK,OAAO,CAAC;QAClB,MAAME,SAAkBJ,KAAKK,KAAK,CAACH;QACnC,IAAI,CAACI,eAAeF,SAAS,OAAO,CAAC;QACrC,OAAOA;IACT,EAAE,OAAM;QACN,OAAO,CAAC;IACV;AACF;AAEA,SAASE,eAAeC,KAAc;IACpC,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQC,MAAMC,OAAO,CAACF,QAAQ,OAAO;IAChF,OAAOG,OAAOC,MAAM,CAACJ,OAAOK,KAAK,CAAC,CAACC,QAAUA,UAAU;AACzD"}
1
+ {"version":3,"sources":["../../src/state/model-provider-onboarding.ts"],"sourcesContent":["import {createTypedBrowserStorage, localStorageOrUndefined} from '@shipfox/client-ui';\n\ntype DismissedMap = Record<string, true>;\n\nconst dismissedStorage = createTypedBrowserStorage(localStorageOrUndefined, {\n key: 'shipfox.modelProviderOnboardingDismissed',\n lifetime: 'persistent',\n principalScope: 'workspace',\n serialize: (dismissed: DismissedMap) => JSON.stringify(dismissed),\n parse: (raw) => {\n try {\n const parsed: unknown = JSON.parse(raw);\n return isDismissedMap(parsed) ? parsed : undefined;\n } catch {\n return undefined;\n }\n },\n});\n\nexport function isModelProviderOnboardingDismissed(workspaceId: string): boolean {\n return Boolean(readDismissedMap()[workspaceId]);\n}\n\nexport function dismissModelProviderOnboarding(workspaceId: string): void {\n const dismissed = readDismissedMap();\n dismissed[workspaceId] = true;\n dismissedStorage.write(dismissed);\n}\n\nfunction readDismissedMap(): DismissedMap {\n return dismissedStorage.read() ?? {};\n}\n\nfunction isDismissedMap(value: unknown): value is DismissedMap {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n return Object.values(value).every((entry) => entry === true);\n}\n"],"names":["createTypedBrowserStorage","localStorageOrUndefined","dismissedStorage","key","lifetime","principalScope","serialize","dismissed","JSON","stringify","parse","raw","parsed","isDismissedMap","undefined","isModelProviderOnboardingDismissed","workspaceId","Boolean","readDismissedMap","dismissModelProviderOnboarding","write","read","value","Array","isArray","Object","values","every","entry"],"mappings":"AAAA,SAAQA,yBAAyB,EAAEC,uBAAuB,QAAO,qBAAqB;AAItF,MAAMC,mBAAmBF,0BAA0BC,yBAAyB;IAC1EE,KAAK;IACLC,UAAU;IACVC,gBAAgB;IAChBC,WAAW,CAACC,YAA4BC,KAAKC,SAAS,CAACF;IACvDG,OAAO,CAACC;QACN,IAAI;YACF,MAAMC,SAAkBJ,KAAKE,KAAK,CAACC;YACnC,OAAOE,eAAeD,UAAUA,SAASE;QAC3C,EAAE,OAAM;YACN,OAAOA;QACT;IACF;AACF;AAEA,OAAO,SAASC,mCAAmCC,WAAmB;IACpE,OAAOC,QAAQC,kBAAkB,CAACF,YAAY;AAChD;AAEA,OAAO,SAASG,+BAA+BH,WAAmB;IAChE,MAAMT,YAAYW;IAClBX,SAAS,CAACS,YAAY,GAAG;IACzBd,iBAAiBkB,KAAK,CAACb;AACzB;AAEA,SAASW;IACP,OAAOhB,iBAAiBmB,IAAI,MAAM,CAAC;AACrC;AAEA,SAASR,eAAeS,KAAc;IACpC,IAAI,OAAOA,UAAU,YAAYA,UAAU,QAAQC,MAAMC,OAAO,CAACF,QAAQ,OAAO;IAChF,OAAOG,OAAOC,MAAM,CAACJ,OAAOK,KAAK,CAAC,CAACC,QAAUA,UAAU;AACzD"}