ai-world-sdk 1.5.10 → 1.5.11

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 (163) hide show
  1. package/dist/config.d.ts +3 -3
  2. package/dist/config.js +2 -2
  3. package/pacakges/ai-sdk-provider/.changeset/README.md +34 -0
  4. package/pacakges/ai-sdk-provider/.changeset/config.json +13 -0
  5. package/pacakges/ai-sdk-provider/.github/PULL_REQUEST_TEMPLATE.md +16 -0
  6. package/pacakges/ai-sdk-provider/.github/workflows/ci.yaml +24 -0
  7. package/pacakges/ai-sdk-provider/.github/workflows/publish-manual.yaml +36 -0
  8. package/pacakges/ai-sdk-provider/.github/workflows/publish.yaml +107 -0
  9. package/pacakges/ai-sdk-provider/.vscode/settings.json +32 -0
  10. package/pacakges/ai-sdk-provider/CHANGELOG.md +631 -0
  11. package/pacakges/ai-sdk-provider/CLAUDE.md +79 -0
  12. package/pacakges/ai-sdk-provider/CONTRIBUTING.md +241 -0
  13. package/pacakges/ai-sdk-provider/LICENSE +201 -0
  14. package/pacakges/ai-sdk-provider/README.md +426 -0
  15. package/pacakges/ai-sdk-provider/biome.json +122 -0
  16. package/pacakges/ai-sdk-provider/dist/index.d.mts +880 -0
  17. package/pacakges/ai-sdk-provider/dist/index.d.ts +880 -0
  18. package/pacakges/ai-sdk-provider/dist/index.js +5382 -0
  19. package/pacakges/ai-sdk-provider/dist/index.js.map +1 -0
  20. package/pacakges/ai-sdk-provider/dist/index.mjs +5348 -0
  21. package/pacakges/ai-sdk-provider/dist/index.mjs.map +1 -0
  22. package/pacakges/ai-sdk-provider/dist/internal/index.d.mts +723 -0
  23. package/pacakges/ai-sdk-provider/dist/internal/index.d.ts +723 -0
  24. package/pacakges/ai-sdk-provider/dist/internal/index.js +5112 -0
  25. package/pacakges/ai-sdk-provider/dist/internal/index.js.map +1 -0
  26. package/pacakges/ai-sdk-provider/dist/internal/index.mjs +5076 -0
  27. package/pacakges/ai-sdk-provider/dist/internal/index.mjs.map +1 -0
  28. package/pacakges/ai-sdk-provider/e2e/cache-control.test.ts +74 -0
  29. package/pacakges/ai-sdk-provider/e2e/embeddings/index.test.ts +128 -0
  30. package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/generate-pdfs.sh +181 -0
  31. package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/large.json +7 -0
  32. package/pacakges/ai-sdk-provider/e2e/fixtures/pdfs/large.pdf +12865 -70
  33. package/pacakges/ai-sdk-provider/e2e/gemini/reasoning-multiturn.test.ts +221 -0
  34. package/pacakges/ai-sdk-provider/e2e/issues/issue-160-toolcallid-uniqueness.test.ts +88 -0
  35. package/pacakges/ai-sdk-provider/e2e/issues/issue-166-finish-reason-null.test.ts +129 -0
  36. package/pacakges/ai-sdk-provider/e2e/issues/issue-171-cache-tool-key-ordering.test.ts +70 -0
  37. package/pacakges/ai-sdk-provider/e2e/issues/issue-181-tool-response-image.test.ts +199 -0
  38. package/pacakges/ai-sdk-provider/e2e/issues/issue-190-streamobject-flush-error.test.ts +114 -0
  39. package/pacakges/ai-sdk-provider/e2e/issues/issue-194-grok-invalid-json.test.ts +93 -0
  40. package/pacakges/ai-sdk-provider/e2e/issues/issue-196-anthropic-1h-cache-ttl.test.ts +85 -0
  41. package/pacakges/ai-sdk-provider/e2e/issues/issue-199-openai-pdf-processing.test.ts +102 -0
  42. package/pacakges/ai-sdk-provider/e2e/issues/issue-212-anthropic-web-search-online.test.ts +128 -0
  43. package/pacakges/ai-sdk-provider/e2e/issues/issue-234-prompt-caching.test.ts +201 -0
  44. package/pacakges/ai-sdk-provider/e2e/issues/issue-237-reasoning-linebreaks.test.ts +103 -0
  45. package/pacakges/ai-sdk-provider/e2e/issues/issue-248-gemini-web-search-empty-response.test.ts +210 -0
  46. package/pacakges/ai-sdk-provider/e2e/issues/issue-269-image-size-parameter.test.ts +208 -0
  47. package/pacakges/ai-sdk-provider/e2e/issues/issue-287-tool-calls-missing-arguments.test.ts +87 -0
  48. package/pacakges/ai-sdk-provider/e2e/issues/issue-341-cache-control-last-text-part.test.ts +138 -0
  49. package/pacakges/ai-sdk-provider/e2e/issues/issue-383-video-url-support.test.ts +120 -0
  50. package/pacakges/ai-sdk-provider/e2e/issues/issue-386-image-files-parameter.test.ts +109 -0
  51. package/pacakges/ai-sdk-provider/e2e/issues/issue-387-temperature-settings.test.ts +113 -0
  52. package/pacakges/ai-sdk-provider/e2e/issues/issue-389-system-cache-control.test.ts +107 -0
  53. package/pacakges/ai-sdk-provider/e2e/issues/issue-391-reasoning-effort-values.test.ts +121 -0
  54. package/pacakges/ai-sdk-provider/e2e/issues/issue-392-auto-router-plugin.test.ts +84 -0
  55. package/pacakges/ai-sdk-provider/e2e/issues/issue-394-reasoning-end-signature.test.ts +157 -0
  56. package/pacakges/ai-sdk-provider/e2e/issues/issue-407-token-usage-details.test.ts +141 -0
  57. package/pacakges/ai-sdk-provider/e2e/issues/issue-411-output-object-tools-conflict.test.ts +75 -0
  58. package/pacakges/ai-sdk-provider/e2e/issues/issue-412-mid-stream-termination.test.ts +217 -0
  59. package/pacakges/ai-sdk-provider/e2e/issues/issue-413-reasoning-metadata-bloat.test.ts +292 -0
  60. package/pacakges/ai-sdk-provider/e2e/issues/issue-413-tool-input-end-streaming.test.ts +167 -0
  61. package/pacakges/ai-sdk-provider/e2e/issues/issue-418-gemini-thought-signature.test.ts +171 -0
  62. package/pacakges/ai-sdk-provider/e2e/issues/issue-419-420-finish-reason-usage-fallback.test.ts +87 -0
  63. package/pacakges/ai-sdk-provider/e2e/issues/issue-419-usage-fallback.test.ts +106 -0
  64. package/pacakges/ai-sdk-provider/e2e/issues/issue-422-incomplete-error-information.test.ts +46 -0
  65. package/pacakges/ai-sdk-provider/e2e/issues/issue-423-signature-stripped.test.ts +165 -0
  66. package/pacakges/ai-sdk-provider/e2e/issues/issue-423-streaming-signature-loss.test.ts +161 -0
  67. package/pacakges/ai-sdk-provider/e2e/issues/issue-423-uimessage-roundtrip.test.ts +111 -0
  68. package/pacakges/ai-sdk-provider/e2e/issues/issue-424-anthropic-auto-cache.test.ts +66 -0
  69. package/pacakges/ai-sdk-provider/e2e/issues/issue-432-raw-response-body.test.ts +52 -0
  70. package/pacakges/ai-sdk-provider/e2e/issues/issue-438-gemini-reasoning-redacted.test.ts +120 -0
  71. package/pacakges/ai-sdk-provider/e2e/issues/issue-439-exact-payload.test.ts +108 -0
  72. package/pacakges/ai-sdk-provider/e2e/issues/issue-443-eager-input-streaming.test.ts +204 -0
  73. package/pacakges/ai-sdk-provider/e2e/issues/issue-453-signature-reopen.test.ts +203 -0
  74. package/pacakges/ai-sdk-provider/e2e/issues/issue-474-web-search-server-tool.test.ts +102 -0
  75. package/pacakges/ai-sdk-provider/e2e/issues/issue-483-response-format-strict-option.test.ts +199 -0
  76. package/pacakges/ai-sdk-provider/e2e/issues/issue-484-image-url-query-params.test.ts +165 -0
  77. package/pacakges/ai-sdk-provider/e2e/issues/issue-63-web-search-annotations.test.ts +159 -0
  78. package/pacakges/ai-sdk-provider/e2e/parallel-tool-calls.test.ts +425 -0
  79. package/pacakges/ai-sdk-provider/e2e/pdf-blob/index.test.ts +139 -0
  80. package/pacakges/ai-sdk-provider/e2e/pdf-url/index.test.ts +60 -0
  81. package/pacakges/ai-sdk-provider/e2e/reasoning-effort.test.ts +139 -0
  82. package/pacakges/ai-sdk-provider/e2e/reasoning-multiturn/index.test.ts +69 -0
  83. package/pacakges/ai-sdk-provider/e2e/tools-with-reasoning.test.ts +76 -0
  84. package/pacakges/ai-sdk-provider/e2e/tools.ts +61 -0
  85. package/pacakges/ai-sdk-provider/e2e/usage-accounting.test.ts +55 -0
  86. package/pacakges/ai-sdk-provider/e2e/utils.ts +15 -0
  87. package/pacakges/ai-sdk-provider/e2e/video-generation.test.ts +43 -0
  88. package/pacakges/ai-sdk-provider/e2e/web-search/index.test.ts +50 -0
  89. package/pacakges/ai-sdk-provider/example.env.e2e +3 -0
  90. package/pacakges/ai-sdk-provider/package.json +89 -0
  91. package/pacakges/ai-sdk-provider/pnpm-lock.yaml +3075 -0
  92. package/pacakges/ai-sdk-provider/pnpm-workspace.yaml +6 -0
  93. package/pacakges/ai-sdk-provider/src/chat/convert-to-openrouter-chat-messages.test.ts +3079 -0
  94. package/pacakges/ai-sdk-provider/src/chat/convert-to-openrouter-chat-messages.ts +618 -0
  95. package/pacakges/ai-sdk-provider/src/chat/errors.test.ts +97 -0
  96. package/pacakges/ai-sdk-provider/src/chat/file-parser-schema.test.ts +112 -0
  97. package/pacakges/ai-sdk-provider/src/chat/file-url-utils.ts +167 -0
  98. package/pacakges/ai-sdk-provider/src/chat/get-tool-choice.ts +42 -0
  99. package/pacakges/ai-sdk-provider/src/chat/index.test.ts +6093 -0
  100. package/pacakges/ai-sdk-provider/src/chat/index.ts +1300 -0
  101. package/pacakges/ai-sdk-provider/src/chat/is-url.ts +15 -0
  102. package/pacakges/ai-sdk-provider/src/chat/large-pdf-response.test.ts +108 -0
  103. package/pacakges/ai-sdk-provider/src/chat/payload-comparison.test.ts +154 -0
  104. package/pacakges/ai-sdk-provider/src/chat/schemas.ts +288 -0
  105. package/pacakges/ai-sdk-provider/src/chat/signature-roundtrip.test.ts +777 -0
  106. package/pacakges/ai-sdk-provider/src/completion/convert-to-openrouter-completion-prompt.ts +150 -0
  107. package/pacakges/ai-sdk-provider/src/completion/index.test.ts +958 -0
  108. package/pacakges/ai-sdk-provider/src/completion/index.ts +441 -0
  109. package/pacakges/ai-sdk-provider/src/completion/schemas.ts +67 -0
  110. package/pacakges/ai-sdk-provider/src/embedding/index.test.ts +262 -0
  111. package/pacakges/ai-sdk-provider/src/embedding/index.ts +113 -0
  112. package/pacakges/ai-sdk-provider/src/embedding/schemas.ts +26 -0
  113. package/pacakges/ai-sdk-provider/src/facade.ts +131 -0
  114. package/pacakges/ai-sdk-provider/src/image/index.test.ts +769 -0
  115. package/pacakges/ai-sdk-provider/src/image/index.ts +206 -0
  116. package/pacakges/ai-sdk-provider/src/image/schemas.ts +48 -0
  117. package/pacakges/ai-sdk-provider/src/index.ts +3 -0
  118. package/pacakges/ai-sdk-provider/src/internal/index.ts +10 -0
  119. package/pacakges/ai-sdk-provider/src/provider.ts +327 -0
  120. package/pacakges/ai-sdk-provider/src/schemas/error-response.test.ts +171 -0
  121. package/pacakges/ai-sdk-provider/src/schemas/error-response.ts +105 -0
  122. package/pacakges/ai-sdk-provider/src/schemas/format.ts +12 -0
  123. package/pacakges/ai-sdk-provider/src/schemas/image.ts +23 -0
  124. package/pacakges/ai-sdk-provider/src/schemas/provider-metadata.ts +91 -0
  125. package/pacakges/ai-sdk-provider/src/schemas/reasoning-details.ts +92 -0
  126. package/pacakges/ai-sdk-provider/src/tests/provider-options.test.ts +234 -0
  127. package/pacakges/ai-sdk-provider/src/tests/stream-usage-accounting.test.ts +409 -0
  128. package/pacakges/ai-sdk-provider/src/tests/usage-accounting.test.ts +555 -0
  129. package/pacakges/ai-sdk-provider/src/tests/web-search-tool.test.ts +319 -0
  130. package/pacakges/ai-sdk-provider/src/tool/web-search.ts +52 -0
  131. package/pacakges/ai-sdk-provider/src/types/index.ts +114 -0
  132. package/pacakges/ai-sdk-provider/src/types/openrouter-api-types.ts +83 -0
  133. package/pacakges/ai-sdk-provider/src/types/openrouter-chat-completions-input.ts +116 -0
  134. package/pacakges/ai-sdk-provider/src/types/openrouter-chat-settings.ts +233 -0
  135. package/pacakges/ai-sdk-provider/src/types/openrouter-completion-settings.ts +39 -0
  136. package/pacakges/ai-sdk-provider/src/types/openrouter-embedding-settings.ts +56 -0
  137. package/pacakges/ai-sdk-provider/src/types/openrouter-image-settings.ts +49 -0
  138. package/pacakges/ai-sdk-provider/src/types/openrouter-video-settings.ts +26 -0
  139. package/pacakges/ai-sdk-provider/src/utils/compute-token-usage.test.ts +186 -0
  140. package/pacakges/ai-sdk-provider/src/utils/compute-token-usage.ts +55 -0
  141. package/pacakges/ai-sdk-provider/src/utils/deterministic-stringify.test.ts +87 -0
  142. package/pacakges/ai-sdk-provider/src/utils/deterministic-stringify.ts +35 -0
  143. package/pacakges/ai-sdk-provider/src/utils/map-finish-reason.ts +43 -0
  144. package/pacakges/ai-sdk-provider/src/utils/reasoning-details-duplicate-tracker.test.ts +324 -0
  145. package/pacakges/ai-sdk-provider/src/utils/reasoning-details-duplicate-tracker.ts +70 -0
  146. package/pacakges/ai-sdk-provider/src/utils/remove-undefined.ts +12 -0
  147. package/pacakges/ai-sdk-provider/src/utils/type-guards.ts +6 -0
  148. package/pacakges/ai-sdk-provider/src/utils/with-stream-error-handling.test.ts +119 -0
  149. package/pacakges/ai-sdk-provider/src/utils/with-stream-error-handling.ts +25 -0
  150. package/pacakges/ai-sdk-provider/src/utils/with-user-agent-suffix.test.ts +133 -0
  151. package/pacakges/ai-sdk-provider/src/utils/with-user-agent-suffix.ts +78 -0
  152. package/pacakges/ai-sdk-provider/src/version.ts +4 -0
  153. package/pacakges/ai-sdk-provider/src/video/index.test.ts +515 -0
  154. package/pacakges/ai-sdk-provider/src/video/index.ts +275 -0
  155. package/pacakges/ai-sdk-provider/src/video/schemas.ts +36 -0
  156. package/pacakges/ai-sdk-provider/tsconfig.json +42 -0
  157. package/pacakges/ai-sdk-provider/tsup.config.ts +28 -0
  158. package/pacakges/ai-sdk-provider/turbo.json +8 -0
  159. package/pacakges/ai-sdk-provider/vitest.e2e.config.ts +21 -0
  160. package/pacakges/ai-sdk-provider/vitest.edge.config.ts +16 -0
  161. package/pacakges/ai-sdk-provider/vitest.issues.config.ts +28 -0
  162. package/pacakges/ai-sdk-provider/vitest.node.config.ts +16 -0
  163. package/package.json +3 -2
package/dist/config.d.ts CHANGED
@@ -9,7 +9,7 @@
9
9
  *
10
10
  * 注意: {VERSION} 占位符会在构建时被替换为实际版本号
11
11
  */
12
- export declare const SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.10";
12
+ export declare const SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.11";
13
13
  /**
14
14
  * 版本兼容性错误
15
15
  */
@@ -35,8 +35,8 @@ declare class SDKConfig {
35
35
  private _authCheckPromise;
36
36
  private _currentUser;
37
37
  private _cliMode;
38
- readonly sdkSignature = "AI_WORLD_SDK_V:1.5.10";
39
- readonly sdkVersion = "1.5.10";
38
+ readonly sdkSignature = "AI_WORLD_SDK_V:1.5.11";
39
+ readonly sdkVersion = "1.5.11";
40
40
  constructor();
41
41
  /**
42
42
  * Set global base URL
package/dist/config.js CHANGED
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.sdkConfig = exports.VersionCompatibilityError = exports.SDK_SIGNATURE = void 0;
8
8
  // SDK 版本号(构建时自动从 package.json 更新)
9
9
  // 此版本号会在运行 npm run build 时自动从 package.json 读取并更新
10
- const SDK_VERSION = "1.5.10";
10
+ const SDK_VERSION = "1.5.11";
11
11
  /**
12
12
  * SDK 特征码 - 用于在构建后的 JS 文件中识别 SDK 版本
13
13
  * 格式: AI_WORLD_SDK_V:版本号
@@ -15,7 +15,7 @@ const SDK_VERSION = "1.5.10";
15
15
  *
16
16
  * 注意: {VERSION} 占位符会在构建时被替换为实际版本号
17
17
  */
18
- exports.SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.10";
18
+ exports.SDK_SIGNATURE = "AI_WORLD_SDK_V:1.5.11";
19
19
  /**
20
20
  * 版本兼容性错误
21
21
  */
@@ -0,0 +1,34 @@
1
+ # Changesets
2
+
3
+ Hello! This folder contains [Changesets](https://github.com/changesets/changesets), which help manage releases and changelogs.
4
+
5
+ ## Adding a changeset
6
+
7
+ To create a new changeset, run:
8
+
9
+ ```bash
10
+ pnpm changeset
11
+ ```
12
+
13
+ This will prompt you for:
14
+
15
+ 1. Which type of change (patch/minor/major)
16
+ 2. A summary of the changes
17
+
18
+ The tool will create a markdown file in `.changeset/` with your changes.
19
+
20
+ ## How releases work
21
+
22
+ When changes are merged to `main`:
23
+
24
+ 1. The Release workflow creates/updates a "Version Packages" PR
25
+ 2. This PR will bump versions and update CHANGELOGs based on all changesets
26
+ 3. When you merge the "Version Packages" PR, packages are automatically published to npm
27
+
28
+ ## Empty changesets
29
+
30
+ If your changes don't need a release (docs, tests, CI config):
31
+
32
+ ```bash
33
+ pnpm changeset --empty
34
+ ```
@@ -0,0 +1,13 @@
1
+ {
2
+ "$schema": "https://unpkg.com/@changesets/config@1.6.4/schema.json",
3
+ "changelog": [
4
+ "@changesets/changelog-github",
5
+ { "repo": "OpenRouterTeam/ai-sdk-provider" }
6
+ ],
7
+ "commit": false,
8
+ "linked": [],
9
+ "access": "public",
10
+ "baseBranch": "main",
11
+ "updateInternalDependencies": "patch",
12
+ "ignore": []
13
+ }
@@ -0,0 +1,16 @@
1
+ ## Description
2
+
3
+ <!-- Briefly describe your changes -->
4
+
5
+ ## Checklist
6
+
7
+ - [ ] I have run `pnpm stylecheck` and `pnpm typecheck`
8
+ - [ ] I have run `pnpm test` and all tests pass
9
+ - [ ] I have added tests for my changes (if applicable)
10
+ - [ ] I have updated documentation (if applicable)
11
+
12
+ ### Changeset
13
+
14
+ - [ ] I have run `pnpm changeset` to create a changeset file
15
+
16
+ > **Note:** A changeset is required for your changes to trigger a release. If your PR only contains docs, tests, or CI changes that don't need a release, run `pnpm changeset --empty` instead.
@@ -0,0 +1,24 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches: [main]
7
+
8
+ jobs:
9
+ ci:
10
+ runs-on: ubuntu-latest
11
+ permissions:
12
+ contents: read
13
+ packages: write
14
+ steps:
15
+ - uses: actions/checkout@v4
16
+ - uses: actions/setup-node@v4
17
+ with:
18
+ node-version: "20.x"
19
+ - uses: pnpm/action-setup@v4
20
+ - run: pnpm install
21
+ - run: pnpm test
22
+ - run: pnpm build
23
+ - run: pnpm typecheck
24
+ - run: pnpm stylecheck
@@ -0,0 +1,36 @@
1
+ # DEPRECATED: This workflow is kept for emergency manual releases only.
2
+ # Normal releases should use the changeset-based publish.yaml workflow.
3
+ # To use this, manually create a GitHub Release.
4
+ name: Publish package (legacy)
5
+ on:
6
+ release:
7
+ types: [published]
8
+ workflow_dispatch: {}
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+ permissions:
13
+ contents: read
14
+ packages: write
15
+ id-token: write
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: actions/setup-node@v4
19
+ with:
20
+ node-version: "20.x"
21
+ registry-url: "https://registry.npmjs.org"
22
+ scope: "@openrouter"
23
+ - uses: pnpm/action-setup@v4
24
+ - run: pnpm install --frozen-lockfile
25
+ - run: pnpm typecheck
26
+ - run: pnpm build
27
+ - run: pnpm test
28
+ - name: Publish to npm
29
+ run: |
30
+ if [ "${{ github.event.release.prerelease }}" = "true" ]; then
31
+ pnpm publish --provenance --access public --no-git-checks --tag beta
32
+ else
33
+ pnpm publish --provenance --access public --no-git-checks
34
+ fi
35
+ env:
36
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
@@ -0,0 +1,107 @@
1
+ name: Release
2
+ on:
3
+ push:
4
+ branches: [main]
5
+
6
+ concurrency:
7
+ group: ${{ github.workflow }}-${{ github.ref }}
8
+
9
+ permissions: {}
10
+
11
+ jobs:
12
+ release:
13
+ if: github.repository_owner == 'OpenRouterTeam'
14
+ name: Release
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 30
17
+ permissions:
18
+ contents: write
19
+ id-token: write
20
+ pull-requests: write
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ - uses: pnpm/action-setup@v4
24
+ - uses: actions/setup-node@v4
25
+ with:
26
+ node-version: "20.x"
27
+ registry-url: "https://registry.npmjs.org"
28
+ scope: "@openrouter"
29
+ cache: pnpm
30
+ - name: Install dependencies
31
+ run: pnpm install --frozen-lockfile
32
+ - name: Upgrade npm for OIDC support
33
+ run: npm install -g npm@latest
34
+ - name: Create Release Pull Request or Publish
35
+ id: changesets
36
+ uses: changesets/action@v1
37
+ with:
38
+ version: pnpm changeset-version
39
+ env:
40
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41
+
42
+ - name: OIDC preflight - scrub .npmrc and verify registry
43
+ run: |
44
+ echo "=== OIDC Preflight ==="
45
+
46
+ # Remove auth tokens from all potential .npmrc locations to ensure OIDC is used
47
+ for npmrc in "$NPM_CONFIG_USERCONFIG" ~/.npmrc .npmrc; do
48
+ if [ -n "$npmrc" ] && [ -f "$npmrc" ]; then
49
+ echo "Cleaning $npmrc of any existing auth tokens..."
50
+ # Remove registry-scoped tokens (allow optional whitespace around =)
51
+ sed -i -E '/\/\/registry\.npmjs\.org\/:(_authToken|_auth)\s*=/d' "$npmrc"
52
+ # Remove global tokens in any form
53
+ sed -i -E '/^\s*(_authToken|_auth)\s*=/d' "$npmrc"
54
+ # Remove global always-auth (case-insensitive, allow spacing)
55
+ sed -i -E '/^\s*[Aa]lways-[Aa]uth\s*=/d' "$npmrc"
56
+ fi
57
+ done
58
+
59
+ # Verify npm connectivity
60
+ echo "Testing npm registry connectivity..."
61
+ npm ping || exit 1
62
+
63
+ # Verify no token is active (should fail for OIDC to work)
64
+ echo "Verifying no auth token is configured..."
65
+ if npm whoami >/dev/null 2>&1; then
66
+ echo "⚠ Warning: npm whoami succeeded without OIDC token"
67
+ else
68
+ echo "✓ Confirmed: npm whoami failed (OIDC will be used)"
69
+ fi
70
+
71
+ echo ""
72
+ echo "Registry configuration:"
73
+ npm config get registry
74
+ npm config get @openrouter:registry || echo " (no @openrouter scope override)"
75
+
76
+ - name: Publish with OIDC
77
+ if: steps.changesets.outputs.hasChangesets == 'false'
78
+ run: pnpm changeset-publish
79
+ env:
80
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
81
+
82
+ - name: Post-mortem diagnostics
83
+ if: failure()
84
+ run: |
85
+ echo "=== Post-mortem Diagnostics ==="
86
+ echo "Versions:"
87
+ echo " Node: $(node --version)"
88
+ echo " npm: $(npm --version)"
89
+ echo " pnpm: $(pnpm --version)"
90
+ echo ""
91
+ echo "Registry configuration:"
92
+ echo " registry: $(npm config get registry)"
93
+ echo " @openrouter scope: $(npm config get @openrouter:registry || echo '(inherited from global)')"
94
+ echo ""
95
+ echo ".npmrc files status:"
96
+ for npmrc in "$NPM_CONFIG_USERCONFIG" ~/.npmrc .npmrc; do
97
+ if [ -n "$npmrc" ] && [ -f "$npmrc" ]; then
98
+ echo " $npmrc:"
99
+ echo " Lines: $(wc -l < "$npmrc")"
100
+ echo " Auth lines: $(grep -c "_auth\|_token" "$npmrc" || echo "0")"
101
+ echo " Content (redacted):"
102
+ sed 's/\(_auth[^=]*=\).*/\1***REDACTED***/g; s/\(_token[^=]*=\).*/\1***REDACTED***/g' "$npmrc" | sed 's/^/ /'
103
+ fi
104
+ done
105
+ echo ""
106
+ echo "Package availability:"
107
+ npm view @openrouter/ai-sdk-provider@latest version 2>&1 || echo " (could not fetch)"
@@ -0,0 +1,32 @@
1
+ {
2
+ "files.exclude": {
3
+ "**/.git": true,
4
+ "**/.svn": true,
5
+ "**/.hg": true,
6
+ "**/CVS": true,
7
+ "**/.DS_Store": true,
8
+ "**/Thumbs.db": true,
9
+ "**/node_modules": true,
10
+ "**/.turbo": true,
11
+ "**/.expo": true,
12
+ "**/expo-env.d.ts": true,
13
+ "**/.next": true,
14
+ "**/next-env.d.ts": true,
15
+ "**/.swc": true,
16
+ "**/*.log": true
17
+ },
18
+ "workbench.colorCustomizations": {
19
+ "titleBar.activeForeground": "#eee",
20
+ "titleBar.activeBackground": "#f4f" // Change this color!
21
+ },
22
+ "editor.formatOnSave": true,
23
+ "files.insertFinalNewline": true,
24
+ "editor.defaultFormatter": "biomejs.biome",
25
+ "editor.codeActionsOnSave": {
26
+ "source.organizeImports.biome": "explicit",
27
+ "source.fixAll.biome": "explicit"
28
+ },
29
+ "[typescript]": {
30
+ "editor.defaultFormatter": "biomejs.biome"
31
+ }
32
+ }