@stigmer/react 3.0.9-dev.20260615145121 → 3.0.9-dev.20260615153829

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 (52) hide show
  1. package/execution/ArtifactContentRenderer.d.ts.map +1 -1
  2. package/execution/ArtifactContentRenderer.js +7 -3
  3. package/execution/ArtifactContentRenderer.js.map +1 -1
  4. package/execution/ArtifactPreviewModal.d.ts +3 -3
  5. package/execution/ArtifactPreviewModal.js +4 -4
  6. package/execution/ArtifactPreviewModal.js.map +1 -1
  7. package/execution/MessageEntry.d.ts.map +1 -1
  8. package/execution/MessageEntry.js +7 -3
  9. package/execution/MessageEntry.js.map +1 -1
  10. package/execution/PlanArtifactCard.d.ts +25 -14
  11. package/execution/PlanArtifactCard.d.ts.map +1 -1
  12. package/execution/PlanArtifactCard.js +25 -10
  13. package/execution/PlanArtifactCard.js.map +1 -1
  14. package/execution/PlanCompletionCard.d.ts +12 -9
  15. package/execution/PlanCompletionCard.d.ts.map +1 -1
  16. package/execution/PlanCompletionCard.js +14 -9
  17. package/execution/PlanCompletionCard.js.map +1 -1
  18. package/execution/use-build-from-plan-hotkey.d.ts +19 -0
  19. package/execution/use-build-from-plan-hotkey.d.ts.map +1 -0
  20. package/execution/use-build-from-plan-hotkey.js +30 -0
  21. package/execution/use-build-from-plan-hotkey.js.map +1 -0
  22. package/internal/markdown-components.d.ts +18 -0
  23. package/internal/markdown-components.d.ts.map +1 -1
  24. package/internal/markdown-components.js +33 -0
  25. package/internal/markdown-components.js.map +1 -1
  26. package/package.json +4 -4
  27. package/portal-container.d.ts +9 -6
  28. package/portal-container.d.ts.map +1 -1
  29. package/portal-container.js +9 -6
  30. package/portal-container.js.map +1 -1
  31. package/provider.d.ts.map +1 -1
  32. package/provider.js +41 -19
  33. package/provider.js.map +1 -1
  34. package/src/__tests__/provider-theme-scope.test.tsx +94 -0
  35. package/src/execution/ArtifactContentRenderer.tsx +11 -2
  36. package/src/execution/ArtifactPreviewModal.tsx +7 -7
  37. package/src/execution/MessageEntry.tsx +14 -3
  38. package/src/execution/PlanArtifactCard.tsx +60 -51
  39. package/src/execution/PlanCompletionCard.tsx +20 -13
  40. package/src/execution/__tests__/ArtifactContentRenderer.test.tsx +47 -0
  41. package/src/execution/__tests__/ArtifactPreviewModal.test.tsx +6 -6
  42. package/src/execution/__tests__/MessageThread.test.tsx +3 -3
  43. package/src/execution/__tests__/PlanArtifactCard.test.tsx +120 -31
  44. package/src/execution/__tests__/PlanCompletionCard.test.tsx +31 -2
  45. package/src/execution/__tests__/message-entry.test.tsx +27 -0
  46. package/src/execution/use-build-from-plan-hotkey.ts +39 -0
  47. package/src/internal/__tests__/markdown-components.test.tsx +53 -0
  48. package/src/internal/markdown-components.tsx +36 -0
  49. package/src/portal-container.ts +9 -6
  50. package/src/provider.tsx +70 -23
  51. package/src/session/inspector/__tests__/ArtifactsTab.test.tsx +7 -7
  52. package/styles.css +1 -1
@@ -19,6 +19,39 @@ const FRONTMATTER_RE = /^---\r?\n[\s\S]*?\r?\n---\r?\n?/;
19
19
  export function stripFrontmatter(content) {
20
20
  return content.replace(FRONTMATTER_RE, "");
21
21
  }
22
+ /**
23
+ * Matches content whose ENTIRE body is a single fenced code block tagged
24
+ * `markdown` / `md`. Capture group 1 is the opening backtick run (so the close
25
+ * must use the same run via the `\1` backreference); group 2 is the inner body.
26
+ *
27
+ * Deliberately strict: the info string must be exactly `markdown`/`md` and the
28
+ * fence must span the whole (trimmed) string. A bare ``` ``` ``` fence is NOT
29
+ * matched — without the explicit language tag we cannot tell wrapped markdown
30
+ * from a legitimate single code block, and guessing by inspecting the body is
31
+ * the kind of fuzzy heuristic this codebase avoids.
32
+ */
33
+ const ENCLOSING_MARKDOWN_FENCE_RE = /^(`{3,})[ \t]*(?:markdown|md)[ \t]*\r?\n([\s\S]*?)\r?\n\1[ \t]*$/i;
34
+ /**
35
+ * Unwraps a message the model wrapped entirely in a ```markdown / ```md fence.
36
+ *
37
+ * Some models emit their whole markdown reply inside one fenced block (a
38
+ * Plan-mode plan is the common case). Rendered as-is that becomes a single flat
39
+ * code block instead of rich markdown — headings, lists, and tables collapse to
40
+ * monospace text. This returns the inner markdown in exactly that case and is a
41
+ * no-op for everything else (already-rich markdown, prose, or a reply that is
42
+ * legitimately a single code block).
43
+ *
44
+ * Render-time only: callers pass it the text right before handing it to the
45
+ * markdown renderer, so the transcript and the raw artifact stay faithful to
46
+ * what the agent produced — a single source of truth for the unwrap, with no
47
+ * duplicated logic in the runner. While streaming, the closing fence has not
48
+ * arrived yet, so this no-ops and the live text renders as typed; it unwraps
49
+ * once the block closes.
50
+ */
51
+ export function unwrapEnclosingMarkdownFence(content) {
52
+ const match = ENCLOSING_MARKDOWN_FENCE_RE.exec(content.trim());
53
+ return match ? match[2] : content;
54
+ }
22
55
  /**
23
56
  * Styled react-markdown component overrides for SDK markdown surfaces.
24
57
  *
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-components.js","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdown-components.js","sourceRoot":"","sources":["../../src/internal/markdown-components.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stigmer/react",
3
- "version": "3.0.9-dev.20260615145121",
3
+ "version": "3.0.9-dev.20260615153829",
4
4
  "description": "React provider and client hook for the Stigmer platform SDK",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "@bufbuild/protovalidate": "^1.1.1",
39
39
  "@dagrejs/dagre": "^1.1.4",
40
- "@stigmer/theme": "3.0.9-dev.20260615145121",
40
+ "@stigmer/theme": "3.0.9-dev.20260615153829",
41
41
  "diff": "^8.0.3",
42
42
  "fflate": "^0.8.2",
43
43
  "react-markdown": "^10.1.0",
@@ -57,8 +57,8 @@
57
57
  "@codemirror/state": "^6.0.0",
58
58
  "@codemirror/view": "^6.0.0",
59
59
  "@lezer/highlight": "^1.0.0",
60
- "@stigmer/protos": "3.0.9-dev.20260615145121",
61
- "@stigmer/sdk": "3.0.9-dev.20260615145121",
60
+ "@stigmer/protos": "3.0.9-dev.20260615153829",
61
+ "@stigmer/sdk": "3.0.9-dev.20260615153829",
62
62
  "@tanstack/react-table": "^8.20.0",
63
63
  "@xyflow/react": "^12.0.0",
64
64
  "elkjs": "^0.9.0",
@@ -1,12 +1,15 @@
1
1
  /**
2
2
  * React context that holds a reference to the managed portal container.
3
3
  *
4
- * `StigmerProvider` creates a `<div>` appended to `document.body` with
5
- * the same scoping attributes (`class="stgm [preset]"`,
6
- * `data-stgm-color-mode`) as the main provider container. This ensures
7
- * that portaled content (popovers, dialogs, menus) inherits the correct
8
- * design token values including dark-mode overrides even though it
9
- * lives outside the provider's DOM subtree.
4
+ * `StigmerProvider` creates a `<div>` appended to `document.body` that
5
+ * carries the identical theme scope as the main provider container —
6
+ * the same class (`stgm` + preset class + any host `className`) and the
7
+ * same `data-stgm-color-mode`. Both containers derive this from a single
8
+ * source (`useThemeScope` in `provider.tsx`), so they cannot drift apart.
9
+ * This ensures portaled content (popovers, dialogs, menus) inherits the
10
+ * correct design token values — including dark-mode overrides and host
11
+ * `className`-scoped token overrides — even though it lives outside the
12
+ * provider's DOM subtree (where the cascade would otherwise not reach it).
10
13
  *
11
14
  * Defaults to `null` so components rendered outside a `StigmerProvider`
12
15
  * fall back to the browser's default portal target (`document.body`).
@@ -1 +1 @@
1
- {"version":3,"file":"portal-container.d.ts","sourceRoot":"","sources":["../src/portal-container.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,sBAAsB,6CAA0C,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,yBAAyB,IAAI,WAAW,GAAG,IAAI,CAE9D"}
1
+ {"version":3,"file":"portal-container.d.ts","sourceRoot":"","sources":["../src/portal-container.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,sBAAsB,6CAA0C,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,yBAAyB,IAAI,WAAW,GAAG,IAAI,CAE9D"}
@@ -3,12 +3,15 @@ import { createContext, useContext } from "react";
3
3
  /**
4
4
  * React context that holds a reference to the managed portal container.
5
5
  *
6
- * `StigmerProvider` creates a `<div>` appended to `document.body` with
7
- * the same scoping attributes (`class="stgm [preset]"`,
8
- * `data-stgm-color-mode`) as the main provider container. This ensures
9
- * that portaled content (popovers, dialogs, menus) inherits the correct
10
- * design token values including dark-mode overrides even though it
11
- * lives outside the provider's DOM subtree.
6
+ * `StigmerProvider` creates a `<div>` appended to `document.body` that
7
+ * carries the identical theme scope as the main provider container —
8
+ * the same class (`stgm` + preset class + any host `className`) and the
9
+ * same `data-stgm-color-mode`. Both containers derive this from a single
10
+ * source (`useThemeScope` in `provider.tsx`), so they cannot drift apart.
11
+ * This ensures portaled content (popovers, dialogs, menus) inherits the
12
+ * correct design token values — including dark-mode overrides and host
13
+ * `className`-scoped token overrides — even though it lives outside the
14
+ * provider's DOM subtree (where the cascade would otherwise not reach it).
12
15
  *
13
16
  * Defaults to `null` so components rendered outside a `StigmerProvider`
14
17
  * fall back to the browser's default portal target (`document.body`).
@@ -1 +1 @@
1
- {"version":3,"file":"portal-container.js","sourceRoot":"","sources":["../src/portal-container.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"portal-container.js","sourceRoot":"","sources":["../src/portal-container.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAElD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,aAAa,CAAqB,IAAI,CAAC,CAAC;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,UAAU,yBAAyB;IACvC,OAAO,UAAU,CAAC,sBAAsB,CAAC,CAAC;AAC5C,CAAC"}
package/provider.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAUjE,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACjD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,cAAwB,EACxB,eAAe,EACf,aAAa,EACb,MAAM,EACN,SAAS,EACT,SAAmB,GACpB,EAAE,oBAAoB,2CAmCtB"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAML,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIpD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAqB,MAAM,cAAc,CAAC;AAUjE,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,yDAAyD;IACzD,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACjD;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC;IACvC;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,EACR,cAAwB,EACxB,eAAe,EACf,aAAa,EACb,MAAM,EACN,SAAS,EACT,SAAmB,GACpB,EAAE,oBAAoB,2CAoCtB"}
package/provider.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useRef, useState } from "react";
3
+ import { useCallback, useEffect, useMemo, useRef, useState, } from "react";
4
4
  import { cn, resolvePresetClass } from "@stigmer/theme";
5
5
  import { StigmerContext } from "./context";
6
6
  import { DeploymentModeContext } from "./deployment-mode";
@@ -45,10 +45,11 @@ export function StigmerProvider({ client, children, deploymentMode = "cloud", ex
45
45
  const systemMode = useSystemColorMode();
46
46
  const resolvedMode = colorMode === "system" ? systemMode : colorMode;
47
47
  const presetClass = preset ? resolvePresetClass(preset) : "";
48
- const portalContainer = usePortalContainer(resolvedMode, presetClass);
48
+ const scope = useThemeScope(resolvedMode, presetClass, className);
49
+ const portalContainer = usePortalContainer(scope);
49
50
  const registryState = useModelRegistryFetch(client);
50
51
  const taskKindRegistryState = useTaskKindRegistryFetch(client);
51
- return (_jsx(StigmerContext.Provider, { value: client, children: _jsx(DeploymentModeContext.Provider, { value: deploymentMode, children: _jsx(ExecutionTargetContext.Provider, { value: executionTarget, children: _jsx(RunnerAdapterContext.Provider, { value: runnerAdapter ?? null, children: _jsx(ColorModeContext.Provider, { value: resolvedMode, children: _jsx(ModelRegistryContext.Provider, { value: registryState, children: _jsx(TaskKindRegistryContext.Provider, { value: taskKindRegistryState, children: _jsx(PortalContainerContext.Provider, { value: portalContainer, children: _jsx("div", { className: cn("stgm", presetClass, className), "data-stgm-color-mode": resolvedMode, children: children }) }) }) }) }) }) }) }) }));
52
+ return (_jsx(StigmerContext.Provider, { value: client, children: _jsx(DeploymentModeContext.Provider, { value: deploymentMode, children: _jsx(ExecutionTargetContext.Provider, { value: executionTarget, children: _jsx(RunnerAdapterContext.Provider, { value: runnerAdapter ?? null, children: _jsx(ColorModeContext.Provider, { value: resolvedMode, children: _jsx(ModelRegistryContext.Provider, { value: registryState, children: _jsx(TaskKindRegistryContext.Provider, { value: taskKindRegistryState, children: _jsx(PortalContainerContext.Provider, { value: portalContainer, children: _jsx("div", { className: scope.className, "data-stgm-color-mode": scope.colorMode, children: children }) }) }) }) }) }) }) }) }));
52
53
  }
53
54
  const RETRY_DELAYS_MS = [1_000, 2_000, 4_000];
54
55
  const TOKEN_POLL_INTERVAL_MS = 500;
@@ -296,29 +297,50 @@ function useTaskKindRegistryFetch(client) {
296
297
  }, []);
297
298
  return { ...state, refetch };
298
299
  }
300
+ /**
301
+ * Computes the {@link ThemeScope} once per render input.
302
+ *
303
+ * Both the in-tree provider container and the managed portal container
304
+ * derive their class + `data-stgm-color-mode` from this single source,
305
+ * so the two can never drift apart — the cause of #182, where the portal
306
+ * container omitted the host `className` and portaled surfaces (popovers,
307
+ * dialogs, menus) lost host token overrides scoped to that class.
308
+ *
309
+ * The returned object is referentially stable until an input changes,
310
+ * which keeps {@link usePortalContainer}'s sync effect from re-running
311
+ * on every render.
312
+ */
313
+ function useThemeScope(resolvedMode, presetClass, className) {
314
+ return useMemo(() => ({
315
+ className: cn("stgm", presetClass, className),
316
+ colorMode: resolvedMode,
317
+ }), [resolvedMode, presetClass, className]);
318
+ }
299
319
  /**
300
320
  * Creates and manages a portal container `<div>` appended to
301
- * `document.body` that mirrors the scoping attributes of the main
302
- * provider container.
321
+ * `document.body` that carries the identical {@link ThemeScope} as the
322
+ * main provider container.
303
323
  *
304
- * Portaled content (popovers, dialogs, menus) that targets this
305
- * element will inherit the correct `--stgm-*` token values —
306
- * including dark-mode overrides — because the container carries
307
- * `data-stgm-color-mode` and the preset class.
324
+ * Portaled content (popovers, dialogs, menus) that targets this element
325
+ * inherits the correct `--stgm-*` token values — including dark-mode
326
+ * overrides and any host `className` token overrides — because the
327
+ * container carries the same class and `data-stgm-color-mode` attribute
328
+ * as the in-tree scope. The node lives outside the provider subtree, so
329
+ * these must be set on the node directly rather than inherited via the
330
+ * DOM cascade.
308
331
  *
309
- * The element is created once on mount and removed on unmount.
310
- * Attribute values are kept in sync with prop changes via a
311
- * separate effect.
332
+ * The element is created once on mount and removed on unmount. Scope
333
+ * values are kept in sync with `scope` changes via a separate effect.
312
334
  *
313
335
  * Returns `null` during SSR (no `document`).
314
336
  */
315
- function usePortalContainer(colorMode, presetClass) {
337
+ function usePortalContainer(scope) {
316
338
  const elRef = useRef(null);
317
339
  const [container, setContainer] = useState(null);
318
340
  useEffect(() => {
319
341
  const el = document.createElement("div");
320
- el.className = cn("stgm", presetClass);
321
- el.setAttribute("data-stgm-color-mode", colorMode);
342
+ el.className = scope.className;
343
+ el.setAttribute("data-stgm-color-mode", scope.colorMode);
322
344
  el.setAttribute("data-stgm-portal", "");
323
345
  document.body.appendChild(el);
324
346
  elRef.current = el;
@@ -328,15 +350,15 @@ function usePortalContainer(colorMode, presetClass) {
328
350
  elRef.current = null;
329
351
  };
330
352
  // Intentionally empty deps: create once on mount, remove on unmount.
331
- // Attribute syncing is handled by the effect below.
353
+ // Scope syncing is handled by the effect below.
332
354
  }, []);
333
355
  useEffect(() => {
334
356
  const el = elRef.current;
335
357
  if (!el)
336
358
  return;
337
- el.className = cn("stgm", presetClass);
338
- el.setAttribute("data-stgm-color-mode", colorMode);
339
- }, [colorMode, presetClass]);
359
+ el.className = scope.className;
360
+ el.setAttribute("data-stgm-color-mode", scope.colorMode);
361
+ }, [scope]);
340
362
  return container;
341
363
  }
342
364
  //# sourceMappingURL=provider.js.map
package/provider.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { describe, it, expect, afterEach } from "vitest";
2
+ import { render, cleanup } from "@testing-library/react";
3
+ import type { Stigmer } from "@stigmer/sdk";
4
+ import { StigmerProvider } from "../provider";
5
+
6
+ afterEach(cleanup);
7
+
8
+ // A minimal client: the provider eagerly fetches the model/task-kind
9
+ // registries on mount. Returning a null credential keeps that work
10
+ // non-blocking (it polls for a token) so rendering is synchronous and
11
+ // never touches the network during the test.
12
+ function makeClient(): Stigmer {
13
+ return {
14
+ baseUrl: "https://example.test",
15
+ getAuthCredential: async () => null,
16
+ fetch: (async () => {
17
+ throw new Error("network disabled in test");
18
+ }) as unknown as typeof globalThis.fetch,
19
+ } as unknown as Stigmer;
20
+ }
21
+
22
+ /**
23
+ * Regression test for #182: portaled surfaces must inherit the host's
24
+ * full theme scope. The managed portal container (appended to
25
+ * `document.body`, outside the provider subtree) must carry the *identical*
26
+ * class + color mode as the in-tree container — otherwise host token
27
+ * overrides scoped to a custom `className` never reach portaled content.
28
+ */
29
+ describe("StigmerProvider theme scope", () => {
30
+ it("portal container carries the identical theme scope as the in-tree container", () => {
31
+ render(
32
+ <StigmerProvider
33
+ client={makeClient()}
34
+ preset="monochrome"
35
+ colorMode="dark"
36
+ className="our-brand"
37
+ >
38
+ <div data-testid="scope-child" />
39
+ </StigmerProvider>,
40
+ );
41
+
42
+ const child = document.querySelector('[data-testid="scope-child"]');
43
+ const inTree = child?.closest(".stgm") as HTMLElement | null;
44
+ const portal = document.body.querySelector(
45
+ "[data-stgm-portal]",
46
+ ) as HTMLElement | null;
47
+
48
+ expect(inTree).not.toBeNull();
49
+ expect(portal).not.toBeNull();
50
+
51
+ // The invariant: both surfaces are scoped identically. Asserting
52
+ // equality (rather than a hardcoded class string) is the truest
53
+ // expression of the contract and won't rot if preset class names change.
54
+ expect(portal!.className).toBe(inTree!.className);
55
+ expect(portal!.getAttribute("data-stgm-color-mode")).toBe(
56
+ inTree!.getAttribute("data-stgm-color-mode"),
57
+ );
58
+
59
+ // Spot-check the concrete pieces so a failure message is self-explanatory.
60
+ expect(portal!.classList.contains("stgm")).toBe(true);
61
+ expect(portal!.classList.contains("stgm-theme-monochrome")).toBe(true);
62
+ expect(portal!.classList.contains("our-brand")).toBe(true);
63
+ expect(portal!.getAttribute("data-stgm-color-mode")).toBe("dark");
64
+ });
65
+
66
+ it("portal container reflects host className updates without drift", () => {
67
+ const client = makeClient();
68
+ const { rerender } = render(
69
+ <StigmerProvider client={client} colorMode="light" className="brand-a">
70
+ <div data-testid="scope-child" />
71
+ </StigmerProvider>,
72
+ );
73
+
74
+ const portal = document.body.querySelector(
75
+ "[data-stgm-portal]",
76
+ ) as HTMLElement;
77
+ expect(portal.classList.contains("brand-a")).toBe(true);
78
+
79
+ rerender(
80
+ <StigmerProvider client={client} colorMode="dark" className="brand-b">
81
+ <div data-testid="scope-child" />
82
+ </StigmerProvider>,
83
+ );
84
+
85
+ const child = document.querySelector('[data-testid="scope-child"]');
86
+ const inTree = child?.closest(".stgm") as HTMLElement;
87
+
88
+ // Same node, synced — and still identical to the in-tree scope.
89
+ expect(portal.classList.contains("brand-b")).toBe(true);
90
+ expect(portal.classList.contains("brand-a")).toBe(false);
91
+ expect(portal.getAttribute("data-stgm-color-mode")).toBe("dark");
92
+ expect(portal.className).toBe(inTree.className);
93
+ });
94
+ });
@@ -1,11 +1,12 @@
1
1
  "use client";
2
2
 
3
- import { useState, type ReactNode } from "react";
3
+ import { useMemo, useState, type ReactNode } from "react";
4
4
  import Markdown from "react-markdown";
5
5
  import { cn } from "@stigmer/theme";
6
6
  import {
7
7
  MARKDOWN_COMPONENTS,
8
8
  REMARK_PLUGINS,
9
+ unwrapEnclosingMarkdownFence,
9
10
  } from "../internal/markdown-components";
10
11
  import {
11
12
  getArtifactRenderMode,
@@ -105,6 +106,14 @@ type MarkdownTab = "rendered" | "source";
105
106
  function MarkdownView({ content }: { readonly content: string }) {
106
107
  const [tab, setTab] = useState<MarkdownTab>("rendered");
107
108
 
109
+ // A `.md` whose entire body is one ```markdown fence (e.g. a model-wrapped
110
+ // plan) would render flat. Unwrap for the Rendered view only — Source stays
111
+ // byte-faithful to the stored artifact.
112
+ const rendered = useMemo(
113
+ () => unwrapEnclosingMarkdownFence(content),
114
+ [content],
115
+ );
116
+
108
117
  return (
109
118
  <div>
110
119
  <div className="flex items-center border-b border-border px-4 py-1.5">
@@ -132,7 +141,7 @@ function MarkdownView({ content }: { readonly content: string }) {
132
141
  remarkPlugins={REMARK_PLUGINS}
133
142
  components={MARKDOWN_COMPONENTS}
134
143
  >
135
- {content}
144
+ {rendered}
136
145
  </Markdown>
137
146
  </div>
138
147
  ) : (
@@ -46,7 +46,7 @@ export interface ArtifactPreviewContentProps {
46
46
  */
47
47
  readonly onApplied?: (result: ApplyResourceResult) => void;
48
48
  /**
49
- * Optional "Implement" action. When provided, an Implement primary
49
+ * Optional plan-build action. When provided, a "Build from plan" primary
50
50
  * button appears in the action bar (used for plan artifacts: turn the
51
51
  * plan into an Agent run). Clicking it calls `onImplement` then closes
52
52
  * the modal. Omit for non-actionable artifacts.
@@ -227,9 +227,9 @@ export function ArtifactPreviewContent({
227
227
  ctaLabel = `Push Skill to ${org}`;
228
228
  }
229
229
 
230
- // Implement runs the plan; closing the modal lets the host's submit pipeline
231
- // take over (switch to Agent + send). Single combined handler keeps the
232
- // caller's contract simple ("just give me onImplement").
230
+ // "Build from plan" runs the plan; closing the modal lets the host's submit
231
+ // pipeline take over (switch to Agent + send). Single combined handler keeps
232
+ // the caller's contract simple ("just give me onImplement").
233
233
  const handleImplement = useCallback(() => {
234
234
  onImplement?.();
235
235
  onClose();
@@ -326,8 +326,8 @@ export interface ArtifactPreviewModalProps {
326
326
  */
327
327
  readonly onApplied?: (result: ApplyResourceResult) => void;
328
328
  /**
329
- * Optional "Implement" action (see {@link ArtifactPreviewContentProps.onImplement}).
330
- * When provided, an Implement primary button appears; clicking it calls
329
+ * Optional plan-build action (see {@link ArtifactPreviewContentProps.onImplement}).
330
+ * When provided, a "Build from plan" primary button appears; clicking it calls
331
331
  * `onImplement` then closes the modal.
332
332
  */
333
333
  readonly onImplement?: () => void;
@@ -695,7 +695,7 @@ function ActionBar({
695
695
  )}
696
696
  >
697
697
  <ImplementIcon />
698
- Implement
698
+ Build from plan
699
699
  </button>
700
700
  )}
701
701
  {applyResult ? (
@@ -1,11 +1,14 @@
1
1
  "use client";
2
2
 
3
- import { memo, useState } from "react";
3
+ import { memo, useMemo, useState } from "react";
4
4
  import { Streamdown } from "streamdown";
5
5
  import type { AgentMessage } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
6
6
  import { MessageType } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
7
7
  import { cn } from "@stigmer/theme";
8
- import { MARKDOWN_COMPONENTS } from "../internal/markdown-components";
8
+ import {
9
+ MARKDOWN_COMPONENTS,
10
+ unwrapEnclosingMarkdownFence,
11
+ } from "../internal/markdown-components";
9
12
  import { useRenderTracer } from "../internal/dev";
10
13
 
11
14
  /** Props for {@link MessageEntry}. */
@@ -160,6 +163,14 @@ function AiMessage({
160
163
  }) {
161
164
  useRenderTracer("AiMessage", { contentLength: content.length, isStreaming });
162
165
 
166
+ // A model that wraps its whole reply in a ```markdown fence (Plan-mode plans
167
+ // most often) would otherwise render as one flat code block. Unwrap it here,
168
+ // at the render seam, so the transcript stays faithful to what the agent sent.
169
+ const markdown = useMemo(
170
+ () => unwrapEnclosingMarkdownFence(content),
171
+ [content],
172
+ );
173
+
163
174
  return (
164
175
  <div
165
176
  role="article"
@@ -173,7 +184,7 @@ function AiMessage({
173
184
  isAnimating={isStreaming}
174
185
  caret="block"
175
186
  >
176
- {content}
187
+ {markdown}
177
188
  </Streamdown>
178
189
  </div>
179
190
  </div>