@taiga-ai/mcp-server 0.37.0-dev.997 → 0.37.0-dev.999

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 (2) hide show
  1. package/dist/index.js +194 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -24176,6 +24176,107 @@ const CLOUD_PROVIDERS = [
24176
24176
  "other"
24177
24177
  ];
24178
24178
  //#endregion
24179
+ //#region ../../packages/types/dist/ecosystems.js
24180
+ /**
24181
+ * Engineering ecosystems a tenant builds in.
24182
+ *
24183
+ * The structural twin of CLOUD_PROVIDERS: a discrete onboarding choice that
24184
+ * drives seeded policy content. Clouds say where the software runs; ecosystems
24185
+ * say what it is written in.
24186
+ *
24187
+ * Deliberately scoped to the runtimes the coding agent actually ships skills
24188
+ * for (`apps/agents/coding/src/coding/skills/loader.py`, `_RUNTIME_SKILLS`).
24189
+ * Offering a choice the agent cannot honour would be worse than not asking.
24190
+ * JVM was absent for that reason until the coding image gained the JDK, Maven,
24191
+ * Gradle, Ruby and PHP toolchains (PRO-1745) and the agent its `java`,
24192
+ * `ruby-rails` and `php-laravel` skills (PRO-2914); see the three entries
24193
+ * below.
24194
+ *
24195
+ * Frontend is its own entry rather than being bundled into `node`, because a
24196
+ * stack has tiers and a runtime list cannot express them. React-with-a-Python-
24197
+ * backend is one of the most common shapes there is; folding React into `node`
24198
+ * would force those tenants to declare a Node backend they do not run, and the
24199
+ * seeded policy would then approve Fastify for a Python shop. It also matches
24200
+ * the coding agent more closely, which already keeps `node-typescript` and
24201
+ * `react-nextjs` as separate skills under one runtime key.
24202
+ *
24203
+ * `nextjs` is the case that broke the tier model, and the reason it is its own
24204
+ * entry rather than react+node (PRO-809). Next.js occupies BOTH tiers: route
24205
+ * handlers and Server Actions are a backend, so `react` alone leaves a real
24206
+ * backend undeclared, while `react` + `node` approves Fastify and Drizzle at a
24207
+ * shop running neither. It also builds with its own bundler, so the react
24208
+ * preset's Vite row is wrong for it. One framework spanning two tiers is not
24209
+ * something hedged wording can fix; it needs its own entry.
24210
+ *
24211
+ * `other` is the escape hatch, and exists because its absence was a trap.
24212
+ * `CLOUD_PROVIDERS` has always had one; ecosystems did not, so a Vue, Angular
24213
+ * or Svelte shop had no true answer: declaring `react` is wrong, and declaring
24214
+ * nothing falls to `UNDECLARED_STACK_ROWS`, which opens with
24215
+ * "Frontend: React, TypeScript". Both paths asserted React at them. `other`
24216
+ * contributes no rows at all, so their approved-technology table is silent
24217
+ * about language rather than wrong about it.
24218
+ *
24219
+ * Note what `other` is NOT: an invitation to add Vue and friends as options.
24220
+ * The agent ships no skill for any of them, and the rule above still stands --
24221
+ * a skill first, then the option, never the reverse.
24222
+ *
24223
+ * `angular` is the first entry outside the React family, and it is its own
24224
+ * entry for the same reason `nextjs` is: the toolchain, not the language.
24225
+ * Angular builds with the Angular CLI's own esbuild-based builder rather than
24226
+ * Vite, lints with angular-eslint rather than oxlint, and (since v21) tests
24227
+ * with the CLI's Vitest builder rather than a bare Vitest config. Declaring
24228
+ * `react` at an Angular shop would seed every one of those rows wrong.
24229
+ *
24230
+ * It also retires the specific trap `other` was documented with: an Angular
24231
+ * shop previously had no true answer. Vue and Svelte still do not, and the
24232
+ * rule below is why -- Angular earned the entry by having a coding-agent
24233
+ * skill written for it first (PRO-1401), not the reverse.
24234
+ *
24235
+ * `nestjs` is the backend counterpart of that same rule, and its own entry
24236
+ * rather than folding into `node` for the same reason: the toolchain, not the
24237
+ * language. `node` approves Fastify, Zod and Drizzle and builds with Vite; a
24238
+ * NestJS service runs its own framework on the Express or Fastify adapter,
24239
+ * validates with class-validator DTOs, persists through Prisma or TypeORM, and
24240
+ * builds with the Nest CLI or Nx. Declaring `node` at a Nest shop would seed
24241
+ * every one of those rows wrong. Like Angular, it earned the entry by having
24242
+ * its coding-agent skill shipped first (PRO-1901), not the reverse.
24243
+ *
24244
+ * `react-native` is the mobile client tier, and a separate entry from `react`
24245
+ * for the same reason `nextjs` is (PRO-936). `react` is a web SPA that builds
24246
+ * with Vite and tests with Vitest/Playwright; React Native is an Expo-managed
24247
+ * mobile app that builds with the Expo/EAS toolchain and tests with jest-expo,
24248
+ * so declaring `react` would seed a web tenant's Vite/Vitest rows at a mobile
24249
+ * shop. Expo-managed is the default and the only variant here: a bare-workflow
24250
+ * React Native app is the same source with a different native build pipeline,
24251
+ * not a different approved-technology table, so it does not warrant its own id.
24252
+ *
24253
+ * `java`, `rails` and `laravel` are the server-rendered and API backends
24254
+ * outside JavaScript, Python and .NET (PRO-2915). `java` approves Spring Boot as
24255
+ * its framework the way `python` approves FastAPI or Django and `go` approves
24256
+ * chi: the table names what new work should use, and the picker's sublabel
24257
+ * says so ("Spring Boot, Maven or Gradle"). A JVM shop on another framework
24258
+ * picks `other` rather than being approved one it does not run. `rails` and
24259
+ * `laravel` are named by framework rather than language for the same reason:
24260
+ * a Ruby or PHP shop that runs neither has no table we could write for it.
24261
+ * Each followed the rule below -- its coding-agent skill shipped first.
24262
+ */
24263
+ const ECOSYSTEMS = [
24264
+ "react",
24265
+ "react-native",
24266
+ "angular",
24267
+ "nextjs",
24268
+ "node",
24269
+ "nestjs",
24270
+ "python",
24271
+ "dotnet",
24272
+ "go",
24273
+ "rust",
24274
+ "java",
24275
+ "rails",
24276
+ "laravel",
24277
+ "other"
24278
+ ];
24279
+ //#endregion
24179
24280
  //#region ../../packages/types/dist/lenient-schema.js
24180
24281
  /**
24181
24282
  * Building blocks for reading JSON that arrives untyped -- a stored jsonb
@@ -24334,6 +24435,17 @@ const CONTROL_ID_SOURCE = "[A-Z][A-Z0-9]{1,5}(?:-[A-Z][A-Z0-9]{1,5})*-\\d+(?:\\.
24334
24435
  function isControlId(text) {
24335
24436
  return new RegExp(`^${CONTROL_ID_SOURCE}$`).test(text);
24336
24437
  }
24438
+ const SUPPORTED_INDUSTRIES = [
24439
+ "technology",
24440
+ "telecom",
24441
+ "healthcare",
24442
+ "manufacturing",
24443
+ "defense",
24444
+ "fintech",
24445
+ "public_sector",
24446
+ "energy",
24447
+ "other"
24448
+ ];
24337
24449
  const EU_COUNTRIES = [
24338
24450
  {
24339
24451
  code: "AT",
@@ -24479,8 +24591,28 @@ const UK_COUNTRIES = [{
24479
24591
  ];
24480
24592
  /** Countries available during closed beta. Expand as we open new markets. */
24481
24593
  const BETA_COUNTRIES = ["FI"];
24482
- [...EU_COUNTRIES.map((c) => c.code).filter((code) => !BETA_COUNTRIES.includes(code))];
24594
+ /**
24595
+ * Countries offered only while the `regulations` flag is on (PRO-3419,
24596
+ * PRO-3420): every EU member but Finland, and Norway. Sweden, Denmark and
24597
+ * Norway have a national layer of their own; the rest get the EU acts and
24598
+ * say, on the Regulations page, that their national law is not in the
24599
+ * policies yet (`TenantRegulations.context.countryLayer`). Iceland and
24600
+ * Liechtenstein stay unoffered. They go with the flag when it is removed.
24601
+ */
24602
+ const PREVIEW_COUNTRIES = [
24603
+ ...EU_COUNTRIES.map((c) => c.code).filter((code) => !BETA_COUNTRIES.includes(code)),
24604
+ "NO",
24605
+ "GB"
24606
+ ];
24483
24607
  EU_COUNTRIES.filter((c) => BETA_COUNTRIES.includes(c.code));
24608
+ /**
24609
+ * The countries a tenant may choose. The caller passes its own resolution of
24610
+ * the `regulations` flag, so the API's validation and the web's picker cannot
24611
+ * disagree about which countries exist.
24612
+ */
24613
+ function offeredCountries(previewEnabled) {
24614
+ return previewEnabled ? [...BETA_COUNTRIES, ...PREVIEW_COUNTRIES] : [...BETA_COUNTRIES];
24615
+ }
24484
24616
  Object.fromEntries([
24485
24617
  ...EU_COUNTRIES.map((c) => [c.code, "eu"]),
24486
24618
  ...EEA_COUNTRIES.map((c) => [c.code, "eea"]),
@@ -27764,6 +27896,66 @@ object({
27764
27896
  });
27765
27897
  /** A value GitHub's redirect carries back: a state token, or a one-time code. */
27766
27898
  const githubCallbackSecret = string$2().trim().min(1).max(1024);
27899
+ /** Every country Taiga knows; the server refuses one it does not offer yet. */
27900
+ const KNOWN_COUNTRIES = offeredCountries(true);
27901
+ const knownCountry = string$2().length(2).refine((code) => KNOWN_COUNTRIES.includes(code), { message: "Unsupported country" });
27902
+ strictObject({
27903
+ industries: array(_enum(SUPPORTED_INDUSTRIES)).min(1).optional(),
27904
+ country: knownCountry.optional(),
27905
+ servesEu: boolean().optional(),
27906
+ cloudProviders: array(_enum(CLOUD_PROVIDERS)).min(1).optional(),
27907
+ ecosystems: array(_enum(ECOSYSTEMS)).min(1).optional(),
27908
+ productMarkets: strictObject({
27909
+ productId: uuid,
27910
+ countries: array(knownCountry).max(40)
27911
+ }).optional(),
27912
+ overrides: record(string$2().max(100), array(string$2().max(200)).max(200)).optional()
27913
+ }).refine(({ industries, country, servesEu, cloudProviders, ecosystems, productMarkets }) => [
27914
+ industries,
27915
+ country,
27916
+ servesEu,
27917
+ cloudProviders,
27918
+ ecosystems,
27919
+ productMarkets
27920
+ ].some((x) => x !== void 0), { message: "Provide at least one context field to change" });
27921
+ object({
27922
+ context: object({
27923
+ industries: array(string$2()),
27924
+ country: string$2().optional(),
27925
+ operatingRegions: array(string$2()),
27926
+ marketCountries: array(string$2()),
27927
+ cloudProviders: array(_enum(CLOUD_PROVIDERS)),
27928
+ ecosystems: array(_enum(ECOSYSTEMS))
27929
+ }),
27930
+ documents: array(object({
27931
+ type: string$2(),
27932
+ name: string$2(),
27933
+ action: _enum([
27934
+ "seed",
27935
+ "publish",
27936
+ "skip-edited",
27937
+ "backfilled",
27938
+ "up-to-date"
27939
+ ]),
27940
+ sections: array(object({
27941
+ key: string$2(),
27942
+ changeType: _enum([
27943
+ "added",
27944
+ "removed",
27945
+ "modified",
27946
+ "reattributed"
27947
+ ]),
27948
+ before: string$2().nullable(),
27949
+ after: string$2().nullable(),
27950
+ source: string$2().nullable()
27951
+ })).optional(),
27952
+ conflicts: array(object({
27953
+ key: string$2(),
27954
+ stored: string$2().nullable(),
27955
+ incoming: string$2().nullable()
27956
+ })).optional()
27957
+ }))
27958
+ });
27767
27959
  strictObject({
27768
27960
  displayName: string$2().trim().min(1).max(255),
27769
27961
  baseUrl: string$2().trim().min(1).max(480),
@@ -27851,7 +28043,7 @@ strictObject({
27851
28043
  }), object({
27852
28044
  principalArn: string$2().nullable(),
27853
28045
  externalId: string$2()
27854
- });
28046
+ }), object({ documentsMoved: number$1().int() });
27855
28047
  strictObject({ kind: _enum(["sbom", "notices"]) }), object({
27856
28048
  url: string$2().url().nullable(),
27857
28049
  expiresAt: string$2().nullable()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ai/mcp-server",
3
- "version": "0.37.0-dev.997",
3
+ "version": "0.37.0-dev.999",
4
4
  "description": "Taiga for AI coding assistants: read products, policies, initiatives and runs, and operate the line, over MCP",
5
5
  "mcpName": "ga.tai/mcp-server",
6
6
  "license": "UNLICENSED",