@agent-native/core 0.44.3 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/cli/connect.d.ts +2 -1
  2. package/dist/cli/connect.d.ts.map +1 -1
  3. package/dist/cli/connect.js +185 -5
  4. package/dist/cli/connect.js.map +1 -1
  5. package/dist/cli/index.js +27 -0
  6. package/dist/cli/index.js.map +1 -1
  7. package/dist/cli/plan-local.d.ts +43 -0
  8. package/dist/cli/plan-local.d.ts.map +1 -0
  9. package/dist/cli/plan-local.js +477 -0
  10. package/dist/cli/plan-local.js.map +1 -0
  11. package/dist/cli/pr-visual-recap-workflow.d.ts +1 -1
  12. package/dist/cli/pr-visual-recap-workflow.d.ts.map +1 -1
  13. package/dist/cli/pr-visual-recap-workflow.js +1 -1
  14. package/dist/cli/pr-visual-recap-workflow.js.map +1 -1
  15. package/dist/cli/recap.d.ts +164 -0
  16. package/dist/cli/recap.d.ts.map +1 -1
  17. package/dist/cli/recap.js +657 -10
  18. package/dist/cli/recap.js.map +1 -1
  19. package/dist/cli/skills.d.ts +6 -2
  20. package/dist/cli/skills.d.ts.map +1 -1
  21. package/dist/cli/skills.js +440 -37
  22. package/dist/cli/skills.js.map +1 -1
  23. package/dist/client/blocks/library/AnnotatedCodeBlock.d.ts.map +1 -1
  24. package/dist/client/blocks/library/AnnotatedCodeBlock.js +18 -4
  25. package/dist/client/blocks/library/AnnotatedCodeBlock.js.map +1 -1
  26. package/dist/client/blocks/library/ApiEndpointBlock.d.ts.map +1 -1
  27. package/dist/client/blocks/library/ApiEndpointBlock.js +11 -7
  28. package/dist/client/blocks/library/ApiEndpointBlock.js.map +1 -1
  29. package/dist/client/blocks/library/DiffBlock.d.ts.map +1 -1
  30. package/dist/client/blocks/library/DiffBlock.js +90 -7
  31. package/dist/client/blocks/library/DiffBlock.js.map +1 -1
  32. package/dist/client/blocks/library/HighlightedCode.d.ts +2 -1
  33. package/dist/client/blocks/library/HighlightedCode.d.ts.map +1 -1
  34. package/dist/client/blocks/library/HighlightedCode.js +2 -2
  35. package/dist/client/blocks/library/HighlightedCode.js.map +1 -1
  36. package/dist/client/blocks/library/JsonExplorerBlock.d.ts.map +1 -1
  37. package/dist/client/blocks/library/JsonExplorerBlock.js +57 -13
  38. package/dist/client/blocks/library/JsonExplorerBlock.js.map +1 -1
  39. package/dist/client/blocks/library/annotation-rail.d.ts +15 -5
  40. package/dist/client/blocks/library/annotation-rail.d.ts.map +1 -1
  41. package/dist/client/blocks/library/annotation-rail.js +35 -24
  42. package/dist/client/blocks/library/annotation-rail.js.map +1 -1
  43. package/dist/client/blocks/library/code-filename-label.d.ts +8 -0
  44. package/dist/client/blocks/library/code-filename-label.d.ts.map +1 -0
  45. package/dist/client/blocks/library/code-filename-label.js +15 -0
  46. package/dist/client/blocks/library/code-filename-label.js.map +1 -0
  47. package/dist/client/blocks/library/code.d.ts.map +1 -1
  48. package/dist/client/blocks/library/code.js +28 -6
  49. package/dist/client/blocks/library/code.js.map +1 -1
  50. package/dist/client/blocks/library/columns.d.ts.map +1 -1
  51. package/dist/client/blocks/library/columns.js +11 -1
  52. package/dist/client/blocks/library/columns.js.map +1 -1
  53. package/dist/client/blocks/library/diff.config.d.ts +1 -1
  54. package/dist/client/blocks/library/diff.config.js.map +1 -1
  55. package/dist/client/blocks/library/narrow-container.d.ts +13 -0
  56. package/dist/client/blocks/library/narrow-container.d.ts.map +1 -0
  57. package/dist/client/blocks/library/narrow-container.js +32 -0
  58. package/dist/client/blocks/library/narrow-container.js.map +1 -0
  59. package/dist/client/blocks/library/question-form.d.ts.map +1 -1
  60. package/dist/client/blocks/library/question-form.js +8 -9
  61. package/dist/client/blocks/library/question-form.js.map +1 -1
  62. package/dist/client/blocks/library/tabs.d.ts.map +1 -1
  63. package/dist/client/blocks/library/tabs.js +11 -5
  64. package/dist/client/blocks/library/tabs.js.map +1 -1
  65. package/dist/client/blocks/types.d.ts +2 -0
  66. package/dist/client/blocks/types.d.ts.map +1 -1
  67. package/dist/client/blocks/types.js.map +1 -1
  68. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  69. package/dist/client/composer/TiptapComposer.js +4 -1
  70. package/dist/client/composer/TiptapComposer.js.map +1 -1
  71. package/dist/client/db-admin/TableEditor.d.ts.map +1 -1
  72. package/dist/client/db-admin/TableEditor.js +3 -1
  73. package/dist/client/db-admin/TableEditor.js.map +1 -1
  74. package/dist/db/client.d.ts +19 -0
  75. package/dist/db/client.d.ts.map +1 -1
  76. package/dist/db/client.js +43 -2
  77. package/dist/db/client.js.map +1 -1
  78. package/dist/db/migrations.d.ts.map +1 -1
  79. package/dist/db/migrations.js +9 -2
  80. package/dist/db/migrations.js.map +1 -1
  81. package/dist/deploy/build.d.ts.map +1 -1
  82. package/dist/deploy/build.js +8 -0
  83. package/dist/deploy/build.js.map +1 -1
  84. package/dist/extensions/html-shell.js +1 -1
  85. package/dist/extensions/html-shell.js.map +1 -1
  86. package/dist/jobs/scheduler.d.ts.map +1 -1
  87. package/dist/jobs/scheduler.js +5 -1
  88. package/dist/jobs/scheduler.js.map +1 -1
  89. package/dist/mcp/build-server.d.ts +1 -0
  90. package/dist/mcp/build-server.d.ts.map +1 -1
  91. package/dist/mcp/build-server.js +7 -3
  92. package/dist/mcp/build-server.js.map +1 -1
  93. package/dist/mcp/oauth-route.d.ts.map +1 -1
  94. package/dist/mcp/oauth-route.js +56 -19
  95. package/dist/mcp/oauth-route.js.map +1 -1
  96. package/dist/mcp/oauth-store.d.ts +1 -0
  97. package/dist/mcp/oauth-store.d.ts.map +1 -1
  98. package/dist/mcp/oauth-store.js +9 -0
  99. package/dist/mcp/oauth-store.js.map +1 -1
  100. package/dist/mcp/server.d.ts.map +1 -1
  101. package/dist/mcp/server.js +9 -4
  102. package/dist/mcp/server.js.map +1 -1
  103. package/dist/mcp-client/errors.js +3 -3
  104. package/dist/mcp-client/errors.js.map +1 -1
  105. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  106. package/dist/server/agent-chat-plugin.js +3 -1
  107. package/dist/server/agent-chat-plugin.js.map +1 -1
  108. package/dist/server/agent-teams.d.ts.map +1 -1
  109. package/dist/server/agent-teams.js +10 -2
  110. package/dist/server/agent-teams.js.map +1 -1
  111. package/dist/server/auth.d.ts.map +1 -1
  112. package/dist/server/auth.js +7 -3
  113. package/dist/server/auth.js.map +1 -1
  114. package/dist/server/recap-image-route.d.ts.map +1 -1
  115. package/dist/server/recap-image-route.js +3 -6
  116. package/dist/server/recap-image-route.js.map +1 -1
  117. package/dist/server/sentry.d.ts.map +1 -1
  118. package/dist/server/sentry.js +12 -5
  119. package/dist/server/sentry.js.map +1 -1
  120. package/dist/server/social-og-image.d.ts.map +1 -1
  121. package/dist/server/social-og-image.js +3 -1
  122. package/dist/server/social-og-image.js.map +1 -1
  123. package/dist/styles/blocks.css +36 -10
  124. package/dist/templates/workspace-core/.agents/skills/external-agents/SKILL.md +22 -6
  125. package/docs/content/plan-plugin.md +18 -1
  126. package/docs/content/pr-visual-recap.md +37 -10
  127. package/docs/content/template-plan.md +45 -1
  128. package/package.json +1 -1
  129. package/src/templates/workspace-core/.agents/skills/external-agents/SKILL.md +22 -6
@@ -8,6 +8,7 @@
8
8
  * agent-native connect <url> [--client all|claude-code|claude-code-cli|
9
9
  * codex|cowork] [--scope user|project]
10
10
  * [--name <serverName>]
11
+ * agent-native reconnect [<url>] [--client ...] [--name <serverName>]
11
12
  * agent-native connect <url> --token <token> (no-browser fallback)
12
13
  * agent-native connect [--client ...] (pick first-party apps)
13
14
  * agent-native connect --all [--client ...] (separate first-party app MCP resources)
@@ -30,7 +31,7 @@
30
31
  import { ClientId } from "./mcp-config-writers.js";
31
32
  export interface ParsedConnectArgs {
32
33
  /** Developer profile switch: local dev gateway or saved production config. */
33
- mode?: "dev" | "prod";
34
+ mode?: "dev" | "prod" | "reauth" | "reconnect";
34
35
  /** Positional URL (the deployed app origin). Undefined for `--all`. */
35
36
  url?: string;
36
37
  /** all | claude-code | claude-code-cli | codex | cowork (default "all"). */
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/cli/connect.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@
8
8
  * agent-native connect <url> [--client all|claude-code|claude-code-cli|
9
9
  * codex|cowork] [--scope user|project]
10
10
  * [--name <serverName>]
11
+ * agent-native reconnect [<url>] [--client ...] [--name <serverName>]
11
12
  * agent-native connect <url> --token <token> (no-browser fallback)
12
13
  * agent-native connect [--client ...] (pick first-party apps)
13
14
  * agent-native connect --all [--client ...] (separate first-party app MCP resources)
@@ -105,8 +106,10 @@ export function parseConnectArgs(argv) {
105
106
  else if ((v = eat("--token")) !== undefined)
106
107
  out.token = v;
107
108
  else if (!a.startsWith("-") && !out.url) {
108
- if (!out.mode && (a === "dev" || a === "prod"))
109
+ if (!out.mode &&
110
+ (a === "dev" || a === "prod" || a === "reauth" || a === "reconnect")) {
109
111
  out.mode = a;
112
+ }
110
113
  else
111
114
  out.url = a;
112
115
  }
@@ -713,6 +716,106 @@ function savedEntryUrl(saved) {
713
716
  const match = saved.block.match(/^\s*url\s*=\s*"((?:\\.|[^"])*)"/m);
714
717
  return match ? unescapeTomlString(match[1]) : undefined;
715
718
  }
719
+ function readJsonMcpServerEntries(file) {
720
+ try {
721
+ const parsed = JSON.parse(fs.readFileSync(file, "utf-8"));
722
+ const servers = parsed?.mcpServers;
723
+ if (!servers || typeof servers !== "object" || Array.isArray(servers)) {
724
+ return [];
725
+ }
726
+ return Object.entries(servers).flatMap(([serverName, entry]) => {
727
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
728
+ return [];
729
+ }
730
+ return [
731
+ {
732
+ serverName,
733
+ saved: {
734
+ kind: "json",
735
+ entry: entry,
736
+ savedAt: new Date().toISOString(),
737
+ },
738
+ },
739
+ ];
740
+ });
741
+ }
742
+ catch {
743
+ return [];
744
+ }
745
+ }
746
+ function parseCodexMcpServerName(line) {
747
+ const trimmed = line.trim();
748
+ const quoted = trimmed.match(/^\[mcp_servers\."((?:\\.|[^"])*)"\]$/);
749
+ if (quoted)
750
+ return unescapeTomlString(quoted[1]);
751
+ const bare = trimmed.match(/^\[mcp_servers\.([A-Za-z0-9_-]+)\]$/);
752
+ return bare?.[1];
753
+ }
754
+ function readCodexMcpServerEntries(file) {
755
+ let content = "";
756
+ try {
757
+ content = fs.readFileSync(file, "utf-8");
758
+ }
759
+ catch {
760
+ return [];
761
+ }
762
+ const lines = content.split(/\r?\n/);
763
+ const entries = [];
764
+ for (let i = 0; i < lines.length; i++) {
765
+ const serverName = parseCodexMcpServerName(lines[i]);
766
+ if (!serverName)
767
+ continue;
768
+ const block = [lines[i]];
769
+ i++;
770
+ while (i < lines.length && !/^\s*\[/.test(lines[i])) {
771
+ block.push(lines[i]);
772
+ i++;
773
+ }
774
+ i--;
775
+ entries.push({
776
+ serverName,
777
+ saved: {
778
+ kind: "codex",
779
+ block: block.join("\n").replace(/\n*$/, "") + "\n",
780
+ savedAt: new Date().toISOString(),
781
+ },
782
+ });
783
+ }
784
+ return entries;
785
+ }
786
+ function readExistingMcpEntries(clients, baseDir, scope) {
787
+ const entries = [];
788
+ for (const client of clients) {
789
+ const file = configPathFor(client, baseDir, scope);
790
+ const rawEntries = client === "codex"
791
+ ? readCodexMcpServerEntries(file)
792
+ : readJsonMcpServerEntries(file);
793
+ for (const { serverName, saved } of rawEntries) {
794
+ const url = savedEntryUrl(saved);
795
+ if (!url)
796
+ continue;
797
+ entries.push({ client, serverName, file, saved, url });
798
+ }
799
+ }
800
+ return entries;
801
+ }
802
+ function canonicalMcpUrl(value) {
803
+ if (!value)
804
+ return undefined;
805
+ try {
806
+ const url = new URL(value);
807
+ url.hash = "";
808
+ return url.toString().replace(/\/+$/, "");
809
+ }
810
+ catch {
811
+ return undefined;
812
+ }
813
+ }
814
+ function sameMcpUrl(a, b) {
815
+ const left = canonicalMcpUrl(a);
816
+ const right = canonicalMcpUrl(b);
817
+ return !!left && !!right && left === right;
818
+ }
716
819
  function savedEntryHeaders(saved) {
717
820
  if (!saved)
718
821
  return {};
@@ -1031,9 +1134,77 @@ async function connectProdProfile(parsed, clients, deps) {
1031
1134
  logOut(" Restart your coding agent to pick up the production MCP servers.");
1032
1135
  return missing.length === 0;
1033
1136
  }
1034
- // ---------------------------------------------------------------------------
1035
- // Single-app connect
1036
- // ---------------------------------------------------------------------------
1137
+ function distinctReconnectEntries(entries) {
1138
+ const seen = new Set();
1139
+ const out = [];
1140
+ for (const entry of entries) {
1141
+ const key = `${entry.serverName}\0${canonicalMcpUrl(entry.url) ?? entry.url}`;
1142
+ if (seen.has(key))
1143
+ continue;
1144
+ seen.add(key);
1145
+ out.push(entry);
1146
+ }
1147
+ return out;
1148
+ }
1149
+ function describeReconnectEntry(entry) {
1150
+ return `${entry.serverName} (${entry.url}) in ${entry.client}`;
1151
+ }
1152
+ function resolveReconnectTarget(parsed, clients) {
1153
+ const baseDir = projectBaseDir();
1154
+ const scope = parsed.scope === "user" ? "user" : "project";
1155
+ const entries = readExistingMcpEntries(clients, baseDir, scope);
1156
+ if (parsed.url) {
1157
+ const normalizedUrl = normalizeUrl(parsed.url);
1158
+ const mcpUrl = mcpUrlForBaseUrl(normalizedUrl);
1159
+ if (parsed.name) {
1160
+ return { rawUrl: parsed.url, serverName: parsed.name };
1161
+ }
1162
+ const matches = distinctReconnectEntries(entries.filter((entry) => sameMcpUrl(entry.url, mcpUrl)));
1163
+ const names = [...new Set(matches.map((entry) => entry.serverName))];
1164
+ if (names.length === 1) {
1165
+ return { rawUrl: parsed.url, serverName: names[0] };
1166
+ }
1167
+ if (names.length > 1) {
1168
+ logErr(` Found multiple MCP entries for ${mcpUrl}: ${names.join(", ")}.`);
1169
+ logErr(" Re-run with --name <serverName> to choose one.");
1170
+ return null;
1171
+ }
1172
+ return { rawUrl: parsed.url };
1173
+ }
1174
+ const candidates = distinctReconnectEntries(parsed.name
1175
+ ? entries.filter((entry) => entry.serverName === parsed.name)
1176
+ : entries.filter((entry) => entry.serverName.startsWith(`${SERVER_NAME_PREFIX}-`)));
1177
+ if (candidates.length === 0) {
1178
+ logErr(" No existing Agent Native MCP entry found to reconnect.");
1179
+ logErr(" Pass a URL, or use --name <serverName> if the entry has a custom name.");
1180
+ logErr(" First-time setup still uses: agent-native connect <url> --client <client>");
1181
+ return null;
1182
+ }
1183
+ if (candidates.length > 1) {
1184
+ logErr(" Found multiple Agent Native MCP entries:");
1185
+ for (const entry of candidates) {
1186
+ logErr(` ${describeReconnectEntry(entry)}`);
1187
+ }
1188
+ logErr(" Re-run with a URL or --name <serverName>.");
1189
+ return null;
1190
+ }
1191
+ const [entry] = candidates;
1192
+ return { rawUrl: entry.url, serverName: entry.serverName };
1193
+ }
1194
+ async function reconnectOne(parsed, clients, deps) {
1195
+ const target = resolveReconnectTarget(parsed, clients);
1196
+ if (!target)
1197
+ return false;
1198
+ const effectiveParsed = {
1199
+ ...parsed,
1200
+ url: target.rawUrl,
1201
+ name: target.serverName ?? parsed.name,
1202
+ };
1203
+ logOut("");
1204
+ logOut(` Reconnecting${effectiveParsed.name ? ` "${effectiveParsed.name}"` : ""}...`);
1205
+ const res = await connectOne(target.rawUrl, effectiveParsed, clients, deps);
1206
+ return res.ok;
1207
+ }
1037
1208
  async function connectOne(rawUrl, parsed, clients, deps) {
1038
1209
  const normalizedUrl = normalizeUrl(rawUrl);
1039
1210
  const baseUrl = stripMcpPath(normalizedUrl);
@@ -1200,6 +1371,13 @@ Usage:
1200
1371
  No-browser fallback. Skip the device flow and write the entry with
1201
1372
  the supplied token (get it from the app's Connect page).
1202
1373
 
1374
+ agent-native reconnect [<url>] [--client <c>] [--scope user|project]
1375
+ agent-native connect reconnect [<url>] [--client <c>] [--scope user|project]
1376
+ Re-authenticate an existing MCP entry without reinstalling apps/skills.
1377
+ With a URL, it reuses the existing server name for that MCP URL when
1378
+ possible. Without a URL, it reconnects the only matching Agent Native
1379
+ entry in the selected client config. Use --name for custom server names.
1380
+
1203
1381
  agent-native connect --all [--client <c>] [--scope user|project]
1204
1382
  Connect every first-party hosted app as separate MCP resources.
1205
1383
 
@@ -1234,7 +1412,9 @@ export async function runConnect(args, deps = {}) {
1234
1412
  return;
1235
1413
  const ok = parsed.mode === "dev"
1236
1414
  ? await connectDevProfile(parsed, clients, deps)
1237
- : await connectProdProfile(parsed, clients, deps);
1415
+ : parsed.mode === "prod"
1416
+ ? await connectProdProfile(parsed, clients, deps)
1417
+ : await reconnectOne(parsed, clients, deps);
1238
1418
  if (!ok)
1239
1419
  process.exitCode = 1;
1240
1420
  return;