@agi-cli/sdk 0.1.144 → 0.1.146

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agi-cli/sdk",
3
- "version": "0.1.144",
3
+ "version": "0.1.146",
4
4
  "description": "AI agent SDK for building intelligent assistants - tree-shakable and comprehensive",
5
5
  "author": "nitishxyz",
6
6
  "license": "MIT",
@@ -102,10 +102,10 @@
102
102
  "bun-pty": "^0.3.2",
103
103
  "diff": "^8.0.2",
104
104
  "fast-glob": "^3.3.2",
105
- "hono": "^4.9.7",
105
+ "hono": "^4.9.9",
106
106
  "opencode-anthropic-auth": "^0.0.2",
107
107
  "tweetnacl": "^1.0.3",
108
- "x402": "^0.7.1",
108
+ "x402": "^1.1.0",
109
109
  "zod": "^4.1.8"
110
110
  },
111
111
  "devDependencies": {
package/src/index.ts CHANGED
@@ -158,7 +158,10 @@ export type { Scope } from './config/src/manager.ts';
158
158
  // =======================
159
159
  // Prompts (from internal prompts module)
160
160
  // =======================
161
- export { providerBasePrompt } from './prompts/src/providers.ts';
161
+ export {
162
+ providerBasePrompt,
163
+ type ProviderPromptResult,
164
+ } from './prompts/src/providers.ts';
162
165
 
163
166
  // =======================
164
167
  // Core AI Functions (from internal core module)
@@ -43,12 +43,19 @@ async function readIfExists(path: string): Promise<string | undefined> {
43
43
  return undefined;
44
44
  }
45
45
 
46
+ export type ProviderPromptResult = {
47
+ prompt: string;
48
+ resolvedType: string;
49
+ };
50
+
46
51
  export async function providerBasePrompt(
47
52
  provider: string,
48
53
  modelId: string | undefined,
49
54
  _projectRoot: string,
50
- ): Promise<string> {
55
+ ): Promise<ProviderPromptResult> {
51
56
  const id = String(provider || '').toLowerCase();
57
+ let promptType: string;
58
+ let result: string;
52
59
 
53
60
  // 1) Model-specific override: src/prompts/models/<sanitizedModel>.txt
54
61
  if (modelId) {
@@ -56,9 +63,9 @@ export async function providerBasePrompt(
56
63
  const modelPath = `src/prompts/models/${sanitized}.txt`;
57
64
  const modelText = await readIfExists(modelPath);
58
65
  if (modelText) {
59
- debugLog(`[provider] base prompt source: file:${modelPath}`);
60
- debugLog(`[provider] base prompt for model ${modelId}:\n${modelText}`);
61
- return modelText;
66
+ promptType = `model:${sanitized}`;
67
+ debugLog(`[provider] prompt: ${promptType} (${modelText.length} chars)`);
68
+ return { prompt: modelText, resolvedType: promptType };
62
69
  }
63
70
  }
64
71
 
@@ -74,7 +81,7 @@ export async function providerBasePrompt(
74
81
  ) {
75
82
  const family = inferFamilyFromModel(id, modelId);
76
83
  if (family) {
77
- const embedded = (
84
+ result = (
78
85
  family === 'openai'
79
86
  ? PROVIDER_OPENAI
80
87
  : family === 'anthropic'
@@ -83,40 +90,39 @@ export async function providerBasePrompt(
83
90
  ? PROVIDER_GOOGLE
84
91
  : PROVIDER_DEFAULT
85
92
  ).trim();
86
- debugLog(
87
- `[provider] base prompt source: embedded:${family}.txt (family from model: ${modelId})`,
88
- );
89
- debugLog(`[provider] base prompt for family ${family}:\n${embedded}`);
90
- return embedded;
93
+ promptType = `family:${family} (via ${id}/${modelId})`;
94
+ debugLog(`[provider] prompt: ${promptType} (${result.length} chars)`);
95
+ return { prompt: result, resolvedType: family };
91
96
  }
92
97
  }
93
98
 
94
99
  // 3) Provider-specific embedded defaults for known providers
95
100
  if (id === 'openai') {
96
- const txt = PROVIDER_OPENAI.trim();
97
- debugLog('[provider] base prompt source: embedded:providers/openai.txt');
98
- return txt;
101
+ result = PROVIDER_OPENAI.trim();
102
+ debugLog(`[provider] prompt: openai (${result.length} chars)`);
103
+ return { prompt: result, resolvedType: 'openai' };
99
104
  }
100
105
  if (id === 'anthropic') {
101
- const txt = PROVIDER_ANTHROPIC.trim();
102
- debugLog('[provider] base prompt source: embedded:providers/anthropic.txt');
103
- return txt;
106
+ result = PROVIDER_ANTHROPIC.trim();
107
+ debugLog(`[provider] prompt: anthropic (${result.length} chars)`);
108
+ return { prompt: result, resolvedType: 'anthropic' };
104
109
  }
105
110
  if (id === 'google') {
106
- const txt = PROVIDER_GOOGLE.trim();
107
- debugLog('[provider] base prompt source: embedded:providers/google.txt');
108
- return txt;
111
+ result = PROVIDER_GOOGLE.trim();
112
+ debugLog(`[provider] prompt: google (${result.length} chars)`);
113
+ return { prompt: result, resolvedType: 'google' };
109
114
  }
115
+
110
116
  // If a project adds a custom provider file, allow reading it from disk (user-defined)
111
117
  const providerPath = `src/prompts/providers/${id}.txt`;
112
118
  const providerText = await readIfExists(providerPath);
113
119
  if (providerText) {
114
- debugLog(`[provider] base prompt source: file:${providerPath}`);
115
- debugLog(`[provider] base prompt for ${id}:\n${providerText}`);
116
- return providerText;
120
+ debugLog(`[provider] prompt: custom:${id} (${providerText.length} chars)`);
121
+ return { prompt: providerText, resolvedType: `custom:${id}` };
117
122
  }
118
123
 
119
124
  // 4) Generic default
120
- debugLog('[provider] base prompt source: embedded:providers/default.txt');
121
- return PROVIDER_DEFAULT.trim();
125
+ result = PROVIDER_DEFAULT.trim();
126
+ debugLog(`[provider] prompt: default (${result.length} chars)`);
127
+ return { prompt: result, resolvedType: 'default' };
122
128
  }
@@ -108,10 +108,20 @@ export function getModelNpmBinding(
108
108
  provider: ProviderId,
109
109
  model: string,
110
110
  ): string | undefined {
111
+ // 1) Check provider's own catalog entry
111
112
  const entry = catalog[provider];
112
- if (!entry) return undefined;
113
- const modelInfo = entry.models?.find((m) => m.id === model);
114
- return modelInfo?.provider?.npm ?? entry.npm;
113
+ const modelInfo = entry?.models?.find((m) => m.id === model);
114
+ if (modelInfo?.provider?.npm) return modelInfo.provider.npm;
115
+ if (entry?.npm) return entry.npm;
116
+
117
+ // 2) Search entire catalog for the model
118
+ for (const key of Object.keys(catalog) as ProviderId[]) {
119
+ const e = catalog[key];
120
+ const m = e?.models?.find((x) => x.id === model);
121
+ if (m?.provider?.npm) return m.provider.npm;
122
+ if (m && e?.npm) return e.npm;
123
+ }
124
+ return undefined;
115
125
  }
116
126
 
117
127
  export function isAnthropicBasedModel(