@standardagents/agentbuilder-template 0.45.3 → 0.45.5

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.
package/dist/index.js CHANGED
@@ -116,10 +116,11 @@ This project is linked to a Standard Agents platform account. The CLI wrote that
116
116
 
117
117
  Usage through the platform key is billed to the platform account. To use your own provider account, set that provider's key in \`.dev.vars\`; see \`agents/models/AGENTS.md\`. A project without \`STANDARD_AGENTS_API_KEY\` needs a provider key for each provider it uses.
118
118
 
119
- Never guess a model ID. Take it from the provider's published model list, or from the current model guide:
119
+ Never guess a model ID. Choose one from the current model guide, then confirm the exact ID in the provider's list. Both commands work with the platform key alone:
120
120
 
121
121
  \`\`\`bash
122
122
  npx @standardagents/cli@latest current-models
123
+ npx @standardagents/cli@latest available-models --provider=openai
123
124
  \`\`\`
124
125
 
125
126
  \`.dev.vars\` holds secrets and is ignored by Git. Do not commit it or copy its values into source files.
@@ -141,6 +142,7 @@ package.json Dependencies; the project owns its versions
141
142
  vite.config.ts Loads the builder() plugin
142
143
  tsconfig.json
143
144
  pnpm-workspace.yaml pnpm settings for this project
145
+ .npmrc Installs @standardagents packages from public npm
144
146
  .dev.vars Local secrets (not committed)
145
147
  agents/
146
148
  \u251C\u2500\u2500 agents/ Agent definitions; starts with guide_agent.ts
@@ -156,6 +158,8 @@ agents/
156
158
 
157
159
  Every directory under \`agents/\` contains an \`AGENTS.md\` and a \`CLAUDE.md\` link to it. The \`builder()\` plugin generates the Worker entry, the Cloudflare configuration, and the \`.agents/\` type files. Do not add a Wrangler config, a Worker entry file, or the Cloudflare Vite plugin.
158
160
 
161
+ \`.npmrc\` and \`pnpm-workspace.yaml\` name public npm as the registry for \`@standardagents\` packages. Commit both files with the lockfile, and keep tokens and private registry addresses out of them.
162
+
159
163
  ## Naming
160
164
 
161
165
  - A model, prompt, or agent is named by its \`name\` field. Keep the file name the same.
@@ -230,12 +234,63 @@ On a plan that includes deployment, the platform builds and deploys this project
230
234
  git push
231
235
  \`\`\`
232
236
 
233
- \`npx @standardagents/cli@latest deploy\` does the same push. The local \`build\` script stops with a message on purpose: builds run on the platform, from the committed \`package.json\` and lockfile. Commit both.
237
+ The local \`build\` script stops with a message on purpose: builds run on the platform, from the committed \`package.json\` and lockfile. Commit both.
238
+
239
+ A push that git accepts is not a deploy. The platform builds the commit after the push, and the build can fail. \`deploy\` does the same push, then follows the build and reports its result:
240
+
241
+ \`\`\`bash
242
+ npx @standardagents/cli@latest deploy
243
+ \`\`\`
244
+
245
+ It exits 0 only when the commit was deployed. Pushes to the default branch deploy to production. Pushes to other branches deploy a preview.
246
+
247
+ ## After a push
248
+
249
+ Check every push. These commands read the platform builds of this project with the project key in \`.dev.vars\`, or with the account sign-in from \`npx @standardagents/cli@latest login\`. \`rollback\` and \`redeploy\` need that sign-in. Each command accepts \`--json\` and never prompts.
250
+
251
+ \`\`\`bash
252
+ npx @standardagents/cli@latest builds # recent builds: id, status, environment, commit, branch
253
+ npx @standardagents/cli@latest builds status # the build of the checked-out commit
254
+ npx @standardagents/cli@latest builds status --commit <sha> # the build of another commit
255
+ npx @standardagents/cli@latest builds status <build> --wait # wait for a running build to end
256
+ npx @standardagents/cli@latest builds logs <build> # the build log
257
+ npx @standardagents/cli@latest builds logs <build> --follow # stream the log of a running build
258
+ npx @standardagents/cli@latest builds retry <build> --wait # start a failed build again and wait for it
259
+ npx @standardagents/cli@latest rollback --yes --wait # make the earlier production build live again
260
+ npx @standardagents/cli@latest redeploy # deploy the live build again after an environment change
261
+ \`\`\`
262
+
263
+ 1. After \`git push\`, run \`builds status --wait\`. It waits while the build is \`queued\`, \`building\`, or \`deploying\`.
264
+ 2. When the status is \`failed\`, read \`builds logs\`, fix the cause in a new commit, and push again. Use \`builds retry\` only when the failure was not caused by the code.
265
+ 3. When production is broken after a build went live, run \`rollback --yes --wait\`, then fix the code in a new commit.
266
+
267
+ Exit codes are the same for every command:
268
+
269
+ | Code | Meaning | Next step |
270
+ | --- | --- | --- |
271
+ | 0 | Done. For a wait: the commit was deployed. | None. |
272
+ | 1 | The build failed, or the platform refused the request. | Read \`builds logs\`. |
273
+ | 2 | The command line, the checkout, or the named build is not usable. | Read the message. |
274
+ | 3 | Not signed in, or the command needs an account sign-in. | Ask the user to run \`npx @standardagents/cli@latest login\`. |
275
+ | 4 | The platform needs the terms accepted before it builds. | Ask the user to run \`npx @standardagents/cli terms accept\`. It starts the refused build after the acceptance; \`npx @standardagents/cli builds retry\` starts it later. |
276
+ | 5 | The time limit passed while the build was still in progress. | Run \`builds status --wait\` again, or raise \`--timeout <seconds>\`. |
277
+
278
+ Only a person can sign in or accept the terms. Do not try to do either for the user.
279
+
280
+ If \`git push\` prints lines that start with \`remote: Standard Agents:\`, the platform stored the push but started no build. Tell the user what the lines say. For the terms notice, the user runs \`npx @standardagents/cli terms accept\`. An acceptance starts no build: the command lists the deploy that waits and starts it (with \`--agree\`, with no second question). To start it later, run \`npx @standardagents/cli builds retry\` on the pushed branch.
281
+
282
+ When the platform updates its terms, a deploy can wait until an account member accepts them. \`npx @standardagents/cli@latest terms\` shows the documents and whether the signed-in person accepted them, and \`npx @standardagents/cli@latest terms accept\` records the acceptance. Acceptance is a legal agreement by that person: a coding agent shows them both links and the acknowledgement sentence the command prints. Without a terminal the command records nothing and prints the command that accepts those versions, \`terms accept --agree --terms-version <version> --privacy-version <version>\`. The coding agent runs it only after they say yes. If a document changed after they reviewed it, the command records nothing and prints the current documents, and the coding agent asks again.
283
+
284
+ ## Hosting
285
+
286
+ The Standard Agents Builder runtime that this project installs is licensed for local development, and for production on Standard Agents hosting only. The agents defined in this project belong to the user and are portable: they can run on any runtime that conforms to the Standard Agent Specification. The provider packages can run on any conforming runtime too, and the client libraries (\`@standardagents/client\`, \`@standardagents/react\`, \`@standardagents/vue\`) can run in any application on any host.
287
+
288
+ If the user asks to host this project anywhere else, tell them those two facts. Do not help deploy this runtime to another host.
234
289
 
235
290
  ## More documentation
236
291
 
237
292
  - Reference for each definition type: the \`AGENTS.md\` in its directory.
238
- - Guides and API reference: https://docs.standardagentbuilder.com
293
+ - Guides and API reference: https://docs.standardagents.ai
239
294
  - For coding agents, a longer design guide: \`npx @standardagents/cli@latest skill\`
240
295
  `;
241
296
 
@@ -314,7 +369,7 @@ npx @standardagents/cli@latest current-models
314
369
  npx @standardagents/cli@latest available-models --provider=openai
315
370
  \`\`\`
316
371
 
317
- The first prints a current guide to which models suit which work. The second lists every ID a provider serves, and needs that provider's own key in \`.dev.vars\`; the platform key alone is not enough for it.
372
+ The first prints a current guide to which models suit which work. The second lists every ID a provider serves to this project. It uses the provider's own key when \`.dev.vars\` has one, and the platform key otherwise, so it works in a platform-linked project as it is. For a provider from \`agents/providers/\`, pass that provider's name; the command uses the key and base URL its definition declares.
318
373
 
319
374
  OpenRouter IDs include the lab, such as \`google/gemini-2.5-flash\`. Other providers use the lab's own ID, such as \`gpt-5.4-mini\`.
320
375
 
@@ -368,7 +423,7 @@ To reach an API that is compatible with an installed provider package but has it
368
423
 
369
424
  ## Documentation
370
425
 
371
- Full reference: https://docs.standardagentbuilder.com/api-reference/define/model
426
+ Full reference: https://docs.standardagents.ai/api-reference/define/model
372
427
  `;
373
428
 
374
429
  // src/docs/providers.ts
@@ -441,7 +496,7 @@ throw new ProviderError(message, 'server_error', status, retryAfter, {
441
496
 
442
497
  ## Documentation
443
498
 
444
- Full reference: https://docs.standardagentbuilder.com/api-reference/define/model
499
+ Full reference: https://docs.standardagents.ai/api-reference/define/model
445
500
  `;
446
501
 
447
502
  // src/docs/prompts.ts
@@ -467,7 +522,7 @@ A prompt holds the system instructions for a model, selects the model, and lists
467
522
  | \`variables\` | array | No | Variables this prompt needs: \`name\`, \`type\`, \`required\`, \`scoped\`, \`description\` |
468
523
  | \`env\` | \`Record<string, string>\` | No | Default values for variables |
469
524
  | \`hooks\` | \`string[]\` | No | Hook IDs to run for this prompt. Replaces the agent's hooks |
470
- | \`reasoning\` | \`object\` | No | Reasoning settings: \`level\`, \`maxTokens\`, \`exclude\` |
525
+ | \`reasoning\` | \`object\` | No | Reasoning settings: \`level\`, \`maxTokens\`, \`exclude\`, \`include\` |
471
526
  | \`providerOptions\` | \`object\` | No | Request options for the model's provider |
472
527
 
473
528
  ## A prompt with tools
@@ -620,6 +675,8 @@ export default definePrompt({
620
675
 
621
676
  \`exclude: true\` keeps the reasoning text out of the reply. \`maxTokens\` caps reasoning tokens for models that take a budget. Do not set \`reasoning.effort\`; it is rejected.
622
677
 
678
+ The runtime sends the stored reasoning of earlier assistant messages back to the model on later requests. Many reasoning models need this. Set \`include: false\` to stop sending it. The reasoning stays in the message record either way.
679
+
623
680
  Google models reached through OpenRouter (\`google/gemini-*\`) need a reasoning level before they call tools reliably. Set \`reasoning: { level: 33 }\` or higher on a prompt that gives one of those models tools.
624
681
 
625
682
  ## Hooks
@@ -635,7 +692,7 @@ Google models reached through OpenRouter (\`google/gemini-*\`) need a reasoning
635
692
 
636
693
  ## Documentation
637
694
 
638
- Full reference: https://docs.standardagentbuilder.com/api-reference/define/prompt
695
+ Full reference: https://docs.standardagents.ai/api-reference/define/prompt
639
696
  `;
640
697
 
641
698
  // src/docs/agents.ts
@@ -689,7 +746,7 @@ The prompt \`customer_support\` is in \`agents/prompts/AGENTS.md\`, the tool \`c
689
746
  | \`maxSessionTurns\` | \`number\` | No | The most exchanges one session may take |
690
747
  | \`exposeAsTool\` | \`boolean\` | No | Let prompts and other agents call this agent |
691
748
  | \`toolDescription\` | \`string\` | With \`exposeAsTool\` | What a calling model is told about this agent |
692
- | \`primary\` | \`boolean\` | No | Set \`false\` to hide the agent from agent lists. Default \`true\` |
749
+ | \`primary\` | \`boolean\` | No | Set \`false\` for an internal agent. \`GET /api/agents?primary=true\` leaves it out; the unfiltered list and thread creation still include it. Default \`true\` |
693
750
  | \`env\` | \`Record<string, string>\` | No | Default variable values |
694
751
  | \`hooks\` | \`string[]\` | No | Hook IDs to run. A prompt's own \`hooks\` replace these for that prompt |
695
752
  | \`parentHooks\` | array | No | Hooks this agent adds to an agent that composes it |
@@ -951,7 +1008,7 @@ A failed agent is missing from the builder UI's agent list, and the UI shows the
951
1008
 
952
1009
  ## Documentation
953
1010
 
954
- Full reference: https://docs.standardagentbuilder.com/api-reference/define/agent
1011
+ Full reference: https://docs.standardagents.ai/api-reference/define/agent
955
1012
  `;
956
1013
 
957
1014
  // src/docs/handlers.ts
@@ -1044,7 +1101,7 @@ A handler side can declare \`subagents\`, with the same options as a prompt side
1044
1101
 
1045
1102
  ## Documentation
1046
1103
 
1047
- Agent reference: https://docs.standardagentbuilder.com/api-reference/define/agent
1104
+ Agent reference: https://docs.standardagents.ai/api-reference/define/agent
1048
1105
  `;
1049
1106
 
1050
1107
  // src/docs/tools.ts
@@ -1304,7 +1361,7 @@ Values come from, in order: the thread, the agent's \`env\`, the prompt's \`env\
1304
1361
 
1305
1362
  ## Sandboxed code
1306
1363
 
1307
- Use \`state.runCode()\` to run JavaScript or TypeScript that a model or a user wrote. Never use \`eval\` or \`new Function\`. The sandbox has no network, file, or thread access. Pass in only the functions the code may call.
1364
+ Use \`state.runCode()\` to run JavaScript or TypeScript that a model or a user wrote. Never use \`eval\` or \`new Function\`. The sandbox has no network, file, or thread access. Pass in only the functions the code may call. The code can call and await those functions at the top level of a module or inside an exported function.
1308
1365
 
1309
1366
  \`\`\`typescript
1310
1367
  // agents/tools/calculate.ts
@@ -1339,7 +1396,7 @@ export default defineTool({
1339
1396
 
1340
1397
  ## Documentation
1341
1398
 
1342
- Full reference: https://docs.standardagentbuilder.com/api-reference/define/tool
1399
+ Full reference: https://docs.standardagents.ai/api-reference/define/tool
1343
1400
  `;
1344
1401
 
1345
1402
  // src/docs/hooks.ts
@@ -1387,8 +1444,8 @@ Hooks that change data return the new value.
1387
1444
  | \`before_create_message\` | \`message: Message\` | \`Message\` | Before a message is stored |
1388
1445
  | \`before_update_message\` | \`id: string, updates\` | \`updates\` | Before a stored message is changed |
1389
1446
  | \`before_store_tool_result\` | \`toolCall, result\` | \`result\` | Before a tool result is stored |
1390
- | \`after_tool_call_success\` | \`toolCall, result\` | \`result\`, or \`null\` to drop the call | After a tool succeeds |
1391
- | \`after_tool_call_failure\` | \`toolCall, result\` | \`result\`, or \`null\` to drop the call | After a tool fails |
1447
+ | \`after_tool_call_success\` | \`toolCall, result\` | \`result\`, or \`null\` to keep the result unchanged | After a tool succeeds |
1448
+ | \`after_tool_call_failure\` | \`toolCall, result\` | \`result\`, or \`null\` to keep the result unchanged | After a tool fails |
1392
1449
 
1393
1450
  Hooks that observe return nothing.
1394
1451
 
@@ -1444,7 +1501,7 @@ export default defineHook({
1444
1501
  });
1445
1502
  \`\`\`
1446
1503
 
1447
- In \`after_tool_call_success\` and \`after_tool_call_failure\`, returning \`null\` removes the tool call and its result from the history. A hook that only observes must return the \`result\` it was given.
1504
+ In \`after_tool_call_success\` and \`after_tool_call_failure\`, returning \`null\` or \`undefined\` keeps the result as it is, and later hooks still run. Return a new result to change what is stored. A hook cannot remove a tool call from the history.
1448
1505
 
1449
1506
  Replace a failed result with a fallback the model can use:
1450
1507
 
@@ -1556,7 +1613,7 @@ Three hooks run for a user instead of a thread. They receive a \`UserState\` (se
1556
1613
 
1557
1614
  ## Documentation
1558
1615
 
1559
- Full reference: https://docs.standardagentbuilder.com/api-reference/define/hook
1616
+ Full reference: https://docs.standardagents.ai/api-reference/define/hook
1560
1617
  `;
1561
1618
 
1562
1619
  // src/docs/api.ts
@@ -1642,7 +1699,7 @@ export default defineThreadEndpoint(async (req, state) => {
1642
1699
 
1643
1700
  Each note has its own key. Requests to a thread endpoint can run at the same time, and \`getValue()\` followed by \`setValue()\` is two separate steps. An endpoint that read one shared list, changed it, and wrote it back could overwrite a note that another request had just added. Give each record its own key, as above, so no request rewrites another's data.
1644
1701
 
1645
- \`state.emit()\` sends a live event to clients connected to the thread. Events are not stored. A client that reconnects must read the data again.
1702
+ \`state.emit()\` sends a live event to clients connected to the thread. When the data is \`undefined\`, clients receive \`data: null\`. Events are not stored. A client that reconnects must read the data again.
1646
1703
 
1647
1704
  ## Route parameters
1648
1705
 
@@ -1744,7 +1801,7 @@ Let unexpected exceptions throw. The caller receives HTTP 500 with code \`intern
1744
1801
 
1745
1802
  ## Documentation
1746
1803
 
1747
- Full reference: https://docs.standardagentbuilder.com/core-concepts/api
1804
+ Full reference: https://docs.standardagents.ai/core-concepts/api
1748
1805
  `;
1749
1806
 
1750
1807
  // src/docs/users.ts
@@ -1899,7 +1956,7 @@ export default definePrompt({
1899
1956
 
1900
1957
  You have one tool, read_docs. It reads a page from the two documentation sites:
1901
1958
 
1902
- - Builder documentation. Its index is https://docs.standardagentbuilder.com/llms.txt
1959
+ - Builder documentation. Its index is https://docs.standardagents.ai/llms.txt
1903
1960
  - The Standard Agent Specification. Its index is https://standardagentspec.org/llms.txt
1904
1961
 
1905
1962
  Each index lists a Markdown URL for every page.
@@ -1924,13 +1981,13 @@ var READ_DOCS_TOOL = `import { defineTool } from '@standardagents/builder';
1924
1981
  import { z } from 'zod';
1925
1982
 
1926
1983
  // The only sites this tool reads. A URL on any other host is refused before a request is made.
1927
- const SITES = ['docs.standardagentbuilder.com', 'standardagentspec.org'];
1984
+ const SITES = ['docs.standardagents.ai', 'standardagentspec.org'];
1928
1985
  // About 15,000 tokens. Every page listed in the two indexes is shorter than this.
1929
1986
  const MAX_CHARACTERS = 60_000;
1930
1987
 
1931
1988
  export default defineTool({
1932
1989
  description:
1933
- 'Read one page of the Standard Agents Builder documentation or the Standard Agent Specification. Returns the page as Markdown. Start with an index: https://docs.standardagentbuilder.com/llms.txt or https://standardagentspec.org/llms.txt.',
1990
+ 'Read one page of the Standard Agents Builder documentation or the Standard Agent Specification. Returns the page as Markdown. Start with an index: https://docs.standardagents.ai/llms.txt or https://standardagentspec.org/llms.txt.',
1934
1991
  args: z.object({
1935
1992
  url: z.string().describe('The https URL of an index or of a Markdown page that an index lists'),
1936
1993
  }),
@@ -1994,6 +2051,7 @@ var STARTER_AGENT_FILES = [
1994
2051
  ];
1995
2052
 
1996
2053
  // src/index.ts
2054
+ var BUILD_GUARD_SCRIPT = "echo 'Standard Agents projects build and deploy on the platform. Push your commit (git push or agents deploy) to trigger a build. The Standard Agents Builder runtime is licensed for production on Standard Agents hosting only. See the LICENSE file in @standardagents/builder.' && exit 1";
1997
2055
  var FIRST_PARTY_PROVIDER_PACKAGES = [
1998
2056
  "@standardagents/anthropic",
1999
2057
  "@standardagents/cloudflare",
@@ -2015,7 +2073,7 @@ var APPROVED_DEPENDENCY_BUILD_SCRIPTS = [
2015
2073
  "sharp",
2016
2074
  "workerd"
2017
2075
  ];
2018
- var AGENTBUILDER_TEMPLATE_VERSION = "0.45.3";
2076
+ var AGENTBUILDER_TEMPLATE_VERSION = "0.45.5";
2019
2077
  var DEFAULT_TEMPLATE_VERSIONS = {
2020
2078
  standardAgents: `^${AGENTBUILDER_TEMPLATE_VERSION}`,
2021
2079
  sip: "^1.0.1",
@@ -2072,7 +2130,7 @@ function renderPackageJson(options) {
2072
2130
  type: "module",
2073
2131
  scripts: {
2074
2132
  dev: "vite --host 127.0.0.1 --port 5173",
2075
- build: options.includeBuildScript ? "vite build" : "echo 'Standard Agents projects build and deploy on the platform. Push your commit (git push or agents deploy) to trigger a build.' && exit 1",
2133
+ build: options.includeBuildScript ? "vite build" : BUILD_GUARD_SCRIPT,
2076
2134
  typecheck: "tsc --noEmit"
2077
2135
  },
2078
2136
  dependencies,
@@ -2110,6 +2168,8 @@ ${ignoredPolicy}allowBuilds:
2110
2168
  ${mapEntries}
2111
2169
  minimumReleaseAgeExclude:
2112
2170
  - "@standardagents/*"
2171
+ registries:
2172
+ ${JSON.stringify(STANDARD_AGENTS_NPM_SCOPE)}: ${STANDARD_AGENTS_NPM_REGISTRY}
2113
2173
  `;
2114
2174
  }
2115
2175
  function renderViteConfig() {
@@ -2140,6 +2200,12 @@ function renderTsConfig() {
2140
2200
  }
2141
2201
  `;
2142
2202
  }
2203
+ var STANDARD_AGENTS_NPM_SCOPE = "@standardagents";
2204
+ var STANDARD_AGENTS_NPM_REGISTRY = "https://registry.npmjs.org/";
2205
+ function renderNpmrc() {
2206
+ return `${STANDARD_AGENTS_NPM_SCOPE}:registry=${STANDARD_AGENTS_NPM_REGISTRY}
2207
+ `;
2208
+ }
2143
2209
  function renderGitignore() {
2144
2210
  return `node_modules
2145
2211
  dist
@@ -2234,6 +2300,9 @@ function renderAgentBuilderProject(options) {
2234
2300
  // package.json#pnpm field is ignored since v11); older pnpm reads the
2235
2301
  // manifest — both are committed so every runner generation builds.
2236
2302
  file("pnpm-workspace.yaml", renderPnpmWorkspaceYaml(), "Add pnpm settings"),
2303
+ // Committed so every lockfile records public npm URLs for first-party
2304
+ // packages, whatever scope registry a contributor's user config names.
2305
+ file(".npmrc", renderNpmrc(), "Pin the Standard Agents scope to public npm"),
2237
2306
  file("tsconfig.json", renderTsConfig(), "Add TypeScript config"),
2238
2307
  file("vite.config.ts", renderViteConfig(), "Add Vite config"),
2239
2308
  ...renderAgentDocs(),
@@ -2252,6 +2321,7 @@ export {
2252
2321
  API_AGENTS_MD,
2253
2322
  API_AGENTS_MD as API_CLAUDE_MD,
2254
2323
  APPROVED_DEPENDENCY_BUILD_SCRIPTS,
2324
+ BUILD_GUARD_SCRIPT,
2255
2325
  DEFAULT_TEMPLATE_VERSIONS,
2256
2326
  FIRST_PARTY_PROVIDER_PACKAGES,
2257
2327
  HANDLERS_AGENTS_MD,
@@ -2266,6 +2336,8 @@ export {
2266
2336
  PROVIDERS_AGENTS_MD as PROVIDERS_CLAUDE_MD,
2267
2337
  ROOT_AGENTS_MD,
2268
2338
  ROOT_AGENTS_MD as ROOT_CLAUDE_MD,
2339
+ STANDARD_AGENTS_NPM_REGISTRY,
2340
+ STANDARD_AGENTS_NPM_SCOPE,
2269
2341
  STARTER_AGENT_FILES,
2270
2342
  STARTER_SPECIFICATION_VERSION,
2271
2343
  TOOLS_AGENTS_MD,
@@ -2277,6 +2349,7 @@ export {
2277
2349
  renderAgentBuilderSupportFiles,
2278
2350
  renderDevVarsExample,
2279
2351
  renderGitignore,
2352
+ renderNpmrc,
2280
2353
  renderPackageJson,
2281
2354
  renderPnpmWorkspaceYaml,
2282
2355
  renderTemplateMetadata,