@stigmer/react 3.12.6 → 3.12.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (219) hide show
  1. package/composer/ComposerToolbar.d.ts.map +1 -1
  2. package/composer/ComposerToolbar.js.map +1 -1
  3. package/execution/MessageThread.d.ts.map +1 -1
  4. package/execution/MessageThread.js +8 -11
  5. package/execution/MessageThread.js.map +1 -1
  6. package/execution/ResultView.d.ts.map +1 -1
  7. package/execution/ResultView.js +6 -0
  8. package/execution/ResultView.js.map +1 -1
  9. package/execution/ToolCallItem.d.ts.map +1 -1
  10. package/execution/ToolCallItem.js +13 -2
  11. package/execution/ToolCallItem.js.map +1 -1
  12. package/execution/tool-categories.d.ts +1 -1
  13. package/execution/tool-categories.d.ts.map +1 -1
  14. package/execution/tool-categories.js +6 -0
  15. package/execution/tool-categories.js.map +1 -1
  16. package/execution/useFileChangeContent.d.ts +2 -6
  17. package/execution/useFileChangeContent.d.ts.map +1 -1
  18. package/execution/useFileChangeContent.js +4 -12
  19. package/execution/useFileChangeContent.js.map +1 -1
  20. package/identity-account/AccountPreferencesPanel.d.ts +2 -1
  21. package/identity-account/AccountPreferencesPanel.d.ts.map +1 -1
  22. package/identity-account/AccountPreferencesPanel.js +41 -3
  23. package/identity-account/AccountPreferencesPanel.js.map +1 -1
  24. package/identity-account/useAccountExecutionDefaults.d.ts +7 -0
  25. package/identity-account/useAccountExecutionDefaults.d.ts.map +1 -1
  26. package/identity-account/useAccountExecutionDefaults.js +5 -2
  27. package/identity-account/useAccountExecutionDefaults.js.map +1 -1
  28. package/index.d.ts +5 -2
  29. package/index.d.ts.map +1 -1
  30. package/index.js +5 -1
  31. package/index.js.map +1 -1
  32. package/internal/MemoryEnabledRow.d.ts +37 -0
  33. package/internal/MemoryEnabledRow.d.ts.map +1 -0
  34. package/internal/MemoryEnabledRow.js +25 -0
  35. package/internal/MemoryEnabledRow.js.map +1 -0
  36. package/internal/download.d.ts +8 -0
  37. package/internal/download.d.ts.map +1 -0
  38. package/internal/download.js +25 -0
  39. package/internal/download.js.map +1 -0
  40. package/library/useExportResource.d.ts.map +1 -1
  41. package/library/useExportResource.js +3 -17
  42. package/library/useExportResource.js.map +1 -1
  43. package/memory/MemoryListPanel.d.ts +35 -0
  44. package/memory/MemoryListPanel.d.ts.map +1 -0
  45. package/memory/MemoryListPanel.js +141 -0
  46. package/memory/MemoryListPanel.js.map +1 -0
  47. package/memory/MemoryProposalCard.d.ts +35 -0
  48. package/memory/MemoryProposalCard.d.ts.map +1 -0
  49. package/memory/MemoryProposalCard.js +73 -0
  50. package/memory/MemoryProposalCard.js.map +1 -0
  51. package/memory/index.d.ts +10 -0
  52. package/memory/index.d.ts.map +1 -0
  53. package/memory/index.js +14 -0
  54. package/memory/index.js.map +1 -0
  55. package/memory/memoryGroups.d.ts +31 -0
  56. package/memory/memoryGroups.d.ts.map +1 -0
  57. package/memory/memoryGroups.js +52 -0
  58. package/memory/memoryGroups.js.map +1 -0
  59. package/memory/useConfirmMemory.d.ts +31 -0
  60. package/memory/useConfirmMemory.d.ts.map +1 -0
  61. package/memory/useConfirmMemory.js +43 -0
  62. package/memory/useConfirmMemory.js.map +1 -0
  63. package/memory/useDeleteMemory.d.ts +30 -0
  64. package/memory/useDeleteMemory.d.ts.map +1 -0
  65. package/memory/useDeleteMemory.js +42 -0
  66. package/memory/useDeleteMemory.js.map +1 -0
  67. package/memory/useMemories.d.ts +33 -0
  68. package/memory/useMemories.d.ts.map +1 -0
  69. package/memory/useMemories.js +42 -0
  70. package/memory/useMemories.js.map +1 -0
  71. package/memory/useMemory.d.ts +39 -0
  72. package/memory/useMemory.d.ts.map +1 -0
  73. package/memory/useMemory.js +43 -0
  74. package/memory/useMemory.js.map +1 -0
  75. package/memory/useRejectMemory.d.ts +34 -0
  76. package/memory/useRejectMemory.d.ts.map +1 -0
  77. package/memory/useRejectMemory.js +46 -0
  78. package/memory/useRejectMemory.js.map +1 -0
  79. package/memory/useUpdateMemoryContent.d.ts +32 -0
  80. package/memory/useUpdateMemoryContent.d.ts.map +1 -0
  81. package/memory/useUpdateMemoryContent.js +48 -0
  82. package/memory/useUpdateMemoryContent.js.map +1 -0
  83. package/organization/OrgPreferencesPanel.d.ts.map +1 -1
  84. package/organization/OrgPreferencesPanel.js +36 -4
  85. package/organization/OrgPreferencesPanel.js.map +1 -1
  86. package/package.json +4 -4
  87. package/session/AutoApproveIndicator.d.ts +18 -0
  88. package/session/AutoApproveIndicator.d.ts.map +1 -0
  89. package/session/AutoApproveIndicator.js +23 -0
  90. package/session/AutoApproveIndicator.js.map +1 -0
  91. package/session/NewSessionViewer.d.ts.map +1 -1
  92. package/session/NewSessionViewer.js +10 -1
  93. package/session/NewSessionViewer.js.map +1 -1
  94. package/session/SessionViewer.d.ts +26 -1
  95. package/session/SessionViewer.d.ts.map +1 -1
  96. package/session/SessionViewer.js +28 -22
  97. package/session/SessionViewer.js.map +1 -1
  98. package/session/TranscriptExportMenu.d.ts +24 -0
  99. package/session/TranscriptExportMenu.d.ts.map +1 -0
  100. package/session/TranscriptExportMenu.js +26 -0
  101. package/session/TranscriptExportMenu.js.map +1 -0
  102. package/session/facets/SetupTab.d.ts +43 -6
  103. package/session/facets/SetupTab.d.ts.map +1 -1
  104. package/session/facets/SetupTab.js +32 -36
  105. package/session/facets/SetupTab.js.map +1 -1
  106. package/session/facets/UsageTab.d.ts +2 -1
  107. package/session/facets/UsageTab.d.ts.map +1 -1
  108. package/session/facets/UsageTab.js +11 -5
  109. package/session/facets/UsageTab.js.map +1 -1
  110. package/session/facets/index.d.ts +1 -1
  111. package/session/facets/index.d.ts.map +1 -1
  112. package/session/facets/primitives.d.ts +58 -0
  113. package/session/facets/primitives.d.ts.map +1 -0
  114. package/session/facets/primitives.js +59 -0
  115. package/session/facets/primitives.js.map +1 -0
  116. package/session/index.d.ts +5 -1
  117. package/session/index.d.ts.map +1 -1
  118. package/session/index.js +2 -0
  119. package/session/index.js.map +1 -1
  120. package/session/useExportTranscript.d.ts +44 -0
  121. package/session/useExportTranscript.d.ts.map +1 -0
  122. package/session/useExportTranscript.js +109 -0
  123. package/session/useExportTranscript.js.map +1 -0
  124. package/session/useNewSessionFlow.d.ts +16 -0
  125. package/session/useNewSessionFlow.d.ts.map +1 -1
  126. package/session/useNewSessionFlow.js +25 -6
  127. package/session/useNewSessionFlow.js.map +1 -1
  128. package/session/useSessionConversation.d.ts.map +1 -1
  129. package/session/useSessionConversation.js +7 -19
  130. package/session/useSessionConversation.js.map +1 -1
  131. package/session/useSessionExecutions.d.ts +2 -14
  132. package/session/useSessionExecutions.d.ts.map +1 -1
  133. package/session/useSessionExecutions.js +4 -26
  134. package/session/useSessionExecutions.js.map +1 -1
  135. package/session/useSessionPageFlow.d.ts +41 -10
  136. package/session/useSessionPageFlow.d.ts.map +1 -1
  137. package/session/useSessionPageFlow.js +67 -9
  138. package/session/useSessionPageFlow.js.map +1 -1
  139. package/settings/MemorySection.d.ts +12 -0
  140. package/settings/MemorySection.d.ts.map +1 -0
  141. package/settings/MemorySection.js +21 -0
  142. package/settings/MemorySection.js.map +1 -0
  143. package/settings/index.d.ts +1 -0
  144. package/settings/index.d.ts.map +1 -1
  145. package/settings/index.js +1 -0
  146. package/settings/index.js.map +1 -1
  147. package/settings/settings-nav.d.ts.map +1 -1
  148. package/settings/settings-nav.js +2 -1
  149. package/settings/settings-nav.js.map +1 -1
  150. package/src/__tests__/public-api.test.ts +21 -0
  151. package/src/attachment/__tests__/prepare-image.test.ts +12 -6
  152. package/src/composer/ComposerToolbar.tsx +1 -0
  153. package/src/execution/MessageThread.tsx +8 -11
  154. package/src/execution/ResultView.tsx +6 -0
  155. package/src/execution/ToolCallItem.tsx +18 -1
  156. package/src/execution/tool-categories.ts +7 -0
  157. package/src/execution/useFileChangeContent.ts +5 -12
  158. package/src/identity-account/AccountPreferencesPanel.tsx +89 -2
  159. package/src/identity-account/__tests__/AccountPreferencesPanel.test.tsx +112 -0
  160. package/src/identity-account/__tests__/useAccountExecutionDefaults.test.tsx +34 -1
  161. package/src/identity-account/useAccountExecutionDefaults.ts +12 -2
  162. package/src/index.ts +38 -0
  163. package/src/internal/MemoryEnabledRow.tsx +92 -0
  164. package/src/internal/download.ts +29 -0
  165. package/src/library/useExportResource.ts +3 -19
  166. package/src/memory/MemoryListPanel.tsx +532 -0
  167. package/src/memory/MemoryProposalCard.tsx +181 -0
  168. package/src/memory/__tests__/MemoryListPanel.test.tsx +259 -0
  169. package/src/memory/__tests__/MemoryProposalCard.test.tsx +236 -0
  170. package/src/memory/__tests__/memoryHooks.test.tsx +283 -0
  171. package/src/memory/index.ts +24 -0
  172. package/src/memory/memoryGroups.ts +64 -0
  173. package/src/memory/useConfirmMemory.ts +62 -0
  174. package/src/memory/useDeleteMemory.ts +61 -0
  175. package/src/memory/useMemories.ts +66 -0
  176. package/src/memory/useMemory.ts +80 -0
  177. package/src/memory/useRejectMemory.ts +65 -0
  178. package/src/memory/useUpdateMemoryContent.ts +67 -0
  179. package/src/organization/OrgPreferencesPanel.tsx +52 -3
  180. package/src/organization/__tests__/OrgPreferencesPanel.test.tsx +65 -0
  181. package/src/session/AutoApproveIndicator.tsx +45 -0
  182. package/src/session/NewSessionViewer.tsx +17 -0
  183. package/src/session/SessionViewer.tsx +78 -41
  184. package/src/session/TranscriptExportMenu.tsx +78 -0
  185. package/src/session/__tests__/NewSessionViewer.test.tsx +32 -0
  186. package/src/session/__tests__/SessionViewer-autoApprove.test.tsx +244 -0
  187. package/src/session/__tests__/SessionViewer-transcriptExport.test.tsx +189 -0
  188. package/src/session/__tests__/TranscriptExportMenu.test.tsx +97 -0
  189. package/src/session/__tests__/useExportTranscript.test.tsx +187 -0
  190. package/src/session/__tests__/useNewSessionFlow.test.tsx +89 -0
  191. package/src/session/__tests__/useSessionPageFlow.autoApprove.test.tsx +263 -2
  192. package/src/session/facets/SetupTab.tsx +193 -157
  193. package/src/session/facets/UsageTab.tsx +38 -38
  194. package/src/session/facets/index.ts +1 -0
  195. package/src/session/facets/primitives.tsx +169 -0
  196. package/src/session/index.ts +10 -0
  197. package/src/session/useExportTranscript.ts +171 -0
  198. package/src/session/useNewSessionFlow.ts +42 -6
  199. package/src/session/useSessionConversation.ts +10 -16
  200. package/src/session/useSessionExecutions.ts +5 -26
  201. package/src/session/useSessionPageFlow.ts +108 -21
  202. package/src/settings/MemorySection.tsx +45 -0
  203. package/src/settings/index.ts +1 -0
  204. package/src/settings/settings-nav.ts +2 -0
  205. package/src/switch/Switch.tsx +4 -0
  206. package/src/usage/useExportCSV.ts +2 -14
  207. package/src/workflow/__tests__/useWorkflowCanvas.dirty.test.tsx +7 -2
  208. package/src/workflow/__tests__/useWorkflowCanvas.drag.test.tsx +7 -2
  209. package/src/workspace/WorkspaceSurface.tsx +26 -3
  210. package/styles.css +1 -1
  211. package/switch/Switch.d.ts +3 -1
  212. package/switch/Switch.d.ts.map +1 -1
  213. package/switch/Switch.js +2 -2
  214. package/switch/Switch.js.map +1 -1
  215. package/usage/useExportCSV.d.ts.map +1 -1
  216. package/usage/useExportCSV.js +2 -13
  217. package/usage/useExportCSV.js.map +1 -1
  218. package/workspace/WorkspaceSurface.js +11 -2
  219. package/workspace/WorkspaceSurface.js.map +1 -1
@@ -0,0 +1,37 @@
1
+ /** Props for {@link MemoryEnabledRow}. */
2
+ export interface MemoryEnabledRowProps {
3
+ /** Id for the switch control (aria-labelledby wiring). */
4
+ readonly id: string;
5
+ /** The stored flag value (server state, or an optimistic pending value). */
6
+ readonly checked: boolean;
7
+ /** Fired with the next value when the user flips the switch. */
8
+ readonly onToggle: (next: boolean) => void;
9
+ /** `true` while the flip is being saved (switch disabled, spinner shown). */
10
+ readonly saving: boolean;
11
+ /** `true` when the caller may not edit the flag (read-only rendering). */
12
+ readonly readOnly?: boolean;
13
+ /** Error from the last failed flip, or `null`. */
14
+ readonly error: Error | null;
15
+ /**
16
+ * The scope-specific helper copy (DD-006 D6's transparency statement
17
+ * belongs here). Rendered under the title, wired as the switch's
18
+ * accessible description.
19
+ */
20
+ readonly helperText: string;
21
+ }
22
+ /**
23
+ * The `memory_enabled` consent toggle — one row, shared verbatim by
24
+ * {@link OrgPreferencesPanel} and {@link AccountPreferencesPanel} so the
25
+ * two scopes of the double opt-in (DD-006 D1) present identically.
26
+ *
27
+ * INSTANT-APPLY by deliberate exception (UX checkpoint, owner-approved
28
+ * 2026-08-22): both host panels are save-button forms, but a consent bit
29
+ * flipped-and-unsaved that silently reverts on navigation is exactly the
30
+ * failure consent UX must not have — so this row saves the moment it is
31
+ * flipped, matching the Switch primitive's own contract ("instant binary
32
+ * changes") and every peer product's memory toggle. The helper copy
33
+ * states it. Hosts wire `onToggle` to their own full-spec-replace update
34
+ * and pass the in-flight/error state back down.
35
+ */
36
+ export declare function MemoryEnabledRow({ id, checked, onToggle, saving, readOnly, error, helperText, }: MemoryEnabledRowProps): import("react/jsx-runtime").JSX.Element;
37
+ //# sourceMappingURL=MemoryEnabledRow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryEnabledRow.d.ts","sourceRoot":"","sources":["../../src/internal/MemoryEnabledRow.tsx"],"names":[],"mappings":"AAOA,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,gEAAgE;IAChE,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,EAAE,EACF,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAgB,EAChB,KAAK,EACL,UAAU,GACX,EAAE,qBAAqB,2CAwCvB"}
@@ -0,0 +1,25 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { getUserMessage } from "@stigmer/sdk";
4
+ import { Switch } from "../switch/Switch.js";
5
+ import { SpinnerIcon } from "./SpinnerIcon.js";
6
+ /**
7
+ * The `memory_enabled` consent toggle — one row, shared verbatim by
8
+ * {@link OrgPreferencesPanel} and {@link AccountPreferencesPanel} so the
9
+ * two scopes of the double opt-in (DD-006 D1) present identically.
10
+ *
11
+ * INSTANT-APPLY by deliberate exception (UX checkpoint, owner-approved
12
+ * 2026-08-22): both host panels are save-button forms, but a consent bit
13
+ * flipped-and-unsaved that silently reverts on navigation is exactly the
14
+ * failure consent UX must not have — so this row saves the moment it is
15
+ * flipped, matching the Switch primitive's own contract ("instant binary
16
+ * changes") and every peer product's memory toggle. The helper copy
17
+ * states it. Hosts wire `onToggle` to their own full-spec-replace update
18
+ * and pass the in-flight/error state back down.
19
+ */
20
+ export function MemoryEnabledRow({ id, checked, onToggle, saving, readOnly = false, error, helperText, }) {
21
+ const titleId = `${id}-title`;
22
+ const descriptionId = `${id}-description`;
23
+ return (_jsxs("div", { className: "stg:space-y-1", children: [_jsxs("div", { className: "stg:flex stg:items-start stg:justify-between stg:gap-3", children: [_jsxs("div", { className: "stg:min-w-0 stg:flex-1", children: [_jsx("span", { id: titleId, className: "stg:block stg:text-xs stg:font-medium stg:text-foreground", children: "Memory" }), _jsx("p", { id: descriptionId, className: "stg:text-[0.65rem] stg:leading-snug stg:text-muted-foreground", children: helperText })] }), _jsxs("span", { className: "stg:flex stg:shrink-0 stg:items-center stg:gap-1.5", children: [saving && _jsx(SpinnerIcon, { size: 12 }), _jsx(Switch, { id: id, checked: checked, onCheckedChange: onToggle, disabled: saving || readOnly, "aria-labelledby": titleId, "aria-describedby": descriptionId })] })] }), error && (_jsx("p", { className: "stg:text-[0.65rem] stg:text-destructive", role: "alert", children: getUserMessage(error) }))] }));
24
+ }
25
+ //# sourceMappingURL=MemoryEnabledRow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryEnabledRow.js","sourceRoot":"","sources":["../../src/internal/MemoryEnabledRow.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwB/C;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAC/B,EAAE,EACF,OAAO,EACP,QAAQ,EACR,MAAM,EACN,QAAQ,GAAG,KAAK,EAChB,KAAK,EACL,UAAU,GACY;IACtB,MAAM,OAAO,GAAG,GAAG,EAAE,QAAQ,CAAC;IAC9B,MAAM,aAAa,GAAG,GAAG,EAAE,cAAc,CAAC;IAE1C,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAC5B,eAAK,SAAS,EAAC,wDAAwD,aACrE,eAAK,SAAS,EAAC,wBAAwB,aACrC,eACE,EAAE,EAAE,OAAO,EACX,SAAS,EAAC,2DAA2D,uBAGhE,EACP,YACE,EAAE,EAAE,aAAa,EACjB,SAAS,EAAC,+DAA+D,YAExE,UAAU,GACT,IACA,EACN,gBAAM,SAAS,EAAC,oDAAoD,aACjE,MAAM,IAAI,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,GAAI,EACpC,KAAC,MAAM,IACL,EAAE,EAAE,EAAE,EACN,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,QAAQ,EACzB,QAAQ,EAAE,MAAM,IAAI,QAAQ,qBACX,OAAO,sBACN,aAAa,GAC/B,IACG,IACH,EACL,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,yCAAyC,EAAC,IAAI,EAAC,OAAO,YAChE,cAAc,CAAC,KAAK,CAAC,GACpB,CACL,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Triggers a browser download of `content` as a UTF-8 text file.
3
+ *
4
+ * @param mimeType - Bare MIME type (e.g. `"text/markdown"`); the UTF-8
5
+ * charset is appended here so callers cannot drift on it.
6
+ */
7
+ export declare function downloadTextFile(content: string, filename: string, mimeType: string): void;
8
+ //# sourceMappingURL=download.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/internal/download.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,IAAI,CAWN"}
@@ -0,0 +1,25 @@
1
+ // Client-side file download via Blob + object URL + anchor click.
2
+ //
3
+ // The one home of this routine — useExportResource, useExportCSV, and
4
+ // useExportTranscript all download through it. The pattern is proven inside
5
+ // the desktop (Tauri) webview as well as browsers, so SDK components can rely
6
+ // on it without a per-host seam.
7
+ /**
8
+ * Triggers a browser download of `content` as a UTF-8 text file.
9
+ *
10
+ * @param mimeType - Bare MIME type (e.g. `"text/markdown"`); the UTF-8
11
+ * charset is appended here so callers cannot drift on it.
12
+ */
13
+ export function downloadTextFile(content, filename, mimeType) {
14
+ const blob = new Blob([content], { type: `${mimeType};charset=utf-8;` });
15
+ const url = URL.createObjectURL(blob);
16
+ const link = document.createElement("a");
17
+ link.href = url;
18
+ link.download = filename;
19
+ link.style.display = "none";
20
+ document.body.appendChild(link);
21
+ link.click();
22
+ document.body.removeChild(link);
23
+ URL.revokeObjectURL(url);
24
+ }
25
+ //# sourceMappingURL=download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/internal/download.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,sEAAsE;AACtE,4EAA4E;AAC5E,8EAA8E;AAC9E,iCAAiC;AAEjC;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAe,EACf,QAAgB,EAChB,QAAgB;IAEhB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,QAAQ,iBAAiB,EAAE,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;IAChB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACzB,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;IACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useExportResource.d.ts","sourceRoot":"","sources":["../../src/library/useExportResource.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wDAAwD,CAAC;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uDAAuD,CAAC;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uDAAuD,CAAC;AAUtF,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;IAC/D,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CACnE;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,QAAQ,GACT,EAAE,wBAAwB,GAAG,uBAAuB,CAsDpD"}
1
+ {"version":3,"file":"useExportResource.d.ts","sourceRoot":"","sources":["../../src/library/useExportResource.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oDAAoD,CAAC;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wDAAwD,CAAC;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uDAAuD,CAAC;AACtF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uDAAuD,CAAC;AAWtF,6CAA6C;AAC7C,MAAM,WAAW,wBAAwB;IACvC,+DAA+D;IAC/D,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC;IAC/D,mEAAmE;IACnE,QAAQ,CAAC,QAAQ,EAAE,KAAK,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CACnE;AAED,iDAAiD;AACjD,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAClC,+CAA+C;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;IAClC,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6EAA6E;IAC7E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,EACJ,QAAQ,GACT,EAAE,wBAAwB,GAAG,uBAAuB,CAsDpD"}
@@ -3,6 +3,7 @@ import { useCallback, useMemo } from "react";
3
3
  import { parse as parseYaml } from "yaml";
4
4
  import { serializeManifest } from "@stigmer/sdk";
5
5
  import { toast } from "../feedback/toast.js";
6
+ import { downloadTextFile } from "../internal/download.js";
6
7
  import { useCopyFeedback } from "../internal/useCopyFeedback.js";
7
8
  import { serializeWorkflowYaml } from "../workflow/serialize-workflow-yaml.js";
8
9
  // ---------------------------------------------------------------------------
@@ -86,28 +87,13 @@ export function useExportResource({ kind, resource, }) {
86
87
  const downloadYaml = useCallback(() => {
87
88
  if (!yaml)
88
89
  return;
89
- downloadFile(yaml, `${slug}.yaml`, "text/yaml");
90
+ downloadTextFile(yaml, `${slug}.yaml`, "text/yaml");
90
91
  }, [yaml, slug]);
91
92
  const downloadJson = useCallback(() => {
92
93
  if (!json)
93
94
  return;
94
- downloadFile(json, `${slug}.json`, "application/json");
95
+ downloadTextFile(json, `${slug}.json`, "application/json");
95
96
  }, [json, slug]);
96
97
  return useMemo(() => ({ copyYaml, copyJson, downloadYaml, downloadJson, yaml, json }), [copyYaml, copyJson, downloadYaml, downloadJson, yaml, json]);
97
98
  }
98
- // ---------------------------------------------------------------------------
99
- // File download
100
- // ---------------------------------------------------------------------------
101
- function downloadFile(content, filename, mimeType) {
102
- const blob = new Blob([content], { type: `${mimeType};charset=utf-8;` });
103
- const url = URL.createObjectURL(blob);
104
- const link = document.createElement("a");
105
- link.href = url;
106
- link.download = filename;
107
- link.style.display = "none";
108
- document.body.appendChild(link);
109
- link.click();
110
- document.body.removeChild(link);
111
- URL.revokeObjectURL(url);
112
- }
113
99
  //# sourceMappingURL=useExportResource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useExportResource.js","sourceRoot":"","sources":["../../src/library/useExportResource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useExportResource.js","sourceRoot":"","sources":["../../src/library/useExportResource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /** Props for {@link MemoryListPanel}. */
2
+ export interface MemoryListPanelProps {
3
+ /** Organization whose memories to show. */
4
+ readonly org: string;
5
+ /** Additional CSS class names for the root container. */
6
+ readonly className?: string;
7
+ /**
8
+ * Reference instant for relative timestamps. Defaults to the live
9
+ * clock. **Deterministic hosts (documentation embeds, video export)
10
+ * must pass a frozen instant.**
11
+ */
12
+ readonly now?: Date;
13
+ }
14
+ /**
15
+ * Lists everything the platform remembers about the caller in an
16
+ * organization, grouped pending-proposals-first (DD-005 D4): proposals
17
+ * awaiting a decision, then confirmed facts, then rejected proposals
18
+ * kept for audit.
19
+ *
20
+ * Every fact is shown VERBATIM — the exact stored text is what future
21
+ * prompts inject, byte for byte, so the review surface never paraphrases
22
+ * (DD-005 D6). Provenance renders beside each agent-proposed fact.
23
+ * Actions per state: confirm/reject/delete on proposals (reject is
24
+ * one-click — no confirmation dialog), edit/delete on confirmed facts,
25
+ * delete on rejected ones. Delete asks inline; it works in any state.
26
+ *
27
+ * All visual properties flow through `--stgm-*` design tokens.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <MemoryListPanel org="acme" />
32
+ * ```
33
+ */
34
+ export declare function MemoryListPanel({ org, className, now }: MemoryListPanelProps): import("react/jsx-runtime").JSX.Element;
35
+ //# sourceMappingURL=MemoryListPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryListPanel.d.ts","sourceRoot":"","sources":["../../src/memory/MemoryListPanel.tsx"],"names":[],"mappings":"AAqBA,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,oBAAoB,2CAiG5E"}
@@ -0,0 +1,141 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage } from "@stigmer/sdk";
6
+ import { timestampDate } from "@bufbuild/protobuf/wkt";
7
+ import { MemoryLifecycleState } from "@stigmer/protos/ai/stigmer/agentic/memory/v1/enum_pb";
8
+ import { formatRelativeTime } from "../activity/format-relative-time.js";
9
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
10
+ import { formatMemoryProvenance, groupMemoriesByLifecycle } from "./memoryGroups.js";
11
+ import { useConfirmMemory } from "./useConfirmMemory.js";
12
+ import { useDeleteMemory } from "./useDeleteMemory.js";
13
+ import { useMemories } from "./useMemories.js";
14
+ import { useRejectMemory } from "./useRejectMemory.js";
15
+ import { useUpdateMemoryContent } from "./useUpdateMemoryContent.js";
16
+ /**
17
+ * Lists everything the platform remembers about the caller in an
18
+ * organization, grouped pending-proposals-first (DD-005 D4): proposals
19
+ * awaiting a decision, then confirmed facts, then rejected proposals
20
+ * kept for audit.
21
+ *
22
+ * Every fact is shown VERBATIM — the exact stored text is what future
23
+ * prompts inject, byte for byte, so the review surface never paraphrases
24
+ * (DD-005 D6). Provenance renders beside each agent-proposed fact.
25
+ * Actions per state: confirm/reject/delete on proposals (reject is
26
+ * one-click — no confirmation dialog), edit/delete on confirmed facts,
27
+ * delete on rejected ones. Delete asks inline; it works in any state.
28
+ *
29
+ * All visual properties flow through `--stgm-*` design tokens.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <MemoryListPanel org="acme" />
34
+ * ```
35
+ */
36
+ export function MemoryListPanel({ org, className, now }) {
37
+ const { memories, isLoading, error, refetch } = useMemories(org);
38
+ // At most one row is mid-interaction at a time — the ApiKeyListPanel
39
+ // single-confirmation posture, extended with an editing mode.
40
+ const [rowState, setRowState] = useState({ mode: "idle" });
41
+ const resetRow = useCallback(() => setRowState({ mode: "idle" }), []);
42
+ const handleChanged = useCallback(() => {
43
+ setRowState({ mode: "idle" });
44
+ refetch();
45
+ }, [refetch]);
46
+ if (isLoading) {
47
+ return (_jsx("div", { className: cn("stg:space-y-2", className), "aria-busy": "true", "aria-label": "Loading memories", children: Array.from({ length: 2 }, (_, i) => (_jsx("div", { className: "stg:bg-muted-subtle stg:h-14 stg:animate-pulse stg:rounded-lg" }, i))) }));
48
+ }
49
+ if (error) {
50
+ return (_jsx("p", { className: cn("stg:text-destructive stg:text-xs", className), role: "alert", children: getUserMessage(error) }));
51
+ }
52
+ if (memories.length === 0) {
53
+ return (_jsx("p", { className: cn("stg:text-muted-foreground stg:py-4 stg:text-center stg:text-xs", className), children: "Nothing remembered yet. When an agent proposes a fact worth keeping, it appears here for your decision." }));
54
+ }
55
+ const groups = groupMemoriesByLifecycle(memories);
56
+ return (_jsxs("div", { className: cn("stg:space-y-6", className), children: [groups.proposed.length > 0 && (_jsx(MemoryGroup, { heading: "Pending proposals", description: "Facts agents proposed to remember. Nothing is stored in your sessions until you confirm it.", memories: groups.proposed, rowState: rowState, setRowState: setRowState, onChanged: handleChanged, onCancel: resetRow, now: now })), groups.confirmed.length > 0 && (_jsx(MemoryGroup, { heading: "Remembered", description: "Confirmed facts, shared with agents in your future sessions.", memories: groups.confirmed, rowState: rowState, setRowState: setRowState, onChanged: handleChanged, onCancel: resetRow, now: now })), groups.rejected.length > 0 && (_jsx(MemoryGroup, { heading: "Rejected", description: "Proposals you declined, kept for reference. Delete them to clear the record.", memories: groups.rejected, rowState: rowState, setRowState: setRowState, onChanged: handleChanged, onCancel: resetRow, now: now }))] }));
57
+ }
58
+ function MemoryGroup({ heading, description, memories, rowState, setRowState, onChanged, onCancel, now, }) {
59
+ return (_jsxs("div", { children: [_jsx("h3", { className: "stg:text-foreground stg:text-xs stg:font-semibold", children: heading }), _jsx("p", { className: "stg:text-muted-foreground stg:mb-2 stg:text-xs", children: description }), _jsx("div", { className: "stg:space-y-2", role: "list", "aria-label": heading, children: memories.map((memory) => {
60
+ const id = memory.metadata?.id ?? "";
61
+ return (_jsx(MemoryRow, { memory: memory, now: now, mode: rowState.mode !== "idle" && rowState.id === id
62
+ ? rowState.mode
63
+ : "idle", onStartDelete: () => setRowState({ mode: "confirming-delete", id }), onStartEdit: () => setRowState({ mode: "editing", id }), onCancel: onCancel, onChanged: onChanged }, id));
64
+ }) })] }));
65
+ }
66
+ function MemoryRow({ memory, now, mode, onStartDelete, onStartEdit, onCancel, onChanged, }) {
67
+ const id = memory.metadata?.id ?? "";
68
+ const content = memory.spec?.content ?? "";
69
+ const state = memory.status?.lifecycleState;
70
+ const provenance = formatMemoryProvenance(memory);
71
+ const stateChangedAt = memory.status?.stateChangedAt;
72
+ const { confirmMemory, isConfirming, error: confirmError } = useConfirmMemory();
73
+ const { rejectMemory, isRejecting, error: rejectError } = useRejectMemory();
74
+ const { deleteMemory, isDeleting, error: deleteError } = useDeleteMemory();
75
+ const actionError = confirmError ?? rejectError ?? deleteError;
76
+ const isBusy = isConfirming || isRejecting || isDeleting;
77
+ const act = useCallback(async (action) => {
78
+ try {
79
+ await action(id);
80
+ onChanged();
81
+ }
82
+ catch {
83
+ // error state is surfaced via the hooks
84
+ }
85
+ }, [id, onChanged]);
86
+ if (mode === "editing") {
87
+ return (_jsx(MemoryEditRow, { memory: memory, onCancel: onCancel, onSaved: onChanged }));
88
+ }
89
+ if (mode === "confirming-delete") {
90
+ return (_jsxs("div", { role: "listitem", className: "stg:flex stg:items-center stg:justify-between stg:gap-3 stg:rounded-lg stg:border stg:border-destructive/30 stg:bg-destructive-subtle stg:px-3 stg:py-2.5", children: [_jsxs("div", { className: "stg:min-w-0 stg:flex-1", children: [_jsxs("p", { className: "stg:text-xs stg:text-foreground", children: ["Forget this permanently? ", _jsx("q", { className: "stg:italic", children: content })] }), deleteError && (_jsx("p", { className: "stg:mt-0.5 stg:text-[0.65rem] stg:text-destructive", children: getUserMessage(deleteError) }))] }), _jsxs("div", { className: "stg:flex stg:shrink-0 stg:items-center stg:gap-1.5", children: [_jsxs("button", { type: "button", onClick: () => void act(deleteMemory), disabled: isDeleting, className: cn("stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium", "stg:bg-destructive stg:text-destructive-foreground stg:hover:bg-destructive-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: [isDeleting && _jsx(SpinnerIcon, { size: 12 }), "Delete"] }), _jsx("button", { type: "button", onClick: onCancel, disabled: isDeleting, className: cn("stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs", "stg:text-muted-foreground stg:hover:text-foreground stg:hover:bg-accent-hover", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: "Cancel" })] })] }));
91
+ }
92
+ return (_jsx("div", { role: "listitem", className: "stg:rounded-lg stg:border stg:border-border-muted stg:px-3 stg:py-2.5 stg:hover:border-border stg:transition-colors", children: _jsxs("div", { className: "stg:flex stg:items-start stg:justify-between stg:gap-3", children: [_jsxs("div", { className: "stg:min-w-0 stg:flex-1", children: [_jsx("p", { className: "stg:text-sm stg:text-foreground stg:whitespace-pre-wrap", children: content }), _jsxs("p", { className: "stg:mt-1 stg:text-xs stg:text-muted-foreground", children: [provenance ? `${provenance} · ` : "", formatStateStamp(state, stateChangedAt ? timestampDate(stateChangedAt) : undefined, now)] }), actionError && (_jsx("p", { className: "stg:mt-0.5 stg:text-[0.65rem] stg:text-destructive", role: "alert", children: getUserMessage(actionError) }))] }), _jsxs("div", { className: "stg:flex stg:shrink-0 stg:items-center stg:gap-1.5", children: [state === MemoryLifecycleState.lifecycle_state_confirmed && (_jsx(RowButton, { label: `Edit memory: ${content}`, onClick: onStartEdit, disabled: isBusy, children: "Edit" })), isProposed(state) && (_jsxs(_Fragment, { children: [_jsxs(RowButton, { label: `Confirm memory: ${content}`, onClick: () => void act(confirmMemory), disabled: isBusy, emphasis: "primary", children: [isConfirming && _jsx(SpinnerIcon, { size: 12 }), "Confirm"] }), _jsxs(RowButton, { label: `Reject memory: ${content}`, onClick: () => void act(rejectMemory), disabled: isBusy, children: [isRejecting && _jsx(SpinnerIcon, { size: 12 }), "Reject"] })] })), _jsx("button", { type: "button", onClick: onStartDelete, disabled: isBusy, "aria-label": `Delete memory: ${content}`, className: cn("stg:shrink-0 stg:rounded stg:p-1", "stg:text-muted-foreground stg:hover:text-destructive stg:hover:bg-destructive-subtle", "stg:transition-colors stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: _jsx(TrashIcon, {}) })] })] }) }));
93
+ }
94
+ // MemoryEditRow edits the fact text in place — the one field the
95
+ // subject owns. Saving maps the loaded record through the generated
96
+ // update mapper (wipe-safe) and overrides only content.
97
+ function MemoryEditRow({ memory, onCancel, onSaved, }) {
98
+ const [draft, setDraft] = useState(memory.spec?.content ?? "");
99
+ const { updateContent, isUpdating, error } = useUpdateMemoryContent();
100
+ const trimmed = draft.trim();
101
+ const canSave = trimmed.length > 0 && trimmed.length <= 500 && !isUpdating;
102
+ const handleSave = async () => {
103
+ try {
104
+ await updateContent(memory, trimmed);
105
+ onSaved();
106
+ }
107
+ catch {
108
+ // error state is surfaced via the hook
109
+ }
110
+ };
111
+ return (_jsxs("div", { role: "listitem", className: "stg:rounded-lg stg:border stg:border-border stg:px-3 stg:py-2.5", children: [_jsx("textarea", { value: draft, onChange: (e) => setDraft(e.target.value), rows: 2, maxLength: 500, "aria-label": "Edit memory text", className: cn("stg:w-full stg:resize-y stg:rounded-md stg:border stg:border-input stg:bg-background stg:px-2 stg:py-1.5 stg:text-sm stg:text-foreground", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring") }), _jsxs("div", { className: "stg:mt-1.5 stg:flex stg:items-center stg:justify-between", children: [_jsxs("span", { className: "stg:text-[0.65rem] stg:text-muted-foreground", children: [trimmed.length, "/500"] }), _jsxs("div", { className: "stg:flex stg:items-center stg:gap-1.5", children: [_jsxs(RowButton, { label: "Save memory text", onClick: () => void handleSave(), disabled: !canSave, emphasis: "primary", children: [isUpdating && _jsx(SpinnerIcon, { size: 12 }), "Save"] }), _jsx(RowButton, { label: "Cancel editing", onClick: onCancel, disabled: isUpdating, children: "Cancel" })] })] }), error && (_jsx("p", { className: "stg:mt-1 stg:text-[0.65rem] stg:text-destructive", role: "alert", children: getUserMessage(error) }))] }));
112
+ }
113
+ // ---------------------------------------------------------------------------
114
+ // Presentation helpers (internal)
115
+ // ---------------------------------------------------------------------------
116
+ function isProposed(state) {
117
+ // The zero unspecified state should not exist (create stamps
118
+ // proposed); offering the decision actions is the safe rendering.
119
+ return (state === undefined ||
120
+ state === MemoryLifecycleState.lifecycle_state_unspecified ||
121
+ state === MemoryLifecycleState.lifecycle_state_proposed);
122
+ }
123
+ function formatStateStamp(state, changedAt, now) {
124
+ const verb = state === MemoryLifecycleState.lifecycle_state_confirmed
125
+ ? "Confirmed"
126
+ : state === MemoryLifecycleState.lifecycle_state_rejected
127
+ ? "Rejected"
128
+ : "Proposed";
129
+ if (!changedAt)
130
+ return verb;
131
+ return `${verb} ${formatRelativeTime(changedAt, now)}`;
132
+ }
133
+ function RowButton({ label, onClick, disabled, emphasis, children, }) {
134
+ return (_jsx("button", { type: "button", "aria-label": label, onClick: onClick, disabled: disabled, className: cn("stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2 stg:py-1 stg:text-xs stg:font-medium", emphasis === "primary"
135
+ ? "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover"
136
+ : "stg:border stg:border-input stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: children }));
137
+ }
138
+ function TrashIcon() {
139
+ return (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M2.5 4h11M5.5 4V2.5a1 1 0 0 1 1-1h3a1 1 0 0 1 1 1V4" }), _jsx("path", { d: "M12.5 4v9a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1V4" }), _jsx("line", { x1: "6.5", y1: "7", x2: "6.5", y2: "11" }), _jsx("line", { x1: "9.5", y1: "7", x2: "9.5", y2: "11" })] }));
140
+ }
141
+ //# sourceMappingURL=MemoryListPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryListPanel.js","sourceRoot":"","sources":["../../src/memory/MemoryListPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /** Props for {@link MemoryProposalCardBody}. */
2
+ export interface MemoryProposalCardBodyProps {
3
+ /** The proposed memory's resource id (from the remember tool's answer). */
4
+ readonly memoryId: string;
5
+ /**
6
+ * The proposed fact as frozen in the tool result — shown VERBATIM
7
+ * (DD-005 D6: what you confirm is what future prompts inject, byte for
8
+ * byte). The live record's text supersedes it once fetched, so an edit
9
+ * made on the memory page is reflected here too.
10
+ */
11
+ readonly fact: string;
12
+ /** Additional CSS class names for the root container. */
13
+ readonly className?: string;
14
+ }
15
+ /**
16
+ * The in-session consent surface for a memory proposal (DD-005 D4): the
17
+ * body of a `remember` tool call's row in the message thread, rendering
18
+ * the proposed fact verbatim with one-click Confirm / Reject actions.
19
+ *
20
+ * Lifecycle honesty across surfaces and reloads: the tool result this
21
+ * renders from is FROZEN at capture time, so the card fetches the
22
+ * record's current state ({@link useMemory}) — a proposal decided from
23
+ * the memory settings page (or another device) shows its decided state
24
+ * here instead of stale action buttons, and a deleted record reads
25
+ * "no longer stored" rather than failing. Rejection is one click, no
26
+ * confirmation dialog (the T04 Cursor lesson: expensive review teaches
27
+ * users to ignore the queue); deletion-with-confirmation lives on the
28
+ * memory page, the catch-up surface.
29
+ *
30
+ * Borderless by design (the {@link ApprovalCardBody} posture): the tool
31
+ * row's card owns the chrome, this component owns only the body. All
32
+ * visual properties flow through `--stgm-*` design tokens.
33
+ */
34
+ export declare function MemoryProposalCardBody({ memoryId, fact, className, }: MemoryProposalCardBodyProps): import("react/jsx-runtime").JSX.Element;
35
+ //# sourceMappingURL=MemoryProposalCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryProposalCard.d.ts","sourceRoot":"","sources":["../../src/memory/MemoryProposalCard.tsx"],"names":[],"mappings":"AAaA,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,IAAI,EACJ,SAAS,GACV,EAAE,2BAA2B,2CAgG7B"}
@@ -0,0 +1,73 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useCallback, useState } from "react";
4
+ import { cn } from "@stigmer/theme";
5
+ import { getUserMessage } from "@stigmer/sdk";
6
+ import { MemoryLifecycleState } from "@stigmer/protos/ai/stigmer/agentic/memory/v1/enum_pb";
7
+ import { SpinnerIcon } from "../internal/SpinnerIcon.js";
8
+ import { formatMemoryProvenance } from "./memoryGroups.js";
9
+ import { useConfirmMemory } from "./useConfirmMemory.js";
10
+ import { useMemory } from "./useMemory.js";
11
+ import { useRejectMemory } from "./useRejectMemory.js";
12
+ /**
13
+ * The in-session consent surface for a memory proposal (DD-005 D4): the
14
+ * body of a `remember` tool call's row in the message thread, rendering
15
+ * the proposed fact verbatim with one-click Confirm / Reject actions.
16
+ *
17
+ * Lifecycle honesty across surfaces and reloads: the tool result this
18
+ * renders from is FROZEN at capture time, so the card fetches the
19
+ * record's current state ({@link useMemory}) — a proposal decided from
20
+ * the memory settings page (or another device) shows its decided state
21
+ * here instead of stale action buttons, and a deleted record reads
22
+ * "no longer stored" rather than failing. Rejection is one click, no
23
+ * confirmation dialog (the T04 Cursor lesson: expensive review teaches
24
+ * users to ignore the queue); deletion-with-confirmation lives on the
25
+ * memory page, the catch-up surface.
26
+ *
27
+ * Borderless by design (the {@link ApprovalCardBody} posture): the tool
28
+ * row's card owns the chrome, this component owns only the body. All
29
+ * visual properties flow through `--stgm-*` design tokens.
30
+ */
31
+ export function MemoryProposalCardBody({ memoryId, fact, className, }) {
32
+ const { memory, isLoading, notFound, error: fetchError } = useMemory(memoryId);
33
+ const { confirmMemory, isConfirming, error: confirmError } = useConfirmMemory();
34
+ const { rejectMemory, isRejecting, error: rejectError } = useRejectMemory();
35
+ // The card's own decision lands here so the settled state renders
36
+ // immediately — the fetch stays the authority for every OTHER writer
37
+ // (the memory page, another device), read once on mount.
38
+ const [decided, setDecided] = useState(null);
39
+ const act = useCallback(async (action) => {
40
+ try {
41
+ setDecided(await action(memoryId));
42
+ }
43
+ catch {
44
+ // Error state is surfaced via the hooks.
45
+ }
46
+ }, [memoryId]);
47
+ const record = decided ?? memory;
48
+ const state = record?.status?.lifecycleState;
49
+ // The live record's text supersedes the frozen tool result (the subject
50
+ // may have edited the fact on the memory page before deciding).
51
+ const displayFact = record?.spec?.content || fact;
52
+ const provenance = record ? formatMemoryProvenance(record) : null;
53
+ const actionError = confirmError ?? rejectError;
54
+ const isBusy = isConfirming || isRejecting;
55
+ const showActions = !notFound &&
56
+ fetchError == null &&
57
+ (state === undefined ||
58
+ state === MemoryLifecycleState.lifecycle_state_unspecified ||
59
+ state === MemoryLifecycleState.lifecycle_state_proposed);
60
+ return (_jsxs("div", { className: cn("stg:space-y-2", className), "data-cursor-target": "memory-proposal", children: [_jsx("p", { className: "stg:text-sm stg:text-foreground stg:whitespace-pre-wrap", children: displayFact }), _jsxs("p", { className: "stg:text-xs stg:text-muted-foreground", children: [provenance ? `${provenance} · ` : "", "Proposed to remember \u2014 nothing is stored in your sessions until you confirm it."] }), notFound ? (_jsx("p", { className: "stg:text-xs stg:text-muted-foreground", role: "status", children: "No longer stored." })) : fetchError ? (
61
+ // The fact stays visible (it is frozen in the tool result); only
62
+ // the actionable state is unavailable. Decide from the memory
63
+ // page instead — the catch-up surface.
64
+ _jsx("p", { className: "stg:text-xs stg:text-muted-foreground", role: "status", children: "Couldn't load this proposal's current state \u2014 review it in Settings \u2192 Memory." })) : showActions ? (_jsxs("div", { className: "stg:flex stg:items-center stg:gap-1.5", children: [_jsxs(ChipButton, { label: `Confirm memory: ${displayFact}`, onClick: () => void act(confirmMemory), disabled: isBusy || isLoading, emphasis: "primary", children: [isConfirming && _jsx(SpinnerIcon, { size: 12 }), "Confirm"] }), _jsxs(ChipButton, { label: `Reject memory: ${displayFact}`, onClick: () => void act(rejectMemory), disabled: isBusy || isLoading, children: [isRejecting && _jsx(SpinnerIcon, { size: 12 }), "Reject"] })] })) : (_jsx("p", { className: "stg:text-xs stg:text-muted-foreground", role: "status", children: state === MemoryLifecycleState.lifecycle_state_confirmed
65
+ ? "Confirmed — recalled in your future sessions."
66
+ : "Rejected — not stored." })), actionError && (_jsx("p", { className: "stg:text-[0.65rem] stg:text-destructive", role: "alert", children: getUserMessage(actionError) }))] }));
67
+ }
68
+ function ChipButton({ label, onClick, disabled, emphasis, children, }) {
69
+ return (_jsx("button", { type: "button", "aria-label": label, onClick: onClick, disabled: disabled, className: cn("stg:inline-flex stg:items-center stg:gap-1 stg:rounded-md stg:px-2.5 stg:py-1 stg:text-xs stg:font-medium", emphasis === "primary"
70
+ ? "stg:bg-primary stg:text-primary-foreground stg:hover:bg-primary-hover"
71
+ : "stg:border stg:border-input stg:bg-background stg:text-foreground stg:hover:bg-accent stg:hover:text-accent-foreground", "stg:focus-visible:outline-none stg:focus-visible:ring-2 stg:focus-visible:ring-ring", "stg:disabled:pointer-events-none stg:disabled:opacity-50"), children: children }));
72
+ }
73
+ //# sourceMappingURL=MemoryProposalCard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryProposalCard.js","sourceRoot":"","sources":["../../src/memory/MemoryProposalCard.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export { MemoryListPanel, type MemoryListPanelProps } from "./MemoryListPanel.js";
2
+ export { MemoryProposalCardBody, type MemoryProposalCardBodyProps, } from "./MemoryProposalCard.js";
3
+ export { groupMemoriesByLifecycle, formatMemoryProvenance, type MemoryGroups, } from "./memoryGroups.js";
4
+ export { useMemories, type UseMemoriesReturn } from "./useMemories.js";
5
+ export { useMemory, type UseMemoryReturn } from "./useMemory.js";
6
+ export { useConfirmMemory, type UseConfirmMemoryReturn } from "./useConfirmMemory.js";
7
+ export { useRejectMemory, type UseRejectMemoryReturn } from "./useRejectMemory.js";
8
+ export { useDeleteMemory, type UseDeleteMemoryReturn } from "./useDeleteMemory.js";
9
+ export { useUpdateMemoryContent, type UseUpdateMemoryContentReturn, } from "./useUpdateMemoryContent.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAClF,OAAO,EACL,sBAAsB,EACtB,KAAK,2BAA2B,GACjC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACnF,OAAO,EACL,sBAAsB,EACtB,KAAK,4BAA4B,GAClC,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,14 @@
1
+ // Memory — agent-proposed, user-confirmed facts (stigmer/stigmer#293
2
+ // Phase 2). The record is the trust surface over the recall seam: every
3
+ // fact is individually reviewable, editable, and deletable, and nothing
4
+ // is recalled until its subject confirms it.
5
+ export { MemoryListPanel } from "./MemoryListPanel.js";
6
+ export { MemoryProposalCardBody, } from "./MemoryProposalCard.js";
7
+ export { groupMemoriesByLifecycle, formatMemoryProvenance, } from "./memoryGroups.js";
8
+ export { useMemories } from "./useMemories.js";
9
+ export { useMemory } from "./useMemory.js";
10
+ export { useConfirmMemory } from "./useConfirmMemory.js";
11
+ export { useRejectMemory } from "./useRejectMemory.js";
12
+ export { useDeleteMemory } from "./useDeleteMemory.js";
13
+ export { useUpdateMemoryContent, } from "./useUpdateMemoryContent.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,wEAAwE;AACxE,wEAAwE;AACxE,6CAA6C;AAE7C,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EACL,sBAAsB,GAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GAEvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAA0B,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAwB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAA+B,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,eAAe,EAA8B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAE,eAAe,EAA8B,MAAM,sBAAsB,CAAC;AACnF,OAAO,EACL,sBAAsB,GAEvB,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Memory } from "@stigmer/protos/ai/stigmer/agentic/memory/v1/api_pb";
2
+ /** Memories bucketed by consent lifecycle, pending proposals first. */
3
+ export interface MemoryGroups {
4
+ /** Awaiting the caller's decision — the catch-up queue. */
5
+ readonly proposed: readonly Memory[];
6
+ /** Confirmed facts, recalled into future sessions. */
7
+ readonly confirmed: readonly Memory[];
8
+ /** Rejected proposals, kept for audit until deleted. */
9
+ readonly rejected: readonly Memory[];
10
+ }
11
+ /**
12
+ * Buckets memories by lifecycle state for the pending-proposals-first
13
+ * page layout (DD-005 D4: the memory page is the catch-up surface for
14
+ * proposals scrolled past in session). Input order (newest first from
15
+ * the server) is preserved inside each bucket.
16
+ *
17
+ * A record in the zero `unspecified` state should not exist (create
18
+ * stamps `proposed`); it is bucketed with proposals so a decision
19
+ * surface is always offered rather than hiding the record.
20
+ */
21
+ export declare function groupMemoriesByLifecycle(memories: readonly Memory[]): MemoryGroups;
22
+ /**
23
+ * One-line provenance attribution for a memory, or `null` when the
24
+ * record has none (created directly through the API, not by an agent).
25
+ *
26
+ * Trust requires "where did this come from" beside every fact (DD-004);
27
+ * agent/session display names are not resolvable from the record alone,
28
+ * so ids are shown — they are what links back to the source surfaces.
29
+ */
30
+ export declare function formatMemoryProvenance(memory: Memory): string | null;
31
+ //# sourceMappingURL=memoryGroups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memoryGroups.d.ts","sourceRoot":"","sources":["../../src/memory/memoryGroups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qDAAqD,CAAC;AAGlF,uEAAuE;AACvE,MAAM,WAAW,YAAY;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,wDAAwD;IACxD,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,YAAY,CAoBd;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQpE"}