@crewx/sdk 0.8.0-rc.78 → 0.8.0-rc.80

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 (82) hide show
  1. package/dist/plugin/plugin-provider.js +1 -1
  2. package/dist/provider/bridge.js +1 -0
  3. package/package.json +1 -1
  4. package/dist/esm/agent/resolver.js +0 -41
  5. package/dist/esm/boxing/box-storage.interface.js +0 -5
  6. package/dist/esm/boxing/box.service.js +0 -69
  7. package/dist/esm/boxing/box.types.js +0 -5
  8. package/dist/esm/boxing/context-builder.js +0 -76
  9. package/dist/esm/client/CrewxClient.js +0 -82
  10. package/dist/esm/client/index.js +0 -2
  11. package/dist/esm/config/loader.browser.js +0 -54
  12. package/dist/esm/config/loader.js +0 -77
  13. package/dist/esm/events/TypedEventEmitter.js +0 -61
  14. package/dist/esm/events/types.js +0 -8
  15. package/dist/esm/facade/Crewx.browser.js +0 -310
  16. package/dist/esm/facade/Crewx.js +0 -941
  17. package/dist/esm/hooks/define.js +0 -10
  18. package/dist/esm/hooks/dispatch.js +0 -76
  19. package/dist/esm/hooks/index.js +0 -6
  20. package/dist/esm/hooks/observer.js +0 -56
  21. package/dist/esm/hooks/plugin.js +0 -12
  22. package/dist/esm/hooks/types.js +0 -9
  23. package/dist/esm/index.browser.js +0 -15
  24. package/dist/esm/index.js +0 -60
  25. package/dist/esm/layout/loader.js +0 -268
  26. package/dist/esm/layout/props-validator.js +0 -297
  27. package/dist/esm/layout/renderer.js +0 -180
  28. package/dist/esm/layout/types.js +0 -31
  29. package/dist/esm/parallel/agent-runtime.js +0 -21
  30. package/dist/esm/parallel/helpers.js +0 -214
  31. package/dist/esm/parallel/index.js +0 -5
  32. package/dist/esm/parallel/parallel-runner.js +0 -221
  33. package/dist/esm/parallel/types.js +0 -5
  34. package/dist/esm/parsers/agent-call.util.js +0 -15
  35. package/dist/esm/parsers/claude.parser.js +0 -64
  36. package/dist/esm/parsers/codex.parser.js +0 -97
  37. package/dist/esm/parsers/copilot.parser.js +0 -63
  38. package/dist/esm/parsers/gemini.parser.js +0 -43
  39. package/dist/esm/parsers/opencode.parser.js +0 -73
  40. package/dist/esm/parsers/router.js +0 -53
  41. package/dist/esm/platform/BrowserFsAdapter.js +0 -80
  42. package/dist/esm/platform/IFsAdapter.js +0 -2
  43. package/dist/esm/platform/NodeFsAdapter.js +0 -34
  44. package/dist/esm/plugin/plugin-provider.js +0 -202
  45. package/dist/esm/plugin/types.js +0 -8
  46. package/dist/esm/plugin.js +0 -25
  47. package/dist/esm/provider/bridge.browser.js +0 -43
  48. package/dist/esm/provider/bridge.js +0 -373
  49. package/dist/esm/provider/parse-usage.js +0 -80
  50. package/dist/esm/provider/register-api.js +0 -21
  51. package/dist/esm/provider/vercel-runtime.js +0 -310
  52. package/dist/esm/remote/index.js +0 -10
  53. package/dist/esm/remote/remote-agent-manager.js +0 -194
  54. package/dist/esm/remote/remote-provider.js +0 -98
  55. package/dist/esm/remote/remote-transport.js +0 -79
  56. package/dist/esm/remote/types.js +0 -8
  57. package/dist/esm/server/auth.js +0 -31
  58. package/dist/esm/server/handler.js +0 -72
  59. package/dist/esm/server/index.js +0 -5
  60. package/dist/esm/server/tool-adapter.js +0 -92
  61. package/dist/esm/template/engine.js +0 -100
  62. package/dist/esm/template/helpers/exec.browser.js +0 -31
  63. package/dist/esm/template/helpers/exec.js +0 -220
  64. package/dist/esm/template/helpers/fenced_code.js +0 -17
  65. package/dist/esm/template/helpers/include.js +0 -20
  66. package/dist/esm/template/helpers/p1p2.js +0 -83
  67. package/dist/esm/template/loader/DocumentLoader.js +0 -124
  68. package/dist/esm/template/types.js +0 -5
  69. package/dist/esm/tools/delegate.js +0 -57
  70. package/dist/esm/tools/index.js +0 -5
  71. package/dist/esm/tools/node/builtin.js +0 -541
  72. package/dist/esm/tools/node/index.js +0 -54
  73. package/dist/esm/types/index.js +0 -27
  74. package/dist/esm/types/task-log.types.js +0 -5
  75. package/dist/esm/utils/env-defaults.js +0 -23
  76. package/dist/esm/utils/glob-match.js +0 -38
  77. package/dist/esm/utils/id.js +0 -46
  78. package/dist/esm/utils/workspace.js +0 -21
  79. package/dist/parsers/api.parser.d.ts +0 -10
  80. package/dist/parsers/api.parser.js +0 -26
  81. package/dist/provider/mastra-runtime.d.ts +0 -45
  82. package/dist/provider/mastra-runtime.js +0 -208
@@ -1,38 +0,0 @@
1
- /**
2
- * Glob pattern matching utilities.
3
- * Shared by exec helper (security allow/deny) and agent ls filter.
4
- *
5
- * '*' — matches any characters within a single path segment (non-'/').
6
- * '**' — matches any characters including '/'.
7
- */
8
- /**
9
- * Converts a glob pattern to a RegExp.
10
- * Handles path-based matching (split by '/') consistent with minimatch behavior.
11
- */
12
- export function globToRegex(pattern) {
13
- const escape = (s) => s.replace(/[.+^${}()|[\]\\]/g, '\\$&');
14
- const parts = pattern.split('/');
15
- const regexParts = parts.map(part => {
16
- if (part === '**') {
17
- return '.*';
18
- }
19
- return part
20
- .split('*')
21
- .map(escape)
22
- .join('[^/]*');
23
- });
24
- return new RegExp(`^${regexParts.join('\\/')}$`);
25
- }
26
- /**
27
- * Checks if a value matches a glob pattern.
28
- * Returns false on any regex construction error.
29
- */
30
- export function matchesPattern(value, pattern) {
31
- try {
32
- return globToRegex(pattern).test(value);
33
- }
34
- catch {
35
- return false;
36
- }
37
- }
38
- //# sourceMappingURL=glob-match.js.map
@@ -1,46 +0,0 @@
1
- /**
2
- * ID generation utilities.
3
- * Backward-compatible with packages that import generateId from @crewx/sdk.
4
- */
5
- import { randomBytes } from 'crypto';
6
- const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
7
- function randomBase62(length) {
8
- const bytes = randomBytes(length * 2);
9
- let result = '';
10
- for (let i = 0; i < bytes.length && result.length < length; i++) {
11
- const byte = bytes[i];
12
- if (byte < 248) {
13
- result += ALPHABET[byte % 62];
14
- }
15
- }
16
- // Fill remaining with fallback
17
- while (result.length < length) {
18
- result += ALPHABET[randomBytes(1)[0] % 62];
19
- }
20
- return result;
21
- }
22
- /**
23
- * Generate a random prefixed ID.
24
- * @example generateId('tsk') // → "tsk_V1StGXR8"
25
- */
26
- export function generateId(prefix) {
27
- return `${prefix}_${randomBase62(8)}`;
28
- }
29
- /**
30
- * Generate a deterministic fingerprint ID from a string input.
31
- */
32
- export function generateFingerprint(prefix, input) {
33
- const { createHash } = require('crypto');
34
- const hash = createHash('sha256').update(input).digest();
35
- // XOR-fold 32 bytes into 8 bytes
36
- const folded = Buffer.alloc(8);
37
- for (let i = 0; i < 32; i++) {
38
- folded[i % 8] ^= hash[i];
39
- }
40
- let result = '';
41
- for (const byte of folded) {
42
- result += ALPHABET[byte % 62];
43
- }
44
- return `${prefix}_${result}`;
45
- }
46
- //# sourceMappingURL=id.js.map
@@ -1,21 +0,0 @@
1
- /**
2
- * Workspace path normalization and hashing utilities.
3
- */
4
- import * as path from 'path';
5
- import { createHash } from 'crypto';
6
- export function normalizeWorkspacePath(workspacePath) {
7
- let resolved = path.resolve(workspacePath);
8
- if (process.platform === 'win32') {
9
- resolved = resolved.replace(/\\/g, '/');
10
- resolved = resolved.replace(/^([A-Z]):/, (_match, drive) => `${drive.toLowerCase()}:`);
11
- }
12
- if (resolved.length > 1 && !/^[a-zA-Z]:\/$/.test(resolved)) {
13
- resolved = resolved.replace(/\/+$/, '');
14
- }
15
- return resolved;
16
- }
17
- export function hashWorkspaceId(workspacePath) {
18
- const normalizedPath = normalizeWorkspacePath(workspacePath);
19
- return createHash('sha256').update(normalizedPath).digest('hex');
20
- }
21
- //# sourceMappingURL=workspace.js.map
@@ -1,10 +0,0 @@
1
- import type { TaskLogEntry } from '../types/task-log.types';
2
- /**
3
- * Parse API provider (Vercel AI SDK) structured JSONL events into TaskLogEntry[].
4
- *
5
- * API events:
6
- * - { type: "api_tool_call", toolCallId: "...", toolName: "...", toolInput: "..." }
7
- * - { type: "api_tool_result", toolCallId: "...", toolName: "...", result: "..." }
8
- */
9
- export declare function parseApiEvent(timestamp: string, parsed: Record<string, unknown>): TaskLogEntry[];
10
- //# sourceMappingURL=api.parser.d.ts.map
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseApiEvent = parseApiEvent;
4
- /**
5
- * Parse API provider (Vercel AI SDK) structured JSONL events into TaskLogEntry[].
6
- *
7
- * API events:
8
- * - { type: "api_tool_call", toolCallId: "...", toolName: "...", toolInput: "..." }
9
- * - { type: "api_tool_result", toolCallId: "...", toolName: "...", result: "..." }
10
- */
11
- function parseApiEvent(timestamp, parsed) {
12
- const type = parsed.type;
13
- if (type === 'api_tool_call') {
14
- const toolName = String(parsed.toolName || '');
15
- const toolUseId = parsed.toolCallId;
16
- const toolInput = String(parsed.toolInput || '{}');
17
- return [{ timestamp, type: 'tool_use', toolName, toolUseId, toolInput }];
18
- }
19
- if (type === 'api_tool_result') {
20
- const toolUseId = parsed.toolCallId;
21
- const resultPreview = String(parsed.result || '');
22
- return [{ timestamp, type: 'tool_result', toolUseId, resultPreview, isError: false }];
23
- }
24
- return [];
25
- }
26
- //# sourceMappingURL=api.parser.js.map
@@ -1,45 +0,0 @@
1
- /**
2
- * MastraProviderRuntime — API 프로바이더를 위한 ProviderRuntime 구현.
3
- *
4
- * Mastra Agent를 래핑하여 tool calling loop를 자동 처리한다.
5
- * Vercel AI SDK 기반 모델 인스턴스를 생성하여 OpenRouter, OpenAI, Anthropic, Google 지원.
6
- */
7
- import type { ProviderRuntime, ProviderQueryOptions } from './bridge';
8
- export interface MastraProviderConfig {
9
- /** Provider string (e.g. 'api/openrouter', 'api/anthropic'). */
10
- provider: string;
11
- /** Model identifier (e.g. 'anthropic/claude-sonnet-4-20250514'). */
12
- model: string;
13
- /** API key — falls back to environment variable if not set. */
14
- apiKey?: string;
15
- /** Custom base URL (e.g. OpenRouter endpoint). */
16
- baseURL?: string;
17
- /** Sampling temperature. */
18
- temperature?: number;
19
- /** Max output tokens. */
20
- maxTokens?: number;
21
- /** Default max steps for tool loop. */
22
- maxSteps?: number;
23
- }
24
- export declare class MastraProviderRuntime implements ProviderRuntime {
25
- private config;
26
- constructor(config: MastraProviderConfig);
27
- query(message: string, options?: ProviderQueryOptions): Promise<string>;
28
- execute(message: string, options?: ProviderQueryOptions): Promise<string>;
29
- private _run;
30
- /**
31
- * CrewX ToolDefinition[] → Mastra tool Record 변환.
32
- * JSON Schema → Zod 간이 변환 포함.
33
- */
34
- private convertTools;
35
- /**
36
- * JSON Schema → Zod 간이 변환.
37
- */
38
- private jsonSchemaToZod;
39
- /**
40
- * Vercel AI SDK model 인스턴스 생성.
41
- * provider string에 따라 적절한 SDK 팩토리 사용.
42
- */
43
- private createModel;
44
- }
45
- //# sourceMappingURL=mastra-runtime.d.ts.map
@@ -1,208 +0,0 @@
1
- "use strict";
2
- /**
3
- * MastraProviderRuntime — API 프로바이더를 위한 ProviderRuntime 구현.
4
- *
5
- * Mastra Agent를 래핑하여 tool calling loop를 자동 처리한다.
6
- * Vercel AI SDK 기반 모델 인스턴스를 생성하여 OpenRouter, OpenAI, Anthropic, Google 지원.
7
- */
8
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
- if (k2 === undefined) k2 = k;
10
- var desc = Object.getOwnPropertyDescriptor(m, k);
11
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
- desc = { enumerable: true, get: function() { return m[k]; } };
13
- }
14
- Object.defineProperty(o, k2, desc);
15
- }) : (function(o, m, k, k2) {
16
- if (k2 === undefined) k2 = k;
17
- o[k2] = m[k];
18
- }));
19
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
- Object.defineProperty(o, "default", { enumerable: true, value: v });
21
- }) : function(o, v) {
22
- o["default"] = v;
23
- });
24
- var __importStar = (this && this.__importStar) || (function () {
25
- var ownKeys = function(o) {
26
- ownKeys = Object.getOwnPropertyNames || function (o) {
27
- var ar = [];
28
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
- return ar;
30
- };
31
- return ownKeys(o);
32
- };
33
- return function (mod) {
34
- if (mod && mod.__esModule) return mod;
35
- var result = {};
36
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
- __setModuleDefault(result, mod);
38
- return result;
39
- };
40
- })();
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- exports.MastraProviderRuntime = void 0;
43
- const bridge_1 = require("./bridge");
44
- const DEFAULT_MAX_STEPS = 10;
45
- const MAX_STEPS_LIMIT = 50;
46
- class MastraProviderRuntime {
47
- config;
48
- constructor(config) {
49
- this.config = config;
50
- }
51
- async query(message, options) {
52
- return this._run(message, 'query', options);
53
- }
54
- async execute(message, options) {
55
- return this._run(message, 'execute', options);
56
- }
57
- async _run(message, _mode, options) {
58
- // 1. Mastra tools 변환
59
- const mastraTools = this.convertTools(options?.tools ?? []);
60
- // 2. Model 인스턴스 생성 (Vercel AI SDK)
61
- const model = this.createModel(options?.model);
62
- // 3. Mastra Agent 생성 (매 호출 fresh — stateless)
63
- const { Agent } = await Promise.resolve().then(() => __importStar(require('@mastra/core/agent')));
64
- const agent = new Agent({
65
- name: this.config.provider,
66
- model,
67
- instructions: options?.systemPrompt ?? '',
68
- tools: mastraTools,
69
- });
70
- // 4. generate() — tool loop 자동 실행
71
- const maxSteps = Math.min(options?.maxSteps ?? this.config.maxSteps ?? DEFAULT_MAX_STEPS, MAX_STEPS_LIMIT);
72
- try {
73
- const result = await agent.generate(message, { maxSteps });
74
- // 5. Usage 콜백
75
- if (options?.onUsage && result.usage) {
76
- const usage = {
77
- inputTokens: result.usage.promptTokens ?? 0,
78
- outputTokens: result.usage.completionTokens ?? 0,
79
- cachedInputTokens: 0,
80
- costUsd: 0,
81
- };
82
- options.onUsage(usage);
83
- }
84
- // 6. Model 콜백
85
- if (options?.onModel) {
86
- options.onModel(options.model ?? this.config.model);
87
- }
88
- // 7. 스트리밍 콜백 (Phase 1: generate 완료 후 전체 텍스트)
89
- if (options?.onOutput && result.text) {
90
- options.onOutput(result.text, 'stdout');
91
- }
92
- return result.text ?? '';
93
- }
94
- catch (error) {
95
- if (error.status === 401) {
96
- throw new bridge_1.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`, this.config.provider);
97
- }
98
- if (error.status === 429) {
99
- throw new bridge_1.ProviderError(`Rate limit exceeded for ${this.config.provider}.`, this.config.provider);
100
- }
101
- throw new bridge_1.ProviderError(`Provider error: ${error.message}`, this.config.provider);
102
- }
103
- }
104
- /**
105
- * CrewX ToolDefinition[] → Mastra tool Record 변환.
106
- * JSON Schema → Zod 간이 변환 포함.
107
- */
108
- convertTools(tools) {
109
- let createTool;
110
- try {
111
- createTool = require('@mastra/core/tools').createTool;
112
- }
113
- catch {
114
- return {};
115
- }
116
- const { z } = require('zod');
117
- const mastraTools = {};
118
- for (const tool of tools) {
119
- mastraTools[tool.name] = createTool({
120
- id: tool.name,
121
- description: tool.description,
122
- inputSchema: this.jsonSchemaToZod(tool.parameters ?? {}, z),
123
- execute: async ({ context }) => {
124
- return tool.execute(context);
125
- },
126
- });
127
- }
128
- return mastraTools;
129
- }
130
- /**
131
- * JSON Schema → Zod 간이 변환.
132
- */
133
- jsonSchemaToZod(schema, z) {
134
- if (!schema || !schema.properties)
135
- return z.object({});
136
- const shape = {};
137
- const props = schema.properties;
138
- const required = schema.required ?? [];
139
- for (const [key, prop] of Object.entries(props)) {
140
- let field;
141
- switch (prop.type) {
142
- case 'string':
143
- field = z.string();
144
- break;
145
- case 'number':
146
- field = z.number();
147
- break;
148
- case 'integer':
149
- field = z.number().int();
150
- break;
151
- case 'boolean':
152
- field = z.boolean();
153
- break;
154
- case 'array':
155
- field = z.array(z.any());
156
- break;
157
- default: field = z.any();
158
- }
159
- if (prop.description)
160
- field = field.describe(prop.description);
161
- if (!required.includes(key))
162
- field = field.optional();
163
- shape[key] = field;
164
- }
165
- return z.object(shape);
166
- }
167
- /**
168
- * Vercel AI SDK model 인스턴스 생성.
169
- * provider string에 따라 적절한 SDK 팩토리 사용.
170
- */
171
- createModel(modelOverride) {
172
- const { provider, apiKey, baseURL } = this.config;
173
- const model = modelOverride || this.config.model;
174
- switch (provider) {
175
- case 'api/openrouter': {
176
- const { createOpenAI } = require('@ai-sdk/openai');
177
- return createOpenAI({
178
- apiKey: apiKey || process.env.OPENROUTER_API_KEY,
179
- baseURL: baseURL || 'https://openrouter.ai/api/v1',
180
- })(model);
181
- }
182
- case 'api/openai': {
183
- const { createOpenAI } = require('@ai-sdk/openai');
184
- return createOpenAI({
185
- apiKey: apiKey || process.env.OPENAI_API_KEY,
186
- ...(baseURL && { baseURL }),
187
- })(model);
188
- }
189
- case 'api/anthropic': {
190
- const { createAnthropic } = require('@ai-sdk/anthropic');
191
- return createAnthropic({
192
- apiKey: apiKey || process.env.ANTHROPIC_API_KEY,
193
- ...(baseURL && { baseURL }),
194
- })(model);
195
- }
196
- case 'api/google': {
197
- const { createGoogleGenerativeAI } = require('@ai-sdk/google');
198
- return createGoogleGenerativeAI({
199
- apiKey: apiKey || process.env.GOOGLE_API_KEY,
200
- })(model);
201
- }
202
- default:
203
- throw new bridge_1.ProviderError(`Unsupported API provider: ${provider}`, provider);
204
- }
205
- }
206
- }
207
- exports.MastraProviderRuntime = MastraProviderRuntime;
208
- //# sourceMappingURL=mastra-runtime.js.map