@chipmobilesdk/rn-ai 0.4.0 → 0.5.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/README.md +5 -2
  3. package/lib/commonjs/config/behaviorConfig.js +283 -0
  4. package/lib/commonjs/config/behaviorConfig.js.map +1 -0
  5. package/lib/commonjs/contract/gateway.js +60 -0
  6. package/lib/commonjs/contract/gateway.js.map +1 -0
  7. package/lib/commonjs/core/aiClient.js +330 -0
  8. package/lib/commonjs/core/aiClient.js.map +1 -0
  9. package/lib/commonjs/core/quotaRequest.js +105 -0
  10. package/lib/commonjs/core/quotaRequest.js.map +1 -0
  11. package/lib/commonjs/diagnostics/errors.js +108 -0
  12. package/lib/commonjs/diagnostics/errors.js.map +1 -0
  13. package/lib/commonjs/diagnostics/messageKeys.js +68 -0
  14. package/lib/commonjs/diagnostics/messageKeys.js.map +1 -0
  15. package/lib/commonjs/index.js +102 -0
  16. package/lib/commonjs/index.js.map +1 -0
  17. package/lib/commonjs/package.json +1 -0
  18. package/lib/commonjs/react/hooks.js +170 -0
  19. package/lib/commonjs/react/hooks.js.map +1 -0
  20. package/lib/commonjs/transport/sseClient.js +151 -0
  21. package/lib/commonjs/transport/sseClient.js.map +1 -0
  22. package/lib/commonjs/transport/timeouts.js +46 -0
  23. package/lib/commonjs/transport/timeouts.js.map +1 -0
  24. package/lib/module/config/behaviorConfig.js +275 -0
  25. package/lib/module/config/behaviorConfig.js.map +1 -0
  26. package/lib/module/contract/gateway.js +56 -0
  27. package/lib/module/contract/gateway.js.map +1 -0
  28. package/lib/module/core/aiClient.js +327 -0
  29. package/lib/module/core/aiClient.js.map +1 -0
  30. package/lib/module/core/quotaRequest.js +102 -0
  31. package/lib/module/core/quotaRequest.js.map +1 -0
  32. package/lib/module/diagnostics/errors.js +99 -0
  33. package/lib/module/diagnostics/errors.js.map +1 -0
  34. package/lib/module/diagnostics/messageKeys.js +61 -0
  35. package/lib/module/diagnostics/messageKeys.js.map +1 -0
  36. package/lib/module/index.js +19 -0
  37. package/lib/module/index.js.map +1 -0
  38. package/lib/module/package.json +1 -0
  39. package/lib/module/react/hooks.js +164 -0
  40. package/lib/module/react/hooks.js.map +1 -0
  41. package/lib/module/transport/sseClient.js +146 -0
  42. package/lib/module/transport/sseClient.js.map +1 -0
  43. package/lib/module/transport/timeouts.js +41 -0
  44. package/lib/module/transport/timeouts.js.map +1 -0
  45. package/lib/typescript/commonjs/config/behaviorConfig.d.ts +119 -0
  46. package/lib/typescript/commonjs/config/behaviorConfig.d.ts.map +1 -0
  47. package/lib/typescript/commonjs/contract/gateway.d.ts +64 -0
  48. package/lib/typescript/commonjs/contract/gateway.d.ts.map +1 -0
  49. package/lib/typescript/commonjs/core/aiClient.d.ts +104 -0
  50. package/lib/typescript/commonjs/core/aiClient.d.ts.map +1 -0
  51. package/lib/typescript/commonjs/core/quotaRequest.d.ts +45 -0
  52. package/lib/typescript/commonjs/core/quotaRequest.d.ts.map +1 -0
  53. package/lib/typescript/commonjs/diagnostics/errors.d.ts +38 -0
  54. package/lib/typescript/commonjs/diagnostics/errors.d.ts.map +1 -0
  55. package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts +46 -0
  56. package/lib/typescript/commonjs/diagnostics/messageKeys.d.ts.map +1 -0
  57. package/lib/typescript/commonjs/index.d.ts +21 -0
  58. package/lib/typescript/commonjs/index.d.ts.map +1 -0
  59. package/lib/typescript/commonjs/package.json +1 -0
  60. package/lib/typescript/commonjs/react/hooks.d.ts +37 -0
  61. package/lib/typescript/commonjs/react/hooks.d.ts.map +1 -0
  62. package/lib/typescript/commonjs/transport/sseClient.d.ts +57 -0
  63. package/lib/typescript/commonjs/transport/sseClient.d.ts.map +1 -0
  64. package/lib/typescript/commonjs/transport/timeouts.d.ts +28 -0
  65. package/lib/typescript/commonjs/transport/timeouts.d.ts.map +1 -0
  66. package/lib/typescript/module/config/behaviorConfig.d.ts +119 -0
  67. package/lib/typescript/module/config/behaviorConfig.d.ts.map +1 -0
  68. package/lib/typescript/module/contract/gateway.d.ts +64 -0
  69. package/lib/typescript/module/contract/gateway.d.ts.map +1 -0
  70. package/lib/typescript/module/core/aiClient.d.ts +104 -0
  71. package/lib/typescript/module/core/aiClient.d.ts.map +1 -0
  72. package/lib/typescript/module/core/quotaRequest.d.ts +45 -0
  73. package/lib/typescript/module/core/quotaRequest.d.ts.map +1 -0
  74. package/lib/typescript/module/diagnostics/errors.d.ts +38 -0
  75. package/lib/typescript/module/diagnostics/errors.d.ts.map +1 -0
  76. package/lib/typescript/module/diagnostics/messageKeys.d.ts +46 -0
  77. package/lib/typescript/module/diagnostics/messageKeys.d.ts.map +1 -0
  78. package/lib/typescript/module/index.d.ts +21 -0
  79. package/lib/typescript/module/index.d.ts.map +1 -0
  80. package/lib/typescript/module/package.json +1 -0
  81. package/lib/typescript/module/react/hooks.d.ts +37 -0
  82. package/lib/typescript/module/react/hooks.d.ts.map +1 -0
  83. package/lib/typescript/module/transport/sseClient.d.ts +57 -0
  84. package/lib/typescript/module/transport/sseClient.d.ts.map +1 -0
  85. package/lib/typescript/module/transport/timeouts.d.ts +28 -0
  86. package/lib/typescript/module/transport/timeouts.d.ts.map +1 -0
  87. package/package.json +40 -12
  88. package/skills/sdk-rn-ai/SKILL.md +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createDiagnosticChannel","createListenerSet","realScheduler","BehaviorConfigManager","SSE_DONE_SENTINEL","AiError","errorFromHttp","requestSse","createQuotaRequest","DEFAULT_AI_TIMEOUTS","channel","report","operation","error","emit","code","retryable","MAX_RETRY_BACKOFF_MS","backoffBefore","steps","index","step","Math","min","length","max","asQuota","value","undefined","candidate","fields","minuteRemaining","dayRemaining","dayTokensRemaining","every","field","Number","isFinite","createAiClient","clientConfig","resourceKey","transport","fetchFn","fetch","timeouts","scheduler","configManager","configUrl","appId","cache","storage","timeoutMs","configMs","allowedHosts","lastConfig","behaviorListeners","snapshot","quota","behaviorState","config","state","aiEnabled","features","setLastConfig","next","wasEnabled","notify","setQuota","shallowSameQuota","acquire","options","getConfig","recoverable","tokenResult","auth","requestAccessToken","forceRefresh","status","token","tokenError","errorCode","endpoint","path","api","baseUrl","chat","request","handlers","cancelled","settled","inner","delta","text","onDelta","done","result","onDone","cancel","onError","fail","e","Error","message","String","guarded","fn","args","attempt","authRetries","streamErrorCode","url","method","headers","Authorization","body","JSON","stringify","connectTimeoutMs","connectMs","idleTimeoutMs","idleMs","onData","payload","event","parse","type","usage","onEnd","cause","bodyText","response","recover","getHeader","name","catch","configReloads","context","retry","onFailure","onGiveUp","recovery","reloadOnHttpStatus","includes","maxSilentRetries","retryAfter","retryBackoffMs","forceReload","then","reloaded","setTimeout","getQuota","lastQuota","getBehaviorState","subscribe","listener","fromManager","fromClient","add","reloadConfig","a","b"],"sourceRoot":"../../../src","sources":["core/aiClient.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * The quota request, and the recovery it shares with a chat (AI-13).
5
+ *
6
+ * `getQuota` used to be the one call with no recovery at all: a gateway that
7
+ * had moved answered 404 for quota while chats silently re-routed, so the
8
+ * figure on screen failed while the feature worked. It now goes through the
9
+ * same `recover` the chat stream does — a designated status reloads the
10
+ * configuration and retries, a 401 retries once with a token the provider had
11
+ * to fetch again.
12
+ */
13
+
14
+ import { AiError } from "../diagnostics/errors.js";
15
+ import { withTimeout } from "../transport/timeouts.js";
16
+
17
+ /** Where the quota request is in its recovery, shared with the chat path. */
18
+
19
+ /** What is left of the app's allowance. */
20
+
21
+ export function createQuotaRequest(deps) {
22
+ const {
23
+ fetchFn,
24
+ timeouts,
25
+ endpoint,
26
+ asQuota,
27
+ recover,
28
+ setQuota
29
+ } = deps;
30
+ const acquire = deps.acquire;
31
+ async function getQuota() {
32
+ try {
33
+ const snapshotValue = await fetchQuotaWithRecovery({
34
+ configReloads: 0,
35
+ authRetries: 0
36
+ });
37
+ setQuota(snapshotValue);
38
+ return snapshotValue;
39
+ } catch (error) {
40
+ if (error instanceof AiError) deps.report(error);
41
+ throw error;
42
+ }
43
+ }
44
+
45
+ /** Same recovery as a chat: a retired endpoint reloads the config and retries. */
46
+ function fetchQuotaWithRecovery(state) {
47
+ return new Promise((resolve, reject) => {
48
+ fetchQuota(state).then(resolve, error => {
49
+ if (!(error instanceof HttpFailure)) {
50
+ reject(error);
51
+ return;
52
+ }
53
+ recover(error.status, error.bodyText, state, {
54
+ getHeader: name => error.getHeader(name)
55
+ }, next => fetchQuotaWithRecovery(next).then(resolve, reject), reject, reject);
56
+ });
57
+ });
58
+ }
59
+
60
+ /** Carries the response so `recover` can decide; never reaches the caller. */
61
+ class HttpFailure extends Error {
62
+ constructor(status, bodyText, headers) {
63
+ super(`gateway responded ${status}`);
64
+ this.status = status;
65
+ this.bodyText = bodyText;
66
+ this.headers = headers;
67
+ this.name = 'HttpFailure';
68
+ }
69
+ getHeader(name) {
70
+ return this.headers?.get(name) ?? null;
71
+ }
72
+ }
73
+ async function fetchQuota(state) {
74
+ const {
75
+ config,
76
+ token
77
+ } = await acquire({
78
+ forceRefresh: state.authRetries > 0
79
+ });
80
+ return withTimeout(timeouts.quotaMs, async signal => {
81
+ const response = await fetchFn(endpoint(config, 'quota'), {
82
+ headers: {
83
+ Authorization: `Bearer ${token}`
84
+ },
85
+ signal
86
+ });
87
+ if (!response.ok) {
88
+ throw new HttpFailure(response.status, await response.text(), response.headers);
89
+ }
90
+ const parsed = asQuota(await response.json());
91
+ if (!parsed) {
92
+ // A body that is not the contract's: better no figure than a wrong one.
93
+ throw new AiError('internal', 'quota response did not match the contract');
94
+ }
95
+ return parsed;
96
+ }, () => new AiError('network', 'quota request timed out'));
97
+ }
98
+ return {
99
+ getQuota
100
+ };
101
+ }
102
+ //# sourceMappingURL=quotaRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AiError","withTimeout","createQuotaRequest","deps","fetchFn","timeouts","endpoint","asQuota","recover","setQuota","acquire","getQuota","snapshotValue","fetchQuotaWithRecovery","configReloads","authRetries","error","report","state","Promise","resolve","reject","fetchQuota","then","HttpFailure","status","bodyText","getHeader","name","next","Error","constructor","headers","get","config","token","forceRefresh","quotaMs","signal","response","Authorization","ok","text","parsed","json"],"sourceRoot":"../../../src","sources":["core/quotaRequest.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ /** Typed client errors (contracts/rn-ai-public-api.md). */
4
+ import { SdkError, redactPatterns } from '@chipmobilesdk/rn-core';
5
+ import { RETRY_AFTER_HEADER } from "../contract/gateway.js";
6
+ /** Codes a retry can fix on its own. */
7
+ const RETRYABLE_BY_DEFAULT = new Set(['rate-limited', 'upstream-busy', 'network']);
8
+
9
+ /** The package's error; an `SdkError` (`@chipmobilesdk/rn-core`) with `pkg: 'rn-ai'`. */
10
+ export class AiError extends SdkError {
11
+ /** The underlying code, when one layer down had a name for the failure. */
12
+
13
+ constructor(code, message, options = {}) {
14
+ super('rn-ai', code, {
15
+ message,
16
+ retryable: options.retryable ?? options.recoverable ?? RETRYABLE_BY_DEFAULT.has(code)
17
+ });
18
+ this.name = 'AiError';
19
+ this.retryAfterSeconds = options.retryAfterSeconds;
20
+ this.cause = options.cause;
21
+ }
22
+
23
+ /** @deprecated Use `retryable`, the name every SDK package shares. */
24
+ get recoverable() {
25
+ return this.retryable;
26
+ }
27
+ }
28
+ export function isAiError(value) {
29
+ return value instanceof AiError;
30
+ }
31
+
32
+ /**
33
+ * Every gateway code, mapped. Typed as a total record, so a code added to the
34
+ * shared contract does not compile until the client says what it means (GW-13).
35
+ */
36
+ const HTTP_CODE_MAP = {
37
+ BAD_REQUEST: 'internal',
38
+ AUTH_INVALID: 'auth-invalid',
39
+ NOT_ENTITLED: 'not-entitled',
40
+ USER_BLOCKED: 'user-blocked',
41
+ APP_UNKNOWN: 'app-unknown',
42
+ // The endpoint moved: the client's configuration is the stale part.
43
+ ENDPOINT_RETIRED: 'config-unavailable',
44
+ PAYLOAD_TOO_LARGE: 'payload-too-large',
45
+ MODALITY_NOT_ALLOWED: 'modality-not-allowed',
46
+ RATE_LIMITED: 'rate-limited',
47
+ UPSTREAM_BUSY: 'upstream-busy',
48
+ UPSTREAM_ERROR: 'upstream-error',
49
+ INTERNAL: 'internal'
50
+ };
51
+ function isGatewayCode(value) {
52
+ return typeof value === 'string' && value in HTTP_CODE_MAP;
53
+ }
54
+
55
+ /** `Retry-After` in seconds, from either form the header may take. */
56
+ export function parseRetryAfter(value) {
57
+ if (!value) {
58
+ return undefined;
59
+ }
60
+ const seconds = Number(value);
61
+ if (Number.isFinite(seconds) && seconds >= 0) {
62
+ return seconds;
63
+ }
64
+ const date = Date.parse(value);
65
+ if (Number.isFinite(date)) {
66
+ return Math.max(0, Math.round((date - Date.now()) / 1000));
67
+ }
68
+ return undefined;
69
+ }
70
+ /** Map a gateway error response (status + JSON body) to a typed AiError. */
71
+ export function errorFromHttp(status, bodyText, context = {}) {
72
+ // Status 0 is not an answer at all: the request never arrived, or the
73
+ // connection dropped. That is a network failure a retry may well fix, not an
74
+ // upstream fault (AI-11).
75
+ if (status === 0) {
76
+ return new AiError('network', bodyText === 'timeout' ? 'the request timed out' : 'no connection');
77
+ }
78
+ let code = status >= 500 ? 'upstream-error' : 'internal';
79
+ let message = `gateway responded ${status}`;
80
+ let gatewayCode;
81
+ let retryAfterSeconds = parseRetryAfter(context.getHeader?.(RETRY_AFTER_HEADER));
82
+ try {
83
+ const parsed = JSON.parse(bodyText);
84
+ if (isGatewayCode(parsed.error?.code)) {
85
+ gatewayCode = parsed.error.code;
86
+ code = HTTP_CODE_MAP[gatewayCode];
87
+ }
88
+ // The gateway's text can quote upstream detail; keep it readable but shaped.
89
+ if (parsed.error?.message) message = redactPatterns(parsed.error.message);
90
+ retryAfterSeconds = parsed.error?.retryAfterSeconds ?? retryAfterSeconds;
91
+ } catch {
92
+ // A body that is not the contract's: the status is all there is to go on.
93
+ }
94
+ return new AiError(code, message, {
95
+ retryAfterSeconds,
96
+ cause: gatewayCode
97
+ });
98
+ }
99
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SdkError","redactPatterns","RETRY_AFTER_HEADER","RETRYABLE_BY_DEFAULT","Set","AiError","constructor","code","message","options","retryable","recoverable","has","name","retryAfterSeconds","cause","isAiError","value","HTTP_CODE_MAP","BAD_REQUEST","AUTH_INVALID","NOT_ENTITLED","USER_BLOCKED","APP_UNKNOWN","ENDPOINT_RETIRED","PAYLOAD_TOO_LARGE","MODALITY_NOT_ALLOWED","RATE_LIMITED","UPSTREAM_BUSY","UPSTREAM_ERROR","INTERNAL","isGatewayCode","parseRetryAfter","undefined","seconds","Number","isFinite","date","Date","parse","Math","max","round","now","errorFromHttp","status","bodyText","context","gatewayCode","getHeader","parsed","JSON","error"],"sourceRoot":"../../../src","sources":["diagnostics/errors.ts"],"mappings":";;AAAA;AACA,SAASA,QAAQ,EAAEC,cAAc,QAAQ,wBAAwB;AAEjE,SACCC,kBAAkB,QAGZ,wBAAqB;AAgC5B;AACA,MAAMC,oBAA8C,GAAG,IAAIC,GAAG,CAAc,CAC3E,cAAc,EACd,eAAe,EACf,SAAS,CACT,CAAC;;AAEF;AACA,OAAO,MAAMC,OAAO,SAASL,QAAQ,CAAc;EAElD;;EAGAM,WAAWA,CAACC,IAAiB,EAAEC,OAAe,EAAEC,OAAuB,GAAG,CAAC,CAAC,EAAE;IAC7E,KAAK,CAAC,OAAO,EAAEF,IAAI,EAAE;MACpBC,OAAO;MACPE,SAAS,EAAED,OAAO,CAACC,SAAS,IAAID,OAAO,CAACE,WAAW,IAAIR,oBAAoB,CAACS,GAAG,CAACL,IAAI;IACrF,CAAC,CAAC;IACF,IAAI,CAACM,IAAI,GAAG,SAAS;IACrB,IAAI,CAACC,iBAAiB,GAAGL,OAAO,CAACK,iBAAiB;IAClD,IAAI,CAACC,KAAK,GAAGN,OAAO,CAACM,KAAK;EAC3B;;EAEA;EACA,IAAIJ,WAAWA,CAAA,EAAY;IAC1B,OAAO,IAAI,CAACD,SAAS;EACtB;AACD;AAEA,OAAO,SAASM,SAASA,CAACC,KAAc,EAAoB;EAC3D,OAAOA,KAAK,YAAYZ,OAAO;AAChC;;AAEA;AACA;AACA;AACA;AACA,MAAMa,aAA8D,GAAG;EACtEC,WAAW,EAAE,UAAU;EACvBC,YAAY,EAAE,cAAc;EAC5BC,YAAY,EAAE,cAAc;EAC5BC,YAAY,EAAE,cAAc;EAC5BC,WAAW,EAAE,aAAa;EAC1B;EACAC,gBAAgB,EAAE,oBAAoB;EACtCC,iBAAiB,EAAE,mBAAmB;EACtCC,oBAAoB,EAAE,sBAAsB;EAC5CC,YAAY,EAAE,cAAc;EAC5BC,aAAa,EAAE,eAAe;EAC9BC,cAAc,EAAE,gBAAgB;EAChCC,QAAQ,EAAE;AACX,CAAC;AAED,SAASC,aAAaA,CAACd,KAAc,EAA6B;EACjE,OAAO,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,IAAIC,aAAa;AAC3D;;AAEA;AACA,OAAO,SAASc,eAAeA,CAACf,KAAgC,EAAsB;EACrF,IAAI,CAACA,KAAK,EAAE;IACX,OAAOgB,SAAS;EACjB;EACA,MAAMC,OAAO,GAAGC,MAAM,CAAClB,KAAK,CAAC;EAC7B,IAAIkB,MAAM,CAACC,QAAQ,CAACF,OAAO,CAAC,IAAIA,OAAO,IAAI,CAAC,EAAE;IAC7C,OAAOA,OAAO;EACf;EACA,MAAMG,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACtB,KAAK,CAAC;EAC9B,IAAIkB,MAAM,CAACC,QAAQ,CAACC,IAAI,CAAC,EAAE;IAC1B,OAAOG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAED,IAAI,CAACE,KAAK,CAAC,CAACL,IAAI,GAAGC,IAAI,CAACK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;EAC3D;EACA,OAAOV,SAAS;AACjB;AAOA;AACA,OAAO,SAASW,aAAaA,CAC5BC,MAAc,EACdC,QAAgB,EAChBC,OAAyB,GAAG,CAAC,CAAC,EACpB;EACV;EACA;EACA;EACA,IAAIF,MAAM,KAAK,CAAC,EAAE;IACjB,OAAO,IAAIxC,OAAO,CACjB,SAAS,EACTyC,QAAQ,KAAK,SAAS,GAAG,uBAAuB,GAAG,eACpD,CAAC;EACF;EAEA,IAAIvC,IAAiB,GAAGsC,MAAM,IAAI,GAAG,GAAG,gBAAgB,GAAG,UAAU;EACrE,IAAIrC,OAAO,GAAG,qBAAqBqC,MAAM,EAAE;EAC3C,IAAIG,WAAyC;EAC7C,IAAIlC,iBAAiB,GAAGkB,eAAe,CAACe,OAAO,CAACE,SAAS,GAAG/C,kBAAkB,CAAC,CAAC;EAChF,IAAI;IACH,MAAMgD,MAAM,GAAGC,IAAI,CAACZ,KAAK,CAACO,QAAQ,CAA8B;IAChE,IAAIf,aAAa,CAACmB,MAAM,CAACE,KAAK,EAAE7C,IAAI,CAAC,EAAE;MACtCyC,WAAW,GAAGE,MAAM,CAACE,KAAK,CAAC7C,IAAI;MAC/BA,IAAI,GAAGW,aAAa,CAAC8B,WAAW,CAAC;IAClC;IACA;IACA,IAAIE,MAAM,CAACE,KAAK,EAAE5C,OAAO,EAAEA,OAAO,GAAGP,cAAc,CAACiD,MAAM,CAACE,KAAK,CAAC5C,OAAO,CAAC;IACzEM,iBAAiB,GAAGoC,MAAM,CAACE,KAAK,EAAEtC,iBAAiB,IAAIA,iBAAiB;EACzE,CAAC,CAAC,MAAM;IACP;EAAA;EAED,OAAO,IAAIT,OAAO,CAACE,IAAI,EAAEC,OAAO,EAAE;IAAEM,iBAAiB;IAAEC,KAAK,EAAEiC;EAAY,CAAC,CAAC;AAC7E","ignoreList":[]}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * User-facing copy keys (UX-002/003) and their English defaults, as an rn-core
5
+ * message catalog: apps translate them through rn-i18n
6
+ * (`runtimeEntriesFromCatalog(aiMessages)`) or override them directly.
7
+ */
8
+ import { defineMessages } from '@chipmobilesdk/rn-core';
9
+ export const aiMessageSet = defineMessages({
10
+ user: {
11
+ 'ai.state.loading': 'Thinking…',
12
+ 'ai.state.streaming': 'Answering…',
13
+ // Neutral copy: the app names its own feature (AI-16).
14
+ 'ai.input.placeholder': 'Type a message…',
15
+ 'ai.action.send': 'Send',
16
+ 'ai.action.cancel': 'Cancel',
17
+ 'ai.action.retry': 'Try again',
18
+ 'ai.action.retryAt': 'You can try again at {time}',
19
+ 'ai.quota.remaining': '{count} requests left today',
20
+ 'ai.error.rateLimited': 'You have reached your usage limit.',
21
+ 'ai.error.premiumRequired': 'AI features require a premium subscription for this app.',
22
+ 'ai.error.blocked': 'AI access is suspended for this account.',
23
+ 'ai.error.payloadTooLarge': 'That attachment is too large to send.',
24
+ 'ai.error.modality': 'This kind of content is not supported here.',
25
+ 'ai.error.busy': 'The AI service is busy. Please try again shortly.',
26
+ 'ai.error.unavailable': 'AI features are currently unavailable.',
27
+ 'ai.error.signIn': 'Please sign in again to continue.',
28
+ 'ai.error.offline': 'No connection. Check your network and try again.',
29
+ 'ai.error.generic': 'Something went wrong. Please try again.'
30
+ }
31
+ });
32
+ export const aiMessages = aiMessageSet.defaults;
33
+ export function aiMessage(key) {
34
+ return aiMessages[key];
35
+ }
36
+
37
+ /**
38
+ * The copy for each error code. A `Record` over the whole code union, so adding a
39
+ * code without choosing its copy fails to compile (AI-16).
40
+ */
41
+ const ERROR_MESSAGES = {
42
+ 'auth-invalid': 'ai.error.signIn',
43
+ 'session-expired': 'ai.error.signIn',
44
+ network: 'ai.error.offline',
45
+ 'not-entitled': 'ai.error.premiumRequired',
46
+ 'user-blocked': 'ai.error.blocked',
47
+ 'app-unknown': 'ai.error.unavailable',
48
+ 'rate-limited': 'ai.error.rateLimited',
49
+ 'upstream-busy': 'ai.error.busy',
50
+ 'payload-too-large': 'ai.error.payloadTooLarge',
51
+ 'modality-not-allowed': 'ai.error.modality',
52
+ 'config-unavailable': 'ai.error.unavailable',
53
+ 'upstream-error': 'ai.error.generic',
54
+ internal: 'ai.error.generic'
55
+ };
56
+
57
+ /** The message key to show a user for an error. */
58
+ export function messageKeyForError(error) {
59
+ return ERROR_MESSAGES[error.code];
60
+ }
61
+ //# sourceMappingURL=messageKeys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["defineMessages","aiMessageSet","user","aiMessages","defaults","aiMessage","key","ERROR_MESSAGES","network","internal","messageKeyForError","error","code"],"sourceRoot":"../../../src","sources":["diagnostics/messageKeys.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAc,QAAQ,wBAAwB;AAKvD,OAAO,MAAMC,YAAY,GAAGD,cAAc,CAAC;EAC1CE,IAAI,EAAE;IACL,kBAAkB,EAAE,WAAW;IAC/B,oBAAoB,EAAE,YAAY;IAClC;IACA,sBAAsB,EAAE,iBAAiB;IACzC,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,QAAQ;IAC5B,iBAAiB,EAAE,WAAW;IAC9B,mBAAmB,EAAE,6BAA6B;IAClD,oBAAoB,EAAE,6BAA6B;IACnD,sBAAsB,EAAE,oCAAoC;IAC5D,0BAA0B,EAAE,0DAA0D;IACtF,kBAAkB,EAAE,0CAA0C;IAC9D,0BAA0B,EAAE,uCAAuC;IACnE,mBAAmB,EAAE,6CAA6C;IAClE,eAAe,EAAE,mDAAmD;IACpE,sBAAsB,EAAE,wCAAwC;IAChE,iBAAiB,EAAE,mCAAmC;IACtD,kBAAkB,EAAE,kDAAkD;IACtE,kBAAkB,EAAE;EACrB;AACD,CAAC,CAAC;AAEF,OAAO,MAAMC,UAAU,GAAGF,YAAY,CAACG,QAAQ;AAI/C,OAAO,SAASC,SAASA,CAACC,GAAiB,EAAU;EACpD,OAAOH,UAAU,CAACG,GAAG,CAAC;AACvB;;AAEA;AACA;AACA;AACA;AACA,MAAMC,cAAiD,GAAG;EACzD,cAAc,EAAE,iBAAiB;EACjC,iBAAiB,EAAE,iBAAiB;EACpCC,OAAO,EAAE,kBAAkB;EAC3B,cAAc,EAAE,0BAA0B;EAC1C,cAAc,EAAE,kBAAkB;EAClC,aAAa,EAAE,sBAAsB;EACrC,cAAc,EAAE,sBAAsB;EACtC,eAAe,EAAE,eAAe;EAChC,mBAAmB,EAAE,0BAA0B;EAC/C,sBAAsB,EAAE,mBAAmB;EAC3C,oBAAoB,EAAE,sBAAsB;EAC5C,gBAAgB,EAAE,kBAAkB;EACpCC,QAAQ,EAAE;AACX,CAAC;;AAED;AACA,OAAO,SAASC,kBAAkBA,CAACC,KAAc,EAAgB;EAChE,OAAOJ,cAAc,CAACI,KAAK,CAACC,IAAI,CAAC;AAClC","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * @chipmobilesdk/rn-ai — AI gateway client for ChipMobileSdk-family React
5
+ * Native apps (feature 005). Single public entrypoint (LIB-003); modules
6
+ * under `config/`, `transport/`, `core/`, `react/`, and `diagnostics/` are
7
+ * private. Contract: specs/005-azure-ai-gateway/contracts/rn-ai-public-api.md
8
+ */
9
+ export { createAiClient } from "./core/aiClient.js";
10
+ export { configCacheFromKeyValue, SUPPORTED_SCHEMA_VERSION } from "./config/behaviorConfig.js";
11
+
12
+ // The gateway contract, shared with the service: error codes, quota headers and
13
+ // stream events have one definition (GW-13).
14
+
15
+ export { GATEWAY_ERROR_STATUS, QUOTA_HEADERS, SSE_DONE_SENTINEL } from "./contract/gateway.js";
16
+ export { useAiBehaviorState, useAiChat, useAiQuota } from "./react/hooks.js";
17
+ export { AiError, isAiError } from "./diagnostics/errors.js";
18
+ export { aiMessage, aiMessageSet, aiMessages, messageKeyForError } from "./diagnostics/messageKeys.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createAiClient","configCacheFromKeyValue","SUPPORTED_SCHEMA_VERSION","GATEWAY_ERROR_STATUS","QUOTA_HEADERS","SSE_DONE_SENTINEL","useAiBehaviorState","useAiChat","useAiQuota","AiError","isAiError","aiMessage","aiMessageSet","aiMessages","messageKeyForError"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,cAAc,QAAQ,oBAAiB;AAiBhD,SAASC,uBAAuB,EAAEC,wBAAwB,QAAQ,4BAAyB;;AAE3F;AACA;;AAUA,SAASC,oBAAoB,EAAEC,aAAa,EAAEC,iBAAiB,QAAQ,uBAAoB;AAU3F,SAASC,kBAAkB,EAAEC,SAAS,EAAEC,UAAU,QAAQ,kBAAe;AAQzE,SAASC,OAAO,EAAEC,SAAS,QAAQ,yBAAsB;AAEzD,SAASC,SAAS,EAAEC,YAAY,EAAEC,UAAU,EAAEC,kBAAkB,QAAQ,8BAA2B","ignoreList":[]}
@@ -0,0 +1 @@
1
+ {"type":"module"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+
3
+ import { useExternalStore } from '@chipmobilesdk/rn-core/react';
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ const DEFAULT_FLUSH_MS = 50;
6
+ export function useAiChat(client, options = {}) {
7
+ const [status, setStatus] = useState('idle');
8
+ const [text, setText] = useState('');
9
+ const [error, setError] = useState();
10
+ const [retryAt, setRetryAt] = useState();
11
+ const fromClient = useAiQuotaValue(client);
12
+ // The figure this chat was told, for a client of the app's own that keeps none.
13
+ const [reported, setReported] = useState();
14
+ const quota = fromClient ?? reported;
15
+ const handleRef = useRef(null);
16
+ // Bumped by every send, cancel and unmount. A callback from an older request
17
+ // is dropped, so it can never overwrite the state of the one on screen —
18
+ // defence in depth behind the client's own cancel guard.
19
+ const requestRef = useRef(0);
20
+
21
+ // Deltas land here and reach React on a timer, so the transcript renders at a
22
+ // steady rate however fast the model answers.
23
+ const pending = useRef('');
24
+ const flushTimer = useRef(undefined);
25
+ const flushMs = options.flushIntervalMs ?? DEFAULT_FLUSH_MS;
26
+ const stopFlushing = useCallback(() => {
27
+ if (flushTimer.current !== undefined) {
28
+ clearTimeout(flushTimer.current);
29
+ flushTimer.current = undefined;
30
+ }
31
+ }, []);
32
+ const flush = useCallback(() => {
33
+ flushTimer.current = undefined;
34
+ const buffered = pending.current;
35
+ if (buffered === '') {
36
+ return;
37
+ }
38
+ pending.current = '';
39
+ setText(previous => previous + buffered);
40
+ }, []);
41
+ useEffect(() => stopFlushing, [stopFlushing]);
42
+ const send = useCallback(request => {
43
+ handleRef.current?.cancel();
44
+ const id = ++requestRef.current;
45
+ const current = () => requestRef.current === id;
46
+ stopFlushing();
47
+ pending.current = '';
48
+ setText('');
49
+ setError(undefined);
50
+ setRetryAt(undefined);
51
+ setStatus('loading');
52
+ handleRef.current = client.chat(request, {
53
+ onDelta: delta => {
54
+ if (!current()) return;
55
+ pending.current += delta;
56
+ if (flushMs <= 0) {
57
+ flush();
58
+ } else if (flushTimer.current === undefined) {
59
+ flushTimer.current = setTimeout(flush, flushMs);
60
+ }
61
+ // Only the first delta is a state change; the rest are text.
62
+ setStatus(previous => previous === 'streaming' ? previous : 'streaming');
63
+ },
64
+ onDone: result => {
65
+ if (!current()) return;
66
+ stopFlushing();
67
+ flush();
68
+ if (result.quota) setReported(result.quota);
69
+ setStatus('done');
70
+ },
71
+ onError: aiError => {
72
+ if (!current()) return;
73
+ stopFlushing();
74
+ // Whatever arrived before the failure is kept: a half-answer is
75
+ // still what the user was reading.
76
+ flush();
77
+ setError(aiError);
78
+ if (aiError.code === 'rate-limited') {
79
+ setStatus('rate-limited');
80
+ if (aiError.retryAfterSeconds !== undefined) {
81
+ setRetryAt(new Date(Date.now() + aiError.retryAfterSeconds * 1000));
82
+ }
83
+ } else {
84
+ setStatus('error');
85
+ }
86
+ }
87
+ });
88
+ }, [client, flush, flushMs, stopFlushing]);
89
+ const cancel = useCallback(() => {
90
+ requestRef.current += 1;
91
+ stopFlushing();
92
+ handleRef.current?.cancel();
93
+ setStatus('idle');
94
+ }, [stopFlushing]);
95
+ useEffect(() => () => {
96
+ requestRef.current += 1;
97
+ handleRef.current?.cancel();
98
+ }, []);
99
+ return {
100
+ send,
101
+ cancel,
102
+ status,
103
+ text,
104
+ error,
105
+ retryAt,
106
+ quota
107
+ };
108
+ }
109
+ const noSubscription = () => () => undefined;
110
+
111
+ /**
112
+ * The quota the client last saw, from a chat's `done` event or from
113
+ * `getQuota()`. One source, so a figure on screen is not stale the moment a
114
+ * chat finishes (AI-13).
115
+ */
116
+ function useAiQuotaValue(client) {
117
+ return useExternalStore(client.subscribe ?? noSubscription, client.lastQuota ?? (() => undefined));
118
+ }
119
+ export function useAiQuota(client) {
120
+ const fromClient = useAiQuotaValue(client);
121
+ // A client of the app's own may not keep the last quota; then this is it.
122
+ const [fetched, setFetched] = useState();
123
+ const quota = fromClient ?? fetched;
124
+ const [status, setStatus] = useState('loading');
125
+ const alive = useRef(true);
126
+ // Only the latest refresh may settle the state; an older, slower one that
127
+ // lands afterwards is stale.
128
+ const latest = useRef(0);
129
+ const refresh = useCallback(() => {
130
+ const id = ++latest.current;
131
+ const current = () => alive.current && latest.current === id;
132
+ setStatus('loading');
133
+ client.getQuota().then(snapshot => {
134
+ if (!current()) return;
135
+ setFetched(snapshot);
136
+ setStatus('ready');
137
+ }).catch(() => {
138
+ if (current()) setStatus('error');
139
+ });
140
+ }, [client]);
141
+ useEffect(() => {
142
+ alive.current = true;
143
+ refresh();
144
+ return () => {
145
+ alive.current = false;
146
+ };
147
+ }, [refresh]);
148
+
149
+ // A quota that arrived through a chat is an answer too: nothing is loading.
150
+ return {
151
+ quota,
152
+ status: status === 'loading' && quota ? 'ready' : status,
153
+ refresh
154
+ };
155
+ }
156
+
157
+ /**
158
+ * The client's behavior state (config source and whether AI is enabled), live:
159
+ * re-renders when the kill switch flips or the config state moves (AI-09).
160
+ */
161
+ export function useAiBehaviorState(client) {
162
+ return useExternalStore(client.subscribe ?? noSubscription, client.getBehaviorState);
163
+ }
164
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useExternalStore","useCallback","useEffect","useRef","useState","DEFAULT_FLUSH_MS","useAiChat","client","options","status","setStatus","text","setText","error","setError","retryAt","setRetryAt","fromClient","useAiQuotaValue","reported","setReported","quota","handleRef","requestRef","pending","flushTimer","undefined","flushMs","flushIntervalMs","stopFlushing","current","clearTimeout","flush","buffered","previous","send","request","cancel","id","chat","onDelta","delta","setTimeout","onDone","result","onError","aiError","code","retryAfterSeconds","Date","now","noSubscription","subscribe","lastQuota","useAiQuota","fetched","setFetched","alive","latest","refresh","getQuota","then","snapshot","catch","useAiBehaviorState","getBehaviorState"],"sourceRoot":"../../../src","sources":["react/hooks.ts"],"mappings":"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","ignoreList":[]}