projects-plus-sdk 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors/index.ts","../src/utils/http.ts","../src/resources/context.ts","../src/resources/sessions.ts","../src/resources/tasks.ts","../src/resources/projects.ts","../src/resources/comments.ts","../src/workflow.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Base error class for all API errors\n */\nexport class ApiError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly code?: string,\n public readonly details?: unknown\n ) {\n super(message);\n this.name = 'ApiError';\n Object.setPrototypeOf(this, ApiError.prototype);\n }\n}\n\n/**\n * Thrown when the API key is invalid or missing\n */\nexport class AuthenticationError extends ApiError {\n constructor(message = 'Invalid or missing API key') {\n super(message, 401, 'AUTHENTICATION_ERROR');\n this.name = 'AuthenticationError';\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\n/**\n * Thrown when rate limit is exceeded\n */\nexport class RateLimitError extends ApiError {\n constructor(\n message = 'Rate limit exceeded',\n public readonly retryAfter?: number\n ) {\n super(message, 429, 'RATE_LIMIT_ERROR');\n this.name = 'RateLimitError';\n Object.setPrototypeOf(this, RateLimitError.prototype);\n }\n}\n\n/**\n * Thrown when the requested resource is not found\n */\nexport class NotFoundError extends ApiError {\n constructor(message = 'Resource not found') {\n super(message, 404, 'NOT_FOUND_ERROR');\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n}\n\n/**\n * Thrown when the request is invalid\n */\nexport class ValidationError extends ApiError {\n constructor(message = 'Invalid request', details?: unknown) {\n super(message, 400, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/**\n * Thrown when there's a server error\n */\nexport class ServerError extends ApiError {\n constructor(message = 'Server error') {\n super(message, 500, 'SERVER_ERROR');\n this.name = 'ServerError';\n Object.setPrototypeOf(this, ServerError.prototype);\n }\n}\n\n/**\n * Thrown when the request times out\n */\nexport class TimeoutError extends ApiError {\n constructor(message = 'Request timed out') {\n super(message, 408, 'TIMEOUT_ERROR');\n this.name = 'TimeoutError';\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\n/**\n * Thrown when the network is unavailable\n */\nexport class NetworkError extends ApiError {\n constructor(message = 'Network error') {\n super(message, 0, 'NETWORK_ERROR');\n this.name = 'NetworkError';\n Object.setPrototypeOf(this, NetworkError.prototype);\n }\n}\n\n/**\n * Create the appropriate error based on status code\n */\nexport function createApiError(\n status: number,\n message: string,\n details?: unknown\n): ApiError {\n switch (status) {\n case 401:\n return new AuthenticationError(message);\n case 404:\n return new NotFoundError(message);\n case 429:\n return new RateLimitError(message);\n case 400:\n return new ValidationError(message, details);\n case 408:\n return new TimeoutError(message);\n default:\n if (status >= 500) {\n return new ServerError(message);\n }\n return new ApiError(message, status, undefined, details);\n }\n}\n","import {\n ApiError,\n AuthenticationError,\n createApiError,\n NetworkError,\n RateLimitError,\n TimeoutError,\n} from '../errors/index.js';\n\nexport interface HttpClientConfig {\n apiKey: string;\n baseUrl: string;\n timeout: number;\n retries: number;\n retryDelay: number;\n}\n\nexport interface RequestOptions {\n method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';\n body?: unknown;\n params?: Record<string, string | number | boolean | undefined>;\n headers?: Record<string, string>;\n skipRetry?: boolean;\n}\n\nexport class HttpClient {\n private config: HttpClientConfig;\n\n constructor(config: HttpClientConfig) {\n this.config = config;\n }\n\n /**\n * Make an HTTP request with automatic retries\n */\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = 'GET', body, params, headers = {}, skipRetry = false } = options;\n\n // Build URL with query params\n const url = this.buildUrl(path, params);\n\n // Build request options\n const requestInit: RequestInit = {\n method,\n headers: {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.config.apiKey,\n ...headers,\n },\n };\n\n if (body !== undefined) {\n requestInit.body = JSON.stringify(body);\n }\n\n // Execute with retries\n const maxAttempts = skipRetry ? 1 : this.config.retries;\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const response = await this.fetchWithTimeout(url, requestInit);\n return await this.handleResponse<T>(response);\n } catch (error) {\n lastError = error as Error;\n\n // Don't retry on certain errors\n if (\n error instanceof AuthenticationError ||\n error instanceof ApiError && error.status < 500\n ) {\n throw error;\n }\n\n // Check if we should retry\n if (attempt < maxAttempts) {\n const delay = this.calculateRetryDelay(attempt, error);\n await this.sleep(delay);\n }\n }\n }\n\n throw lastError ?? new NetworkError('Request failed after retries');\n }\n\n /**\n * Build URL with query parameters\n */\n private buildUrl(\n path: string,\n params?: Record<string, string | number | boolean | undefined>\n ): string {\n const url = new URL(path, this.config.baseUrl);\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined) {\n url.searchParams.append(key, String(value));\n }\n });\n }\n\n return url.toString();\n }\n\n /**\n * Fetch with timeout\n */\n private async fetchWithTimeout(\n url: string,\n init: RequestInit\n ): Promise<Response> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await fetch(url, {\n ...init,\n signal: controller.signal,\n });\n return response;\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n throw new TimeoutError(`Request timed out after ${this.config.timeout}ms`);\n }\n throw new NetworkError(\n error instanceof Error ? error.message : 'Network error'\n );\n } finally {\n clearTimeout(timeoutId);\n }\n }\n\n /**\n * Handle response and parse JSON\n */\n private async handleResponse<T>(response: Response): Promise<T> {\n // Parse JSON response\n let data: unknown;\n const contentType = response.headers.get('content-type');\n\n if (contentType?.includes('application/json')) {\n try {\n data = await response.json();\n } catch {\n data = null;\n }\n } else {\n data = await response.text();\n }\n\n // Handle error responses\n if (!response.ok) {\n const message = this.extractErrorMessage(data) ?? response.statusText;\n\n // Handle rate limit\n if (response.status === 429) {\n const retryAfter = parseInt(\n response.headers.get('Retry-After') ?? '60',\n 10\n );\n throw new RateLimitError(message, retryAfter);\n }\n\n throw createApiError(response.status, message, data);\n }\n\n return data as T;\n }\n\n /**\n * Extract error message from response data\n */\n private extractErrorMessage(data: unknown): string | undefined {\n if (typeof data === 'string') return data;\n if (typeof data === 'object' && data !== null) {\n const obj = data as Record<string, unknown>;\n if (typeof obj['error'] === 'string') return obj['error'];\n if (typeof obj['message'] === 'string') return obj['message'];\n }\n return undefined;\n }\n\n /**\n * Calculate retry delay with exponential backoff\n */\n private calculateRetryDelay(attempt: number, error: unknown): number {\n // Use Retry-After header if available\n if (error instanceof RateLimitError && error.retryAfter) {\n return error.retryAfter * 1000;\n }\n\n // Exponential backoff: delay * 2^(attempt-1)\n return this.config.retryDelay * Math.pow(2, attempt - 1);\n }\n\n /**\n * Sleep for the specified duration\n */\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","import type { HttpClient } from '../utils/http.js';\nimport type { ThemeContext } from '../types/index.js';\n\n/**\n * Context resource for getting theme overview\n */\nexport class ContextResource {\n constructor(private http: HttpClient) {}\n\n /**\n * Get theme context including all projects and tasks\n *\n * @example\n * ```ts\n * const context = await pp.context.get();\n * console.log(context.theme.name);\n * console.log(context.projects);\n * ```\n */\n async get(): Promise<ThemeContext> {\n const response = await this.http.request<{ context: ThemeContext }>('/context');\n return response.context;\n }\n}\n","import type { HttpClient } from '../utils/http.js';\nimport type {\n Session,\n StartSessionRequest,\n StartSessionResponse,\n EndSessionRequest,\n EndSessionResponse,\n} from '../types/index.js';\n\n/**\n * Sessions resource for managing AI development sessions\n */\nexport class SessionsResource {\n constructor(private http: HttpClient) {}\n\n /**\n * Start a new AI development session\n *\n * @param params - Session parameters\n * @returns The created session\n *\n * @example\n * ```ts\n * const session = await pp.sessions.start({ ai: 'claude' });\n * console.log(session.id);\n * ```\n */\n async start(params: StartSessionRequest): Promise<Session> {\n const response = await this.http.request<StartSessionResponse>(\n '/sessions/start',\n {\n method: 'POST',\n body: params,\n }\n );\n return response.session;\n }\n\n /**\n * End the current AI development session\n *\n * @param params - Optional handoff note\n * @returns The ended session\n *\n * @example\n * ```ts\n * const session = await pp.sessions.end({\n * handoffNote: 'Completed tasks X, Y, Z. Remaining: A, B.'\n * });\n * ```\n */\n async end(params?: EndSessionRequest): Promise<Session> {\n const response = await this.http.request<EndSessionResponse>(\n '/sessions/end',\n {\n method: 'POST',\n body: params ?? {},\n }\n );\n return response.session;\n }\n\n /**\n * Get the current active session if any\n *\n * @returns The current session or null\n */\n async current(): Promise<Session | null> {\n try {\n const response = await this.http.request<{ session: Session | null }>(\n '/sessions/current'\n );\n return response.session;\n } catch {\n return null;\n }\n }\n}\n","import type { HttpClient } from '../utils/http.js';\nimport type {\n Task,\n ListTasksParams,\n CompleteTaskRequest,\n} from '../types/index.js';\n\n/**\n * Tasks resource for managing tasks\n */\nexport class TasksResource {\n constructor(private http: HttpClient) {}\n\n /**\n * List tasks with optional filters\n *\n * @param params - Filter parameters\n * @returns List of tasks\n *\n * @example\n * ```ts\n * // Get all active tasks\n * const tasks = await pp.tasks.list({ status: 'active' });\n *\n * // Get tasks for a specific project\n * const projectTasks = await pp.tasks.list({\n * projectId: 'proj-123',\n * status: 'active'\n * });\n * ```\n */\n async list(params?: ListTasksParams): Promise<Task[]> {\n const response = await this.http.request<{ tasks: Task[] }>('/tasks', {\n params: params as Record<string, string | number | boolean | undefined>,\n });\n return response.tasks;\n }\n\n /**\n * Get a specific task\n *\n * @param taskId - Task ID\n * @param params - Additional parameters (projectId required)\n * @returns The task\n *\n * @example\n * ```ts\n * const task = await pp.tasks.get('task-123', {\n * projectId: 'proj-123'\n * });\n * ```\n */\n async get(taskId: string, params: { projectId: string }): Promise<Task> {\n const response = await this.http.request<{ task: Task }>(\n `/tasks/${taskId}`,\n {\n params: {\n projectId: params.projectId,\n },\n }\n );\n return response.task;\n }\n\n /**\n * Mark a task as completed (archived)\n *\n * @param taskId - Task ID\n * @param params - Additional parameters (projectId required)\n * @returns The updated task\n *\n * @example\n * ```ts\n * await pp.tasks.complete('task-123', {\n * projectId: 'proj-123'\n * });\n * ```\n */\n async complete(taskId: string, params: CompleteTaskRequest): Promise<Task> {\n const response = await this.http.request<{ task: Task }>(\n `/tasks/${taskId}/complete`,\n {\n method: 'POST',\n body: params,\n }\n );\n return response.task;\n }\n\n /**\n * Update task status\n *\n * @param taskId - Task ID\n * @param params - Status and projectId\n * @returns The updated task\n *\n * @example\n * ```ts\n * await pp.tasks.updateStatus('task-123', {\n * projectId: 'proj-123',\n * status: 'paused'\n * });\n * ```\n */\n async updateStatus(\n taskId: string,\n params: { projectId: string; status: 'active' | 'paused' | 'archived' }\n ): Promise<Task> {\n const response = await this.http.request<{ task: Task }>(\n `/tasks/${taskId}/status`,\n {\n method: 'PATCH',\n body: params,\n }\n );\n return response.task;\n }\n}\n","import type { HttpClient } from '../utils/http.js';\nimport type { Project, Task } from '../types/index.js';\n\n/**\n * Projects resource for managing projects\n */\nexport class ProjectsResource {\n constructor(private http: HttpClient) {}\n\n /**\n * List all projects\n *\n * @param params - Filter parameters\n * @returns List of projects\n *\n * @example\n * ```ts\n * const projects = await pp.projects.list();\n *\n * // Filter by status\n * const activeProjects = await pp.projects.list({ status: 'active' });\n * ```\n */\n async list(params?: { status?: 'active' | 'paused' | 'archived' }): Promise<Project[]> {\n const response = await this.http.request<{ projects: Project[] }>('/projects', {\n params: params as Record<string, string | number | boolean | undefined>,\n });\n return response.projects;\n }\n\n /**\n * Get a specific project\n *\n * @param projectId - Project ID\n * @returns The project\n *\n * @example\n * ```ts\n * const project = await pp.projects.get('proj-123');\n * ```\n */\n async get(projectId: string): Promise<Project> {\n const response = await this.http.request<{ project: Project }>(\n `/projects/${projectId}`\n );\n return response.project;\n }\n\n /**\n * Get tasks for a specific project\n *\n * @param projectId - Project ID\n * @param params - Filter parameters\n * @returns List of tasks\n *\n * @example\n * ```ts\n * const tasks = await pp.projects.getTasks('proj-123');\n *\n * // Filter by status\n * const activeTasks = await pp.projects.getTasks('proj-123', {\n * status: 'active'\n * });\n * ```\n */\n async getTasks(\n projectId: string,\n params?: { status?: 'active' | 'paused' | 'archived' }\n ): Promise<Task[]> {\n const response = await this.http.request<{ tasks: Task[] }>(\n `/projects/${projectId}/tasks`,\n {\n params: params as Record<string, string | number | boolean | undefined>,\n }\n );\n return response.tasks;\n }\n}\n","import type { HttpClient } from '../utils/http.js';\nimport type {\n Comment,\n CreateCommentRequest,\n CreateCommentResponse,\n} from '../types/index.js';\n\n/**\n * Comments resource for managing task comments\n */\nexport class CommentsResource {\n constructor(private http: HttpClient) {}\n\n /**\n * List comments for a task\n *\n * @param params - Task identifiers\n * @returns List of comments\n *\n * @example\n * ```ts\n * const comments = await pp.comments.list({\n * projectId: 'proj-123',\n * taskId: 'task-123'\n * });\n * ```\n */\n async list(params: { projectId: string; taskId: string }): Promise<Comment[]> {\n const response = await this.http.request<{ comments: Comment[] }>(\n '/comments',\n {\n params: {\n projectId: params.projectId,\n taskId: params.taskId,\n },\n }\n );\n return response.comments;\n }\n\n /**\n * Create a new comment on a task\n *\n * @param params - Comment data\n * @returns The created comment\n *\n * @example\n * ```ts\n * await pp.comments.create({\n * projectId: 'proj-123',\n * taskId: 'task-123',\n * content: '## 実装完了\\n\\n### 変更内容\\n- file1.ts\\n- file2.ts',\n * aiName: 'Claude'\n * });\n * ```\n */\n async create(params: CreateCommentRequest): Promise<Comment> {\n const response = await this.http.request<CreateCommentResponse>(\n '/comments',\n {\n method: 'POST',\n body: params,\n }\n );\n return response.comment;\n }\n\n /**\n * Delete a comment\n *\n * @param commentId - Comment ID\n * @param params - Task identifiers\n *\n * @example\n * ```ts\n * await pp.comments.delete('comment-123', {\n * projectId: 'proj-123',\n * taskId: 'task-123'\n * });\n * ```\n */\n async delete(\n commentId: string,\n params: { projectId: string; taskId: string }\n ): Promise<void> {\n await this.http.request(`/comments/${commentId}`, {\n method: 'DELETE',\n params: {\n projectId: params.projectId,\n taskId: params.taskId,\n },\n });\n }\n}\n","import type { ProjectsPlus } from './client.js';\nimport type {\n Session,\n ThemeContext,\n WorkflowStartResult,\n ReportProgressParams,\n} from './types/index.js';\n\n/**\n * Workflow helper for common development patterns\n *\n * @example\n * ```ts\n * const workflow = pp.workflow({ ai: 'claude' });\n *\n * const { session, context } = await workflow.start();\n * await workflow.reportProgress('task-id', {\n * projectId: 'proj-id',\n * changes: ['file1.ts'],\n * testResults: { passed: 10 },\n * });\n * await workflow.completeAndRefresh('task-id', { projectId: 'proj-id' });\n * await workflow.end('Summary');\n * ```\n */\nexport class Workflow {\n private client: ProjectsPlus;\n private ai: string;\n private currentSession: Session | null = null;\n private currentContext: ThemeContext | null = null;\n\n constructor(client: ProjectsPlus, ai: string) {\n this.client = client;\n this.ai = ai;\n }\n\n /**\n * Start session and get context in one call\n *\n * @returns Session and context\n */\n async start(): Promise<WorkflowStartResult> {\n const session = await this.client.sessions.start({ ai: this.ai });\n const context = await this.client.context.get();\n\n this.currentSession = session;\n this.currentContext = context;\n\n return { session, context };\n }\n\n /**\n * Report progress with auto-formatted markdown comment\n *\n * @param taskId - Task ID\n * @param params - Progress details\n */\n async reportProgress(\n taskId: string,\n params: ReportProgressParams\n ): Promise<void> {\n const content = this.formatProgressComment(params);\n\n await this.client.comments.create({\n projectId: params.projectId,\n taskId,\n content,\n aiName: this.ai.charAt(0).toUpperCase() + this.ai.slice(1), // Capitalize\n });\n }\n\n /**\n * Complete a task and refresh context\n *\n * @param taskId - Task ID\n * @param params - Project ID\n * @returns Updated context\n */\n async completeAndRefresh(\n taskId: string,\n params: { projectId: string }\n ): Promise<ThemeContext> {\n await this.client.tasks.complete(taskId, params);\n const context = await this.client.context.get();\n this.currentContext = context;\n return context;\n }\n\n /**\n * Refresh context without completing a task\n *\n * @returns Updated context\n */\n async refresh(): Promise<ThemeContext> {\n const context = await this.client.context.get();\n this.currentContext = context;\n return context;\n }\n\n /**\n * End the session with optional handoff note\n *\n * @param handoffNote - Summary for next session\n * @returns Ended session\n */\n async end(handoffNote?: string): Promise<Session> {\n const session = await this.client.sessions.end({ handoffNote });\n this.currentSession = session;\n return session;\n }\n\n /**\n * Get the current session\n */\n getSession(): Session | null {\n return this.currentSession;\n }\n\n /**\n * Get the current context\n */\n getContext(): ThemeContext | null {\n return this.currentContext;\n }\n\n /**\n * Format a progress comment from params\n */\n private formatProgressComment(params: ReportProgressParams): string {\n const lines: string[] = ['## 実装完了', ''];\n\n // Changes section\n if (params.changes && params.changes.length > 0) {\n lines.push('### 変更内容');\n for (const change of params.changes) {\n lines.push(`- \\`${change}\\``);\n }\n lines.push('');\n }\n\n // Test results section\n if (params.testResults) {\n lines.push('### テスト結果');\n const { passed, failed, skipped } = params.testResults;\n if (passed !== undefined) {\n lines.push(`- ✅ 成功: ${passed}`);\n }\n if (failed !== undefined) {\n lines.push(`- ❌ 失敗: ${failed}`);\n }\n if (skipped !== undefined) {\n lines.push(`- ⏭️ スキップ: ${skipped}`);\n }\n lines.push('');\n }\n\n // Note section\n if (params.note) {\n lines.push('### 備考');\n lines.push(params.note);\n lines.push('');\n }\n\n // Footer\n lines.push('---');\n lines.push(`*🤖 Generated by ${this.ai.charAt(0).toUpperCase() + this.ai.slice(1)} via Projects Plus SDK*`);\n\n return lines.join('\\n');\n }\n}\n","import { HttpClient } from './utils/http.js';\nimport { ContextResource } from './resources/context.js';\nimport { SessionsResource } from './resources/sessions.js';\nimport { TasksResource } from './resources/tasks.js';\nimport { ProjectsResource } from './resources/projects.js';\nimport { CommentsResource } from './resources/comments.js';\nimport { Workflow } from './workflow.js';\nimport type { ProjectsPlusConfig } from './types/index.js';\n\nconst DEFAULT_BASE_URL = 'https://us-central1-projects-plus-app.cloudfunctions.net/api/v1';\nconst DEFAULT_TIMEOUT = 30000;\nconst DEFAULT_RETRIES = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\n\n/**\n * Projects Plus SDK Client\n *\n * @example\n * ```ts\n * import { ProjectsPlus } from '@projects-plus/sdk';\n *\n * const pp = new ProjectsPlus({\n * apiKey: process.env.PROJECTS_PLUS_API_KEY,\n * });\n *\n * // Start session\n * await pp.sessions.start({ ai: 'claude' });\n *\n * // Get context\n * const context = await pp.context.get();\n *\n * // List tasks\n * const tasks = await pp.tasks.list({ status: 'active' });\n *\n * // Add comment\n * await pp.comments.create({\n * projectId: 'proj-id',\n * taskId: 'task-id',\n * content: '## Done\\n\\nImplemented feature X',\n * aiName: 'Claude'\n * });\n *\n * // Complete task\n * await pp.tasks.complete('task-id', { projectId: 'proj-id' });\n *\n * // End session\n * await pp.sessions.end({ handoffNote: 'Summary...' });\n * ```\n */\nexport class ProjectsPlus {\n private http: HttpClient;\n\n /** Context resource for getting theme overview */\n public readonly context: ContextResource;\n\n /** Sessions resource for managing AI development sessions */\n public readonly sessions: SessionsResource;\n\n /** Tasks resource for managing tasks */\n public readonly tasks: TasksResource;\n\n /** Projects resource for managing projects */\n public readonly projects: ProjectsResource;\n\n /** Comments resource for managing task comments */\n public readonly comments: CommentsResource;\n\n /**\n * Create a new Projects Plus client\n *\n * @param config - Client configuration\n */\n constructor(config: ProjectsPlusConfig) {\n if (!config.apiKey) {\n throw new Error('API key is required');\n }\n\n this.http = new HttpClient({\n apiKey: config.apiKey,\n baseUrl: config.baseUrl ?? DEFAULT_BASE_URL,\n timeout: config.timeout ?? DEFAULT_TIMEOUT,\n retries: config.retries ?? DEFAULT_RETRIES,\n retryDelay: config.retryDelay ?? DEFAULT_RETRY_DELAY,\n });\n\n this.context = new ContextResource(this.http);\n this.sessions = new SessionsResource(this.http);\n this.tasks = new TasksResource(this.http);\n this.projects = new ProjectsResource(this.http);\n this.comments = new CommentsResource(this.http);\n }\n\n /**\n * Create a workflow helper for common development patterns\n *\n * @param params - Workflow parameters\n * @returns Workflow instance\n *\n * @example\n * ```ts\n * const workflow = pp.workflow({ ai: 'claude' });\n *\n * // Start session and get context in one call\n * const { session, context } = await workflow.start();\n *\n * // Report progress with auto-formatted markdown\n * await workflow.reportProgress('task-id', {\n * projectId: 'proj-id',\n * changes: ['file1.ts', 'file2.ts'],\n * testResults: { passed: 10, failed: 0 },\n * });\n *\n * // Complete task and refresh context\n * const newContext = await workflow.completeAndRefresh('task-id', {\n * projectId: 'proj-id'\n * });\n *\n * // End session\n * await workflow.end('Summary...');\n * ```\n */\n workflow(params: { ai: string }): Workflow {\n return new Workflow(this, params.ai);\n }\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "projects-plus-sdk",
3
+ "version": "0.1.0",
4
+ "description": "Official SDK for Projects Plus API",
5
+ "main": "./dist/index.cjs",
6
+ "module": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "tsup",
20
+ "dev": "tsup --watch",
21
+ "test": "vitest",
22
+ "test:run": "vitest run",
23
+ "lint": "eslint src",
24
+ "typecheck": "tsc --noEmit",
25
+ "prepublishOnly": "npm run build"
26
+ },
27
+ "keywords": [
28
+ "projects-plus",
29
+ "api",
30
+ "sdk",
31
+ "typescript",
32
+ "ai",
33
+ "claude"
34
+ ],
35
+ "author": "Projects Plus Team",
36
+ "license": "MIT",
37
+ "repository": {
38
+ "type": "git",
39
+ "url": "https://github.com/projects-plus/sdk"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.0.0",
43
+ "tsup": "^8.0.0",
44
+ "typescript": "^5.0.0",
45
+ "vitest": "^1.0.0"
46
+ },
47
+ "engines": {
48
+ "node": ">=18.0.0"
49
+ }
50
+ }