@agent-native/core 0.164.15 → 0.164.18

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 (53) hide show
  1. package/corpus/README.md +1 -1
  2. package/corpus/templates/analytics/netlify.toml +4 -0
  3. package/corpus/templates/clips/actions/request-transcript.ts +10 -6
  4. package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +298 -3
  5. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +3 -0
  6. package/corpus/templates/content/app/components/editor/extensions/NotionExtensions.tsx +18 -4
  7. package/corpus/templates/content/app/i18n-data.ts +160 -0
  8. package/corpus/templates/content/docs/solutions/2026-08-18-colored-text-highlighting-shape.md +693 -0
  9. package/corpus/templates/content/package.json +1 -0
  10. package/corpus/templates/content/shared/nfm.ts +14 -3
  11. package/corpus/templates/factory/AGENTS.md +24 -29
  12. package/corpus/templates/factory/actions/get-slack-feedback-context.ts +8 -28
  13. package/corpus/templates/factory/actions/get-triage-config.ts +1 -0
  14. package/corpus/templates/factory/actions/govern-agent-native-pull-request.ts +67 -59
  15. package/corpus/templates/factory/actions/list-triage-items.ts +6 -1
  16. package/corpus/templates/factory/actions/reconcile-triage-run.ts +7 -1
  17. package/corpus/templates/factory/actions/save-triage-config.ts +27 -7
  18. package/corpus/templates/factory/actions/start-builder-for-item.ts +113 -31
  19. package/corpus/templates/factory/actions/view-screen.ts +12 -0
  20. package/corpus/templates/factory/app/components/factory/FactorySettingsView.tsx +457 -0
  21. package/corpus/templates/factory/app/components/factory/FactoryWorkspaceActions.tsx +53 -0
  22. package/corpus/templates/factory/app/components/layout/Layout.tsx +2 -0
  23. package/corpus/templates/factory/app/components/layout/Sidebar.tsx +3 -1
  24. package/corpus/templates/factory/app/hooks/use-navigation-state.ts +10 -7
  25. package/corpus/templates/factory/app/i18n/en-US.ts +3 -0
  26. package/corpus/templates/factory/app/routes/agents.tsx +22 -1
  27. package/corpus/templates/factory/app/routes/factory-settings.tsx +34 -0
  28. package/corpus/templates/factory/app/routes/factory.tsx +33 -323
  29. package/corpus/templates/factory/server/connectors/slack.ts +62 -0
  30. package/corpus/templates/factory/server/db/schema.ts +1 -0
  31. package/corpus/templates/factory/server/lib/slack-feedback-prompt.ts +30 -0
  32. package/corpus/templates/factory/server/plugins/agent-chat.ts +9 -8
  33. package/corpus/templates/factory/server/plugins/factory-migrations.ts +7 -0
  34. package/corpus/templates/factory/server/plugins/factory-scheduler-job.ts +43 -25
  35. package/corpus/templates/factory/server/triage/ai-services-git.ts +2 -0
  36. package/corpus/templates/factory/server/triage/pr-monitor.ts +2 -1
  37. package/corpus/templates/factory/server/triage/pr-policy.ts +197 -19
  38. package/corpus/templates/factory/server/triage/review-skill-alignment.ts +127 -0
  39. package/corpus/templates/factory/server/triage/slack-client.ts +79 -6
  40. package/dist/client/MultiTabAssistantChat.js +28 -1
  41. package/dist/client/use-chat-threads.d.ts +1 -0
  42. package/dist/client/use-chat-threads.js +13 -3
  43. package/dist/collab/awareness.d.ts +2 -2
  44. package/dist/collab/routes.d.ts +1 -1
  45. package/dist/collab/struct-routes.d.ts +1 -1
  46. package/dist/integrations/plugin.js +18 -1
  47. package/dist/notifications/routes.d.ts +3 -3
  48. package/dist/resources/handlers.d.ts +2 -2
  49. package/dist/secrets/routes.d.ts +9 -9
  50. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  51. package/dist/server/auth.js +2 -2
  52. package/dist/vite/client.js +2 -0
  53. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ import { AgentToggleButton } from "@agent-native/core/client/agent-chat";
2
+ import { useT } from "@agent-native/core/client/i18n";
3
+ import { IconPlus } from "@tabler/icons-react";
4
+ import { Link, useLocation, useSearchParams } from "react-router";
5
+
6
+ import { Button } from "@/components/ui/button";
7
+
8
+ export const FACTORY_AGENTS_HREF = "/factory?tab=agents";
9
+ export const FACTORY_SETTINGS_HREF = "/factory-settings";
10
+ export const FACTORY_NEW_HREF = "/factory?new=1";
11
+
12
+ export function FactoryWorkspaceActions({
13
+ onNewFactory,
14
+ }: {
15
+ onNewFactory?: () => void;
16
+ }) {
17
+ const t = useT();
18
+ const location = useLocation();
19
+ const [searchParams] = useSearchParams();
20
+ const onAgents =
21
+ location.pathname === "/agents" ||
22
+ (location.pathname === "/factory" &&
23
+ searchParams.get("tab") === "agents" &&
24
+ !searchParams.get("factoryId"));
25
+ const onSettings = location.pathname === "/factory-settings";
26
+
27
+ return (
28
+ <div className="flex items-center gap-2">
29
+ <Button asChild variant={onAgents ? "default" : "outline"} size="sm">
30
+ <Link to={FACTORY_AGENTS_HREF}>{t("factoryRoute.agentsTab")}</Link>
31
+ </Button>
32
+ <Button asChild variant={onSettings ? "default" : "outline"} size="sm">
33
+ <Link to={FACTORY_SETTINGS_HREF}>
34
+ {t("factoryRoute.factorySettings")}
35
+ </Link>
36
+ </Button>
37
+ {onNewFactory ? (
38
+ <Button type="button" size="sm" onClick={onNewFactory}>
39
+ <IconPlus className="size-4" />
40
+ {t("factoryRoute.newFactory")}
41
+ </Button>
42
+ ) : (
43
+ <Button asChild size="sm">
44
+ <Link to={FACTORY_NEW_HREF}>
45
+ <IconPlus className="size-4" />
46
+ {t("factoryRoute.newFactory")}
47
+ </Link>
48
+ </Button>
49
+ )}
50
+ <AgentToggleButton />
51
+ </div>
52
+ );
53
+ }
@@ -42,6 +42,8 @@ function routeOwnsToolbar(pathname: string): boolean {
42
42
  pathname === "/chat" ||
43
43
  pathname.startsWith("/chat/") ||
44
44
  pathname === "/factory" ||
45
+ pathname === "/factory-settings" ||
46
+ pathname === "/agents" ||
45
47
  pathname === "/database" ||
46
48
  pathname.startsWith("/extensions")
47
49
  );
@@ -444,7 +444,9 @@ export function Sidebar({
444
444
  const isActive =
445
445
  item.href === "/"
446
446
  ? isChatRoute
447
- : location.pathname.startsWith(item.href);
447
+ : item.href === "/factory"
448
+ ? location.pathname === "/factory"
449
+ : location.pathname.startsWith(item.href);
448
450
  const link = (
449
451
  <Link
450
452
  to={item.href}
@@ -25,27 +25,27 @@ export function useNavigationState() {
25
25
  view: viewForPath(pathname),
26
26
  path: appPath(pathname),
27
27
  ...(threadId ? { threadId } : {}),
28
- ...(pathname.startsWith("/factory") && searchParams.get("factoryId")
28
+ ...(pathname === "/factory" && searchParams.get("factoryId")
29
29
  ? { factoryId: searchParams.get("factoryId") ?? undefined }
30
30
  : {}),
31
- ...(pathname.startsWith("/factory") && searchParams.get("tab")
31
+ ...(pathname === "/factory" && searchParams.get("tab")
32
32
  ? { factoryTab: searchParams.get("tab") ?? undefined }
33
33
  : {}),
34
- ...(pathname.startsWith("/factory") && searchParams.get("automationId")
34
+ ...(pathname === "/factory" && searchParams.get("automationId")
35
35
  ? {
36
36
  factoryAutomationId:
37
37
  searchParams.get("automationId") ?? undefined,
38
38
  }
39
39
  : {}),
40
- ...(pathname.startsWith("/factory") && searchParams.get("auditRunId")
40
+ ...(pathname === "/factory" && searchParams.get("auditRunId")
41
41
  ? {
42
42
  factoryAuditRunId: searchParams.get("auditRunId") ?? undefined,
43
43
  }
44
44
  : {}),
45
- ...(pathname.startsWith("/factory") && searchParams.get("node")
45
+ ...(pathname === "/factory" && searchParams.get("node")
46
46
  ? { factoryNodeId: searchParams.get("node") ?? undefined }
47
47
  : {}),
48
- ...(pathname.startsWith("/factory") && searchParams.get("edge")
48
+ ...(pathname === "/factory" && searchParams.get("edge")
49
49
  ? { factoryEdgeId: searchParams.get("edge") ?? undefined }
50
50
  : {}),
51
51
  };
@@ -73,7 +73,8 @@ function viewForPath(pathname: string): string {
73
73
  if (pathname.startsWith("/extensions")) return "extensions";
74
74
  if (pathname.startsWith("/observability")) return "observability";
75
75
  if (pathname.startsWith("/agents")) return "agents";
76
- if (pathname.startsWith("/factory")) return "factory";
76
+ if (pathname === "/factory-settings") return "factory-settings";
77
+ if (pathname === "/factory") return "factory";
77
78
  if (pathname.startsWith("/settings/agent") || pathname.startsWith("/agent")) {
78
79
  return "agent";
79
80
  }
@@ -96,6 +97,8 @@ function pathForView(view?: string): string {
96
97
  return "/observability";
97
98
  case "factory":
98
99
  return "/factory";
100
+ case "factory-settings":
101
+ return "/factory-settings";
99
102
  case "agents":
100
103
  return "/agents";
101
104
  case "agent":
@@ -108,6 +108,8 @@ const messages = {
108
108
  slackChannelPlaceholder: "For example, C0123456789",
109
109
  slackChannelName: "Channel name",
110
110
  slackChannelNamePlaceholder: "For example, product-agent-native-feedback",
111
+ builderSlackUserId: "@Builder.io Slack Member ID",
112
+ builderSlackUserIdPlaceholder: "For example, U096KN3EL2Y",
111
113
  repository: "Repository",
112
114
  repositoryPlaceholder: "For example, BuilderIO/agent-native",
113
115
  enablePolling: "Enable one-minute observation polling",
@@ -165,6 +167,7 @@ const messages = {
165
167
  rulesTab: "Rules",
166
168
  automationsTab: "Automations",
167
169
  agentsTab: "Agents",
170
+ factorySettings: "Factory Settings",
168
171
  agenticAppsTitle: "Agentic apps",
169
172
  agenticAppsEmpty: "No agentic apps in this workspace yet.",
170
173
  createApp: "Create app",
@@ -1,8 +1,29 @@
1
+ import { useT } from "@agent-native/core/client/i18n";
2
+ import { IconArrowLeft } from "@tabler/icons-react";
3
+ import { Link } from "react-router";
4
+
1
5
  import { FactoryAgentsView } from "@/components/factory/FactoryAgentsView";
6
+ import { FactoryWorkspaceActions } from "@/components/factory/FactoryWorkspaceActions";
7
+ import { Button } from "@/components/ui/button";
2
8
 
3
9
  export default function AgentsRoute() {
10
+ const t = useT();
11
+
4
12
  return (
5
- <div className="h-full min-h-0 overflow-y-auto bg-background">
13
+ <div className="flex h-full min-h-0 flex-col overflow-y-auto bg-background">
14
+ <div className="flex items-center gap-3 px-4 py-4 lg:px-6">
15
+ <Button asChild type="button" variant="ghost" size="icon">
16
+ <Link to="/factory" aria-label={t("factoryRoute.backToFactories")}>
17
+ <IconArrowLeft className="size-4" />
18
+ </Link>
19
+ </Button>
20
+ <h1 className="text-sm font-medium sm:text-base">
21
+ {t("factoryRoute.agentsTitle")}
22
+ </h1>
23
+ <div className="ms-auto">
24
+ <FactoryWorkspaceActions />
25
+ </div>
26
+ </div>
6
27
  <FactoryAgentsView />
7
28
  </div>
8
29
  );
@@ -0,0 +1,34 @@
1
+ import { useT } from "@agent-native/core/client/i18n";
2
+ import { IconArrowLeft } from "@tabler/icons-react";
3
+ import { Link } from "react-router";
4
+
5
+ import { FactorySettingsView } from "@/components/factory/FactorySettingsView";
6
+ import { FactoryWorkspaceActions } from "@/components/factory/FactoryWorkspaceActions";
7
+ import { Button } from "@/components/ui/button";
8
+
9
+ export function meta() {
10
+ return [{ title: "Factory" }];
11
+ }
12
+
13
+ export default function FactorySettingsRoute() {
14
+ const t = useT();
15
+
16
+ return (
17
+ <div className="flex h-full min-h-0 flex-col overflow-y-auto bg-background">
18
+ <div className="flex items-center gap-3 px-4 py-4 lg:px-6">
19
+ <Button asChild type="button" variant="ghost" size="icon">
20
+ <Link to="/factory" aria-label={t("factoryRoute.backToFactories")}>
21
+ <IconArrowLeft className="size-4" />
22
+ </Link>
23
+ </Button>
24
+ <h1 className="text-sm font-medium sm:text-base">
25
+ {t("factoryRoute.factorySettings")}
26
+ </h1>
27
+ <div className="ms-auto">
28
+ <FactoryWorkspaceActions />
29
+ </div>
30
+ </div>
31
+ <FactorySettingsView />
32
+ </div>
33
+ );
34
+ }