@vibesdotdev/integrations-anthropic 0.0.0-stage → 1.0.0-rc.1

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 (150) hide show
  1. package/LICENSE +126 -0
  2. package/README.md +57 -2
  3. package/dist/ai/anthropic-router-codec.d.ts +32 -0
  4. package/dist/ai/anthropic-router-codec.d.ts.map +1 -0
  5. package/dist/ai/anthropic-router-codec.js +321 -0
  6. package/dist/ai/anthropic-router-codec.js.map +1 -0
  7. package/dist/ai/anthropic.plugin.d.ts +6 -0
  8. package/dist/ai/anthropic.plugin.d.ts.map +1 -0
  9. package/dist/ai/anthropic.plugin.js +116 -0
  10. package/dist/ai/anthropic.plugin.js.map +1 -0
  11. package/dist/ai/catalog.d.ts +87 -0
  12. package/dist/ai/catalog.d.ts.map +1 -0
  13. package/dist/ai/catalog.js +64 -0
  14. package/dist/ai/catalog.js.map +1 -0
  15. package/dist/ai/claude-code-session.d.ts +56 -0
  16. package/dist/ai/claude-code-session.d.ts.map +1 -0
  17. package/dist/ai/claude-code-session.js +75 -0
  18. package/dist/ai/claude-code-session.js.map +1 -0
  19. package/dist/ai/claude-code-turn-env.d.ts +10 -0
  20. package/dist/ai/claude-code-turn-env.d.ts.map +1 -0
  21. package/dist/ai/claude-code-turn-env.js +19 -0
  22. package/dist/ai/claude-code-turn-env.js.map +1 -0
  23. package/dist/ai/hostile.d.ts +23 -0
  24. package/dist/ai/hostile.d.ts.map +1 -0
  25. package/dist/ai/hostile.js +22 -0
  26. package/dist/ai/hostile.js.map +1 -0
  27. package/dist/ai/index.d.ts +4 -0
  28. package/dist/ai/index.d.ts.map +1 -0
  29. package/dist/ai/index.js +4 -0
  30. package/dist/ai/index.js.map +1 -0
  31. package/dist/ai/metadata/assets/logos/providers/anthropic.svg +1 -0
  32. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-haiku-20241022.json +77 -0
  33. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-3-5-sonnet-20241022.json +42 -0
  34. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-opus-20250514.json +79 -0
  35. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-4-sonnet-20250514.json +79 -0
  36. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-4-5.json +80 -0
  37. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-haiku-5-5.json +39 -0
  38. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-1.json +78 -0
  39. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-5.json +80 -0
  40. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-6.json +80 -0
  41. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-opus-4-7.json +81 -0
  42. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-5.json +80 -0
  43. package/dist/ai/metadata/provider-models/anthropic/anthropic-claude-sonnet-4-6.json +80 -0
  44. package/dist/ai/metadata/providers/anthropic.json +22 -0
  45. package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts +62 -0
  46. package/dist/ai/providers/anthropic/anthropic.provider.impl.d.ts.map +1 -0
  47. package/dist/ai/providers/anthropic/anthropic.provider.impl.js +430 -0
  48. package/dist/ai/providers/anthropic/anthropic.provider.impl.js.map +1 -0
  49. package/dist/ai/providers/anthropic/detection/index.d.ts +8 -0
  50. package/dist/ai/providers/anthropic/detection/index.d.ts.map +1 -0
  51. package/dist/ai/providers/anthropic/detection/index.js +8 -0
  52. package/dist/ai/providers/anthropic/detection/index.js.map +1 -0
  53. package/dist/ai/providers/anthropic/detection/system.d.ts +12 -0
  54. package/dist/ai/providers/anthropic/detection/system.d.ts.map +1 -0
  55. package/dist/ai/providers/anthropic/detection/system.js +34 -0
  56. package/dist/ai/providers/anthropic/detection/system.js.map +1 -0
  57. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts +4 -0
  58. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.d.ts.map +1 -0
  59. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js +212 -0
  60. package/dist/ai/providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js.map +1 -0
  61. package/dist/ai/providers/anthropic/index.d.ts +4 -0
  62. package/dist/ai/providers/anthropic/index.d.ts.map +1 -0
  63. package/dist/ai/providers/anthropic/index.js +4 -0
  64. package/dist/ai/providers/anthropic/index.js.map +1 -0
  65. package/dist/ai/providers/anthropic/recommendations.d.ts +24 -0
  66. package/dist/ai/providers/anthropic/recommendations.d.ts.map +1 -0
  67. package/dist/ai/providers/anthropic/recommendations.js +192 -0
  68. package/dist/ai/providers/anthropic/recommendations.js.map +1 -0
  69. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts +4194 -0
  70. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.d.ts.map +1 -0
  71. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js +52 -0
  72. package/dist/ai/providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js.map +1 -0
  73. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts +46 -0
  74. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.d.ts.map +1 -0
  75. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js +22 -0
  76. package/dist/ai/providers/cloud/frontier/anthropic/config/schemas/index.js.map +1 -0
  77. package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts +5 -0
  78. package/dist/ai/providers/cloud/frontier/anthropic/index.d.ts.map +1 -0
  79. package/dist/ai/providers/cloud/frontier/anthropic/index.js +4 -0
  80. package/dist/ai/providers/cloud/frontier/anthropic/index.js.map +1 -0
  81. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts +183 -0
  82. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.d.ts.map +1 -0
  83. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js +115 -0
  84. package/dist/ai/providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js.map +1 -0
  85. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts +46 -0
  86. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.d.ts.map +1 -0
  87. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js +183 -0
  88. package/dist/ai/specs/anthropic-messages/anthropic-messages.failures.js.map +1 -0
  89. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts +34 -0
  90. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.d.ts.map +1 -0
  91. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js +29 -0
  92. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.descriptor.js.map +1 -0
  93. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts +48 -0
  94. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.d.ts.map +1 -0
  95. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js +557 -0
  96. package/dist/ai/specs/anthropic-messages/anthropic-messages.spec.impl.js.map +1 -0
  97. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts +26 -0
  98. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.d.ts.map +1 -0
  99. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js +15 -0
  100. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.descriptor.js.map +1 -0
  101. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts +35 -0
  102. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.d.ts.map +1 -0
  103. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js +210 -0
  104. package/dist/ai/specs/claude-code-exec/claude-code-exec.spec.impl.js.map +1 -0
  105. package/dist/external/acp-server.consumer.plugin.d.ts +3 -0
  106. package/dist/external/acp-server.consumer.plugin.d.ts.map +1 -0
  107. package/dist/external/acp-server.consumer.plugin.js +29 -0
  108. package/dist/external/acp-server.consumer.plugin.js.map +1 -0
  109. package/dist/external/acp-server.d.ts +19 -0
  110. package/dist/external/acp-server.d.ts.map +1 -0
  111. package/dist/external/acp-server.js +198 -0
  112. package/dist/external/acp-server.js.map +1 -0
  113. package/dist/external/claude-code-hooks.d.ts +51 -0
  114. package/dist/external/claude-code-hooks.d.ts.map +1 -0
  115. package/dist/external/claude-code-hooks.js +252 -0
  116. package/dist/external/claude-code-hooks.js.map +1 -0
  117. package/dist/external/claude-code-installer.d.ts +10 -0
  118. package/dist/external/claude-code-installer.d.ts.map +1 -0
  119. package/dist/external/claude-code-installer.js +604 -0
  120. package/dist/external/claude-code-installer.js.map +1 -0
  121. package/dist/external/claude-code-operations.d.ts +217 -0
  122. package/dist/external/claude-code-operations.d.ts.map +1 -0
  123. package/dist/external/claude-code-operations.js +101 -0
  124. package/dist/external/claude-code-operations.js.map +1 -0
  125. package/dist/external/claude-code-plugin.json +7 -0
  126. package/dist/external/claude-code-presets.d.ts +813 -0
  127. package/dist/external/claude-code-presets.d.ts.map +1 -0
  128. package/dist/external/claude-code-presets.js +157 -0
  129. package/dist/external/claude-code-presets.js.map +1 -0
  130. package/dist/external/claude-code.descriptor.d.ts +160 -0
  131. package/dist/external/claude-code.descriptor.d.ts.map +1 -0
  132. package/dist/external/claude-code.descriptor.js +5 -0
  133. package/dist/external/claude-code.descriptor.js.map +1 -0
  134. package/dist/external/claude-code.manifest.d.ts +5 -0
  135. package/dist/external/claude-code.manifest.d.ts.map +1 -0
  136. package/dist/external/claude-code.manifest.js +205 -0
  137. package/dist/external/claude-code.manifest.js.map +1 -0
  138. package/dist/external/external.plugin.d.ts +6 -0
  139. package/dist/external/external.plugin.d.ts.map +1 -0
  140. package/dist/external/external.plugin.js +56 -0
  141. package/dist/external/external.plugin.js.map +1 -0
  142. package/dist/external/index.d.ts +6 -0
  143. package/dist/external/index.d.ts.map +1 -0
  144. package/dist/external/index.js +6 -0
  145. package/dist/external/index.js.map +1 -0
  146. package/dist/index.d.ts +4 -0
  147. package/dist/index.d.ts.map +1 -0
  148. package/dist/index.js +4 -0
  149. package/dist/index.js.map +1 -0
  150. package/package.json +108 -4
@@ -0,0 +1,116 @@
1
+ import { createRuntimePlugin } from '@vibesdotdev/kernel';
2
+ import { AI_PROVIDER_SCHEMA_KIND } from '@vibesdotdev/ai/providers-runtime';
3
+ import { AI_PROVIDER_RECOMMENDATION_KIND, createAIProviderRecommendationDescriptor } from '@vibesdotdev/ai/recommendations';
4
+ import { AI_ROUTER_CODEC_KIND } from '@vibesdotdev/ai/router';
5
+ import { anthropicRouterCodecDescriptor } from "./anthropic-router-codec.js";
6
+ import anthropicMessagesDescriptor from "./specs/anthropic-messages/anthropic-messages.spec.descriptor.js";
7
+ import claudeCodeExecDescriptor from "./specs/claude-code-exec/claude-code-exec.spec.descriptor.js";
8
+ import anthropicProviderDescriptor from "./providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js";
9
+ import anthropicProviderConfigDescriptor from "./providers/cloud/frontier/anthropic/config/config.anthropic.descriptor.js";
10
+ import anthropicDocsDescriptor from "./providers/anthropic/docs/ai.providers.anthropic.docs.descriptor.js";
11
+ import { anthropicConnectionSchema as schema0 } from "./providers/cloud/frontier/anthropic/config/schemas/index.js";
12
+ import { anthropicCatalogModels, anthropicProviderMetadata } from "./catalog.js";
13
+ import { toAIModelDescriptor } from '@vibesdotdev/ai/metadata/models';
14
+ const providerDetectionDescriptor = {
15
+ id: 'anthropic',
16
+ kind: 'ai/provider-detection',
17
+ providerId: 'anthropic',
18
+ description: `System detection loader for ${'anthropic'}`
19
+ };
20
+ const providerRecommendationDescriptor = createAIProviderRecommendationDescriptor({
21
+ id: 'anthropic',
22
+ providerType: 'anthropic',
23
+ displayName: 'Anthropic Claude',
24
+ name: 'Anthropic provider recommendation',
25
+ description: 'Scores Anthropic for runtime setup without embedding vendor policy in Framework',
26
+ hardware: ['consumer', 'cloud'],
27
+ enabled: true,
28
+ tags: ['anthropic', 'claude', 'cloud']
29
+ });
30
+ const providerDocsDescriptor = anthropicDocsDescriptor;
31
+ const providerSchemaDescriptor = {
32
+ id: 'integrations/anthropic/ai/anthropic',
33
+ kind: AI_PROVIDER_SCHEMA_KIND,
34
+ providerId: 'anthropic',
35
+ schemaKind: 'connection',
36
+ sourcePath: 'integrations/anthropic/src/ai/providers/cloud/frontier/anthropic/config/schemas/index.ts',
37
+ version: '0.1.0-rc.0',
38
+ name: 'Anthropic',
39
+ description: 'Anthropic platform providing Claude models for text generation with industry-leading context windows, vision capabilities, and advanced reasoning.'
40
+ };
41
+ /** One `ai/model` descriptor per catalogue record: the catalogue is the only model table. */
42
+ const providerModelDescriptors = anthropicCatalogModels.map((model) => toAIModelDescriptor(model, anthropicProviderMetadata));
43
+ /** Complete runtime boundary for Anthropic-owned AI capabilities. */
44
+ export function createAnthropicPlugin() {
45
+ return createRuntimePlugin({
46
+ id: 'integrations-anthropic/ai',
47
+ name: 'Anthropic AI Integration',
48
+ description: 'Registers Anthropic-owned AI descriptors and lazy implementations',
49
+ dependencies: ['ai/providers', 'ai/router'],
50
+ onRegister(runtime) {
51
+ runtime.registerDescriptor('ai/provider', anthropicProviderDescriptor);
52
+ runtime.registerDescriptor('config/manifest', anthropicProviderConfigDescriptor);
53
+ runtime.registerDescriptor('ai/provider-detection', providerDetectionDescriptor);
54
+ runtime.registerDescriptor(AI_PROVIDER_SCHEMA_KIND, providerSchemaDescriptor);
55
+ runtime.registerDescriptor(AI_PROVIDER_RECOMMENDATION_KIND, providerRecommendationDescriptor);
56
+ runtime.registerDescriptor('ai/spec', anthropicMessagesDescriptor);
57
+ runtime.registerDescriptor('ai/spec', claudeCodeExecDescriptor);
58
+ if (runtime.hasKind('docs/topic'))
59
+ runtime.registerDescriptor('docs/topic', providerDocsDescriptor);
60
+ for (const model of providerModelDescriptors)
61
+ runtime.registerDescriptor('ai/model', model);
62
+ runtime.registerDescriptor(AI_ROUTER_CODEC_KIND, anthropicRouterCodecDescriptor);
63
+ },
64
+ onActivate(runtime) {
65
+ runtime.registerLoader('ai/provider', 'anthropic', async () => ({
66
+ meta: { id: 'anthropic', kind: 'ai/provider', priority: 0 },
67
+ impl: (await import("./providers/anthropic/anthropic.provider.impl.js"))
68
+ .AnthropicProviderType
69
+ }));
70
+ runtime.registerLoader('ai/provider-detection', 'anthropic', async () => ({
71
+ meta: { id: 'anthropic', kind: 'ai/provider-detection', priority: 0 },
72
+ impl: {
73
+ detect: async () => (await import("./providers/anthropic/detection/system.js")).detectAnthropicSystem(runtime)
74
+ }
75
+ }));
76
+ runtime.registerLoader(AI_PROVIDER_SCHEMA_KIND, providerSchemaDescriptor.id, async () => ({
77
+ meta: { id: providerSchemaDescriptor.id, kind: AI_PROVIDER_SCHEMA_KIND, priority: 0 },
78
+ impl: {
79
+ connectionSchema: schema0,
80
+ metadata: {
81
+ name: 'Anthropic',
82
+ description: 'Anthropic platform providing Claude models for text generation with industry-leading context windows, vision capabilities, and advanced reasoning.',
83
+ category: 'cloud',
84
+ capabilities: ['text', 'vision', 'embedding', 'connection'],
85
+ fields: []
86
+ }
87
+ }
88
+ }));
89
+ runtime.registerLoader(AI_PROVIDER_RECOMMENDATION_KIND, providerRecommendationDescriptor.id, async () => ({
90
+ meta: {
91
+ id: providerRecommendationDescriptor.id,
92
+ kind: AI_PROVIDER_RECOMMENDATION_KIND,
93
+ priority: providerRecommendationDescriptor.priority ?? 0
94
+ },
95
+ impl: new (await import("./providers/anthropic/recommendations.js")).AnthropicRecommendation()
96
+ }));
97
+ runtime.registerLoader('ai/spec', anthropicMessagesDescriptor.id, async () => ({
98
+ impl: (await import("./specs/anthropic-messages/anthropic-messages.spec.impl.js")).default
99
+ }));
100
+ runtime.registerLoader('ai/spec', claudeCodeExecDescriptor.id, async () => ({
101
+ impl: (await import("./specs/claude-code-exec/claude-code-exec.spec.impl.js")).default
102
+ }));
103
+ runtime.registerLoader(AI_ROUTER_CODEC_KIND, anthropicRouterCodecDescriptor.id, async () => ({
104
+ meta: {
105
+ id: anthropicRouterCodecDescriptor.id,
106
+ kind: AI_ROUTER_CODEC_KIND,
107
+ priority: anthropicRouterCodecDescriptor.priority ?? 0
108
+ },
109
+ impl: (await import("./anthropic-router-codec.js")).anthropicRouterCodec
110
+ }));
111
+ }
112
+ });
113
+ }
114
+ export const anthropicAIPlugin = createAnthropicPlugin();
115
+ export default anthropicAIPlugin;
116
+ //# sourceMappingURL=anthropic.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.plugin.js","sourceRoot":"","sources":["../../src/ai/anthropic.plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The Anthropic model catalogue: the one table of model ids, names, limits and prices.
3
+ *
4
+ * The plugin publishes these records as `ai/model` descriptors, the provider's `recommendModels`
5
+ * and the setup recommendation score them, and neither carries a model id, a context window or a
6
+ * price of its own: a recommendation names a catalogue record and reads its facts from it, so a
7
+ * price or an id changes in one JSON file.
8
+ */
9
+ import { type AIProviderModelMetadata } from '@vibesdotdev/ai/metadata/schemas';
10
+ export declare const anthropicProviderMetadata: {
11
+ [x: string]: unknown;
12
+ id: string;
13
+ name: string;
14
+ aliases: string[];
15
+ sourceUrls: string[];
16
+ baseUrl?: string | undefined;
17
+ compatibleKindId?: string | undefined;
18
+ branding?: {
19
+ [x: string]: unknown;
20
+ logo?: {
21
+ [x: string]: unknown;
22
+ kind: "wordmark" | "mark" | "lockup" | "badge";
23
+ format: "svg";
24
+ path: string;
25
+ sourceUrl: string;
26
+ sourcePageUrl: string;
27
+ source: "official-brand-page" | "official-brand-kit" | "official-homepage-inline" | "official-cdn" | "official-github";
28
+ theme: "any" | "light" | "dark";
29
+ usageNotes?: string | undefined;
30
+ licenseNotes?: string | undefined;
31
+ } | undefined;
32
+ darkLogo?: {
33
+ [x: string]: unknown;
34
+ kind: "wordmark" | "mark" | "lockup" | "badge";
35
+ format: "svg";
36
+ path: string;
37
+ sourceUrl: string;
38
+ sourcePageUrl: string;
39
+ source: "official-brand-page" | "official-brand-kit" | "official-homepage-inline" | "official-cdn" | "official-github";
40
+ theme: "any" | "light" | "dark";
41
+ usageNotes?: string | undefined;
42
+ licenseNotes?: string | undefined;
43
+ } | undefined;
44
+ wordmark?: {
45
+ [x: string]: unknown;
46
+ kind: "wordmark" | "mark" | "lockup" | "badge";
47
+ format: "svg";
48
+ path: string;
49
+ sourceUrl: string;
50
+ sourcePageUrl: string;
51
+ source: "official-brand-page" | "official-brand-kit" | "official-homepage-inline" | "official-cdn" | "official-github";
52
+ theme: "any" | "light" | "dark";
53
+ usageNotes?: string | undefined;
54
+ licenseNotes?: string | undefined;
55
+ } | undefined;
56
+ darkWordmark?: {
57
+ [x: string]: unknown;
58
+ kind: "wordmark" | "mark" | "lockup" | "badge";
59
+ format: "svg";
60
+ path: string;
61
+ sourceUrl: string;
62
+ sourcePageUrl: string;
63
+ source: "official-brand-page" | "official-brand-kit" | "official-homepage-inline" | "official-cdn" | "official-github";
64
+ theme: "any" | "light" | "dark";
65
+ usageNotes?: string | undefined;
66
+ licenseNotes?: string | undefined;
67
+ } | undefined;
68
+ sourcePageUrl?: string | undefined;
69
+ usageNotes?: string | undefined;
70
+ } | undefined;
71
+ docsUrl?: string | undefined;
72
+ };
73
+ /** Every model record the package publishes, in the order it publishes them. */
74
+ export declare const anthropicCatalogModels: readonly AIProviderModelMetadata[];
75
+ /** The catalogue record of a provider model id (`claude-opus-4-7`); an id the catalogue lacks is a defect, not an absence. */
76
+ export declare function catalogModel(providerModelId: string): AIProviderModelMetadata;
77
+ /** A model's published price for one unit kind, in US dollars per million units; `undefined` when the catalogue prices none. */
78
+ export declare function usdPerMillion(model: AIProviderModelMetadata, units: 'input_tokens' | 'output_tokens'): number | undefined;
79
+ /** The context window and the largest reply of a model, as the catalogue records them. */
80
+ export interface CatalogLimits {
81
+ readonly contextWindow: number | undefined;
82
+ readonly maxOutputTokens: number | undefined;
83
+ }
84
+ export declare function catalogLimits(model: AIProviderModelMetadata): CatalogLimits;
85
+ /** The display name of a catalogue record (its provider model id when it names none). */
86
+ export declare function catalogName(model: AIProviderModelMetadata): string;
87
+ //# sourceMappingURL=catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/ai/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAGN,KAAK,uBAAuB,EAC5B,MAAM,kCAAkC,CAAC;AAe1C,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAqD,CAAC;AAE5F,gFAAgF;AAChF,eAAO,MAAM,sBAAsB,EAAE,SAAS,uBAAuB,EAaP,CAAC;AAE/D,8HAA8H;AAC9H,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,GAAG,uBAAuB,CAI7E;AAED,gIAAgI;AAChI,wBAAgB,aAAa,CAAC,KAAK,EAAE,uBAAuB,EAAE,KAAK,EAAE,cAAc,GAAG,eAAe,GAAG,MAAM,GAAG,SAAS,CAGzH;AAED,0FAA0F;AAC1F,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CAK3E;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAElE"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * The Anthropic model catalogue: the one table of model ids, names, limits and prices.
3
+ *
4
+ * The plugin publishes these records as `ai/model` descriptors, the provider's `recommendModels`
5
+ * and the setup recommendation score them, and neither carries a model id, a context window or a
6
+ * price of its own: a recommendation names a catalogue record and reads its facts from it, so a
7
+ * price or an id changes in one JSON file.
8
+ */
9
+ import * as z from 'zod/v4';
10
+ import { AIProviderMetadataSchema, AIProviderModelMetadataSchema } from '@vibesdotdev/ai/metadata/schemas';
11
+ import provider_anthropic from './metadata/providers/anthropic.json' with { type: 'json' };
12
+ import model_claude_3_5_haiku_20241022 from './metadata/provider-models/anthropic/anthropic-claude-3-5-haiku-20241022.json' with { type: 'json' };
13
+ import model_claude_3_5_sonnet_20241022 from './metadata/provider-models/anthropic/anthropic-claude-3-5-sonnet-20241022.json' with { type: 'json' };
14
+ import model_claude_4_opus_20250514 from './metadata/provider-models/anthropic/anthropic-claude-4-opus-20250514.json' with { type: 'json' };
15
+ import model_claude_4_sonnet_20250514 from './metadata/provider-models/anthropic/anthropic-claude-4-sonnet-20250514.json' with { type: 'json' };
16
+ import model_claude_haiku_4_5 from './metadata/provider-models/anthropic/anthropic-claude-haiku-4-5.json' with { type: 'json' };
17
+ import model_claude_haiku_5_5 from './metadata/provider-models/anthropic/anthropic-claude-haiku-5-5.json' with { type: 'json' };
18
+ import model_claude_opus_4_1 from './metadata/provider-models/anthropic/anthropic-claude-opus-4-1.json' with { type: 'json' };
19
+ import model_claude_opus_4_5 from './metadata/provider-models/anthropic/anthropic-claude-opus-4-5.json' with { type: 'json' };
20
+ import model_claude_opus_4_6 from './metadata/provider-models/anthropic/anthropic-claude-opus-4-6.json' with { type: 'json' };
21
+ import model_claude_opus_4_7 from './metadata/provider-models/anthropic/anthropic-claude-opus-4-7.json' with { type: 'json' };
22
+ import model_claude_sonnet_4_5 from './metadata/provider-models/anthropic/anthropic-claude-sonnet-4-5.json' with { type: 'json' };
23
+ import model_claude_sonnet_4_6 from './metadata/provider-models/anthropic/anthropic-claude-sonnet-4-6.json' with { type: 'json' };
24
+ export const anthropicProviderMetadata = AIProviderMetadataSchema.parse(provider_anthropic);
25
+ /** Every model record the package publishes, in the order it publishes them. */
26
+ export const anthropicCatalogModels = [
27
+ model_claude_3_5_haiku_20241022,
28
+ model_claude_3_5_sonnet_20241022,
29
+ model_claude_4_opus_20250514,
30
+ model_claude_4_sonnet_20250514,
31
+ model_claude_haiku_4_5,
32
+ model_claude_opus_4_1,
33
+ model_claude_opus_4_5,
34
+ model_claude_opus_4_6,
35
+ model_claude_opus_4_7,
36
+ model_claude_sonnet_4_5,
37
+ model_claude_sonnet_4_6,
38
+ model_claude_haiku_5_5
39
+ ].map((record) => AIProviderModelMetadataSchema.parse(record));
40
+ /** The catalogue record of a provider model id (`claude-opus-4-7`); an id the catalogue lacks is a defect, not an absence. */
41
+ export function catalogModel(providerModelId) {
42
+ const model = anthropicCatalogModels.find((candidate) => candidate.providerModelId === providerModelId);
43
+ if (!model)
44
+ throw new RangeError(`The Anthropic catalogue has no model '${providerModelId}'.`);
45
+ return model;
46
+ }
47
+ /** A model's published price for one unit kind, in US dollars per million units; `undefined` when the catalogue prices none. */
48
+ export function usdPerMillion(model, units) {
49
+ const basis = CostBasisSchema.safeParse(model.costBasis);
50
+ return basis.success ? basis.data.find((entry) => entry.units === units)?.usdPerMillionUnits : undefined;
51
+ }
52
+ const LimitSchema = z.number().optional().catch(undefined);
53
+ export function catalogLimits(model) {
54
+ return {
55
+ contextWindow: LimitSchema.parse(model.tokenLimit),
56
+ maxOutputTokens: LimitSchema.parse(model.configuration?.maxTokens)
57
+ };
58
+ }
59
+ /** The display name of a catalogue record (its provider model id when it names none). */
60
+ export function catalogName(model) {
61
+ return model.displayName ?? model.providerModelId;
62
+ }
63
+ const CostBasisSchema = z.array(z.looseObject({ units: z.string(), usdPerMillionUnits: z.number() }));
64
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/ai/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Environment overrides that keep Claude Code on its saved claude.ai session.
3
+ *
4
+ * Claude Code applies settings-file `env` after inherited process environment,
5
+ * so callers must also use `withClaudeCodeSubscriptionPolicy`. Empty values are
6
+ * intentional: Claude Code documents them as unset while preserving Keychain
7
+ * access (unlike `--bare`).
8
+ */
9
+ export declare const CLAUDE_CODE_SUBSCRIPTION_ENV: {
10
+ readonly ANTHROPIC_API_KEY: "";
11
+ readonly ANTHROPIC_AUTH_TOKEN: "";
12
+ readonly ANTHROPIC_AWS_API_KEY: "";
13
+ readonly ANTHROPIC_AWS_BASE_URL: "";
14
+ readonly ANTHROPIC_AWS_WORKSPACE_ID: "";
15
+ readonly ANTHROPIC_BASE_URL: "";
16
+ readonly ANTHROPIC_BEDROCK_BASE_URL: "";
17
+ readonly ANTHROPIC_BEDROCK_MANTLE_BASE_URL: "";
18
+ readonly ANTHROPIC_FEDERATION_RULE_ID: "";
19
+ readonly ANTHROPIC_FOUNDRY_API_KEY: "";
20
+ readonly ANTHROPIC_FOUNDRY_AUTH_TOKEN: "";
21
+ readonly ANTHROPIC_FOUNDRY_BASE_URL: "";
22
+ readonly ANTHROPIC_FOUNDRY_RESOURCE: "";
23
+ readonly ANTHROPIC_ORGANIZATION_ID: "";
24
+ readonly ANTHROPIC_PROFILE: "";
25
+ readonly ANTHROPIC_VERTEX_BASE_URL: "";
26
+ readonly ANTHROPIC_VERTEX_PROJECT_ID: "";
27
+ readonly ANTHROPIC_WORKSPACE_ID: "";
28
+ readonly AWS_BEARER_TOKEN_BEDROCK: "";
29
+ readonly CLAUDE_CODE_OAUTH_REFRESH_TOKEN: "";
30
+ readonly CLAUDE_CODE_OAUTH_SCOPES: "";
31
+ readonly CLAUDE_CODE_OAUTH_TOKEN: "";
32
+ readonly CLAUDE_CODE_USE_ANTHROPIC_AWS: "";
33
+ readonly CLAUDE_CODE_USE_BEDROCK: "";
34
+ readonly CLAUDE_CODE_USE_VERTEX: "";
35
+ readonly CLAUDE_CODE_USE_FOUNDRY: "";
36
+ readonly CLAUDE_CODE_USE_MANTLE: "";
37
+ };
38
+ /**
39
+ * The host variables a Claude Code subscription child names (rc02-rc03 C22),
40
+ * beyond the host base set (its Keychain login and `~/.claude` live under
41
+ * HOME): its config directory, and the proxy and CA settings its HTTPS calls
42
+ * honour. The child runs with `envMode: 'replace'`, so the host snapshot
43
+ * contributes only the base set and these names; the Anthropic and cloud
44
+ * routing keys in `CLAUDE_CODE_SUBSCRIPTION_ENV` are also declared empty.
45
+ */
46
+ export declare const CLAUDE_CODE_SUBSCRIPTION_INHERIT_ENV: readonly ["CLAUDE_CONFIG_DIR", "HTTPS_PROXY", "HTTP_PROXY", "NO_PROXY", "NODE_EXTRA_CA_CERTS"];
47
+ /** The browser sign-in also opens a browser: the selected one and the desktop session it opens in. */
48
+ export declare const CLAUDE_CODE_LOGIN_INHERIT_ENV: readonly ["CLAUDE_CONFIG_DIR", "HTTPS_PROXY", "HTTP_PROXY", "NO_PROXY", "NODE_EXTRA_CA_CERTS", "BROWSER", "DISPLAY", "WAYLAND_DISPLAY", "XDG_RUNTIME_DIR", "DBUS_SESSION_BUS_ADDRESS"];
49
+ /**
50
+ * Runs Claude Code without user, project, or local settings that could replace
51
+ * the saved subscription with separately billed credentials. Managed settings
52
+ * deliberately still apply; the provider verifies the resulting active route
53
+ * before every generated turn and fails closed unless it remains claude.ai.
54
+ */
55
+ export declare function withClaudeCodeSubscriptionPolicy(args: readonly string[]): string[];
56
+ //# sourceMappingURL=claude-code-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-session.d.ts","sourceRoot":"","sources":["../../src/ai/claude-code-session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4B/B,CAAC;AAEX;;;;;;;GAOG;AACH,eAAO,MAAM,oCAAoC,gGAMvC,CAAC;AAEX,sGAAsG;AACtG,eAAO,MAAM,6BAA6B,wLAOhC,CAAC;AAOX;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAElF"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Environment overrides that keep Claude Code on its saved claude.ai session.
3
+ *
4
+ * Claude Code applies settings-file `env` after inherited process environment,
5
+ * so callers must also use `withClaudeCodeSubscriptionPolicy`. Empty values are
6
+ * intentional: Claude Code documents them as unset while preserving Keychain
7
+ * access (unlike `--bare`).
8
+ */
9
+ export const CLAUDE_CODE_SUBSCRIPTION_ENV = {
10
+ ANTHROPIC_API_KEY: '',
11
+ ANTHROPIC_AUTH_TOKEN: '',
12
+ ANTHROPIC_AWS_API_KEY: '',
13
+ ANTHROPIC_AWS_BASE_URL: '',
14
+ ANTHROPIC_AWS_WORKSPACE_ID: '',
15
+ ANTHROPIC_BASE_URL: '',
16
+ ANTHROPIC_BEDROCK_BASE_URL: '',
17
+ ANTHROPIC_BEDROCK_MANTLE_BASE_URL: '',
18
+ ANTHROPIC_FEDERATION_RULE_ID: '',
19
+ ANTHROPIC_FOUNDRY_API_KEY: '',
20
+ ANTHROPIC_FOUNDRY_AUTH_TOKEN: '',
21
+ ANTHROPIC_FOUNDRY_BASE_URL: '',
22
+ ANTHROPIC_FOUNDRY_RESOURCE: '',
23
+ ANTHROPIC_ORGANIZATION_ID: '',
24
+ ANTHROPIC_PROFILE: '',
25
+ ANTHROPIC_VERTEX_BASE_URL: '',
26
+ ANTHROPIC_VERTEX_PROJECT_ID: '',
27
+ ANTHROPIC_WORKSPACE_ID: '',
28
+ AWS_BEARER_TOKEN_BEDROCK: '',
29
+ CLAUDE_CODE_OAUTH_REFRESH_TOKEN: '',
30
+ CLAUDE_CODE_OAUTH_SCOPES: '',
31
+ CLAUDE_CODE_OAUTH_TOKEN: '',
32
+ CLAUDE_CODE_USE_ANTHROPIC_AWS: '',
33
+ CLAUDE_CODE_USE_BEDROCK: '',
34
+ CLAUDE_CODE_USE_VERTEX: '',
35
+ CLAUDE_CODE_USE_FOUNDRY: '',
36
+ CLAUDE_CODE_USE_MANTLE: ''
37
+ };
38
+ /**
39
+ * The host variables a Claude Code subscription child names (rc02-rc03 C22),
40
+ * beyond the host base set (its Keychain login and `~/.claude` live under
41
+ * HOME): its config directory, and the proxy and CA settings its HTTPS calls
42
+ * honour. The child runs with `envMode: 'replace'`, so the host snapshot
43
+ * contributes only the base set and these names; the Anthropic and cloud
44
+ * routing keys in `CLAUDE_CODE_SUBSCRIPTION_ENV` are also declared empty.
45
+ */
46
+ export const CLAUDE_CODE_SUBSCRIPTION_INHERIT_ENV = [
47
+ 'CLAUDE_CONFIG_DIR',
48
+ 'HTTPS_PROXY',
49
+ 'HTTP_PROXY',
50
+ 'NO_PROXY',
51
+ 'NODE_EXTRA_CA_CERTS'
52
+ ];
53
+ /** The browser sign-in also opens a browser: the selected one and the desktop session it opens in. */
54
+ export const CLAUDE_CODE_LOGIN_INHERIT_ENV = [
55
+ ...CLAUDE_CODE_SUBSCRIPTION_INHERIT_ENV,
56
+ 'BROWSER',
57
+ 'DISPLAY',
58
+ 'WAYLAND_DISPLAY',
59
+ 'XDG_RUNTIME_DIR',
60
+ 'DBUS_SESSION_BUS_ADDRESS'
61
+ ];
62
+ const CLAUDE_CODE_SUBSCRIPTION_SETTINGS = JSON.stringify({
63
+ apiKeyHelper: '',
64
+ env: CLAUDE_CODE_SUBSCRIPTION_ENV
65
+ });
66
+ /**
67
+ * Runs Claude Code without user, project, or local settings that could replace
68
+ * the saved subscription with separately billed credentials. Managed settings
69
+ * deliberately still apply; the provider verifies the resulting active route
70
+ * before every generated turn and fails closed unless it remains claude.ai.
71
+ */
72
+ export function withClaudeCodeSubscriptionPolicy(args) {
73
+ return ['--setting-sources', '', '--settings', CLAUDE_CODE_SUBSCRIPTION_SETTINGS, ...args];
74
+ }
75
+ //# sourceMappingURL=claude-code-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-session.js","sourceRoot":"","sources":["../../src/ai/claude-code-session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC3C,iBAAiB,EAAE,EAAE;IACrB,oBAAoB,EAAE,EAAE;IACxB,qBAAqB,EAAE,EAAE;IACzB,sBAAsB,EAAE,EAAE;IAC1B,0BAA0B,EAAE,EAAE;IAC9B,kBAAkB,EAAE,EAAE;IACtB,0BAA0B,EAAE,EAAE;IAC9B,iCAAiC,EAAE,EAAE;IACrC,4BAA4B,EAAE,EAAE;IAChC,yBAAyB,EAAE,EAAE;IAC7B,4BAA4B,EAAE,EAAE;IAChC,0BAA0B,EAAE,EAAE;IAC9B,0BAA0B,EAAE,EAAE;IAC9B,yBAAyB,EAAE,EAAE;IAC7B,iBAAiB,EAAE,EAAE;IACrB,yBAAyB,EAAE,EAAE;IAC7B,2BAA2B,EAAE,EAAE;IAC/B,sBAAsB,EAAE,EAAE;IAC1B,wBAAwB,EAAE,EAAE;IAC5B,+BAA+B,EAAE,EAAE;IACnC,wBAAwB,EAAE,EAAE;IAC5B,uBAAuB,EAAE,EAAE;IAC3B,6BAA6B,EAAE,EAAE;IACjC,uBAAuB,EAAE,EAAE;IAC3B,sBAAsB,EAAE,EAAE;IAC1B,uBAAuB,EAAE,EAAE;IAC3B,sBAAsB,EAAE,EAAE;CACjB,CAAC;AAEX;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG;IACnD,mBAAmB;IACnB,aAAa;IACb,YAAY;IACZ,UAAU;IACV,qBAAqB;CACZ,CAAC;AAEX,sGAAsG;AACtG,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC5C,GAAG,oCAAoC;IACvC,SAAS;IACT,SAAS;IACT,iBAAiB;IACjB,iBAAiB;IACjB,0BAA0B;CACjB,CAAC;AAEX,MAAM,iCAAiC,GAAG,IAAI,CAAC,SAAS,CAAC;IACxD,YAAY,EAAE,EAAE;IAChB,GAAG,EAAE,4BAA4B;CACjC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,gCAAgC,CAAC,IAAuB;IACvE,OAAO,CAAC,mBAAmB,EAAE,EAAE,EAAE,YAAY,EAAE,iCAAiC,EAAE,GAAG,IAAI,CAAC,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,10 @@
1
+ /** The variant that runs a Claude Code subscription turn. */
2
+ export declare const CLAUDE_CODE_VARIANT_ID = "claude-code-cli";
3
+ /**
4
+ * The host variables the generation turn's child inherits beyond the host base set: the
5
+ * `claude-code-cli` variant's own `inheritEnv`, the single source the framework's process transport
6
+ * reads for the turn. The fail-closed status check that precedes a turn runs with exactly this list,
7
+ * so it proves the environment the turn itself runs in.
8
+ */
9
+ export declare const CLAUDE_CODE_TURN_INHERIT_ENV: readonly string[];
10
+ //# sourceMappingURL=claude-code-turn-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-turn-env.d.ts","sourceRoot":"","sources":["../../src/ai/claude-code-turn-env.ts"],"names":[],"mappings":"AAGA,6DAA6D;AAC7D,eAAO,MAAM,sBAAsB,oBAAoB,CAAC;AAcxD;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,EAAE,SAAS,MAAM,EAA6B,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { CapabilityError } from '@vibesdotdev/kernel';
2
+ import descriptor from "./providers/cloud/frontier/anthropic/provider.anthropic.descriptor.js";
3
+ /** The variant that runs a Claude Code subscription turn. */
4
+ export const CLAUDE_CODE_VARIANT_ID = 'claude-code-cli';
5
+ function declaredTurnInheritEnv() {
6
+ const variant = descriptor.variants?.find((candidate) => candidate.id === CLAUDE_CODE_VARIANT_ID);
7
+ if (!variant?.inheritEnv) {
8
+ throw new CapabilityError(`The '${CLAUDE_CODE_VARIANT_ID}' variant declares no inheritEnv, so the turn's environment is undeclared.`, 'INTERNAL', { reason: 'claude-code-variant-env-undeclared' });
9
+ }
10
+ return variant.inheritEnv;
11
+ }
12
+ /**
13
+ * The host variables the generation turn's child inherits beyond the host base set: the
14
+ * `claude-code-cli` variant's own `inheritEnv`, the single source the framework's process transport
15
+ * reads for the turn. The fail-closed status check that precedes a turn runs with exactly this list,
16
+ * so it proves the environment the turn itself runs in.
17
+ */
18
+ export const CLAUDE_CODE_TURN_INHERIT_ENV = declaredTurnInheritEnv();
19
+ //# sourceMappingURL=claude-code-turn-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-turn-env.js","sourceRoot":"","sources":["../../src/ai/claude-code-turn-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,UAAU,MAAM,uEAAuE,CAAC;AAE/F,6DAA6D;AAC7D,MAAM,CAAC,MAAM,sBAAsB,GAAG,iBAAiB,CAAC;AAExD,SAAS,sBAAsB;IAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,sBAAsB,CAAC,CAAC;IAClG,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,eAAe,CACxB,QAAQ,sBAAsB,4EAA4E,EAC1G,UAAU,EACV,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAChD,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,UAAU,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAsB,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Reading a value this package does not control.
3
+ *
4
+ * `safeParse` reports a wrong shape as a result, but a getter that throws, a
5
+ * Proxy that traps and a revoked Proxy throw out of the parse itself. These
6
+ * helpers settle all of it into one result: the parsed copy, or the bounded
7
+ * facts of what went wrong. The caller uses the parsed copy and never reads the
8
+ * original again, so a getter that answers differently the second time cannot
9
+ * change what is used. Nothing the value said (its message, its text) is kept.
10
+ */
11
+ import { type ValueFreeFailure } from '@vibesdotdev/kernel';
12
+ import type * as z from 'zod/v4';
13
+ export type HostileRead<Output> = {
14
+ readonly ok: true;
15
+ readonly data: Output;
16
+ } | {
17
+ readonly ok: false;
18
+ readonly threw: boolean;
19
+ readonly failure?: ValueFreeFailure;
20
+ };
21
+ /** Parse `value` with `schema`; a value that cannot be read is `{ ok: false, threw: true }` with only its value-free facts. */
22
+ export declare function readHostile<Schema extends z.ZodType, Input>(schema: Schema, value: Input): HostileRead<z.output<Schema>>;
23
+ //# sourceMappingURL=hostile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostile.d.ts","sourceRoot":"","sources":["../../src/ai/hostile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAyC,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACnG,OAAO,KAAK,KAAK,CAAC,MAAM,QAAQ,CAAC;AAEjC,MAAM,MAAM,WAAW,CAAC,MAAM,IAC3B;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAExF,+HAA+H;AAC/H,wBAAgB,WAAW,CAAC,MAAM,SAAS,CAAC,CAAC,OAAO,EAAE,KAAK,EAC1D,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,KAAK,GACV,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAO/B"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Reading a value this package does not control.
3
+ *
4
+ * `safeParse` reports a wrong shape as a result, but a getter that throws, a
5
+ * Proxy that traps and a revoked Proxy throw out of the parse itself. These
6
+ * helpers settle all of it into one result: the parsed copy, or the bounded
7
+ * facts of what went wrong. The caller uses the parsed copy and never reads the
8
+ * original again, so a getter that answers differently the second time cannot
9
+ * change what is used. Nothing the value said (its message, its text) is kept.
10
+ */
11
+ import { CaughtFailureSchema, valueFreeFailure } from '@vibesdotdev/kernel';
12
+ /** Parse `value` with `schema`; a value that cannot be read is `{ ok: false, threw: true }` with only its value-free facts. */
13
+ export function readHostile(schema, value) {
14
+ try {
15
+ const parsed = schema.safeParse(value);
16
+ return parsed.success ? { ok: true, data: parsed.data } : { ok: false, threw: false };
17
+ }
18
+ catch (thrown) {
19
+ return { ok: false, threw: true, failure: valueFreeFailure(CaughtFailureSchema.parse(thrown)) };
20
+ }
21
+ }
22
+ //# sourceMappingURL=hostile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hostile.js","sourceRoot":"","sources":["../../src/ai/hostile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAOnG,+HAA+H;AAC/H,MAAM,UAAU,WAAW,CAC1B,MAAc,EACd,KAAY;IAEZ,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACvF,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;IACjG,CAAC;AACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Canonical anthropic AI schemas. */
2
+ export * from './providers/cloud/frontier/anthropic/config/schemas/index.ts';
3
+ export { detectAnthropicSystem } from './providers/anthropic/detection/system.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,cAAc,8DAA8D,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC"}
@@ -0,0 +1,4 @@
1
+ /** Canonical anthropic AI schemas. */
2
+ export * from "./providers/cloud/frontier/anthropic/config/schemas/index.js";
3
+ export { detectAnthropicSystem } from "./providers/anthropic/detection/system.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,cAAc,8DAA8D,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC"}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" height="22.26" viewBox="0 0 35 24" fill="none"><path d="M24.5475 0H19.3384L28.8374 24H34.0465L24.5475 0Z" fill="currentColor"></path><path d="M9.49897 0L0 24H5.31125L7.25395 18.96H17.1914L19.1341 24H24.4454L14.9464 0H9.49897ZM8.97193 14.5029L12.2227 6.06857L15.4735 14.5029H8.97193Z" fill="currentColor"></path></svg>
@@ -0,0 +1,77 @@
1
+ {
2
+ "id": "anthropic:claude-3-5-haiku-20241022",
3
+ "providerId": "anthropic",
4
+ "providerModelId": "claude-3-5-haiku-20241022",
5
+ "aliases": [
6
+ "anthropic:claude-3-5-haiku-20241022"
7
+ ],
8
+ "globalModelId": "anthropic:claude-3-5-haiku-20241022",
9
+ "source": "curated",
10
+ "displayName": "Claude 3.5 Haiku",
11
+ "description": "Fast and cost-effective for simple tasks, quick responses, and high-volume applications",
12
+ "modelType": "llm_chat",
13
+ "capabilities": [
14
+ "chat_completion",
15
+ "text_generation",
16
+ "image_understanding"
17
+ ],
18
+ "modalities": [
19
+ "text",
20
+ "image"
21
+ ],
22
+ "tokenLimit": 200000,
23
+ "costBasis": [
24
+ {
25
+ "units": "input_tokens",
26
+ "usdPerMillionUnits": 0.8,
27
+ "source": "published",
28
+ "confidence": "high",
29
+ "effectiveAt": "2026-05-15T00:00:00.000Z"
30
+ },
31
+ {
32
+ "units": "output_tokens",
33
+ "usdPerMillionUnits": 4,
34
+ "source": "published",
35
+ "confidence": "high",
36
+ "effectiveAt": "2026-05-15T00:00:00.000Z"
37
+ },
38
+ {
39
+ "units": "cached_input_tokens",
40
+ "usdPerMillionUnits": 0.08,
41
+ "source": "published",
42
+ "confidence": "high",
43
+ "effectiveAt": "2026-05-15T00:00:00.000Z"
44
+ },
45
+ {
46
+ "units": "cache_write_5m_tokens",
47
+ "usdPerMillionUnits": 1,
48
+ "source": "published",
49
+ "confidence": "high",
50
+ "effectiveAt": "2026-05-15T00:00:00.000Z"
51
+ },
52
+ {
53
+ "units": "cache_write_1h_tokens",
54
+ "usdPerMillionUnits": 1.6,
55
+ "source": "published",
56
+ "confidence": "high",
57
+ "effectiveAt": "2026-05-15T00:00:00.000Z"
58
+ }
59
+ ],
60
+ "configuration": {
61
+ "maxTokens": 4096,
62
+ "contextLength": 200000
63
+ },
64
+ "hardware": [
65
+ "cloud"
66
+ ],
67
+ "enabled": true,
68
+ "tags": [
69
+ "anthropic",
70
+ "claude",
71
+ "haiku",
72
+ "vision",
73
+ "fast",
74
+ "cost-effective",
75
+ "retired-direct-api"
76
+ ]
77
+ }