@agent-native/core 0.59.1 → 0.61.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 (201) hide show
  1. package/dist/a2a/index.d.ts +2 -0
  2. package/dist/a2a/index.d.ts.map +1 -1
  3. package/dist/a2a/index.js +1 -0
  4. package/dist/a2a/index.js.map +1 -1
  5. package/dist/a2a/invoke.d.ts +63 -0
  6. package/dist/a2a/invoke.d.ts.map +1 -0
  7. package/dist/a2a/invoke.js +157 -0
  8. package/dist/a2a/invoke.js.map +1 -0
  9. package/dist/agent/run-store.d.ts +15 -0
  10. package/dist/agent/run-store.d.ts.map +1 -1
  11. package/dist/agent/run-store.js +28 -0
  12. package/dist/agent/run-store.js.map +1 -1
  13. package/dist/chat-threads/store.d.ts +21 -0
  14. package/dist/chat-threads/store.d.ts.map +1 -1
  15. package/dist/chat-threads/store.js +128 -0
  16. package/dist/chat-threads/store.js.map +1 -1
  17. package/dist/cli/agent.d.ts +23 -0
  18. package/dist/cli/agent.d.ts.map +1 -0
  19. package/dist/cli/agent.js +300 -0
  20. package/dist/cli/agent.js.map +1 -0
  21. package/dist/cli/agents.d.ts +14 -0
  22. package/dist/cli/agents.d.ts.map +1 -0
  23. package/dist/cli/agents.js +95 -0
  24. package/dist/cli/agents.js.map +1 -0
  25. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  26. package/dist/cli/code-agent-executor.js +264 -2
  27. package/dist/cli/code-agent-executor.js.map +1 -1
  28. package/dist/cli/create.d.ts +3 -2
  29. package/dist/cli/create.d.ts.map +1 -1
  30. package/dist/cli/create.js +154 -83
  31. package/dist/cli/create.js.map +1 -1
  32. package/dist/cli/index.js +50 -2
  33. package/dist/cli/index.js.map +1 -1
  34. package/dist/cli/invoke.d.ts +26 -0
  35. package/dist/cli/invoke.d.ts.map +1 -0
  36. package/dist/cli/invoke.js +227 -0
  37. package/dist/cli/invoke.js.map +1 -0
  38. package/dist/cli/templates-meta.d.ts +1 -1
  39. package/dist/cli/templates-meta.d.ts.map +1 -1
  40. package/dist/cli/templates-meta.js +9 -8
  41. package/dist/cli/templates-meta.js.map +1 -1
  42. package/dist/cli/workspacify.d.ts +1 -1
  43. package/dist/cli/workspacify.d.ts.map +1 -1
  44. package/dist/cli/workspacify.js +6 -6
  45. package/dist/cli/workspacify.js.map +1 -1
  46. package/dist/client/NewWorkspaceAppFlow.d.ts.map +1 -1
  47. package/dist/client/NewWorkspaceAppFlow.js +5 -4
  48. package/dist/client/NewWorkspaceAppFlow.js.map +1 -1
  49. package/dist/client/blocks/library/diagram.d.ts.map +1 -1
  50. package/dist/client/blocks/library/diagram.js +23 -17
  51. package/dist/client/blocks/library/diagram.js.map +1 -1
  52. package/dist/client/blocks/types.d.ts +2 -0
  53. package/dist/client/blocks/types.d.ts.map +1 -1
  54. package/dist/client/blocks/types.js.map +1 -1
  55. package/dist/client/chat/index.d.ts +1 -1
  56. package/dist/client/chat/index.d.ts.map +1 -1
  57. package/dist/client/chat/index.js.map +1 -1
  58. package/dist/client/index.d.ts +1 -1
  59. package/dist/client/index.d.ts.map +1 -1
  60. package/dist/client/index.js.map +1 -1
  61. package/dist/client/settings/useBuilderStatus.d.ts +10 -0
  62. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -1
  63. package/dist/client/settings/useBuilderStatus.js.map +1 -1
  64. package/dist/client/use-chat-threads.d.ts +13 -0
  65. package/dist/client/use-chat-threads.d.ts.map +1 -1
  66. package/dist/client/use-chat-threads.js +41 -0
  67. package/dist/client/use-chat-threads.js.map +1 -1
  68. package/dist/integrations/plugin.d.ts.map +1 -1
  69. package/dist/integrations/plugin.js +2 -2
  70. package/dist/integrations/plugin.js.map +1 -1
  71. package/dist/onboarding/default-steps.d.ts.map +1 -1
  72. package/dist/onboarding/default-steps.js +102 -0
  73. package/dist/onboarding/default-steps.js.map +1 -1
  74. package/dist/provider-api/actions/github-repo-files.d.ts +84 -0
  75. package/dist/provider-api/actions/github-repo-files.d.ts.map +1 -0
  76. package/dist/provider-api/actions/github-repo-files.js +213 -0
  77. package/dist/provider-api/actions/github-repo-files.js.map +1 -0
  78. package/dist/provider-api/github-repo.d.ts +11 -0
  79. package/dist/provider-api/github-repo.d.ts.map +1 -0
  80. package/dist/provider-api/github-repo.js +553 -0
  81. package/dist/provider-api/github-repo.js.map +1 -0
  82. package/dist/provider-api/index.d.ts +184 -11
  83. package/dist/provider-api/index.d.ts.map +1 -1
  84. package/dist/provider-api/index.js +519 -0
  85. package/dist/provider-api/index.js.map +1 -1
  86. package/dist/scripts/docs/search.d.ts.map +1 -1
  87. package/dist/scripts/docs/search.js +38 -13
  88. package/dist/scripts/docs/search.js.map +1 -1
  89. package/dist/secrets/register-framework-secrets.d.ts.map +1 -1
  90. package/dist/secrets/register-framework-secrets.js +11 -0
  91. package/dist/secrets/register-framework-secrets.js.map +1 -1
  92. package/dist/server/agent-chat-plugin.d.ts +32 -0
  93. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  94. package/dist/server/agent-chat-plugin.js +297 -2
  95. package/dist/server/agent-chat-plugin.js.map +1 -1
  96. package/dist/server/auth-marketing.d.ts.map +1 -1
  97. package/dist/server/auth-marketing.js +17 -7
  98. package/dist/server/auth-marketing.js.map +1 -1
  99. package/dist/server/auth.d.ts.map +1 -1
  100. package/dist/server/auth.js +6 -0
  101. package/dist/server/auth.js.map +1 -1
  102. package/dist/server/builder-browser.d.ts +11 -0
  103. package/dist/server/builder-browser.d.ts.map +1 -1
  104. package/dist/server/builder-browser.js.map +1 -1
  105. package/dist/server/builder-space.d.ts +47 -0
  106. package/dist/server/builder-space.d.ts.map +1 -0
  107. package/dist/server/builder-space.js +142 -0
  108. package/dist/server/builder-space.js.map +1 -0
  109. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  110. package/dist/server/core-routes-plugin.js +39 -98
  111. package/dist/server/core-routes-plugin.js.map +1 -1
  112. package/dist/server/credential-provider.d.ts.map +1 -1
  113. package/dist/server/credential-provider.js +29 -6
  114. package/dist/server/credential-provider.js.map +1 -1
  115. package/dist/styles/blocks.css +30 -8
  116. package/dist/styles/rich-markdown-editor.css +10 -4
  117. package/dist/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  118. package/dist/templates/default/.agents/skills/actions/SKILL.md +5 -5
  119. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  120. package/dist/templates/default/AGENTS.md +22 -1
  121. package/dist/templates/default/actions/hello.ts +1 -1
  122. package/dist/templates/default/actions/navigate.ts +1 -1
  123. package/dist/templates/default/actions/view-screen.ts +1 -1
  124. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  125. package/dist/templates/headless/.env.example +4 -0
  126. package/dist/templates/headless/.prettierrc +5 -0
  127. package/dist/templates/headless/AGENTS.md +58 -0
  128. package/dist/templates/headless/DEVELOPING.md +22 -0
  129. package/dist/templates/headless/_gitignore +36 -0
  130. package/dist/templates/headless/actions/hello.ts +14 -0
  131. package/dist/templates/headless/actions/run.ts +3 -0
  132. package/dist/templates/headless/package.json +22 -0
  133. package/dist/templates/headless/tsconfig.json +7 -0
  134. package/dist/templates/ui-primitives-sync.spec.ts +2 -2
  135. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  136. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  137. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  138. package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  139. package/dist/templates/workspace-core/AGENTS.md +20 -3
  140. package/dist/templates/workspace-core/src/server/index.ts +1 -1
  141. package/dist/templates/workspace-root/AGENTS.md +25 -5
  142. package/dist/templates/workspace-root/README.md +7 -7
  143. package/dist/triggers/dispatcher.d.ts +2 -3
  144. package/dist/triggers/dispatcher.d.ts.map +1 -1
  145. package/dist/triggers/dispatcher.js +2 -3
  146. package/dist/triggers/dispatcher.js.map +1 -1
  147. package/dist/triggers/routes.d.ts +38 -0
  148. package/dist/triggers/routes.d.ts.map +1 -0
  149. package/dist/triggers/routes.js +202 -0
  150. package/dist/triggers/routes.js.map +1 -0
  151. package/docs/AGENTS.md +57 -0
  152. package/docs/SKILL.md +40 -0
  153. package/docs/content/a2a-protocol.md +1 -1
  154. package/docs/content/actions.md +48 -8
  155. package/docs/content/agent-surfaces.md +76 -14
  156. package/docs/content/cli-adapters.md +1 -1
  157. package/docs/content/cloneable-saas.md +5 -4
  158. package/docs/content/code-agents-ui.md +1 -1
  159. package/docs/content/components.md +1 -1
  160. package/docs/content/context-awareness.md +1 -1
  161. package/docs/content/creating-templates.md +9 -7
  162. package/docs/content/drop-in-agent.md +1 -1
  163. package/docs/content/faq.md +6 -4
  164. package/docs/content/getting-started.md +63 -73
  165. package/docs/content/key-concepts.md +24 -24
  166. package/docs/content/native-chat-ui.md +4 -4
  167. package/docs/content/pure-agent-apps.md +34 -10
  168. package/docs/content/security.md +1 -1
  169. package/docs/content/server.md +1 -1
  170. package/docs/content/template-chat.md +85 -0
  171. package/docs/content/template-dispatch.md +1 -1
  172. package/docs/content/tracking.md +1 -1
  173. package/docs/content/what-is-agent-native.md +7 -6
  174. package/package.json +10 -1
  175. package/src/templates/{starter-shell-sync.spec.ts → chat-shell-sync.spec.ts} +21 -21
  176. package/src/templates/default/.agents/skills/actions/SKILL.md +5 -5
  177. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +63 -0
  178. package/src/templates/default/AGENTS.md +22 -1
  179. package/src/templates/default/actions/hello.ts +1 -1
  180. package/src/templates/default/actions/navigate.ts +1 -1
  181. package/src/templates/default/actions/view-screen.ts +1 -1
  182. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +63 -0
  183. package/src/templates/headless/.env.example +4 -0
  184. package/src/templates/headless/.prettierrc +5 -0
  185. package/src/templates/headless/AGENTS.md +58 -0
  186. package/src/templates/headless/DEVELOPING.md +22 -0
  187. package/src/templates/headless/_gitignore +36 -0
  188. package/src/templates/headless/actions/hello.ts +14 -0
  189. package/src/templates/headless/actions/run.ts +3 -0
  190. package/src/templates/headless/package.json +22 -0
  191. package/src/templates/headless/tsconfig.json +7 -0
  192. package/src/templates/ui-primitives-sync.spec.ts +2 -2
  193. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +5 -5
  194. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +63 -0
  195. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +93 -0
  196. package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +1 -1
  197. package/src/templates/workspace-core/AGENTS.md +20 -3
  198. package/src/templates/workspace-core/src/server/index.ts +1 -1
  199. package/src/templates/workspace-root/AGENTS.md +25 -5
  200. package/src/templates/workspace-root/README.md +7 -7
  201. package/docs/content/template-starter.md +0 -78
@@ -271,6 +271,107 @@ const emailStep = {
271
271
  return false;
272
272
  },
273
273
  };
274
+ const githubRepositoryStep = {
275
+ id: "github-repository",
276
+ order: 50,
277
+ required: false,
278
+ title: "Connect a GitHub repository",
279
+ description: "Optional for cloud/headless repo work. Grants connector-scoped file read and write access without cloning a repo or running code.",
280
+ methods: [
281
+ {
282
+ id: "settings",
283
+ kind: "link",
284
+ primary: true,
285
+ label: "Open GitHub token settings",
286
+ description: "Save a fine-grained token scoped to the repositories this workspace may access.",
287
+ payload: {
288
+ url: "#secrets:GITHUB_TOKEN",
289
+ external: false,
290
+ },
291
+ },
292
+ {
293
+ id: "local-env",
294
+ kind: "form",
295
+ label: "Use local .env",
296
+ description: "For local/single-tenant work, save a token and optional default owner/repo.",
297
+ payload: {
298
+ writeScope: "workspace",
299
+ fields: [
300
+ {
301
+ key: "GITHUB_TOKEN",
302
+ label: "GITHUB_TOKEN",
303
+ placeholder: "github_pat_...",
304
+ secret: true,
305
+ },
306
+ {
307
+ key: "GITHUB_REPOSITORY",
308
+ label: "GITHUB_REPOSITORY",
309
+ placeholder: "owner/repo",
310
+ },
311
+ ],
312
+ },
313
+ },
314
+ ],
315
+ isComplete: async (context) => {
316
+ const userEmail = context?.userEmail;
317
+ const orgId = context?.orgId ?? null;
318
+ if (userEmail) {
319
+ try {
320
+ const { resolveWorkspaceConnectionCredentialForApp } = await import("../workspace-connections/index.js");
321
+ const result = await resolveWorkspaceConnectionCredentialForApp({
322
+ appId: process.env.AGENT_NATIVE_APP_ID ||
323
+ process.env.APP_ID ||
324
+ process.env.npm_package_name ||
325
+ "app",
326
+ provider: "github",
327
+ key: "GITHUB_TOKEN",
328
+ userEmail,
329
+ orgId,
330
+ });
331
+ if (result.available)
332
+ return true;
333
+ }
334
+ catch {
335
+ // Fall through to local credential stores.
336
+ }
337
+ try {
338
+ const { resolveCredential } = await import("../credentials/index.js");
339
+ if (await resolveCredential("GITHUB_TOKEN", { userEmail, orgId })) {
340
+ return true;
341
+ }
342
+ }
343
+ catch {
344
+ // Fall through to app_secrets.
345
+ }
346
+ try {
347
+ const { readAppSecretMeta } = await import("../secrets/storage.js");
348
+ const refs = [{ scope: "user", scopeId: userEmail }];
349
+ if (orgId) {
350
+ refs.push({ scope: "org", scopeId: orgId }, { scope: "workspace", scopeId: orgId });
351
+ }
352
+ else {
353
+ refs.push({ scope: "workspace", scopeId: `solo:${userEmail}` });
354
+ }
355
+ for (const ref of refs) {
356
+ const meta = await readAppSecretMeta({
357
+ key: "GITHUB_TOKEN",
358
+ scope: ref.scope,
359
+ scopeId: ref.scopeId,
360
+ });
361
+ if (meta)
362
+ return true;
363
+ }
364
+ }
365
+ catch {
366
+ // Fall through to local/single-tenant env.
367
+ }
368
+ }
369
+ if (!canUseDeployCredentialFallbackForRequest())
370
+ return false;
371
+ return !!(readDeployCredentialEnv("GITHUB_TOKEN") ||
372
+ readDeployCredentialEnv("GH_TOKEN"));
373
+ },
374
+ };
274
375
  let registered = false;
275
376
  /** Idempotent. Safe to call from every plugin-mount call. */
276
377
  export function registerDefaultOnboardingSteps() {
@@ -281,5 +382,6 @@ export function registerDefaultOnboardingSteps() {
281
382
  registerOnboardingStep(databaseStep);
282
383
  registerOnboardingStep(authStep);
283
384
  registerOnboardingStep(emailStep);
385
+ registerOnboardingStep(githubRepositoryStep);
284
386
  }
285
387
  //# sourceMappingURL=default-steps.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-steps.js","sourceRoot":"","sources":["../../src/onboarding/default-steps.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default framework-level onboarding steps.\n *\n * Registered when `createOnboardingPlugin()` mounts (auto-mount or explicit).\n * Templates can override any step by registering another step with the same\n * `id` after these have been registered.\n */\n\nimport { registerOnboardingStep } from \"./registry.js\";\nimport type { OnboardingStep } from \"./types.js\";\nimport {\n PROVIDER_ENV_META,\n PROVIDER_ENV_VARS,\n} from \"../agent/engine/provider-env-vars.js\";\nimport {\n detectEngineFromUserSecrets,\n isAgentEngineSettingConfigured,\n} from \"../agent/engine/registry.js\";\nimport {\n canUseDeployCredentialFallbackForRequest,\n readDeployCredentialEnv,\n} from \"../server/credential-provider.js\";\nimport { getSetting } from \"../settings/store.js\";\n\ntype LlmKeyMethod = {\n provider: keyof typeof PROVIDER_ENV_META;\n id: string;\n label: string;\n description: string;\n primary?: boolean;\n};\n\nconst LLM_KEY_METHODS: LlmKeyMethod[] = [\n {\n provider: \"anthropic\",\n id: \"anthropic-key\",\n label: \"Anthropic\",\n description: \"Claude models with your own Anthropic key.\",\n },\n {\n provider: \"openai\",\n id: \"openai-key\",\n label: \"OpenAI\",\n description: \"GPT models with your own OpenAI key.\",\n },\n {\n provider: \"google\",\n id: \"google-key\",\n label: \"Google Gemini\",\n description: \"Gemini models with your own Google AI key.\",\n },\n {\n provider: \"openrouter\",\n id: \"openrouter-key\",\n label: \"OpenRouter\",\n description: \"OpenRouter models with your own OpenRouter key.\",\n },\n {\n provider: \"groq\",\n id: \"groq-key\",\n label: \"Groq\",\n description: \"Groq-hosted models with your own Groq key.\",\n },\n {\n provider: \"mistral\",\n id: \"mistral-key\",\n label: \"Mistral\",\n description: \"Mistral models with your own Mistral key.\",\n },\n {\n provider: \"cohere\",\n id: \"cohere-key\",\n label: \"Cohere\",\n description: \"Cohere models with your own Cohere key.\",\n },\n];\n\nconst llmStep: OnboardingStep = {\n id: \"llm\",\n order: 10,\n required: true,\n title: \"Connect an AI engine\",\n description: \"Use Builder's managed gateway, or bring your own provider key.\",\n methods: [\n {\n id: \"builder\",\n kind: \"builder-cli-auth\",\n label: \"Connect Builder\",\n description:\n \"Connect the Builder space where this app should run. This unlocks managed LLM credits, web search, browser automation, and file uploads. Cloud code changes appear when Builder Cloud Agents are available for the workspace.\",\n primary: true,\n payload: {\n scope: \"llm\",\n },\n },\n ...LLM_KEY_METHODS.map(({ provider, id, label, description, primary }) => {\n const meta = PROVIDER_ENV_META[provider];\n return {\n id,\n kind: \"form\" as const,\n label,\n description,\n ...(primary ? { primary: true } : {}),\n payload: {\n writeScope: \"workspace\" as const,\n fields: [\n {\n key: meta.envVar,\n label: meta.envVar,\n placeholder: meta.placeholder,\n secret: true,\n },\n ],\n },\n };\n }),\n ],\n isComplete: async () => {\n try {\n const { resolveHasCompleteBuilderConnection } =\n await import(\"../server/credential-provider.js\");\n if (await resolveHasCompleteBuilderConnection()) return true;\n } catch {\n if (process.env.BUILDER_PRIVATE_KEY && process.env.BUILDER_PUBLIC_KEY) {\n return true;\n }\n }\n try {\n if (await detectEngineFromUserSecrets()) return true;\n } catch {\n // Fall through to legacy/env detection.\n }\n if (\n canUseDeployCredentialFallbackForRequest() &&\n PROVIDER_ENV_VARS.some((k) => !!readDeployCredentialEnv(k))\n ) {\n return true;\n }\n try {\n return isAgentEngineSettingConfigured(await getSetting(\"agent-engine\"));\n } catch {\n return false;\n }\n },\n};\n\n/** Step 2 — where application data lives. The default DB is non-blocking. */\nconst databaseStep: OnboardingStep = {\n id: \"database\",\n order: 20,\n required: false,\n title: \"Database\",\n description:\n \"Agent-native stores app data in SQL. Set DATABASE_URL when you want to point this app at a specific database.\",\n methods: [\n {\n id: \"database-url\",\n kind: \"form\",\n label: \"Set DATABASE_URL\",\n description: \"Paste the SQL connection string this app should use.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n {\n key: \"DATABASE_URL\",\n label: \"DATABASE_URL\",\n placeholder: \"postgres://..., libsql://..., file:./data/app.db\",\n },\n {\n key: \"DATABASE_AUTH_TOKEN\",\n label: \"DATABASE_AUTH_TOKEN (if needed)\",\n placeholder: \"Token for providers such as Turso/libSQL\",\n secret: true,\n },\n ],\n },\n },\n ],\n // The default local database means this step is always satisfied.\n isComplete: () => true,\n};\n\n/** Step 3 — how users sign in. Built-in account auth is non-blocking. */\nconst authStep: OnboardingStep = {\n id: \"auth\",\n order: 30,\n required: false,\n title: \"Authentication\",\n description:\n \"Built-in email/password accounts work by default. Add OAuth or access tokens only if you want another sign-in path.\",\n methods: [\n {\n id: \"google-oauth\",\n kind: \"form\",\n label: \"Google OAuth\",\n description: \"Add Google as an optional sign-in provider.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n { key: \"GOOGLE_CLIENT_ID\", label: \"GOOGLE_CLIENT_ID\" },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"GOOGLE_CLIENT_SECRET\",\n secret: true,\n },\n ],\n },\n },\n {\n id: \"github-oauth\",\n kind: \"form\",\n label: \"GitHub OAuth\",\n description: \"Add GitHub as an optional sign-in provider.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n { key: \"GITHUB_CLIENT_ID\", label: \"GITHUB_CLIENT_ID\" },\n {\n key: \"GITHUB_CLIENT_SECRET\",\n label: \"GITHUB_CLIENT_SECRET\",\n secret: true,\n },\n ],\n },\n },\n ],\n isComplete: () => true,\n};\n\n/** Step 4 — transactional email (password resets, invitations). Optional. */\nconst emailStep: OnboardingStep = {\n id: \"email\",\n order: 40,\n required: false,\n title: \"Email delivery\",\n description:\n \"Optional for local work. Before deploying with password resets, invitations, or share notifications, connect an email provider.\",\n methods: [\n {\n id: \"resend\",\n kind: \"form\",\n label: \"Resend\",\n description: \"Use Resend for transactional email.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n {\n key: \"RESEND_API_KEY\",\n label: \"RESEND_API_KEY\",\n placeholder: \"re_...\",\n secret: true,\n },\n {\n key: \"EMAIL_FROM\",\n label: \"EMAIL_FROM (from address)\",\n placeholder: \"Agent Native <noreply@yourdomain.com>\",\n },\n {\n key: \"APP_NAME\",\n label: \"APP_NAME (shown in invite emails)\",\n placeholder: \"Acme Forms\",\n },\n ],\n },\n },\n {\n id: \"sendgrid\",\n kind: \"form\",\n label: \"SendGrid\",\n description: \"Use SendGrid for transactional email.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n {\n key: \"SENDGRID_API_KEY\",\n label: \"SENDGRID_API_KEY\",\n placeholder: \"SG....\",\n secret: true,\n },\n {\n key: \"EMAIL_FROM\",\n label: \"EMAIL_FROM (from address)\",\n placeholder: \"Agent Native <noreply@yourdomain.com>\",\n },\n ],\n },\n },\n ],\n isComplete: () => {\n if (process.env.RESEND_API_KEY) return true;\n // SendGrid rejects Resend's sandbox sender, so EMAIL_FROM must also be\n // set — otherwise sendEmail() throws at runtime even though the API key\n // is configured.\n if (process.env.SENDGRID_API_KEY) return !!process.env.EMAIL_FROM;\n return false;\n },\n};\n\nlet registered = false;\n\n/** Idempotent. Safe to call from every plugin-mount call. */\nexport function registerDefaultOnboardingSteps(): void {\n if (registered) return;\n registered = true;\n registerOnboardingStep(llmStep);\n registerOnboardingStep(databaseStep);\n registerOnboardingStep(authStep);\n registerOnboardingStep(emailStep);\n}\n"]}
1
+ {"version":3,"file":"default-steps.js","sourceRoot":"","sources":["../../src/onboarding/default-steps.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Default framework-level onboarding steps.\n *\n * Registered when `createOnboardingPlugin()` mounts (auto-mount or explicit).\n * Templates can override any step by registering another step with the same\n * `id` after these have been registered.\n */\n\nimport { registerOnboardingStep } from \"./registry.js\";\nimport type { OnboardingStep } from \"./types.js\";\nimport {\n PROVIDER_ENV_META,\n PROVIDER_ENV_VARS,\n} from \"../agent/engine/provider-env-vars.js\";\nimport {\n detectEngineFromUserSecrets,\n isAgentEngineSettingConfigured,\n} from \"../agent/engine/registry.js\";\nimport {\n canUseDeployCredentialFallbackForRequest,\n readDeployCredentialEnv,\n} from \"../server/credential-provider.js\";\nimport { getSetting } from \"../settings/store.js\";\n\ntype LlmKeyMethod = {\n provider: keyof typeof PROVIDER_ENV_META;\n id: string;\n label: string;\n description: string;\n primary?: boolean;\n};\n\nconst LLM_KEY_METHODS: LlmKeyMethod[] = [\n {\n provider: \"anthropic\",\n id: \"anthropic-key\",\n label: \"Anthropic\",\n description: \"Claude models with your own Anthropic key.\",\n },\n {\n provider: \"openai\",\n id: \"openai-key\",\n label: \"OpenAI\",\n description: \"GPT models with your own OpenAI key.\",\n },\n {\n provider: \"google\",\n id: \"google-key\",\n label: \"Google Gemini\",\n description: \"Gemini models with your own Google AI key.\",\n },\n {\n provider: \"openrouter\",\n id: \"openrouter-key\",\n label: \"OpenRouter\",\n description: \"OpenRouter models with your own OpenRouter key.\",\n },\n {\n provider: \"groq\",\n id: \"groq-key\",\n label: \"Groq\",\n description: \"Groq-hosted models with your own Groq key.\",\n },\n {\n provider: \"mistral\",\n id: \"mistral-key\",\n label: \"Mistral\",\n description: \"Mistral models with your own Mistral key.\",\n },\n {\n provider: \"cohere\",\n id: \"cohere-key\",\n label: \"Cohere\",\n description: \"Cohere models with your own Cohere key.\",\n },\n];\n\nconst llmStep: OnboardingStep = {\n id: \"llm\",\n order: 10,\n required: true,\n title: \"Connect an AI engine\",\n description: \"Use Builder's managed gateway, or bring your own provider key.\",\n methods: [\n {\n id: \"builder\",\n kind: \"builder-cli-auth\",\n label: \"Connect Builder\",\n description:\n \"Connect the Builder space where this app should run. This unlocks managed LLM credits, web search, browser automation, and file uploads. Cloud code changes appear when Builder Cloud Agents are available for the workspace.\",\n primary: true,\n payload: {\n scope: \"llm\",\n },\n },\n ...LLM_KEY_METHODS.map(({ provider, id, label, description, primary }) => {\n const meta = PROVIDER_ENV_META[provider];\n return {\n id,\n kind: \"form\" as const,\n label,\n description,\n ...(primary ? { primary: true } : {}),\n payload: {\n writeScope: \"workspace\" as const,\n fields: [\n {\n key: meta.envVar,\n label: meta.envVar,\n placeholder: meta.placeholder,\n secret: true,\n },\n ],\n },\n };\n }),\n ],\n isComplete: async () => {\n try {\n const { resolveHasCompleteBuilderConnection } =\n await import(\"../server/credential-provider.js\");\n if (await resolveHasCompleteBuilderConnection()) return true;\n } catch {\n if (process.env.BUILDER_PRIVATE_KEY && process.env.BUILDER_PUBLIC_KEY) {\n return true;\n }\n }\n try {\n if (await detectEngineFromUserSecrets()) return true;\n } catch {\n // Fall through to legacy/env detection.\n }\n if (\n canUseDeployCredentialFallbackForRequest() &&\n PROVIDER_ENV_VARS.some((k) => !!readDeployCredentialEnv(k))\n ) {\n return true;\n }\n try {\n return isAgentEngineSettingConfigured(await getSetting(\"agent-engine\"));\n } catch {\n return false;\n }\n },\n};\n\n/** Step 2 — where application data lives. The default DB is non-blocking. */\nconst databaseStep: OnboardingStep = {\n id: \"database\",\n order: 20,\n required: false,\n title: \"Database\",\n description:\n \"Agent-native stores app data in SQL. Set DATABASE_URL when you want to point this app at a specific database.\",\n methods: [\n {\n id: \"database-url\",\n kind: \"form\",\n label: \"Set DATABASE_URL\",\n description: \"Paste the SQL connection string this app should use.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n {\n key: \"DATABASE_URL\",\n label: \"DATABASE_URL\",\n placeholder: \"postgres://..., libsql://..., file:./data/app.db\",\n },\n {\n key: \"DATABASE_AUTH_TOKEN\",\n label: \"DATABASE_AUTH_TOKEN (if needed)\",\n placeholder: \"Token for providers such as Turso/libSQL\",\n secret: true,\n },\n ],\n },\n },\n ],\n // The default local database means this step is always satisfied.\n isComplete: () => true,\n};\n\n/** Step 3 — how users sign in. Built-in account auth is non-blocking. */\nconst authStep: OnboardingStep = {\n id: \"auth\",\n order: 30,\n required: false,\n title: \"Authentication\",\n description:\n \"Built-in email/password accounts work by default. Add OAuth or access tokens only if you want another sign-in path.\",\n methods: [\n {\n id: \"google-oauth\",\n kind: \"form\",\n label: \"Google OAuth\",\n description: \"Add Google as an optional sign-in provider.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n { key: \"GOOGLE_CLIENT_ID\", label: \"GOOGLE_CLIENT_ID\" },\n {\n key: \"GOOGLE_CLIENT_SECRET\",\n label: \"GOOGLE_CLIENT_SECRET\",\n secret: true,\n },\n ],\n },\n },\n {\n id: \"github-oauth\",\n kind: \"form\",\n label: \"GitHub OAuth\",\n description: \"Add GitHub as an optional sign-in provider.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n { key: \"GITHUB_CLIENT_ID\", label: \"GITHUB_CLIENT_ID\" },\n {\n key: \"GITHUB_CLIENT_SECRET\",\n label: \"GITHUB_CLIENT_SECRET\",\n secret: true,\n },\n ],\n },\n },\n ],\n isComplete: () => true,\n};\n\n/** Step 4 — transactional email (password resets, invitations). Optional. */\nconst emailStep: OnboardingStep = {\n id: \"email\",\n order: 40,\n required: false,\n title: \"Email delivery\",\n description:\n \"Optional for local work. Before deploying with password resets, invitations, or share notifications, connect an email provider.\",\n methods: [\n {\n id: \"resend\",\n kind: \"form\",\n label: \"Resend\",\n description: \"Use Resend for transactional email.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n {\n key: \"RESEND_API_KEY\",\n label: \"RESEND_API_KEY\",\n placeholder: \"re_...\",\n secret: true,\n },\n {\n key: \"EMAIL_FROM\",\n label: \"EMAIL_FROM (from address)\",\n placeholder: \"Agent Native <noreply@yourdomain.com>\",\n },\n {\n key: \"APP_NAME\",\n label: \"APP_NAME (shown in invite emails)\",\n placeholder: \"Acme Forms\",\n },\n ],\n },\n },\n {\n id: \"sendgrid\",\n kind: \"form\",\n label: \"SendGrid\",\n description: \"Use SendGrid for transactional email.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n {\n key: \"SENDGRID_API_KEY\",\n label: \"SENDGRID_API_KEY\",\n placeholder: \"SG....\",\n secret: true,\n },\n {\n key: \"EMAIL_FROM\",\n label: \"EMAIL_FROM (from address)\",\n placeholder: \"Agent Native <noreply@yourdomain.com>\",\n },\n ],\n },\n },\n ],\n isComplete: () => {\n if (process.env.RESEND_API_KEY) return true;\n // SendGrid rejects Resend's sandbox sender, so EMAIL_FROM must also be\n // set — otherwise sendEmail() throws at runtime even though the API key\n // is configured.\n if (process.env.SENDGRID_API_KEY) return !!process.env.EMAIL_FROM;\n return false;\n },\n};\n\nconst githubRepositoryStep: OnboardingStep = {\n id: \"github-repository\",\n order: 50,\n required: false,\n title: \"Connect a GitHub repository\",\n description:\n \"Optional for cloud/headless repo work. Grants connector-scoped file read and write access without cloning a repo or running code.\",\n methods: [\n {\n id: \"settings\",\n kind: \"link\",\n primary: true,\n label: \"Open GitHub token settings\",\n description:\n \"Save a fine-grained token scoped to the repositories this workspace may access.\",\n payload: {\n url: \"#secrets:GITHUB_TOKEN\",\n external: false,\n },\n },\n {\n id: \"local-env\",\n kind: \"form\",\n label: \"Use local .env\",\n description:\n \"For local/single-tenant work, save a token and optional default owner/repo.\",\n payload: {\n writeScope: \"workspace\",\n fields: [\n {\n key: \"GITHUB_TOKEN\",\n label: \"GITHUB_TOKEN\",\n placeholder: \"github_pat_...\",\n secret: true,\n },\n {\n key: \"GITHUB_REPOSITORY\",\n label: \"GITHUB_REPOSITORY\",\n placeholder: \"owner/repo\",\n },\n ],\n },\n },\n ],\n isComplete: async (context) => {\n const userEmail = context?.userEmail;\n const orgId = context?.orgId ?? null;\n if (userEmail) {\n try {\n const { resolveWorkspaceConnectionCredentialForApp } =\n await import(\"../workspace-connections/index.js\");\n const result = await resolveWorkspaceConnectionCredentialForApp({\n appId:\n process.env.AGENT_NATIVE_APP_ID ||\n process.env.APP_ID ||\n process.env.npm_package_name ||\n \"app\",\n provider: \"github\",\n key: \"GITHUB_TOKEN\",\n userEmail,\n orgId,\n });\n if (result.available) return true;\n } catch {\n // Fall through to local credential stores.\n }\n\n try {\n const { resolveCredential } = await import(\"../credentials/index.js\");\n if (await resolveCredential(\"GITHUB_TOKEN\", { userEmail, orgId })) {\n return true;\n }\n } catch {\n // Fall through to app_secrets.\n }\n\n try {\n const { readAppSecretMeta } = await import(\"../secrets/storage.js\");\n const refs: Array<{\n scope: \"user\" | \"org\" | \"workspace\";\n scopeId: string;\n }> = [{ scope: \"user\", scopeId: userEmail }];\n if (orgId) {\n refs.push(\n { scope: \"org\", scopeId: orgId },\n { scope: \"workspace\", scopeId: orgId },\n );\n } else {\n refs.push({ scope: \"workspace\", scopeId: `solo:${userEmail}` });\n }\n for (const ref of refs) {\n const meta = await readAppSecretMeta({\n key: \"GITHUB_TOKEN\",\n scope: ref.scope,\n scopeId: ref.scopeId,\n });\n if (meta) return true;\n }\n } catch {\n // Fall through to local/single-tenant env.\n }\n }\n\n if (!canUseDeployCredentialFallbackForRequest()) return false;\n return !!(\n readDeployCredentialEnv(\"GITHUB_TOKEN\") ||\n readDeployCredentialEnv(\"GH_TOKEN\")\n );\n },\n};\n\nlet registered = false;\n\n/** Idempotent. Safe to call from every plugin-mount call. */\nexport function registerDefaultOnboardingSteps(): void {\n if (registered) return;\n registered = true;\n registerOnboardingStep(llmStep);\n registerOnboardingStep(databaseStep);\n registerOnboardingStep(authStep);\n registerOnboardingStep(emailStep);\n registerOnboardingStep(githubRepositoryStep);\n}\n"]}
@@ -0,0 +1,84 @@
1
+ import { z } from "zod";
2
+ import type { ProviderApiRuntime } from "../index.js";
3
+ declare const GitHubRepoFilesActionSchema: z.ZodObject<{
4
+ operation: z.ZodEnum<{
5
+ search: "search";
6
+ list: "list";
7
+ delete: "delete";
8
+ write: "write";
9
+ read: "read";
10
+ }>;
11
+ owner: z.ZodString;
12
+ repo: z.ZodString;
13
+ path: z.ZodOptional<z.ZodString>;
14
+ ref: z.ZodOptional<z.ZodString>;
15
+ recursive: z.ZodOptional<z.ZodBoolean>;
16
+ includeDirectories: z.ZodOptional<z.ZodBoolean>;
17
+ query: z.ZodOptional<z.ZodString>;
18
+ filename: z.ZodOptional<z.ZodString>;
19
+ extension: z.ZodOptional<z.ZodString>;
20
+ language: z.ZodOptional<z.ZodString>;
21
+ page: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
22
+ perPage: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
23
+ maxFiles: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
24
+ includeTextMatches: z.ZodOptional<z.ZodBoolean>;
25
+ content: z.ZodOptional<z.ZodString>;
26
+ message: z.ZodOptional<z.ZodString>;
27
+ branch: z.ZodOptional<z.ZodString>;
28
+ sha: z.ZodOptional<z.ZodString>;
29
+ overwriteExisting: z.ZodOptional<z.ZodBoolean>;
30
+ committer: z.ZodOptional<z.ZodObject<{
31
+ name: z.ZodString;
32
+ email: z.ZodString;
33
+ date: z.ZodOptional<z.ZodString>;
34
+ }, z.core.$strip>>;
35
+ author: z.ZodOptional<z.ZodObject<{
36
+ name: z.ZodString;
37
+ email: z.ZodString;
38
+ date: z.ZodOptional<z.ZodString>;
39
+ }, z.core.$strip>>;
40
+ connectionId: z.ZodOptional<z.ZodString>;
41
+ timeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
42
+ maxBytes: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
43
+ }, z.core.$strip>;
44
+ export interface CreateGitHubRepoFilesActionOptions {
45
+ description?: string;
46
+ requireApprovalForWrites?: boolean;
47
+ }
48
+ export declare function createGitHubRepoFilesAction(runtime: Pick<ProviderApiRuntime, "listGitHubRepositoryFiles" | "searchGitHubRepositoryFiles" | "readGitHubRepositoryFile" | "writeGitHubRepositoryFile" | "deleteGitHubRepositoryFile">, options?: CreateGitHubRepoFilesActionOptions): import("../../action.js").ActionDefinition<{
49
+ operation: "search" | "list" | "delete" | "write" | "read";
50
+ owner: string;
51
+ repo: string;
52
+ path?: string | undefined;
53
+ ref?: string | undefined;
54
+ recursive?: boolean | undefined;
55
+ includeDirectories?: boolean | undefined;
56
+ query?: string | undefined;
57
+ filename?: string | undefined;
58
+ extension?: string | undefined;
59
+ language?: string | undefined;
60
+ page?: unknown;
61
+ perPage?: unknown;
62
+ maxFiles?: unknown;
63
+ includeTextMatches?: boolean | undefined;
64
+ content?: string | undefined;
65
+ message?: string | undefined;
66
+ branch?: string | undefined;
67
+ sha?: string | undefined;
68
+ overwriteExisting?: boolean | undefined;
69
+ committer?: {
70
+ name: string;
71
+ email: string;
72
+ date?: string | undefined;
73
+ } | undefined;
74
+ author?: {
75
+ name: string;
76
+ email: string;
77
+ date?: string | undefined;
78
+ } | undefined;
79
+ connectionId?: string | undefined;
80
+ timeoutMs?: unknown;
81
+ maxBytes?: unknown;
82
+ }, import("../index.js").GitHubRepositoryFileListResult | import("../index.js").GitHubRepositoryFileSearchResult | import("../index.js").GitHubRepositoryFileReadResult | import("../index.js").GitHubRepositoryFileDeleteResult>;
83
+ export { GitHubRepoFilesActionSchema };
84
+ //# sourceMappingURL=github-repo-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-repo-files.d.ts","sourceRoot":"","sources":["../../../src/provider-api/actions/github-repo-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAMV,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAQrB,QAAA,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA6H/B,CAAC;AAIH,MAAM,WAAW,kCAAkC;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,IAAI,CACX,kBAAkB,EAChB,2BAA2B,GAC3B,6BAA6B,GAC7B,0BAA0B,GAC1B,2BAA2B,GAC3B,4BAA4B,CAC/B,EACD,OAAO,GAAE,kCAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kOAsGjD;AAED,OAAO,EAAE,2BAA2B,EAAE,CAAC"}
@@ -0,0 +1,213 @@
1
+ import { defineAction } from "../../action.js";
2
+ import { z } from "zod";
3
+ const GitHubCommitIdentitySchema = z.object({
4
+ name: z.string().min(1).describe("Commit identity name."),
5
+ email: z.string().email().describe("Commit identity email."),
6
+ date: z.string().optional().describe("Optional ISO timestamp."),
7
+ });
8
+ const GitHubRepoFilesActionSchema = z.object({
9
+ operation: z
10
+ .enum(["list", "search", "read", "write", "delete"])
11
+ .describe("Operation to perform: list repository file paths, search code/files, read one file, create/update one file, or delete one file."),
12
+ owner: z.string().min(1).describe("Repository owner or organization."),
13
+ repo: z
14
+ .string()
15
+ .min(1)
16
+ .describe("Repository name, with or without a trailing .git suffix."),
17
+ path: z
18
+ .string()
19
+ .optional()
20
+ .describe("Repository-relative file or directory path. For search without query, this filters matching paths."),
21
+ ref: z
22
+ .string()
23
+ .optional()
24
+ .describe("Branch, tag, or commit-ish for list/read. Code search uses GitHub's default-branch search."),
25
+ recursive: z
26
+ .boolean()
27
+ .optional()
28
+ .describe("For list, read the repository tree recursively."),
29
+ includeDirectories: z
30
+ .boolean()
31
+ .optional()
32
+ .describe("For list, include directory entries along with files."),
33
+ query: z
34
+ .string()
35
+ .optional()
36
+ .describe("For search, a GitHub code-search term. Omit to search/filter file paths from the repository tree."),
37
+ filename: z
38
+ .string()
39
+ .optional()
40
+ .describe("For search, restrict to an exact filename."),
41
+ extension: z
42
+ .string()
43
+ .optional()
44
+ .describe("For search, restrict to a file extension such as ts or md."),
45
+ language: z
46
+ .string()
47
+ .optional()
48
+ .describe("For code search, restrict to a GitHub language qualifier."),
49
+ page: z.coerce
50
+ .number()
51
+ .int()
52
+ .min(1)
53
+ .max(100)
54
+ .optional()
55
+ .describe("For code search, result page to fetch."),
56
+ perPage: z.coerce
57
+ .number()
58
+ .int()
59
+ .min(1)
60
+ .max(100)
61
+ .optional()
62
+ .describe("For code search, results per page."),
63
+ maxFiles: z.coerce
64
+ .number()
65
+ .int()
66
+ .min(1)
67
+ .max(10_000)
68
+ .optional()
69
+ .describe("Maximum file entries to return from list or tree-filter search."),
70
+ includeTextMatches: z
71
+ .boolean()
72
+ .optional()
73
+ .describe("For code search, request GitHub text-match metadata."),
74
+ content: z
75
+ .string()
76
+ .optional()
77
+ .describe("For write, complete replacement UTF-8 file content."),
78
+ message: z.string().optional().describe("For write, commit message."),
79
+ branch: z
80
+ .string()
81
+ .optional()
82
+ .describe("For write, branch to create/update on. Defaults to GitHub's default branch."),
83
+ sha: z
84
+ .string()
85
+ .optional()
86
+ .describe("For write updates, the current blob SHA. The action reads it first by default when omitted."),
87
+ overwriteExisting: z
88
+ .boolean()
89
+ .optional()
90
+ .describe("For write, read the current file SHA first when sha is omitted, then update if it exists. Defaults to true."),
91
+ committer: GitHubCommitIdentitySchema.optional().describe("Optional GitHub contents API committer identity."),
92
+ author: GitHubCommitIdentitySchema.optional().describe("Optional GitHub contents API author identity."),
93
+ connectionId: z
94
+ .string()
95
+ .trim()
96
+ .min(1)
97
+ .optional()
98
+ .describe("Optional workspace GitHub connection id to use."),
99
+ timeoutMs: z.coerce
100
+ .number()
101
+ .int()
102
+ .min(1_000)
103
+ .max(120_000)
104
+ .optional()
105
+ .describe("Request timeout in milliseconds."),
106
+ maxBytes: z.coerce
107
+ .number()
108
+ .int()
109
+ .min(1_000)
110
+ .max(4 * 1024 * 1024)
111
+ .optional()
112
+ .describe("Maximum provider response bytes to read."),
113
+ });
114
+ export function createGitHubRepoFilesAction(runtime, options = {}) {
115
+ const requireApprovalForWrites = options.requireApprovalForWrites ?? true;
116
+ return defineAction({
117
+ description: options.description ??
118
+ "List, search, read, create/update, and delete GitHub repository files through the configured GitHub connector or GITHUB_TOKEN. Uses GitHub REST APIs directly; it does not clone repositories or use a filesystem sandbox.",
119
+ schema: GitHubRepoFilesActionSchema,
120
+ http: false,
121
+ needsApproval: requireApprovalForWrites
122
+ ? (args) => args.operation === "write" || args.operation === "delete"
123
+ : false,
124
+ run: async (args) => {
125
+ if (args.operation === "list") {
126
+ return runtime.listGitHubRepositoryFiles({
127
+ owner: args.owner,
128
+ repo: args.repo,
129
+ path: args.path,
130
+ ref: args.ref,
131
+ recursive: args.recursive,
132
+ includeDirectories: args.includeDirectories,
133
+ maxFiles: args.maxFiles,
134
+ connectionId: args.connectionId,
135
+ timeoutMs: args.timeoutMs,
136
+ maxBytes: args.maxBytes,
137
+ });
138
+ }
139
+ if (args.operation === "search") {
140
+ return runtime.searchGitHubRepositoryFiles({
141
+ owner: args.owner,
142
+ repo: args.repo,
143
+ query: args.query,
144
+ path: args.path,
145
+ filename: args.filename,
146
+ extension: args.extension,
147
+ language: args.language,
148
+ ref: args.ref,
149
+ perPage: args.perPage,
150
+ page: args.page,
151
+ maxFiles: args.maxFiles,
152
+ includeTextMatches: args.includeTextMatches,
153
+ connectionId: args.connectionId,
154
+ timeoutMs: args.timeoutMs,
155
+ maxBytes: args.maxBytes,
156
+ });
157
+ }
158
+ if (args.operation === "read") {
159
+ if (!args.path)
160
+ throw new Error("path is required for read.");
161
+ return runtime.readGitHubRepositoryFile({
162
+ owner: args.owner,
163
+ repo: args.repo,
164
+ path: args.path,
165
+ ref: args.ref,
166
+ connectionId: args.connectionId,
167
+ timeoutMs: args.timeoutMs,
168
+ maxBytes: args.maxBytes,
169
+ });
170
+ }
171
+ if (!args.path) {
172
+ throw new Error(`path is required for ${args.operation}.`);
173
+ }
174
+ if (args.operation === "delete") {
175
+ return runtime.deleteGitHubRepositoryFile({
176
+ owner: args.owner,
177
+ repo: args.repo,
178
+ path: args.path,
179
+ message: args.message ?? `Delete ${args.path}`,
180
+ branch: args.branch,
181
+ sha: args.sha,
182
+ committer: args.committer,
183
+ author: args.author,
184
+ connectionId: args.connectionId,
185
+ timeoutMs: args.timeoutMs,
186
+ maxBytes: args.maxBytes,
187
+ });
188
+ }
189
+ if (args.content === undefined) {
190
+ throw new Error("content is required for write.");
191
+ }
192
+ if (!args.message)
193
+ throw new Error("message is required for write.");
194
+ return runtime.writeGitHubRepositoryFile({
195
+ owner: args.owner,
196
+ repo: args.repo,
197
+ path: args.path,
198
+ content: args.content,
199
+ message: args.message,
200
+ branch: args.branch,
201
+ sha: args.sha,
202
+ overwriteExisting: args.overwriteExisting ?? true,
203
+ committer: args.committer,
204
+ author: args.author,
205
+ connectionId: args.connectionId,
206
+ timeoutMs: args.timeoutMs,
207
+ maxBytes: args.maxBytes,
208
+ });
209
+ },
210
+ });
211
+ }
212
+ export { GitHubRepoFilesActionSchema };
213
+ //# sourceMappingURL=github-repo-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-repo-files.js","sourceRoot":"","sources":["../../../src/provider-api/actions/github-repo-files.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction } from \"../../action.js\";\nimport { z } from \"zod\";\nimport type {\n GitHubRepositoryFileDeleteArgs,\n GitHubRepositoryFileListArgs,\n GitHubRepositoryFileReadArgs,\n GitHubRepositoryFileSearchArgs,\n GitHubRepositoryFileWriteArgs,\n ProviderApiRuntime,\n} from \"../index.js\";\n\nconst GitHubCommitIdentitySchema = z.object({\n name: z.string().min(1).describe(\"Commit identity name.\"),\n email: z.string().email().describe(\"Commit identity email.\"),\n date: z.string().optional().describe(\"Optional ISO timestamp.\"),\n});\n\nconst GitHubRepoFilesActionSchema = z.object({\n operation: z\n .enum([\"list\", \"search\", \"read\", \"write\", \"delete\"])\n .describe(\n \"Operation to perform: list repository file paths, search code/files, read one file, create/update one file, or delete one file.\",\n ),\n owner: z.string().min(1).describe(\"Repository owner or organization.\"),\n repo: z\n .string()\n .min(1)\n .describe(\"Repository name, with or without a trailing .git suffix.\"),\n path: z\n .string()\n .optional()\n .describe(\n \"Repository-relative file or directory path. For search without query, this filters matching paths.\",\n ),\n ref: z\n .string()\n .optional()\n .describe(\n \"Branch, tag, or commit-ish for list/read. Code search uses GitHub's default-branch search.\",\n ),\n recursive: z\n .boolean()\n .optional()\n .describe(\"For list, read the repository tree recursively.\"),\n includeDirectories: z\n .boolean()\n .optional()\n .describe(\"For list, include directory entries along with files.\"),\n query: z\n .string()\n .optional()\n .describe(\n \"For search, a GitHub code-search term. Omit to search/filter file paths from the repository tree.\",\n ),\n filename: z\n .string()\n .optional()\n .describe(\"For search, restrict to an exact filename.\"),\n extension: z\n .string()\n .optional()\n .describe(\"For search, restrict to a file extension such as ts or md.\"),\n language: z\n .string()\n .optional()\n .describe(\"For code search, restrict to a GitHub language qualifier.\"),\n page: z.coerce\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"For code search, result page to fetch.\"),\n perPage: z.coerce\n .number()\n .int()\n .min(1)\n .max(100)\n .optional()\n .describe(\"For code search, results per page.\"),\n maxFiles: z.coerce\n .number()\n .int()\n .min(1)\n .max(10_000)\n .optional()\n .describe(\n \"Maximum file entries to return from list or tree-filter search.\",\n ),\n includeTextMatches: z\n .boolean()\n .optional()\n .describe(\"For code search, request GitHub text-match metadata.\"),\n content: z\n .string()\n .optional()\n .describe(\"For write, complete replacement UTF-8 file content.\"),\n message: z.string().optional().describe(\"For write, commit message.\"),\n branch: z\n .string()\n .optional()\n .describe(\n \"For write, branch to create/update on. Defaults to GitHub's default branch.\",\n ),\n sha: z\n .string()\n .optional()\n .describe(\n \"For write updates, the current blob SHA. The action reads it first by default when omitted.\",\n ),\n overwriteExisting: z\n .boolean()\n .optional()\n .describe(\n \"For write, read the current file SHA first when sha is omitted, then update if it exists. Defaults to true.\",\n ),\n committer: GitHubCommitIdentitySchema.optional().describe(\n \"Optional GitHub contents API committer identity.\",\n ),\n author: GitHubCommitIdentitySchema.optional().describe(\n \"Optional GitHub contents API author identity.\",\n ),\n connectionId: z\n .string()\n .trim()\n .min(1)\n .optional()\n .describe(\"Optional workspace GitHub connection id to use.\"),\n timeoutMs: z.coerce\n .number()\n .int()\n .min(1_000)\n .max(120_000)\n .optional()\n .describe(\"Request timeout in milliseconds.\"),\n maxBytes: z.coerce\n .number()\n .int()\n .min(1_000)\n .max(4 * 1024 * 1024)\n .optional()\n .describe(\"Maximum provider response bytes to read.\"),\n});\n\ntype GitHubRepoFilesActionArgs = z.infer<typeof GitHubRepoFilesActionSchema>;\n\nexport interface CreateGitHubRepoFilesActionOptions {\n description?: string;\n requireApprovalForWrites?: boolean;\n}\n\nexport function createGitHubRepoFilesAction(\n runtime: Pick<\n ProviderApiRuntime,\n | \"listGitHubRepositoryFiles\"\n | \"searchGitHubRepositoryFiles\"\n | \"readGitHubRepositoryFile\"\n | \"writeGitHubRepositoryFile\"\n | \"deleteGitHubRepositoryFile\"\n >,\n options: CreateGitHubRepoFilesActionOptions = {},\n) {\n const requireApprovalForWrites = options.requireApprovalForWrites ?? true;\n return defineAction({\n description:\n options.description ??\n \"List, search, read, create/update, and delete GitHub repository files through the configured GitHub connector or GITHUB_TOKEN. Uses GitHub REST APIs directly; it does not clone repositories or use a filesystem sandbox.\",\n schema: GitHubRepoFilesActionSchema,\n http: false,\n needsApproval: requireApprovalForWrites\n ? (args: GitHubRepoFilesActionArgs) =>\n args.operation === \"write\" || args.operation === \"delete\"\n : false,\n run: async (args) => {\n if (args.operation === \"list\") {\n return runtime.listGitHubRepositoryFiles({\n owner: args.owner,\n repo: args.repo,\n path: args.path,\n ref: args.ref,\n recursive: args.recursive,\n includeDirectories: args.includeDirectories,\n maxFiles: args.maxFiles,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n } satisfies GitHubRepositoryFileListArgs);\n }\n\n if (args.operation === \"search\") {\n return runtime.searchGitHubRepositoryFiles({\n owner: args.owner,\n repo: args.repo,\n query: args.query,\n path: args.path,\n filename: args.filename,\n extension: args.extension,\n language: args.language,\n ref: args.ref,\n perPage: args.perPage,\n page: args.page,\n maxFiles: args.maxFiles,\n includeTextMatches: args.includeTextMatches,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n } satisfies GitHubRepositoryFileSearchArgs);\n }\n\n if (args.operation === \"read\") {\n if (!args.path) throw new Error(\"path is required for read.\");\n return runtime.readGitHubRepositoryFile({\n owner: args.owner,\n repo: args.repo,\n path: args.path,\n ref: args.ref,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n } satisfies GitHubRepositoryFileReadArgs);\n }\n\n if (!args.path) {\n throw new Error(`path is required for ${args.operation}.`);\n }\n if (args.operation === \"delete\") {\n return runtime.deleteGitHubRepositoryFile({\n owner: args.owner,\n repo: args.repo,\n path: args.path,\n message: args.message ?? `Delete ${args.path}`,\n branch: args.branch,\n sha: args.sha,\n committer: args.committer,\n author: args.author,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n } satisfies GitHubRepositoryFileDeleteArgs);\n }\n\n if (args.content === undefined) {\n throw new Error(\"content is required for write.\");\n }\n if (!args.message) throw new Error(\"message is required for write.\");\n return runtime.writeGitHubRepositoryFile({\n owner: args.owner,\n repo: args.repo,\n path: args.path,\n content: args.content,\n message: args.message,\n branch: args.branch,\n sha: args.sha,\n overwriteExisting: args.overwriteExisting ?? true,\n committer: args.committer,\n author: args.author,\n connectionId: args.connectionId,\n timeoutMs: args.timeoutMs,\n maxBytes: args.maxBytes,\n } satisfies GitHubRepositoryFileWriteArgs);\n },\n });\n}\n\nexport { GitHubRepoFilesActionSchema };\n"]}
@@ -0,0 +1,11 @@
1
+ import type { ActionEntry } from "../agent/production-agent.js";
2
+ import type { CredentialContext } from "../credentials/index.js";
3
+ import { type ProviderApiCredentialResolver } from "./index.js";
4
+ interface GitHubRepoToolOptions {
5
+ appId?: string;
6
+ getCredentialContext?: () => CredentialContext | null;
7
+ resolveCredential?: ProviderApiCredentialResolver;
8
+ }
9
+ export declare function createGitHubRepoToolEntries(options?: GitHubRepoToolOptions): Record<string, ActionEntry>;
10
+ export {};
11
+ //# sourceMappingURL=github-repo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-repo.d.ts","sourceRoot":"","sources":["../../src/provider-api/github-repo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAGL,KAAK,6BAA6B,EAEnC,MAAM,YAAY,CAAC;AAEpB,UAAU,qBAAqB;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,iBAAiB,GAAG,IAAI,CAAC;IACtD,iBAAiB,CAAC,EAAE,6BAA6B,CAAC;CACnD;AAmfD,wBAAgB,2BAA2B,CACzC,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CA2J7B"}