@kortix/sdk 0.12.4 → 0.12.6

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 (187) hide show
  1. package/README.md +80 -15
  2. package/dist/browser/session-sync/session-transcript-cache.d.ts +17 -0
  3. package/dist/browser/session-sync/session-transcript-cache.d.ts.map +1 -1
  4. package/dist/browser/session-sync/session-transcript-cache.js +14 -2
  5. package/dist/browser/session-sync/session-transcript-cache.js.map +1 -1
  6. package/dist/browser/stores/sync-store.d.ts +86 -2
  7. package/dist/browser/stores/sync-store.d.ts.map +1 -1
  8. package/dist/browser/stores/sync-store.js +386 -33
  9. package/dist/browser/stores/sync-store.js.map +1 -1
  10. package/dist/core/client/kortix.d.ts +87 -54
  11. package/dist/core/client/kortix.d.ts.map +1 -1
  12. package/dist/core/client/kortix.js +67 -21
  13. package/dist/core/client/kortix.js.map +1 -1
  14. package/dist/core/http/api-client.d.ts +19 -1
  15. package/dist/core/http/api-client.d.ts.map +1 -1
  16. package/dist/core/http/api-client.js +79 -21
  17. package/dist/core/http/api-client.js.map +1 -1
  18. package/dist/core/http/auth.d.ts.map +1 -1
  19. package/dist/core/http/auth.js +6 -4
  20. package/dist/core/http/auth.js.map +1 -1
  21. package/dist/core/http/config.d.ts +4 -0
  22. package/dist/core/http/config.d.ts.map +1 -1
  23. package/dist/core/http/config.js.map +1 -1
  24. package/dist/core/rest/platform-client/host-boundary.js +2 -2
  25. package/dist/core/rest/platform-client/host-boundary.js.map +1 -1
  26. package/dist/core/rest/projects-client/access.d.ts +1 -1
  27. package/dist/core/rest/projects-client/agent-config.d.ts +1 -1
  28. package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
  29. package/dist/core/rest/projects-client/apps.d.ts +216 -0
  30. package/dist/core/rest/projects-client/apps.d.ts.map +1 -0
  31. package/dist/core/rest/projects-client/apps.js +105 -0
  32. package/dist/core/rest/projects-client/apps.js.map +1 -0
  33. package/dist/core/rest/projects-client/audit.js +1 -1
  34. package/dist/core/rest/projects-client/audit.js.map +1 -1
  35. package/dist/core/rest/projects-client/billing.d.ts +7 -0
  36. package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
  37. package/dist/core/rest/projects-client/billing.js.map +1 -1
  38. package/dist/core/rest/projects-client/channels.d.ts +7 -6
  39. package/dist/core/rest/projects-client/channels.d.ts.map +1 -1
  40. package/dist/core/rest/projects-client/channels.js +12 -2
  41. package/dist/core/rest/projects-client/channels.js.map +1 -1
  42. package/dist/core/rest/projects-client/connectors.d.ts +133 -98
  43. package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
  44. package/dist/core/rest/projects-client/connectors.js +199 -119
  45. package/dist/core/rest/projects-client/connectors.js.map +1 -1
  46. package/dist/core/rest/projects-client/files.d.ts.map +1 -1
  47. package/dist/core/rest/projects-client/files.js +7 -1
  48. package/dist/core/rest/projects-client/files.js.map +1 -1
  49. package/dist/core/rest/projects-client/index.d.ts +1 -0
  50. package/dist/core/rest/projects-client/index.d.ts.map +1 -1
  51. package/dist/core/rest/projects-client/index.js +1 -0
  52. package/dist/core/rest/projects-client/index.js.map +1 -1
  53. package/dist/core/rest/projects-client/policies.js +3 -3
  54. package/dist/core/rest/projects-client/policies.js.map +1 -1
  55. package/dist/core/rest/projects-client/projects.d.ts +47 -1
  56. package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
  57. package/dist/core/rest/projects-client/projects.js +12 -0
  58. package/dist/core/rest/projects-client/projects.js.map +1 -1
  59. package/dist/core/rest/projects-client/secrets.d.ts +55 -3
  60. package/dist/core/rest/projects-client/secrets.d.ts.map +1 -1
  61. package/dist/core/rest/projects-client/secrets.js +14 -4
  62. package/dist/core/rest/projects-client/secrets.js.map +1 -1
  63. package/dist/core/rest/projects-client/sessions.d.ts +8 -16
  64. package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
  65. package/dist/core/rest/projects-client/sessions.js +1 -1
  66. package/dist/core/rest/projects-client/sessions.js.map +1 -1
  67. package/dist/core/session/index.d.ts +1 -0
  68. package/dist/core/session/index.d.ts.map +1 -1
  69. package/dist/core/session/index.js +1 -0
  70. package/dist/core/session/index.js.map +1 -1
  71. package/dist/core/session/preview-probe.d.ts +76 -0
  72. package/dist/core/session/preview-probe.d.ts.map +1 -0
  73. package/dist/core/session/preview-probe.js +97 -0
  74. package/dist/core/session/preview-probe.js.map +1 -0
  75. package/dist/core/turns/classify.js +1 -1
  76. package/dist/core/turns/errors.js +1 -1
  77. package/dist/core/turns/errors.js.map +1 -1
  78. package/dist/index.d.ts +1 -1
  79. package/dist/index.js +1 -1
  80. package/dist/kortix.esm.min.js +19 -19
  81. package/dist/kortix.global.js +19 -19
  82. package/dist/platform/auth-core.d.ts +2 -1
  83. package/dist/platform/auth-core.d.ts.map +1 -1
  84. package/dist/platform/auth-core.js +10 -1
  85. package/dist/platform/auth-core.js.map +1 -1
  86. package/dist/react/index.d.ts +8 -0
  87. package/dist/react/index.d.ts.map +1 -1
  88. package/dist/react/index.js +13 -0
  89. package/dist/react/index.js.map +1 -1
  90. package/dist/react/invalidate-project.d.ts +76 -0
  91. package/dist/react/invalidate-project.d.ts.map +1 -0
  92. package/dist/react/invalidate-project.js +72 -0
  93. package/dist/react/invalidate-project.js.map +1 -0
  94. package/dist/react/provider-refresh.d.ts.map +1 -1
  95. package/dist/react/provider-refresh.js +12 -3
  96. package/dist/react/provider-refresh.js.map +1 -1
  97. package/dist/react/query-contracts.d.ts +112 -0
  98. package/dist/react/query-contracts.d.ts.map +1 -0
  99. package/dist/react/query-contracts.js +100 -0
  100. package/dist/react/query-contracts.js.map +1 -0
  101. package/dist/react/query-keys.d.ts +251 -0
  102. package/dist/react/query-keys.d.ts.map +1 -0
  103. package/dist/react/query-keys.js +249 -0
  104. package/dist/react/query-keys.js.map +1 -0
  105. package/dist/react/session-title-sync.d.ts.map +1 -1
  106. package/dist/react/session-title-sync.js +14 -4
  107. package/dist/react/session-title-sync.js.map +1 -1
  108. package/dist/react/use-admin-accounts.d.ts +85 -0
  109. package/dist/react/use-admin-accounts.d.ts.map +1 -1
  110. package/dist/react/use-admin-accounts.js +100 -0
  111. package/dist/react/use-admin-accounts.js.map +1 -1
  112. package/dist/react/use-admin-activity-analytics.d.ts +91 -0
  113. package/dist/react/use-admin-activity-analytics.d.ts.map +1 -0
  114. package/dist/react/use-admin-activity-analytics.js +83 -0
  115. package/dist/react/use-admin-activity-analytics.js.map +1 -0
  116. package/dist/react/use-admin-projects.d.ts +50 -0
  117. package/dist/react/use-admin-projects.d.ts.map +1 -0
  118. package/dist/react/use-admin-projects.js +28 -0
  119. package/dist/react/use-admin-projects.js.map +1 -0
  120. package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
  121. package/dist/react/use-canonical-opencode-session.js +12 -7
  122. package/dist/react/use-canonical-opencode-session.js.map +1 -1
  123. package/dist/react/use-gateway-catalog-sync.d.ts.map +1 -1
  124. package/dist/react/use-gateway-catalog-sync.js +5 -2
  125. package/dist/react/use-gateway-catalog-sync.js.map +1 -1
  126. package/dist/react/use-model-defaults.d.ts.map +1 -1
  127. package/dist/react/use-model-defaults.js +3 -1
  128. package/dist/react/use-model-defaults.js.map +1 -1
  129. package/dist/react/use-model-enablement.d.ts.map +1 -1
  130. package/dist/react/use-model-enablement.js +6 -2
  131. package/dist/react/use-model-enablement.js.map +1 -1
  132. package/dist/react/use-opencode-events/handle-event.d.ts +6 -0
  133. package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
  134. package/dist/react/use-opencode-events/handle-event.js +3 -3
  135. package/dist/react/use-opencode-events/handle-event.js.map +1 -1
  136. package/dist/react/use-opencode-events/helpers.d.ts +27 -1
  137. package/dist/react/use-opencode-events/helpers.d.ts.map +1 -1
  138. package/dist/react/use-opencode-events/helpers.js +31 -6
  139. package/dist/react/use-opencode-events/helpers.js.map +1 -1
  140. package/dist/react/use-opencode-events/index.d.ts.map +1 -1
  141. package/dist/react/use-opencode-events/index.js +8 -0
  142. package/dist/react/use-opencode-events/index.js.map +1 -1
  143. package/dist/react/use-opencode-sessions/agents.d.ts.map +1 -1
  144. package/dist/react/use-opencode-sessions/agents.js +10 -1
  145. package/dist/react/use-opencode-sessions/agents.js.map +1 -1
  146. package/dist/react/use-opencode-sessions/messages.d.ts +19 -3
  147. package/dist/react/use-opencode-sessions/messages.d.ts.map +1 -1
  148. package/dist/react/use-opencode-sessions/messages.js +28 -55
  149. package/dist/react/use-opencode-sessions/messages.js.map +1 -1
  150. package/dist/react/use-opencode-sessions/providers.d.ts.map +1 -1
  151. package/dist/react/use-opencode-sessions/providers.js +9 -2
  152. package/dist/react/use-opencode-sessions/providers.js.map +1 -1
  153. package/dist/react/use-project-apps.d.ts +410 -0
  154. package/dist/react/use-project-apps.d.ts.map +1 -0
  155. package/dist/react/use-project-apps.js +98 -0
  156. package/dist/react/use-project-apps.js.map +1 -0
  157. package/dist/react/use-project-config.d.ts +7 -0
  158. package/dist/react/use-project-config.d.ts.map +1 -1
  159. package/dist/react/use-project-config.js +14 -4
  160. package/dist/react/use-project-config.js.map +1 -1
  161. package/dist/react/use-project-models.d.ts.map +1 -1
  162. package/dist/react/use-project-models.js +8 -2
  163. package/dist/react/use-project-models.js.map +1 -1
  164. package/dist/react/use-project-name.d.ts +23 -0
  165. package/dist/react/use-project-name.d.ts.map +1 -0
  166. package/dist/react/use-project-name.js +44 -0
  167. package/dist/react/use-project-name.js.map +1 -0
  168. package/dist/react/use-project-secrets.d.ts +29 -2
  169. package/dist/react/use-project-secrets.d.ts.map +1 -1
  170. package/dist/react/use-project-secrets.js +8 -2
  171. package/dist/react/use-project-secrets.js.map +1 -1
  172. package/dist/react/use-project-session.d.ts +40 -0
  173. package/dist/react/use-project-session.d.ts.map +1 -0
  174. package/dist/react/use-project-session.js +49 -0
  175. package/dist/react/use-project-session.js.map +1 -0
  176. package/dist/react/use-project-triggers.d.ts +4 -2
  177. package/dist/react/use-project-triggers.d.ts.map +1 -1
  178. package/dist/react/use-project-triggers.js +7 -2
  179. package/dist/react/use-project-triggers.js.map +1 -1
  180. package/dist/react/use-session-sync.d.ts +1 -2
  181. package/dist/react/use-session-sync.d.ts.map +1 -1
  182. package/dist/react/use-session-sync.js +17 -40
  183. package/dist/react/use-session-sync.js.map +1 -1
  184. package/dist/react/use-session.d.ts.map +1 -1
  185. package/dist/react/use-session.js +18 -16
  186. package/dist/react/use-session.js.map +1 -1
  187. package/package.json +2 -2
@@ -0,0 +1,98 @@
1
+ 'use client';
2
+ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
3
+ import { createApp, createAppAccessSession, createAppDeployment, deleteApp, getAppAccess, listAppDeployments, listApps, rollbackApp, startApp, stopApp, updateApp, updateAppAccess, } from '../core/rest/projects-client/index.js';
4
+ import { contract } from './query-contracts.js';
5
+ import { qk } from './query-keys.js';
6
+ export const projectAppsKey = (projectId) => qk.project.apps(projectId ?? '');
7
+ export const appDeploymentsKey = (projectId, appId) => qk.project.appDeployments(projectId ?? '', appId ?? '');
8
+ /** Project App inventory and lifecycle mutations. */
9
+ export function useProjectApps(projectId) {
10
+ const queryClient = useQueryClient();
11
+ const queryKey = projectAppsKey(projectId);
12
+ const query = useQuery({
13
+ queryKey,
14
+ queryFn: () => listApps(projectId),
15
+ enabled: !!projectId,
16
+ ...contract('inventory'),
17
+ });
18
+ const invalidate = () => queryClient.invalidateQueries({ queryKey });
19
+ const create = useMutation({
20
+ mutationFn: (input) => createApp(projectId, input),
21
+ onSuccess: invalidate,
22
+ });
23
+ const update = useMutation({
24
+ mutationFn: (args) => updateApp(projectId, args.appId, args.input),
25
+ onSuccess: invalidate,
26
+ });
27
+ const start = useMutation({
28
+ mutationFn: (appId) => startApp(projectId, appId),
29
+ onSuccess: invalidate,
30
+ });
31
+ const stop = useMutation({
32
+ mutationFn: (appId) => stopApp(projectId, appId),
33
+ onSuccess: invalidate,
34
+ });
35
+ const remove = useMutation({
36
+ mutationFn: (appId) => deleteApp(projectId, appId),
37
+ onSuccess: invalidate,
38
+ });
39
+ return { ...query, create, update, start, stop, remove };
40
+ }
41
+ /** Immutable deployment history and deployment-specific mutations. */
42
+ export function useAppDeployments(projectId, appId) {
43
+ const queryClient = useQueryClient();
44
+ const queryKey = appDeploymentsKey(projectId, appId);
45
+ const appsKey = projectAppsKey(projectId);
46
+ const query = useQuery({
47
+ queryKey,
48
+ queryFn: () => listAppDeployments(projectId, appId),
49
+ enabled: !!projectId && !!appId,
50
+ ...contract('inventory'),
51
+ refetchInterval: 5_000,
52
+ });
53
+ const invalidate = () => {
54
+ void queryClient.invalidateQueries({ queryKey: appsKey });
55
+ void queryClient.invalidateQueries({ queryKey });
56
+ };
57
+ const deploy = useMutation({
58
+ mutationFn: (input) => createAppDeployment(projectId, appId, input),
59
+ onSuccess: invalidate,
60
+ });
61
+ const rollback = useMutation({
62
+ mutationFn: (deploymentId) => rollbackApp(projectId, appId, deploymentId),
63
+ onSuccess: invalidate,
64
+ });
65
+ return { ...query, deploy, rollback };
66
+ }
67
+ /** App access policy plus a short-lived URL that exchanges into a host-only cookie. */
68
+ export function useAppAccess(projectId, appId) {
69
+ const queryClient = useQueryClient();
70
+ const queryKey = qk.project.appAccess(projectId ?? '', appId ?? '');
71
+ const sessionQueryKey = qk.project.appAccessSession(projectId ?? '', appId ?? '');
72
+ const policy = useQuery({
73
+ queryKey,
74
+ queryFn: () => getAppAccess(projectId, appId),
75
+ enabled: !!projectId && !!appId,
76
+ ...contract('config'),
77
+ });
78
+ const session = useQuery({
79
+ queryKey: sessionQueryKey,
80
+ queryFn: () => createAppAccessSession(projectId, appId),
81
+ enabled: !!projectId && !!appId,
82
+ staleTime: 4 * 60_000,
83
+ gcTime: 5 * 60_000,
84
+ retry: false,
85
+ });
86
+ const update = useMutation({
87
+ mutationFn: (input) => updateAppAccess(projectId, appId, input),
88
+ onSuccess: async () => {
89
+ await Promise.all([
90
+ queryClient.invalidateQueries({ queryKey }),
91
+ queryClient.invalidateQueries({ queryKey: sessionQueryKey }),
92
+ queryClient.invalidateQueries({ queryKey: qk.project.apps(projectId ?? '') }),
93
+ ]);
94
+ },
95
+ });
96
+ return { policy, session, update };
97
+ }
98
+ //# sourceMappingURL=use-project-apps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-apps.js","sourceRoot":"","sources":["../../src/react/use-project-apps.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,13 @@ import { type ProjectConfigSummary } from '../core/rest/projects-client/index.js
6
6
  * before any sandbox runtime exists. This is the canonical home for the
7
7
  * "capabilities, not runtime state" split — `useVisibleAgents({ projectId })`
8
8
  * and `useProjectModels(projectId)` are the per-surface siblings.
9
+ *
10
+ * Reads `qk.project.detail(id)` via a `select` projection — the SAME entry
11
+ * every other project-detail reader shares (Customize, the capability pages,
12
+ * the project shell) — rather than its own key. It used to key on the
13
+ * standalone `['project-config', id]`, so every one of THOSE readers issued
14
+ * its own `getProjectDetail` fetch even though the response was
15
+ * byte-identical to the one already cached under `qk.project.detail(id)`.
9
16
  */
10
17
  export declare function useProjectConfig(projectId: string | null | undefined): ProjectConfigSummary | undefined;
11
18
  //# sourceMappingURL=use-project-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-config.d.ts","sourceRoot":"","sources":["../../src/react/use-project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,oBAAoB,EAAoB,MAAM,8BAA8B,CAAC;AAE3F;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,oBAAoB,GAAG,SAAS,CASlC"}
1
+ {"version":3,"file":"use-project-config.d.ts","sourceRoot":"","sources":["../../src/react/use-project-config.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,oBAAoB,EAG1B,MAAM,8BAA8B,CAAC;AAItC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,oBAAoB,GAAG,SAAS,CAUlC"}
@@ -1,6 +1,8 @@
1
1
  'use client';
2
2
  import { useQuery } from '@tanstack/react-query';
3
- import { getProjectDetail } from '../core/rest/projects-client/index.js';
3
+ import { getProjectDetail, } from '../core/rest/projects-client/index.js';
4
+ import { contract } from './query-contracts.js';
5
+ import { qk } from './query-keys.js';
4
6
  /**
5
7
  * Server-side project config — the single source of truth for everything a user
6
8
  * selects AROUND a session: agents, commands, skills, the default agent, and env
@@ -8,13 +10,21 @@ import { getProjectDetail } from '../core/rest/projects-client/index.js';
8
10
  * before any sandbox runtime exists. This is the canonical home for the
9
11
  * "capabilities, not runtime state" split — `useVisibleAgents({ projectId })`
10
12
  * and `useProjectModels(projectId)` are the per-surface siblings.
13
+ *
14
+ * Reads `qk.project.detail(id)` via a `select` projection — the SAME entry
15
+ * every other project-detail reader shares (Customize, the capability pages,
16
+ * the project shell) — rather than its own key. It used to key on the
17
+ * standalone `['project-config', id]`, so every one of THOSE readers issued
18
+ * its own `getProjectDetail` fetch even though the response was
19
+ * byte-identical to the one already cached under `qk.project.detail(id)`.
11
20
  */
12
21
  export function useProjectConfig(projectId) {
13
22
  const { data } = useQuery({
14
- queryKey: ['project-config', projectId],
15
- queryFn: async () => (await getProjectDetail(projectId)).config,
23
+ queryKey: qk.project.detail(projectId ?? ''),
24
+ queryFn: () => getProjectDetail(projectId),
25
+ select: (detail) => detail.config,
16
26
  enabled: !!projectId,
17
- staleTime: 30_000,
27
+ ...contract('config'),
18
28
  retry: false,
19
29
  });
20
30
  return data;
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-config.js","sourceRoot":"","sources":["../../src/react/use-project-config.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAA6B,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAE3F;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAoC;IAEpC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,CAAC,gBAAgB,EAAE,SAAS,CAAC;QACvC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,gBAAgB,CAAC,SAAmB,CAAC,CAAC,CAAC,MAAM;QACzE,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"use-project-config.js","sourceRoot":"","sources":["../../src/react/use-project-config.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAGL,gBAAgB,GACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAoC;IAEpC,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAmB,CAAC;QACpD,MAAM,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM;QAChD,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACrB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-models.d.ts","sourceRoot":"","sources":["../../src/react/use-project-models.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAGhE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,EAAE,CASlF"}
1
+ {"version":3,"file":"use-project-models.d.ts","sourceRoot":"","sources":["../../src/react/use-project-models.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAKhE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,EAAE,CAalF"}
@@ -4,6 +4,8 @@ import { useMemo } from 'react';
4
4
  import { getProjectModelPicker } from '../core/rest/projects-client/index.js';
5
5
  import { flattenModels } from './model-flatten.js';
6
6
  import { projectLlmCatalogToProviderList } from './provider-selection.js';
7
+ import { contract } from './query-contracts.js';
8
+ import { qk } from './query-keys.js';
7
9
  /**
8
10
  * Server-side model list for a project — the model parallel to
9
11
  * `useVisibleAgents({ projectId })`. Reads the compact, connection-aware picker
@@ -13,10 +15,14 @@ import { projectLlmCatalogToProviderList } from './provider-selection.js';
13
15
  */
14
16
  export function useProjectModels(projectId) {
15
17
  const { data } = useQuery({
16
- queryKey: ['project-model-picker', projectId],
18
+ // Shared with `useModelEnablement` (same fetcher) and the routing-policy
19
+ // save's invalidation (`gateway-routing.tsx`) — all three must key on the
20
+ // same `qk.project.modelPicker(id)` entry, or a toggle/save silently
21
+ // fails to reach this reader (see that member's doc comment).
22
+ queryKey: qk.project.modelPicker(projectId ?? ''),
17
23
  queryFn: () => getProjectModelPicker(projectId),
18
24
  enabled: !!projectId,
19
- staleTime: 30_000,
25
+ ...contract('config'),
20
26
  retry: false,
21
27
  });
22
28
  return useMemo(() => (data ? flattenModels(projectLlmCatalogToProviderList(data)) : []), [data]);
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-models.js","sourceRoot":"","sources":["../../src/react/use-project-models.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAoC;IACnE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,CAAC,sBAAsB,EAAE,SAAS,CAAC;QAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,SAAmB,CAAC;QACzD,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,SAAS,EAAE,MAAM;QACjB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnG,CAAC"}
1
+ {"version":3,"file":"use-project-models.js","sourceRoot":"","sources":["../../src/react/use-project-models.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAkB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,+BAA+B,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAoC;IACnE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,yEAAyE;QACzE,0EAA0E;QAC1E,qEAAqE;QACrE,8DAA8D;QAC9D,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,IAAI,EAAE,CAAC;QACjD,OAAO,EAAE,GAAG,EAAE,CAAC,qBAAqB,CAAC,SAAmB,CAAC;QACzD,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,GAAG,QAAQ,CAAC,QAAQ,CAAC;QACrB,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnG,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The ONLY way to read a project's name.
3
+ *
4
+ * The two-titles bug was not an invalidation gap, it was two sources for one
5
+ * fact: `project-switcher.tsx` read `activeProject?.name` off the projects
6
+ * LIST and fell back to the detail, while `project-home.tsx` read the detail
7
+ * alone. Any divergence between the two caches rendered as two different names
8
+ * on one screen.
9
+ *
10
+ * One accessor makes that structurally impossible rather than merely currently
11
+ * invalidated. Do not reintroduce a `??` fallback to another source here.
12
+ */
13
+ export declare function useProjectName(projectId: string | undefined): string | undefined;
14
+ /**
15
+ * The owning account id, read off the SAME `qk.project.detail(id)` entry
16
+ * `useProjectName` reads — every capability surface already mounts that
17
+ * observer, so this shares the cache instead of adding a fetch. Previously
18
+ * lived in `apps/web`'s `project-detail-query.ts` as a host-local hook; moved
19
+ * here because `qk.project.detail` + `contract('config')` is SDK-owned
20
+ * wiring, not something a host should hand-roll a second time.
21
+ */
22
+ export declare function useProjectAccountId(projectId: string | undefined): string | undefined;
23
+ //# sourceMappingURL=use-project-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-name.d.ts","sourceRoot":"","sources":["../../src/react/use-project-name.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQhF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAQrF"}
@@ -0,0 +1,44 @@
1
+ 'use client';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { getProjectDetail } from '../core/rest/projects-client/index.js';
4
+ import { qk } from './query-keys.js';
5
+ import { contract } from './query-contracts.js';
6
+ /**
7
+ * The ONLY way to read a project's name.
8
+ *
9
+ * The two-titles bug was not an invalidation gap, it was two sources for one
10
+ * fact: `project-switcher.tsx` read `activeProject?.name` off the projects
11
+ * LIST and fell back to the detail, while `project-home.tsx` read the detail
12
+ * alone. Any divergence between the two caches rendered as two different names
13
+ * on one screen.
14
+ *
15
+ * One accessor makes that structurally impossible rather than merely currently
16
+ * invalidated. Do not reintroduce a `??` fallback to another source here.
17
+ */
18
+ export function useProjectName(projectId) {
19
+ const { data } = useQuery({
20
+ queryKey: qk.project.detail(projectId ?? ''),
21
+ queryFn: () => getProjectDetail(projectId),
22
+ enabled: Boolean(projectId),
23
+ ...contract('config'),
24
+ });
25
+ return data?.project?.name;
26
+ }
27
+ /**
28
+ * The owning account id, read off the SAME `qk.project.detail(id)` entry
29
+ * `useProjectName` reads — every capability surface already mounts that
30
+ * observer, so this shares the cache instead of adding a fetch. Previously
31
+ * lived in `apps/web`'s `project-detail-query.ts` as a host-local hook; moved
32
+ * here because `qk.project.detail` + `contract('config')` is SDK-owned
33
+ * wiring, not something a host should hand-roll a second time.
34
+ */
35
+ export function useProjectAccountId(projectId) {
36
+ const { data } = useQuery({
37
+ queryKey: qk.project.detail(projectId ?? ''),
38
+ queryFn: () => getProjectDetail(projectId),
39
+ enabled: Boolean(projectId),
40
+ ...contract('config'),
41
+ });
42
+ return data?.project?.account_id;
43
+ }
44
+ //# sourceMappingURL=use-project-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-name.js","sourceRoot":"","sources":["../../src/react/use-project-name.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,SAA6B;IAC1D,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAmB,CAAC;QACpD,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;QAC3B,GAAG,QAAQ,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,OAAO,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC;AAC7B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,SAA6B;IAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC;QACxB,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,SAAmB,CAAC;QACpD,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC;QAC3B,GAAG,QAAQ,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IACH,OAAO,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC;AACnC,CAAC"}
@@ -1,8 +1,11 @@
1
1
  import { setPersonalProjectSecret, type ProjectSecretsResponse } from '../core/rest/projects-client/index.js';
2
2
  /** Stable query-key factory — reuse this to read/invalidate the same cache
3
3
  * entry `useProjectSecrets` populates (e.g. from a settings page shell that
4
- * doesn't itself call the hook). */
5
- export declare const projectSecretsKey: (projectId: string | null | undefined) => readonly ["project-secrets", string | null | undefined];
4
+ * doesn't itself call the hook). Delegates to `qk.project.secrets` — the
5
+ * SAME entry every other `listProjectSecrets` reader in `apps/web` shares
6
+ * (Customize secrets view, agents view, connected-providers, the LLM
7
+ * provider connect forms). */
8
+ export declare const projectSecretsKey: (projectId: string | null | undefined) => readonly ["kx", "project", string, "secrets"];
6
9
  /**
7
10
  * Project secrets — list + the mutations a settings screen needs (shared
8
11
  * upsert/remove, personal-override set/remove). Thin React Query binding
@@ -13,6 +16,10 @@ export declare function useProjectSecrets(projectId: string | null | undefined):
13
16
  upsert: import("@tanstack/react-query").UseMutationResult<import("../index.js").ProjectSecret, Error, {
14
17
  name: string;
15
18
  identifier?: string;
19
+ consumer?: import("../index.js").SecretConsumer | null;
20
+ strategy?: import("../index.js").SecretDeliveryStrategy;
21
+ egress_policy?: import("../index.js").SecretEgressPolicy;
22
+ handle_prefix?: string;
16
23
  value?: string;
17
24
  }, unknown>;
18
25
  remove: import("@tanstack/react-query").UseMutationResult<{
@@ -55,6 +62,10 @@ export declare function useProjectSecrets(projectId: string | null | undefined):
55
62
  upsert: import("@tanstack/react-query").UseMutationResult<import("../index.js").ProjectSecret, Error, {
56
63
  name: string;
57
64
  identifier?: string;
65
+ consumer?: import("../index.js").SecretConsumer | null;
66
+ strategy?: import("../index.js").SecretDeliveryStrategy;
67
+ egress_policy?: import("../index.js").SecretEgressPolicy;
68
+ handle_prefix?: string;
58
69
  value?: string;
59
70
  }, unknown>;
60
71
  remove: import("@tanstack/react-query").UseMutationResult<{
@@ -97,6 +108,10 @@ export declare function useProjectSecrets(projectId: string | null | undefined):
97
108
  upsert: import("@tanstack/react-query").UseMutationResult<import("../index.js").ProjectSecret, Error, {
98
109
  name: string;
99
110
  identifier?: string;
111
+ consumer?: import("../index.js").SecretConsumer | null;
112
+ strategy?: import("../index.js").SecretDeliveryStrategy;
113
+ egress_policy?: import("../index.js").SecretEgressPolicy;
114
+ handle_prefix?: string;
100
115
  value?: string;
101
116
  }, unknown>;
102
117
  remove: import("@tanstack/react-query").UseMutationResult<{
@@ -139,6 +154,10 @@ export declare function useProjectSecrets(projectId: string | null | undefined):
139
154
  upsert: import("@tanstack/react-query").UseMutationResult<import("../index.js").ProjectSecret, Error, {
140
155
  name: string;
141
156
  identifier?: string;
157
+ consumer?: import("../index.js").SecretConsumer | null;
158
+ strategy?: import("../index.js").SecretDeliveryStrategy;
159
+ egress_policy?: import("../index.js").SecretEgressPolicy;
160
+ handle_prefix?: string;
142
161
  value?: string;
143
162
  }, unknown>;
144
163
  remove: import("@tanstack/react-query").UseMutationResult<{
@@ -181,6 +200,10 @@ export declare function useProjectSecrets(projectId: string | null | undefined):
181
200
  upsert: import("@tanstack/react-query").UseMutationResult<import("../index.js").ProjectSecret, Error, {
182
201
  name: string;
183
202
  identifier?: string;
203
+ consumer?: import("../index.js").SecretConsumer | null;
204
+ strategy?: import("../index.js").SecretDeliveryStrategy;
205
+ egress_policy?: import("../index.js").SecretEgressPolicy;
206
+ handle_prefix?: string;
184
207
  value?: string;
185
208
  }, unknown>;
186
209
  remove: import("@tanstack/react-query").UseMutationResult<{
@@ -223,6 +246,10 @@ export declare function useProjectSecrets(projectId: string | null | undefined):
223
246
  upsert: import("@tanstack/react-query").UseMutationResult<import("../index.js").ProjectSecret, Error, {
224
247
  name: string;
225
248
  identifier?: string;
249
+ consumer?: import("../index.js").SecretConsumer | null;
250
+ strategy?: import("../index.js").SecretDeliveryStrategy;
251
+ egress_policy?: import("../index.js").SecretEgressPolicy;
252
+ handle_prefix?: string;
226
253
  value?: string;
227
254
  }, unknown>;
228
255
  remove: import("@tanstack/react-query").UseMutationResult<{
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-secrets.d.ts","sourceRoot":"","sources":["../../src/react/use-project-secrets.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,wBAAwB,EAExB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAEtC;;qCAEqC;AACrC,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,4DAC7B,CAAC;AAE1C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;;;cAwBvC,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3F"}
1
+ {"version":3,"file":"use-project-secrets.d.ts","sourceRoot":"","sources":["../../src/react/use-project-secrets.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,wBAAwB,EAExB,KAAK,sBAAsB,EAC5B,MAAM,8BAA8B,CAAC;AAItC;;;;;+BAK+B;AAC/B,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,kDACjC,CAAC;AAEtC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;;;;;;;cAyBvC,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAA7D,MAAM;eAAS,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW3F"}
@@ -1,10 +1,15 @@
1
1
  'use client';
2
2
  import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
3
3
  import { deletePersonalProjectSecret, deleteProjectSecret, listProjectSecrets, setPersonalProjectSecret, upsertProjectSecret, } from '../core/rest/projects-client/index.js';
4
+ import { contract } from './query-contracts.js';
5
+ import { qk } from './query-keys.js';
4
6
  /** Stable query-key factory — reuse this to read/invalidate the same cache
5
7
  * entry `useProjectSecrets` populates (e.g. from a settings page shell that
6
- * doesn't itself call the hook). */
7
- export const projectSecretsKey = (projectId) => ['project-secrets', projectId];
8
+ * doesn't itself call the hook). Delegates to `qk.project.secrets` — the
9
+ * SAME entry every other `listProjectSecrets` reader in `apps/web` shares
10
+ * (Customize secrets view, agents view, connected-providers, the LLM
11
+ * provider connect forms). */
12
+ export const projectSecretsKey = (projectId) => qk.project.secrets(projectId ?? '');
8
13
  /**
9
14
  * Project secrets — list + the mutations a settings screen needs (shared
10
15
  * upsert/remove, personal-override set/remove). Thin React Query binding
@@ -18,6 +23,7 @@ export function useProjectSecrets(projectId) {
18
23
  queryKey,
19
24
  queryFn: () => listProjectSecrets(projectId),
20
25
  enabled: !!projectId,
26
+ ...contract('config'),
21
27
  });
22
28
  const invalidate = () => queryClient.invalidateQueries({ queryKey });
23
29
  const upsert = useMutation({
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-secrets.js","sourceRoot":"","sources":["../../src/react/use-project-secrets.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,8BAA8B,CAAC;AAEtC;;qCAEqC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAoC,EAAE,EAAE,CACxE,CAAC,iBAAiB,EAAE,SAAS,CAAU,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAoC;IACpE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,QAAQ,CAAyB;QAC7C,QAAQ;QACR,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAmB,CAAC;QACtD,OAAO,EAAE,CAAC,CAAC,SAAS;KACrB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,KAAgD,EAAE,EAAE,CAC/D,mBAAmB,CAAC,SAAmB,EAAE,KAAK,CAAC;QACjD,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAmB,EAAE,IAAI,CAAC;QAC5E,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,UAAU,EAAE,CAAC,IAA6E,EAAE,EAAE,CAC5F,wBAAwB,CAAC,SAAmB,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QACtE,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,CAAC;QACjC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,2BAA2B,CAAC,SAAmB,EAAE,IAAI,CAAC;QACpF,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"use-project-secrets.js","sourceRoot":"","sources":["../../src/react/use-project-secrets.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,GAEpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC;;;;;+BAK+B;AAC/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAoC,EAAE,EAAE,CACxE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAoC;IACpE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAE9C,MAAM,KAAK,GAAG,QAAQ,CAAyB;QAC7C,QAAQ;QACR,OAAO,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAmB,CAAC;QACtD,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,GAAG,QAAQ,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,KAAgD,EAAE,EAAE,CAC/D,mBAAmB,CAAC,SAAmB,EAAE,KAAK,CAAC;QACjD,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,mBAAmB,CAAC,SAAmB,EAAE,IAAI,CAAC;QAC5E,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,WAAW,CAAC;QAC9B,UAAU,EAAE,CAAC,IAA6E,EAAE,EAAE,CAC5F,wBAAwB,CAAC,SAAmB,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QACtE,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,CAAC;QACjC,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,2BAA2B,CAAC,SAAmB,EAAE,IAAI,CAAC;QACpF,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AACnE,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type ProjectSession } from '../core/rest/projects-client/index.js';
2
+ /**
3
+ * The ONLY way to read one Kortix session row.
4
+ *
5
+ * `qk.project.session(projectId, sessionId)` had three independent readers,
6
+ * and the migration that unified their KEY left their CONTRACTS apart — the
7
+ * narrower half of the same bug:
8
+ *
9
+ * use-canonical-opencode-session.ts staleTime: 10_000, showErrors: false
10
+ * session-files-panel.tsx contract('inventory'), default errors
11
+ * session-changes-shared.tsx contract('inventory'), default errors
12
+ *
13
+ * Both halves were mount-order dependent. `staleTime` is per-OBSERVER, so how
14
+ * long the row stayed fresh depended on which surface happened to be mounted.
15
+ * Worse, `queryFn` is per-ENTRY — TanStack keeps exactly one per cached query
16
+ * and the first observer to mount installs it — so whether a failed read
17
+ * raised a toast depended on whether the session page or the Changes panel
18
+ * got there first.
19
+ *
20
+ * `showErrors: false` wins for every reader, deliberately. Each one's failure
21
+ * path is already a silent, correct fallback that the UI never surfaces:
22
+ * `resolveSessionPin` treats a missing pin as "still resolving" and the two
23
+ * panels fall back to `base_ref = 'main'`. Nothing renders an error state or
24
+ * offers a retry, so a toast is noise the user cannot act on. It is also
25
+ * exactly the wrong moment for one — the session page issues this read during
26
+ * boot and in the idle-stopped window, where a transient miss is expected and
27
+ * self-heals. And `showErrors` is a client-side PRESENTATION flag: it does not
28
+ * change the request or the response, so it cannot justify separate keys the
29
+ * way `scope` does for `qk.project.sessions` (see `query-keys.ts`). One
30
+ * entity, one entry, one fetcher.
31
+ *
32
+ * `enabled` stays per-call-site on purpose. It decides whether THIS surface
33
+ * subscribes, not what the shared entry holds, so surfaces are free to
34
+ * disagree — the session page skips the read entirely when `POST /start`
35
+ * already handed it the pin.
36
+ */
37
+ export declare function useProjectSession(projectId: string | undefined, sessionId: string | undefined, options?: {
38
+ enabled?: boolean;
39
+ }): import("@tanstack/react-query").UseQueryResult<NoInfer<ProjectSession>, Error>;
40
+ //# sourceMappingURL=use-project-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-session.d.ts","sourceRoot":"","sources":["../../src/react/use-project-session.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAKtF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,kFAShC"}
@@ -0,0 +1,49 @@
1
+ 'use client';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { getProjectSession } from '../core/rest/projects-client/index.js';
4
+ import { contract } from './query-contracts.js';
5
+ import { qk } from './query-keys.js';
6
+ /**
7
+ * The ONLY way to read one Kortix session row.
8
+ *
9
+ * `qk.project.session(projectId, sessionId)` had three independent readers,
10
+ * and the migration that unified their KEY left their CONTRACTS apart — the
11
+ * narrower half of the same bug:
12
+ *
13
+ * use-canonical-opencode-session.ts staleTime: 10_000, showErrors: false
14
+ * session-files-panel.tsx contract('inventory'), default errors
15
+ * session-changes-shared.tsx contract('inventory'), default errors
16
+ *
17
+ * Both halves were mount-order dependent. `staleTime` is per-OBSERVER, so how
18
+ * long the row stayed fresh depended on which surface happened to be mounted.
19
+ * Worse, `queryFn` is per-ENTRY — TanStack keeps exactly one per cached query
20
+ * and the first observer to mount installs it — so whether a failed read
21
+ * raised a toast depended on whether the session page or the Changes panel
22
+ * got there first.
23
+ *
24
+ * `showErrors: false` wins for every reader, deliberately. Each one's failure
25
+ * path is already a silent, correct fallback that the UI never surfaces:
26
+ * `resolveSessionPin` treats a missing pin as "still resolving" and the two
27
+ * panels fall back to `base_ref = 'main'`. Nothing renders an error state or
28
+ * offers a retry, so a toast is noise the user cannot act on. It is also
29
+ * exactly the wrong moment for one — the session page issues this read during
30
+ * boot and in the idle-stopped window, where a transient miss is expected and
31
+ * self-heals. And `showErrors` is a client-side PRESENTATION flag: it does not
32
+ * change the request or the response, so it cannot justify separate keys the
33
+ * way `scope` does for `qk.project.sessions` (see `query-keys.ts`). One
34
+ * entity, one entry, one fetcher.
35
+ *
36
+ * `enabled` stays per-call-site on purpose. It decides whether THIS surface
37
+ * subscribes, not what the shared entry holds, so surfaces are free to
38
+ * disagree — the session page skips the read entirely when `POST /start`
39
+ * already handed it the pin.
40
+ */
41
+ export function useProjectSession(projectId, sessionId, options) {
42
+ return useQuery({
43
+ queryKey: qk.project.session(projectId ?? '', sessionId ?? ''),
44
+ queryFn: () => getProjectSession(projectId, sessionId, { showErrors: false }),
45
+ enabled: Boolean(projectId) && Boolean(sessionId) && (options?.enabled ?? true),
46
+ ...contract('inventory'),
47
+ });
48
+ }
49
+ //# sourceMappingURL=use-project-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-project-session.js","sourceRoot":"","sources":["../../src/react/use-project-session.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAuB,MAAM,8BAA8B,CAAC;AAEtF,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,UAAU,iBAAiB,CAC/B,SAA6B,EAC7B,SAA6B,EAC7B,OAA+B;IAE/B,OAAO,QAAQ,CAAiB;QAC9B,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC;QAC9D,OAAO,EAAE,GAAG,EAAE,CACZ,iBAAiB,CAAC,SAAmB,EAAE,SAAmB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACpF,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;QAC/E,GAAG,QAAQ,CAAC,WAAW,CAAC;KACzB,CAAC,CAAC;AACL,CAAC"}
@@ -1,7 +1,9 @@
1
1
  import { updateProjectTrigger, type ProjectTriggerListing } from '../core/rest/projects-client/index.js';
2
2
  /** Stable query-key factory — reuse to read/invalidate the same cache entry
3
- * `useProjectTriggers` populates. */
4
- export declare const projectTriggersKey: (projectId: string | null | undefined) => readonly ["project-triggers", string | null | undefined];
3
+ * `useProjectTriggers` populates. Delegates to `qk.project.triggers` — the
4
+ * SAME entry the Customize settings pause switch and the schedule/triggers
5
+ * view build directly via `qk.project.triggers(id)` too. */
6
+ export declare const projectTriggersKey: (projectId: string | null | undefined) => readonly ["kx", "project", string, "triggers"];
5
7
  /**
6
8
  * Project triggers (cron/webhook, file-defined in the repo manifest) — list +
7
9
  * create/update/remove/fire. Thin React Query binding over
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-triggers.d.ts","sourceRoot":"","sources":["../../src/react/use-project-triggers.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,oBAAoB,EACpB,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAEtC;sCACsC;AACtC,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,6DAC7B,CAAC;AAE3C;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;cAmBxC,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBvF"}
1
+ {"version":3,"file":"use-project-triggers.d.ts","sourceRoot":"","sources":["../../src/react/use-project-triggers.ts"],"names":[],"mappings":"AAGA,OAAO,EAKL,oBAAoB,EACpB,KAAK,qBAAqB,EAC3B,MAAM,8BAA8B,CAAC;AAItC;;;6DAG6D;AAC7D,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,mDACjC,CAAC;AAEvC;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;cAoBxC,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAAzD,MAAM;eAAS,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBvF"}
@@ -1,9 +1,13 @@
1
1
  'use client';
2
2
  import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
3
3
  import { createProjectTrigger, deleteProjectTrigger, fireProjectTrigger, listProjectTriggers, updateProjectTrigger, } from '../core/rest/projects-client/index.js';
4
+ import { contract } from './query-contracts.js';
5
+ import { qk } from './query-keys.js';
4
6
  /** Stable query-key factory — reuse to read/invalidate the same cache entry
5
- * `useProjectTriggers` populates. */
6
- export const projectTriggersKey = (projectId) => ['project-triggers', projectId];
7
+ * `useProjectTriggers` populates. Delegates to `qk.project.triggers` — the
8
+ * SAME entry the Customize settings pause switch and the schedule/triggers
9
+ * view build directly via `qk.project.triggers(id)` too. */
10
+ export const projectTriggersKey = (projectId) => qk.project.triggers(projectId ?? '');
7
11
  /**
8
12
  * Project triggers (cron/webhook, file-defined in the repo manifest) — list +
9
13
  * create/update/remove/fire. Thin React Query binding over
@@ -17,6 +21,7 @@ export function useProjectTriggers(projectId) {
17
21
  queryKey,
18
22
  queryFn: () => listProjectTriggers(projectId),
19
23
  enabled: !!projectId,
24
+ ...contract('config'),
20
25
  });
21
26
  const invalidate = () => queryClient.invalidateQueries({ queryKey });
22
27
  const create = useMutation({
@@ -1 +1 @@
1
- {"version":3,"file":"use-project-triggers.js","sourceRoot":"","sources":["../../src/react/use-project-triggers.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,8BAA8B,CAAC;AAEtC;sCACsC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAoC,EAAE,EAAE,CACzE,CAAC,kBAAkB,EAAE,SAAS,CAAU,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAoC;IACrE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,QAAQ,CAAwB;QAC5C,QAAQ;QACR,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,SAAmB,CAAC;QACvD,OAAO,EAAE,CAAC,CAAC,SAAS;KACrB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,KAAiD,EAAE,EAAE,CAChE,oBAAoB,CAAC,SAAmB,EAAE,KAAK,CAAC;QAClD,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,IAAyE,EAAE,EAAE,CACxF,oBAAoB,CAAC,SAAmB,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QAClE,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAoB,CAAC,SAAmB,EAAE,IAAI,CAAC;QAC7E,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,yEAAyE;IACzE,wEAAwE;IACxE,6BAA6B;IAC7B,MAAM,IAAI,GAAG,WAAW,CAAC;QACvB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,kBAAkB,CAAC,SAAmB,EAAE,IAAI,CAAC;KAC5E,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACpD,CAAC"}
1
+ {"version":3,"file":"use-project-triggers.js","sourceRoot":"","sources":["../../src/react/use-project-triggers.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GAErB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAElC;;;6DAG6D;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAoC,EAAE,EAAE,CACzE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAoC;IACrE,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE/C,MAAM,KAAK,GAAG,QAAQ,CAAwB;QAC5C,QAAQ;QACR,OAAO,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,SAAmB,CAAC;QACvD,OAAO,EAAE,CAAC,CAAC,SAAS;QACpB,GAAG,QAAQ,CAAC,QAAQ,CAAC;KACtB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,KAAiD,EAAE,EAAE,CAChE,oBAAoB,CAAC,SAAmB,EAAE,KAAK,CAAC;QAClD,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,IAAyE,EAAE,EAAE,CACxF,oBAAoB,CAAC,SAAmB,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;QAClE,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,WAAW,CAAC;QACzB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,oBAAoB,CAAC,SAAmB,EAAE,IAAI,CAAC;QAC7E,SAAS,EAAE,UAAU;KACtB,CAAC,CAAC;IAEH,yEAAyE;IACzE,wEAAwE;IACxE,6BAA6B;IAC7B,MAAM,IAAI,GAAG,WAAW,CAAC;QACvB,UAAU,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,kBAAkB,CAAC,SAAmB,EAAE,IAAI,CAAC;KAC5E,CAAC,CAAC;IAEH,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACpD,CAAC"}
@@ -1,6 +1,5 @@
1
1
  import type { SessionStatus, Todo } from '@opencode-ai/sdk/v2/client';
2
2
  import { loadSessionTranscriptMessages } from '../browser/session-sync/session-sync-registry.js';
3
- import { type MessageWithParts } from '../browser/stores/sync-store.js';
4
3
  export { loadSessionTranscriptMessages };
5
4
  type FileDiff = Omit<import('@opencode-ai/sdk/v2/client').SnapshotFileDiff, 'patch'> & {
6
5
  patch?: string;
@@ -24,7 +23,7 @@ interface UseSessionSyncOptions {
24
23
  networkEnabled?: boolean;
25
24
  }
26
25
  export declare function useSessionSync(sessionId: string, options?: UseSessionSyncOptions): {
27
- messages: MessageWithParts[];
26
+ messages: import("../internal/sync-store.js").MessageWithParts[];
28
27
  status: SessionStatus;
29
28
  freshness: import("../core/session-sync/session-sync-controller.js").SessionSyncFreshness;
30
29
  isBusy: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"use-session-sync.d.ts","sourceRoot":"","sources":["../../src/react/use-session-sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,aAAa,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAQrF,OAAO,EAEL,6BAA6B,EAG9B,MAAM,+CAA+C,CAAC;AAQvD,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,8BAA8B,CAAC;AAInF,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,4BAA4B,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsDF;;;GAGG;AACH,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;;;;;;;;;;;EAgIpF"}
1
+ {"version":3,"file":"use-session-sync.d.ts","sourceRoot":"","sources":["../../src/react/use-session-sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAQtE,OAAO,EAEL,6BAA6B,EAG9B,MAAM,+CAA+C,CAAC;AAYvD,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,KAAK,QAAQ,GAAG,IAAI,CAAC,OAAO,4BAA4B,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG;IACrF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAOF;;;GAGG;AACH,UAAU,qBAAqB;IAC7B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;;;;;;;;;;;EA+IpF"}