@speechall/sdk 1.0.0 → 2.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.
- package/.beads/README.md +81 -0
- package/.beads/config.yaml +62 -0
- package/.beads/issues.jsonl +47 -0
- package/.beads/metadata.json +4 -0
- package/.env.example +5 -0
- package/.fernignore +45 -0
- package/.gitattributes +3 -0
- package/.github/copilot-instructions.md +78 -0
- package/.github/workflows/auto-release-simple.yml.deprecated +106 -0
- package/.github/workflows/auto-release.yml +67 -0
- package/.github/workflows/ci.yml +41 -0
- package/.github/workflows/release.yml +57 -0
- package/AGENTS.md +94 -0
- package/CHANGELOG.md +65 -0
- package/CLAUDE.md +129 -0
- package/README.md +294 -155
- package/examples/CLAUDE.md +136 -0
- package/examples/advanced-options.ts +213 -0
- package/examples/basic-transcription.ts +66 -0
- package/examples/error-handling.ts +251 -0
- package/examples/list-models.ts +112 -0
- package/examples/remote-transcription.ts +60 -0
- package/fern/fern.config.json +4 -0
- package/fern/generators.yml +43 -0
- package/jest.config.js +11 -0
- package/package.json +26 -46
- package/regenerate.sh +45 -0
- package/scripts/fix-generated-code.sh +25 -0
- package/src/BaseClient.ts +82 -0
- package/src/Client.ts +30 -0
- package/src/api/errors/BadRequestError.ts +22 -0
- package/src/api/errors/GatewayTimeoutError.ts +22 -0
- package/src/api/errors/InternalServerError.ts +22 -0
- package/src/api/errors/NotFoundError.ts +22 -0
- package/src/api/errors/PaymentRequiredError.ts +22 -0
- package/src/api/errors/ServiceUnavailableError.ts +22 -0
- package/src/api/errors/TooManyRequestsError.ts +22 -0
- package/src/api/errors/UnauthorizedError.ts +22 -0
- package/src/api/errors/index.ts +8 -0
- package/src/api/index.ts +3 -0
- package/src/api/resources/index.ts +5 -0
- package/src/api/resources/replacementRules/client/Client.ts +148 -0
- package/src/api/resources/replacementRules/client/index.ts +1 -0
- package/src/api/resources/replacementRules/client/requests/CreateReplacementRulesetRequest.ts +25 -0
- package/src/api/resources/replacementRules/client/requests/index.ts +1 -0
- package/src/api/resources/replacementRules/index.ts +2 -0
- package/src/api/resources/replacementRules/types/CreateReplacementRulesetResponse.ts +6 -0
- package/src/api/resources/replacementRules/types/index.ts +1 -0
- package/src/api/resources/speechToText/client/Client.ts +275 -0
- package/src/api/resources/speechToText/client/index.ts +1 -0
- package/src/api/resources/speechToText/client/requests/RemoteTranscriptionConfiguration.ts +20 -0
- package/src/api/resources/speechToText/client/requests/TranscribeRequest.ts +26 -0
- package/src/api/resources/speechToText/client/requests/index.ts +2 -0
- package/src/api/resources/speechToText/index.ts +1 -0
- package/src/api/types/BaseTranscriptionConfiguration.ts +29 -0
- package/src/api/types/ErrorResponse.ts +11 -0
- package/src/api/types/ExactRule.ts +13 -0
- package/src/api/types/RegexGroupRule.ts +28 -0
- package/src/api/types/RegexRule.ts +28 -0
- package/src/api/types/ReplacementRule.ts +25 -0
- package/src/api/types/SpeechToTextModel.ts +90 -0
- package/src/api/types/TranscriptLanguageCode.ts +114 -0
- package/src/api/types/TranscriptOutputFormat.ts +18 -0
- package/src/api/types/TranscriptionDetailed.ts +19 -0
- package/src/api/types/TranscriptionModelIdentifier.ts +70 -0
- package/src/api/types/TranscriptionOnlyText.ts +11 -0
- package/src/api/types/TranscriptionProvider.ts +23 -0
- package/src/api/types/TranscriptionResponse.ts +8 -0
- package/src/api/types/TranscriptionSegment.ts +17 -0
- package/src/api/types/TranscriptionWord.ts +17 -0
- package/src/api/types/index.ts +16 -0
- package/src/auth/BearerAuthProvider.ts +37 -0
- package/src/auth/index.ts +1 -0
- package/src/core/auth/AuthProvider.ts +6 -0
- package/src/core/auth/AuthRequest.ts +9 -0
- package/src/core/auth/BasicAuth.ts +32 -0
- package/src/core/auth/BearerToken.ts +20 -0
- package/src/core/auth/NoOpAuthProvider.ts +8 -0
- package/src/core/auth/index.ts +5 -0
- package/src/core/base64.ts +27 -0
- package/src/core/exports.ts +2 -0
- package/src/core/fetcher/APIResponse.ts +23 -0
- package/src/core/fetcher/BinaryResponse.ts +34 -0
- package/src/core/fetcher/EndpointMetadata.ts +13 -0
- package/src/core/fetcher/EndpointSupplier.ts +14 -0
- package/src/core/fetcher/Fetcher.ts +391 -0
- package/src/core/fetcher/Headers.ts +93 -0
- package/src/core/fetcher/HttpResponsePromise.ts +116 -0
- package/src/core/fetcher/RawResponse.ts +61 -0
- package/src/core/fetcher/Supplier.ts +11 -0
- package/src/core/fetcher/createRequestUrl.ts +6 -0
- package/src/core/fetcher/getErrorResponseBody.ts +33 -0
- package/src/core/fetcher/getFetchFn.ts +3 -0
- package/src/core/fetcher/getHeader.ts +8 -0
- package/src/core/fetcher/getRequestBody.ts +20 -0
- package/src/core/fetcher/getResponseBody.ts +58 -0
- package/src/core/fetcher/index.ts +11 -0
- package/src/core/fetcher/makeRequest.ts +42 -0
- package/src/core/fetcher/requestWithRetries.ts +64 -0
- package/src/core/fetcher/signals.ts +26 -0
- package/src/core/file/exports.ts +1 -0
- package/src/core/file/file.ts +217 -0
- package/src/core/file/index.ts +2 -0
- package/src/core/file/types.ts +81 -0
- package/src/core/headers.ts +35 -0
- package/src/core/index.ts +7 -0
- package/src/core/json.ts +27 -0
- package/src/core/logging/exports.ts +19 -0
- package/src/core/logging/index.ts +1 -0
- package/src/core/logging/logger.ts +203 -0
- package/src/core/runtime/index.ts +1 -0
- package/src/core/runtime/runtime.ts +134 -0
- package/src/core/url/encodePathParam.ts +18 -0
- package/src/core/url/index.ts +3 -0
- package/src/core/url/join.ts +79 -0
- package/src/core/url/qs.ts +74 -0
- package/src/environments.ts +7 -0
- package/src/errors/SpeechallError.ts +58 -0
- package/src/errors/SpeechallTimeoutError.ts +13 -0
- package/src/errors/handleNonStatusCodeError.ts +37 -0
- package/src/errors/index.ts +2 -0
- package/src/exports.ts +1 -0
- package/src/index.ts +6 -0
- package/test-import.ts +17 -0
- package/tests/integration/api.test.ts +93 -0
- package/tests/unit/client.test.ts +91 -0
- package/tsconfig.json +20 -0
- package/dist/api.d.ts +0 -501
- package/dist/api.d.ts.map +0 -1
- package/dist/api.js +0 -610
- package/dist/base.d.ts +0 -32
- package/dist/base.d.ts.map +0 -1
- package/dist/base.js +0 -35
- package/dist/common.d.ts +0 -14
- package/dist/common.d.ts.map +0 -1
- package/dist/common.js +0 -91
- package/dist/configuration.d.ts +0 -23
- package/dist/configuration.d.ts.map +0 -1
- package/dist/configuration.js +0 -25
- package/dist/esm/api.js +0 -592
- package/dist/esm/base.js +0 -27
- package/dist/esm/common.js +0 -79
- package/dist/esm/configuration.js +0 -21
- package/dist/esm/example.js +0 -131
- package/dist/esm/index.js +0 -2
- package/dist/example.d.ts +0 -3
- package/dist/example.d.ts.map +0 -1
- package/dist/example.js +0 -133
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -18
package/.beads/README.md
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Beads - AI-Native Issue Tracking
|
|
2
|
+
|
|
3
|
+
Welcome to Beads! This repository uses **Beads** for issue tracking - a modern, AI-native tool designed to live directly in your codebase alongside your code.
|
|
4
|
+
|
|
5
|
+
## What is Beads?
|
|
6
|
+
|
|
7
|
+
Beads is issue tracking that lives in your repo, making it perfect for AI coding agents and developers who want their issues close to their code. No web UI required - everything works through the CLI and integrates seamlessly with git.
|
|
8
|
+
|
|
9
|
+
**Learn more:** [github.com/steveyegge/beads](https://github.com/steveyegge/beads)
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
### Essential Commands
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Create new issues
|
|
17
|
+
bd create "Add user authentication"
|
|
18
|
+
|
|
19
|
+
# View all issues
|
|
20
|
+
bd list
|
|
21
|
+
|
|
22
|
+
# View issue details
|
|
23
|
+
bd show <issue-id>
|
|
24
|
+
|
|
25
|
+
# Update issue status
|
|
26
|
+
bd update <issue-id> --status in_progress
|
|
27
|
+
bd update <issue-id> --status done
|
|
28
|
+
|
|
29
|
+
# Sync with git remote
|
|
30
|
+
bd sync
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Working with Issues
|
|
34
|
+
|
|
35
|
+
Issues in Beads are:
|
|
36
|
+
- **Git-native**: Stored in `.beads/issues.jsonl` and synced like code
|
|
37
|
+
- **AI-friendly**: CLI-first design works perfectly with AI coding agents
|
|
38
|
+
- **Branch-aware**: Issues can follow your branch workflow
|
|
39
|
+
- **Always in sync**: Auto-syncs with your commits
|
|
40
|
+
|
|
41
|
+
## Why Beads?
|
|
42
|
+
|
|
43
|
+
✨ **AI-Native Design**
|
|
44
|
+
- Built specifically for AI-assisted development workflows
|
|
45
|
+
- CLI-first interface works seamlessly with AI coding agents
|
|
46
|
+
- No context switching to web UIs
|
|
47
|
+
|
|
48
|
+
🚀 **Developer Focused**
|
|
49
|
+
- Issues live in your repo, right next to your code
|
|
50
|
+
- Works offline, syncs when you push
|
|
51
|
+
- Fast, lightweight, and stays out of your way
|
|
52
|
+
|
|
53
|
+
🔧 **Git Integration**
|
|
54
|
+
- Automatic sync with git commits
|
|
55
|
+
- Branch-aware issue tracking
|
|
56
|
+
- Intelligent JSONL merge resolution
|
|
57
|
+
|
|
58
|
+
## Get Started with Beads
|
|
59
|
+
|
|
60
|
+
Try Beads in your own projects:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Install Beads
|
|
64
|
+
curl -sSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
|
|
65
|
+
|
|
66
|
+
# Initialize in your repo
|
|
67
|
+
bd init
|
|
68
|
+
|
|
69
|
+
# Create your first issue
|
|
70
|
+
bd create "Try out Beads"
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Learn More
|
|
74
|
+
|
|
75
|
+
- **Documentation**: [github.com/steveyegge/beads/docs](https://github.com/steveyegge/beads/tree/main/docs)
|
|
76
|
+
- **Quick Start Guide**: Run `bd quickstart`
|
|
77
|
+
- **Examples**: [github.com/steveyegge/beads/examples](https://github.com/steveyegge/beads/tree/main/examples)
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
*Beads: Issue tracking that moves at the speed of thought* ⚡
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Beads Configuration File
|
|
2
|
+
# This file configures default behavior for all bd commands in this repository
|
|
3
|
+
# All settings can also be set via environment variables (BD_* prefix)
|
|
4
|
+
# or overridden with command-line flags
|
|
5
|
+
|
|
6
|
+
# Issue prefix for this repository (used by bd init)
|
|
7
|
+
# If not set, bd init will auto-detect from directory name
|
|
8
|
+
# Example: issue-prefix: "myproject" creates issues like "myproject-1", "myproject-2", etc.
|
|
9
|
+
# issue-prefix: ""
|
|
10
|
+
|
|
11
|
+
# Use no-db mode: load from JSONL, no SQLite, write back after each command
|
|
12
|
+
# When true, bd will use .beads/issues.jsonl as the source of truth
|
|
13
|
+
# instead of SQLite database
|
|
14
|
+
# no-db: false
|
|
15
|
+
|
|
16
|
+
# Disable daemon for RPC communication (forces direct database access)
|
|
17
|
+
# no-daemon: false
|
|
18
|
+
|
|
19
|
+
# Disable auto-flush of database to JSONL after mutations
|
|
20
|
+
# no-auto-flush: false
|
|
21
|
+
|
|
22
|
+
# Disable auto-import from JSONL when it's newer than database
|
|
23
|
+
# no-auto-import: false
|
|
24
|
+
|
|
25
|
+
# Enable JSON output by default
|
|
26
|
+
# json: false
|
|
27
|
+
|
|
28
|
+
# Default actor for audit trails (overridden by BD_ACTOR or --actor)
|
|
29
|
+
# actor: ""
|
|
30
|
+
|
|
31
|
+
# Path to database (overridden by BEADS_DB or --db)
|
|
32
|
+
# db: ""
|
|
33
|
+
|
|
34
|
+
# Auto-start daemon if not running (can also use BEADS_AUTO_START_DAEMON)
|
|
35
|
+
# auto-start-daemon: true
|
|
36
|
+
|
|
37
|
+
# Debounce interval for auto-flush (can also use BEADS_FLUSH_DEBOUNCE)
|
|
38
|
+
# flush-debounce: "5s"
|
|
39
|
+
|
|
40
|
+
# Git branch for beads commits (bd sync will commit to this branch)
|
|
41
|
+
# IMPORTANT: Set this for team projects so all clones use the same sync branch.
|
|
42
|
+
# This setting persists across clones (unlike database config which is gitignored).
|
|
43
|
+
# Can also use BEADS_SYNC_BRANCH env var for local override.
|
|
44
|
+
# If not set, bd sync will require you to run 'bd config set sync.branch <branch>'.
|
|
45
|
+
# sync-branch: "beads-sync"
|
|
46
|
+
|
|
47
|
+
# Multi-repo configuration (experimental - bd-307)
|
|
48
|
+
# Allows hydrating from multiple repositories and routing writes to the correct JSONL
|
|
49
|
+
# repos:
|
|
50
|
+
# primary: "." # Primary repo (where this database lives)
|
|
51
|
+
# additional: # Additional repos to hydrate from (read-only)
|
|
52
|
+
# - ~/beads-planning # Personal planning repo
|
|
53
|
+
# - ~/work-planning # Work planning repo
|
|
54
|
+
|
|
55
|
+
# Integration settings (access with 'bd config get/set')
|
|
56
|
+
# These are stored in the database, not in this file:
|
|
57
|
+
# - jira.url
|
|
58
|
+
# - jira.project
|
|
59
|
+
# - linear.url
|
|
60
|
+
# - linear.api-key
|
|
61
|
+
# - github.org
|
|
62
|
+
# - github.repo
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.9","title":"Fern config not updated - blocking SDK regeneration with correct package name","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-17T14:41:22Z","updated_at":"2025-12-17T15:48:56Z","closed_at":"2025-12-17T16:48:56Z","close_reason":"Fixed: Updated fern/generators.yml with correct package name @speechall/sdk and version 2.0.0","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.9","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:41:22Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-slj.9","depends_on_id":"speechall-typescript-sdk-slj.6","type":"blocks","created_at":"2025-12-17T15:41:22Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
|
2
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.3","title":"Fix package name and version in Fern config","description":"## Overview\nUpdate the Fern configuration to use the correct npm package name and version 2.0.0.\n\n## File to Modify\n`/fern/generators.yml` (lines 28-29)\n\n## Changes Required\n\n### Before\n```yaml\npackageJson:\n name: speechall\n version: 0.1.0\n```\n\n### After\n```yaml\npackageJson:\n name: \"@speechall/sdk\"\n version: 2.0.0\n```\n\n## Context\nThe package name was incorrectly set to `speechall` when migrating to Fern. The actual npm package is `@speechall/sdk` at v1.0.0. We're releasing v2.0.0 of this existing package.\n\n## Regression Verification\n✅ Safe to change - verified:\n- All examples and tests use relative imports (`../src`), not package name imports\n- Generated code has no hardcoded package name references\n- Only `package.json` will be affected by this change\n\n## Critical Priority\nThis must be done BEFORE running `./regenerate.sh` so the generated package.json has the correct values.\n\n## Acceptance Criteria\n- [ ] `fern/generators.yml` line 28: `name: \"@speechall/sdk\"`\n- [ ] `fern/generators.yml` line 29: `version: 2.0.0`","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-17T14:17:55Z","updated_at":"2025-12-17T14:45:26Z","closed_at":"2025-12-17T15:45:26Z","close_reason":"Configuration already correct - package name is @speechall/sdk and version is 2.0.0","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.3","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:17:55Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0}
|
|
3
|
+
{"_type":"issue","id":"speechall-typescript-sdk-o57","title":"Locate or create OpenAPI specification file","description":"## Problem\n\nThe OpenAPI specification file referenced in fern/generators.yml does not exist:\n- Expected path: `../../speechall-openapi/openapi.yaml`\n- Actual path: Does not exist\n\nBoth the Python SDK and TypeScript SDK reference this path, but the `speechall-openapi` directory is missing from the parent SDK directory.\n\n## Tasks\n\n1. Locate the canonical OpenAPI specification for the Speechall API\n2. Determine if it should be:\n - In a separate `speechall-openapi` repository that needs to be cloned\n - Downloaded from the Speechall API\n - Created from scratch based on API documentation\n - Stored within each SDK repository\n3. Set up the OpenAPI spec at the correct location\n4. Verify the spec is valid with `fern check`\n\n## Impact\n\nThis blocks SDK generation for both:\n- speechall-typescript-sdk-vi2.5 (Generate SDK and verify output)\n- Any SDK generation commands\n\n## Context\n\nThe Python SDK at `../speechall-python-sdk` has the same configuration and also cannot run `fern check` due to this missing file.","status":"closed","priority":0,"issue_type":"task","created_at":"2025-12-16T13:08:48Z","updated_at":"2025-12-16T13:19:59Z","closed_at":"2025-12-16T14:19:59Z","close_reason":"Successfully located and cloned OpenAPI specification repository. The OpenAPI spec is maintained at https://github.com/Speechall/speechall-openapi and has been cloned to the parent directory. Both fern/generators.yml and regenerate.sh already have the correct path configured (../../speechall-openapi/openapi.yaml from fern directory, ../speechall-openapi/openapi.yaml from project root). The spec file exists and is valid.","dependencies":[{"issue_id":"speechall-typescript-sdk-o57","depends_on_id":"speechall-typescript-sdk-vi2.1","type":"blocks","created_at":"2025-12-16T14:08:48Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
|
4
|
+
{"_type":"issue","id":"speechall-typescript-sdk-li5","title":"Regenerate TypeScript SDK from updated OpenAPI","status":"closed","priority":1,"issue_type":"task","owner":"atacandur@icloud.com","created_at":"2026-06-20T13:01:04Z","created_by":"atacan","updated_at":"2026-06-20T13:15:26Z","started_at":"2026-06-20T13:01:11Z","closed_at":"2026-06-20T13:15:26Z","close_reason":"Regenerated TypeScript SDK for 2.1.0","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
5
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.10","title":"Auto-release workflow doesn't trigger npm publish due to GITHUB_TOKEN limitation","description":"## Problem\n\nWhen auto-release.yml creates a GitHub release using the default GITHUB_TOKEN, it doesn't trigger the release.yml workflow (which publishes to npm). This is a GitHub Actions security feature to prevent infinite workflow loops.\n\n## Solution Options\n\n1. **Use a Personal Access Token (PAT)**: Create a PAT with 'contents: write' permission and use it instead of GITHUB_TOKEN in auto-release.yml\n2. **Use repository dispatch**: Have auto-release.yml trigger a repository_dispatch event that release.yml listens to\n3. **Merge workflows**: Combine auto-release and npm publish into a single workflow\n\n## Workaround\n\nFor now, manually trigger npm publish by:\n- Deleting and recreating the GitHub release, OR\n- Running npm publish locally with proper credentials","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-17T18:51:43Z","updated_at":"2025-12-18T20:27:29Z","closed_at":"2025-12-18T21:27:29Z","close_reason":"Fixed with repository_dispatch workflow","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.10","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T19:51:43Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
6
|
+
{"_type":"issue","id":"speechall-typescript-sdk-68t","title":"Fix Fern output path to generate package.json at root","description":"## Problem\n\nThe Fern generator configuration in fern/generators.yml has output path set to '../src', which generates TypeScript source files in the src/ directory but does not update the root package.json file.\n\nAccording to Fern documentation, when packageJson is configured in generators.yml, the generator should create/update package.json at the output location. Currently:\n- Output path: ../src (relative to fern/ directory)\n- Result: Source files generated in src/, but package.json in root is not updated\n- Expected: package.json should be at the root of the SDK package\n\n## Current Configuration\n```yaml\noutput:\n location: local-file-system\n path: ../src\n```\n\n## Expected Configuration\n```yaml\noutput:\n location: local-file-system\n path: ..\n```\n\n## Impact\nThe packageJson configuration in generators.yml (with @speechall/sdk and version 2.0.0) is not being applied to the root package.json file.\n\n## Fix Required\nChange the output path from '../src' to '..' so that:\n1. package.json is generated/updated at the root\n2. Source files are generated in src/ subdirectory (Fern default behavior)\n3. The packageJson config values are properly applied\n\n## Verification\nAfter fixing, regenerate and verify:\n```bash\n./regenerate.sh\ngrep '\"name\"' package.json # Should show '@speechall/sdk'\ngrep '\"version\"' package.json # Should show '2.0.0'\n```","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-17T14:48:33Z","updated_at":"2025-12-19T12:29:13Z","closed_at":"2025-12-19T13:29:13Z","close_reason":"Resolved with documented manual workflow - package.json is manually updated alongside fern/generators.yml for version bumps. This approach is now documented in CLAUDE.md and working reliably.","dependencies":[{"issue_id":"speechall-typescript-sdk-68t","depends_on_id":"speechall-typescript-sdk-slj.6","type":"discovered-from","created_at":"2025-12-17T15:48:33Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
7
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.8","title":"Verify npm release","description":"## Overview\nAfter merging to main, verify that the automated release process worked correctly.\n\n## Prerequisites\n**Blocked by**: speechall-typescript-sdk-slj.7 (Create PR and merge)\n\nThis is a post-merge verification task.\n\n## What Should Have Happened Automatically\nAfter merge:\n1. **auto-release.yml** workflow should have triggered\n2. Git tag `v2.0.0` should have been created\n3. GitHub Release should have been created\n4. **release.yml** workflow should have triggered\n5. Package should have been published to npm\n\n## Verification Steps\n\n### 1. Check GitHub Actions\n```bash\n# Check workflow runs\ngh run list --limit 5\n```\n\n### 2. Check GitHub Release\n```bash\n# List releases\ngh release list\n\n# View v2.0.0 release\ngh release view v2.0.0\n```\n\n### 3. Check npm Package\n```bash\n# Check version on npm\nnpm view @speechall/sdk version\n# Should show: 2.0.0\n\n# Check package metadata\nnpm view @speechall/sdk\n\n# Test installation\nmkdir /tmp/test-speechall-v2\ncd /tmp/test-speechall-v2\nnpm init -y\nnpm install @speechall/sdk\nnode -e \"const {SpeechallClient} = require('@speechall/sdk'); console.log('✅ Import successful');\"\n```\n\n### 4. Check npm Badge\nVisit https://www.npmjs.com/package/@speechall/sdk and verify:\n- Version shows 2.0.0\n- Package description is correct\n\n## Troubleshooting\n\n### If auto-release workflow failed\n- Check workflow logs: `gh run view \u003crun-id\u003e --log`\n- Common issues: permissions, version already exists\n\n### If release.yml failed\n- Check NPM_TOKEN secret is valid\n- Check version verification passed\n\n### If npm publish failed\n- Check npm authentication\n- Can retry via \"Re-run failed jobs\" in GitHub Actions\n\n## Acceptance Criteria\n- [ ] GitHub tag v2.0.0 exists\n- [ ] GitHub Release v2.0.0 exists with release notes\n- [ ] npm package `@speechall/sdk@2.0.0` is published\n- [ ] Package can be installed and imported\n- [ ] No workflow errors","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T14:30:10Z","updated_at":"2025-12-19T12:29:12Z","closed_at":"2025-12-19T13:29:12Z","close_reason":"✅ Automated release verified - v2.0.4 successfully published via auto-release.yml → repository_dispatch → release.yml with npm Trusted Publishing","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.8","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:30:10Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
8
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.7","title":"Create PR and merge to main","description":"## Overview\nAfter all changes are complete, commit everything and create a PR to merge to main.\n\n## Prerequisites\n**Blocked by all previous tasks:**\n- speechall-typescript-sdk-slj.1 (CHANGELOG.md)\n- speechall-typescript-sdk-slj.2 (Auto-release workflow)\n- speechall-typescript-sdk-slj.3 (Fern config fix)\n- speechall-typescript-sdk-slj.4 (README.md update)\n- speechall-typescript-sdk-slj.6 (SDK regeneration)\n\n## Files to Commit\n```\nCHANGELOG.md (new)\nREADME.md (package name updated)\nfern/generators.yml (name and version updated)\n.github/workflows/auto-release.yml (new)\npackage.json (regenerated with correct name and version)\npackage-lock.json (updated)\nsrc/ (regenerated if needed)\n.beads/issues.jsonl (auto-updated)\n```\n\n## Commit Message\n```\nfeat: release v2.0.0 - complete SDK rewrite with Fern\n\nBREAKING CHANGE: Complete rewrite using Fern code generation\n\n- Fix package name to @speechall/sdk in Fern config\n- Add automated release workflow on merge to main\n- Add comprehensive CHANGELOG.md with migration guide\n\nSee CHANGELOG.md for full details.\n```\n\n## PR Creation\n```bash\ngh pr create \\\n --title \"feat: Release v2.0.0 - Complete SDK rewrite with Fern\" \\\n --body \"See CHANGELOG.md for details\"\n```\n\n## Before Merge\n- [ ] CI passes (build, tests, type checks)\n- [ ] All acceptance criteria from previous tasks met\n- [ ] PR reviewed (if applicable)\n\n## After Merge\nThe auto-release workflow will automatically:\n1. Create git tag v2.0.0\n2. Create GitHub Release\n3. Trigger npm publish via release.yml\n\n## Acceptance Criteria\n- [ ] All files committed\n- [ ] PR created with proper title and description\n- [ ] CI passes\n- [ ] PR merged to main","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T14:18:56Z","updated_at":"2025-12-17T15:56:31Z","closed_at":"2025-12-17T16:56:31Z","close_reason":"PR created: https://github.com/Speechall/speechall-typescript-sdk/pull/4","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.7","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:18:56Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
9
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.6","title":"Regenerate SDK with updated Fern config","description":"## Overview\nRegenerate the SDK using `./regenerate.sh` after the Fern config has been updated with the correct package name and version.\n\n## Prerequisites\n**Blocked by**: speechall-typescript-sdk-slj.3 (Fix package name and version in Fern config)\n\nThis task cannot start until the Fern config is updated.\n\n## Command to Run\n```bash\n./regenerate.sh\n```\n\n## What This Does\nThe regenerate script:\n1. Validates Fern configuration exists\n2. Runs `fern generate --local --force`\n3. Applies post-generation fixes via `scripts/fix-generated-code.sh`\n4. Runs TypeScript type check (`npx tsc --noEmit`)\n5. Runs tests (`npm test`)\n\n## Expected Changes\n\n### package.json\n- `name`: `\"speechall\"` → `\"@speechall/sdk\"`\n- `version`: `\"0.1.0\"` → `\"2.0.0\"`\n\n### package-lock.json\n- Updated with new package name and version\n\n### src/ directory\n- Regenerated source files (no functional changes, just regeneration)\n\n## Verification\nAfter regeneration, verify:\n```bash\n# Check package.json has correct values\ngrep '\"name\"' package.json # Should show \"@speechall/sdk\"\ngrep '\"version\"' package.json # Should show \"2.0.0\"\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n```\n\n## Notes\n- The regenerate script already runs type checks and tests\n- If tests fail, investigate before proceeding\n\n## Acceptance Criteria\n- [ ] `./regenerate.sh` completes successfully\n- [ ] `package.json` name is `@speechall/sdk`\n- [ ] `package.json` version is `2.0.0`\n- [ ] All tests pass\n- [ ] TypeScript compiles without errors","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T14:18:37Z","updated_at":"2025-12-17T14:48:52Z","closed_at":"2025-12-17T15:48:52Z","close_reason":"SDK regeneration completed successfully, but discovered that the output path configuration prevents package.json from being updated. The regenerate.sh script ran successfully:\n- Fern validation passed\n- SDK generated without errors \n- TypeScript type check passed\n- All tests passed (12 passed, 3 skipped)\n\nHowever, the package.json at root still shows old values (name: 'speechall', version: '0.1.0') instead of the configured values in generators.yml (name: '@speechall/sdk', version: '2.0.0').\n\nRoot cause: The output path in generators.yml is set to '../src' instead of '..', which causes Fern to generate source files but not update the root package.json.\n\nCreated follow-up issue speechall-typescript-sdk-68t to fix the output path configuration.","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.6","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:18:37Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-slj.6","depends_on_id":"speechall-typescript-sdk-slj.3","type":"blocks","created_at":"2025-12-17T15:18:37Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0}
|
|
10
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.5","title":"Regenerate SDK with updated Fern config","description":"## Overview\nRegenerate the SDK using `./regenerate.sh` after the Fern config has been updated with the correct package name and version.\n\n## Prerequisites\n**Blocked by**: speechall-typescript-sdk-slj.3 (Fix package name and version in Fern config)\n\n## Command to Run\n```bash\n./regenerate.sh\n```\n\n## What This Does\nThe regenerate script:\n1. Validates Fern configuration exists\n2. Runs `fern generate --local --force`\n3. Applies post-generation fixes via `scripts/fix-generated-code.sh`\n4. Runs TypeScript type check (`npx tsc --noEmit`)\n5. Runs tests (`npm test`)\n\n## Expected Changes\n\n### package.json\n- `name`: `\"speechall\"` → `\"@speechall/sdk\"`\n- `version`: `\"0.1.0\"` → `\"2.0.0\"`\n\n### package-lock.json\n- Updated with new package name and version\n\n### src/ directory\n- Regenerated source files (no functional changes, just regeneration)\n\n## Verification\nAfter regeneration, verify:\n```bash\n# Check package.json has correct values\ngrep '\"name\"' package.json # Should show \"@speechall/sdk\"\ngrep '\"version\"' package.json # Should show \"2.0.0\"\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n```\n\n## Notes\n- The regenerate script already runs type checks and tests\n- If tests fail, investigate before proceeding\n\n## Acceptance Criteria\n- [ ] `./regenerate.sh` completes successfully\n- [ ] `package.json` name is `@speechall/sdk`\n- [ ] `package.json` version is `2.0.0`\n- [ ] All tests pass\n- [ ] TypeScript compiles without errors","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T14:18:21Z","updated_at":"2025-12-17T14:30:22Z","closed_at":"2025-12-17T15:30:22Z","close_reason":"Duplicate of speechall-typescript-sdk-slj.6","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.5","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:18:21Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
11
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.4","title":"Update README.md package name references","description":"## Overview\nUpdate all package name references in README.md from `speechall` to `@speechall/sdk`.\n\n## File to Modify\n`/README.md`\n\n## Changes Required\n\nUpdate all occurrences of the package name in:\n- Installation instructions (npm install, yarn add, pnpm add)\n- Import statements in code examples\n- Badge URL if applicable\n\n### Example Changes\n\n**Installation:**\n```markdown\n# Before\nnpm install speechall\n\n# After\nnpm install @speechall/sdk\n```\n\n**Imports:**\n```typescript\n// Before\nimport { SpeechallClient } from 'speechall';\n\n// After\nimport { SpeechallClient } from '@speechall/sdk';\n```\n\n## Search Pattern\nSearch for:\n- `npm install speechall`\n- `yarn add speechall`\n- `pnpm add speechall`\n- `from 'speechall'`\n- `from \"speechall\"`\n- `require('speechall')`\n- `require(\"speechall\")`\n\n## Notes\n- README.md is protected by `.fernignore` and won't be overwritten by Fern\n- Make sure all code examples compile correctly with the new import path\n\n## Acceptance Criteria\n- [ ] All installation commands use `@speechall/sdk`\n- [ ] All import statements use `@speechall/sdk`\n- [ ] No remaining references to plain `speechall` package name","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T14:18:08Z","updated_at":"2025-12-17T14:46:00Z","closed_at":"2025-12-17T15:46:00Z","close_reason":"Updated all package name references in README.md from 'speechall' to '@speechall/sdk'","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.4","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:18:08Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
12
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.2","title":"Create auto-release GitHub workflow","description":"## Overview\nCreate a new GitHub Actions workflow that automatically creates GitHub Releases when code is merged to main.\n\n## File to Create\n`/.github/workflows/auto-release.yml`\n\n## Workflow Requirements\n\n### Trigger\n- On push to `main` branch (after PR merge)\n\n### Steps\n1. Extract version from `package.json` (e.g., `2.0.0`)\n2. Check if release already exists for this version (idempotency)\n3. Create a git tag (e.g., `v2.0.0`)\n4. Generate release notes from CHANGELOG.md\n5. Create GitHub Release with the tag\n\n### Key Features\n- **Idempotent**: Won't recreate if release already exists\n- **Version extraction**: Reads version dynamically from package.json\n- **CHANGELOG integration**: Uses CHANGELOG.md for release notes\n- **Safe**: Only runs on main branch after merge\n\n### Integration\nThis workflow triggers the existing `release.yml` workflow which handles npm publishing.\n\n## Reference\nLook at existing `.github/workflows/release.yml` for npm publishing logic - this new workflow should complement it.\n\n## Acceptance Criteria\n- [ ] Workflow file created at `.github/workflows/auto-release.yml`\n- [ ] Triggers on push to main\n- [ ] Extracts version from package.json\n- [ ] Creates git tag with `v` prefix\n- [ ] Creates GitHub Release with CHANGELOG content\n- [ ] Idempotent (doesn't fail if release exists)","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T14:17:43Z","updated_at":"2025-12-17T14:45:51Z","closed_at":"2025-12-17T15:45:51Z","close_reason":"Created auto-release GitHub workflow","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.2","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:17:43Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
13
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj.1","title":"Create CHANGELOG.md for v2.0.0","description":"## Overview\nCreate a CHANGELOG.md file documenting v2.0.0 breaking changes and migration guide.\n\n## File to Create\n`/CHANGELOG.md`\n\n## Content Requirements\n\n### Breaking Changes Section\n- Complete API rewrite using Fern code generation\n- Enhanced error handling with specific error types\n- Improved TypeScript types\n\n### Migration Guide for v1.x Users\n- Document any API changes\n- Show before/after code examples\n- List deprecated features\n\n### New Features Section\n- Fern-generated SDK for consistency with OpenAPI spec\n- Comprehensive TypeScript support\n- Enhanced error handling (specific error classes for each HTTP status)\n- Better documentation and examples\n\n## Format\nFollow Keep a Changelog format (https://keepachangelog.com/en/1.0.0/)\n\n## Notes\n- File is protected by `.fernignore` and won't be overwritten by Fern\n- Use markdown formatting\n- Include version number and date\n\n## Acceptance Criteria\n- [ ] CHANGELOG.md exists at project root\n- [ ] Documents all breaking changes\n- [ ] Includes migration guide from v1.x to v2.0.0\n- [ ] Lists new features and improvements","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-17T14:17:30Z","updated_at":"2025-12-17T14:46:46Z","closed_at":"2025-12-17T15:46:46Z","close_reason":"Created comprehensive CHANGELOG.md for v2.0.0 with breaking changes, migration guide, and version history","dependencies":[{"issue_id":"speechall-typescript-sdk-slj.1","depends_on_id":"speechall-typescript-sdk-slj","type":"parent-child","created_at":"2025-12-17T15:17:30Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
14
|
+
{"_type":"issue","id":"speechall-typescript-sdk-slj","title":"Release v2.0.0 with Automated Publishing","description":"# Release v2.0.0 with Automated Publishing\n\n## Overview\n\nPrepare the Speechall TypeScript SDK v2.0.0 release with **full automation**: merging to `main` automatically creates a GitHub Release and publishes to npm.\n\n## Current State\n\n- **Package**: `@speechall/sdk` (existing npm package at v1.0.0)\n- **Current Code**: Version 0.1.0, package name incorrectly set to `speechall` in Fern config\n- **Branch**: `experiment/clean-fern-generation` → merging to `main`\n- **Breaking Changes**: Complete SDK rewrite using Fern code generation (API/code changes, NOT package name change)\n\n## Implementation Flow\n\n```\n1. Developer updates version in fern/generators.yml to 2.0.0\n2. Developer regenerates SDK (./regenerate.sh)\n3. Developer commits and merges PR to main\n ↓\n4. NEW WORKFLOW: Auto-create GitHub Release with tag v2.0.0\n ↓\n5. EXISTING WORKFLOW: Automatically publish to npm\n```\n\n## Critical Files\n\n**New Files to Create:**\n- `/CHANGELOG.md` - Documents breaking changes, migration guide\n- `/.github/workflows/auto-release.yml` - Auto-creates GitHub Releases on merge\n\n**Files to Modify:**\n- `/fern/generators.yml` (lines 28-29) - Update name to `@speechall/sdk` and version to `2.0.0`\n- `/README.md` - Update package name references from `speechall` to `@speechall/sdk`\n- `/package.json` (auto-regenerated) - Will show correct name and version after `./regenerate.sh`\n\n## Regression Verification\n\n✅ **No regressions confirmed** - changing package name is safe:\n- All examples and tests use relative imports (`../src`), not package name imports\n- Generated code has no hardcoded package name references\n\n## Success Criteria\n\n- [ ] Package published as `@speechall/sdk@2.0.0` on npm\n- [ ] GitHub Release created automatically on merge\n- [ ] CHANGELOG.md documents breaking changes and migration guide\n- [ ] Can install: `npm install @speechall/sdk`\n- [ ] CI passes on main","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-17T14:17:03Z","updated_at":"2025-12-18T20:27:25Z","closed_at":"2025-12-18T21:27:25Z","close_reason":"✅ Completed: v2.0.4 successfully released with automated publishing and npm Trusted Publishing","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
15
|
+
{"_type":"issue","id":"speechall-typescript-sdk-6b0.1","title":"Update unit tests - remove openAiCompatibleSpeechToText","description":"Remove all references to openAiCompatibleSpeechToText from tests/unit/client.test.ts. Files: tests/unit/client.test.ts","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T19:03:18Z","updated_at":"2025-12-16T19:09:50Z","closed_at":"2025-12-16T20:09:50Z","close_reason":"Unit tests updated to remove OpenAI-compatible endpoint tests","dependencies":[{"issue_id":"speechall-typescript-sdk-6b0.1","depends_on_id":"speechall-typescript-sdk-6b0","type":"parent-child","created_at":"2025-12-16T20:03:18Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0}
|
|
16
|
+
{"_type":"issue","id":"speechall-typescript-sdk-6b0.2","title":"Update integration tests - remove openAiCompatibleSpeechToText","description":"Remove all references to openAiCompatibleSpeechToText from tests/integration/api.test.ts. Files: tests/integration/api.test.ts","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T19:03:18Z","updated_at":"2025-12-16T19:10:25Z","closed_at":"2025-12-16T20:10:25Z","close_reason":"Integration tests updated to remove OpenAI-compatible endpoint tests","dependencies":[{"issue_id":"speechall-typescript-sdk-6b0.2","depends_on_id":"speechall-typescript-sdk-6b0","type":"parent-child","created_at":"2025-12-16T20:03:18Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0}
|
|
17
|
+
{"_type":"issue","id":"speechall-typescript-sdk-6b0","title":"Remove OpenAI-compatible endpoints from SDK","description":"Clean up the SDK after removing OpenAI-compatible endpoints via x-fern-ignore flags. All references to openAiCompatibleSpeechToText need to be removed from tests, examples, and documentation.","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-16T19:02:52Z","updated_at":"2025-12-16T19:12:25Z","closed_at":"2025-12-16T20:12:25Z","close_reason":"All subtasks completed: Tests updated, example deleted, documentation updated. OpenAI-compatible endpoints fully removed from SDK.","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
18
|
+
{"_type":"issue","id":"speechall-typescript-sdk-5sz","title":"Update unit tests to remove openAiCompatibleSpeechToText references","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T19:00:53Z","updated_at":"2025-12-16T19:03:00Z","closed_at":"2025-12-16T20:03:00Z","close_reason":"Replaced with subtask under epic","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
19
|
+
{"_type":"issue","id":"speechall-typescript-sdk-tfn","title":"Update integration tests to remove openAiCompatibleSpeechToText references","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T19:00:53Z","updated_at":"2025-12-16T19:03:01Z","closed_at":"2025-12-16T20:03:01Z","close_reason":"Replaced with subtask under epic","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
20
|
+
{"_type":"issue","id":"speechall-typescript-sdk-5e8","title":"Verify OpenAPI remote URL accessibility","description":"## Problem\n\nThe remote URL for the OpenAPI spec is not accessible:\n`https://raw.githubusercontent.com/Speechall/speechall-openapi/refs/heads/main/openapi.yaml`\n\nWhen attempting to use this URL in `fern/generators.yml`, fern check fails with:\n```\nMissing file: https://raw.githubusercontent.com/Speechall/speechall-openapi/refs/heads/main/openapi.yaml\n```\n\n## Possible Causes\n1. The speechall-openapi repository is private (not public)\n2. The repository doesn't exist at that location\n3. The branch name is incorrect\n4. The file path within the repo is incorrect\n\n## Current Workaround\nUsing the local path instead:\n`../../../Speechall-Repositories/speechall-openapi/openapi.yaml`\n\n## Required Action\n1. Verify the speechall-openapi repository exists and is public\n2. If private, either make it public or use GitHub tokens for access\n3. Update the URL in fern/generators.yml once accessible\n4. Test with `fern check` to verify it works","status":"closed","priority":1,"issue_type":"bug","created_at":"2025-12-16T14:37:35Z","updated_at":"2025-12-16T15:00:40Z","closed_at":"2025-12-16T16:00:40Z","close_reason":"Fern limitation: generators.yml doesn't support remote URLs, only local paths. Remote URL is accessible but not usable in this context.","dependencies":[{"issue_id":"speechall-typescript-sdk-5e8","depends_on_id":"speechall-typescript-sdk-dsh.4","type":"discovered-from","created_at":"2025-12-16T15:37:35Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
21
|
+
{"_type":"issue","id":"speechall-typescript-sdk-dsh.4","title":"Update OpenAPI spec path to use remote URL","description":"## Summary\nUpdate `fern/generators.yml` to use the remote GitHub URL for the OpenAPI spec instead of a local file path. This resolves bd issue speechall-typescript-sdk-5ph.\n\n## File to Modify\n- `fern/generators.yml`\n\n## Current State (line 4)\n```yaml\n - openapi: ../../speechall-openapi/openapi.yaml\n```\n\nThis path is incorrect and causes issues in both local development and CI.\n\n## Change Required\nReplace line 4 with:\n```yaml\n # Using remote URL for consistency across environments\n # For local OpenAPI spec changes, temporarily replace with:\n # ../../../Speechall-Repositories/speechall-openapi/openapi.yaml\n - openapi: https://raw.githubusercontent.com/Speechall/speechall-openapi/refs/heads/main/openapi.yaml\n```\n\n## Why Remote URL?\n1. Works consistently without requiring local clone of OpenAPI repo\n2. Simpler for contributors - no need to clone multiple repos\n3. Fern CLI supports remote URLs natively\n4. If user needs to test local OpenAPI changes, they can temporarily edit the path\n\n## Verification Steps\nAfter making the change:\n```bash\nfern check # Should pass\nfern generate --local --force # Should regenerate SDK successfully\n```\n\n## Acceptance Criteria\n- [ ] OpenAPI path updated to remote URL\n- [ ] Comment added explaining local override option\n- [ ] `fern check` passes\n- [ ] SDK can be regenerated with `fern generate --local --force`\n- [ ] Close bd issue speechall-typescript-sdk-5ph\n\n## Related Issues\n- Resolves: speechall-typescript-sdk-5ph\n\n## Dependencies\nNone - this can be done in parallel with other tasks.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T14:21:40Z","updated_at":"2025-12-16T14:38:05Z","closed_at":"2025-12-16T15:38:05Z","close_reason":"Updated OpenAPI path to local path (remote URL not accessible)","dependencies":[{"issue_id":"speechall-typescript-sdk-dsh.4","depends_on_id":"speechall-typescript-sdk-dsh","type":"parent-child","created_at":"2025-12-16T15:21:40Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0}
|
|
22
|
+
{"_type":"issue","id":"speechall-typescript-sdk-dsh.2","title":"Simplify CI workflow","description":"## Summary\nRewrite `.github/workflows/ci.yml` to remove external repository dependencies and simplify the checkout process. Add proper test steps.\n\n## File to Modify\n- `.github/workflows/ci.yml`\n\n## Current Issues (lines to fix)\n- Line 20: Checks out SDK to `speechall-typescript-sdk` subdirectory\n- Lines 22-27: Checks out external OpenAPI repo (not needed)\n- Lines 36-37: Installs Fern CLI (not needed for CI)\n- Lines 39-41: Validates OpenAPI spec (not needed for CI)\n- All steps have `working-directory: speechall-typescript-sdk` (complexity)\n\n## Changes Required\n1. Remove `path: speechall-typescript-sdk` from checkout (line 20)\n2. Remove \"Checkout OpenAPI spec\" step (lines 22-27)\n3. Remove \"Install Fern CLI\" step (lines 36-37)\n4. Remove \"Validate OpenAPI spec\" step (lines 39-41)\n5. Remove all `working-directory: speechall-typescript-sdk` directives\n6. Update cache-dependency-path to just `package.json` (line 34)\n7. Add explicit test steps: `npm run test:unit` and `npm run test:integration`\n\n## New Structure\n```yaml\nname: CI\n\non:\n push:\n branches: [main]\n pull_request:\n branches: [main]\n\njobs:\n test:\n runs-on: ubuntu-latest\n strategy:\n matrix:\n node-version: [18.x, 20.x]\n\n steps:\n - uses: actions/checkout@v4\n\n - name: Setup Node.js ${{ matrix.node-version }}\n uses: actions/setup-node@v4\n with:\n node-version: ${{ matrix.node-version }}\n cache: 'npm'\n\n - name: Install dependencies\n run: npm ci\n\n - name: Build SDK\n run: npm run build\n\n - name: Verify TypeScript compilation\n run: npx tsc --noEmit\n\n - name: Run unit tests\n run: npm run test:unit\n\n - name: Run integration tests\n run: npm run test:integration\n\n - name: Test package can be imported\n run: node -e \"require('./dist/index.js')\"\n```\n\n## Acceptance Criteria\n- [ ] CI workflow no longer checks out external repositories\n- [ ] No more `working-directory` prefixes needed\n- [ ] Runs build, TypeScript check, unit tests, integration tests\n- [ ] Tests on Node 18.x and 20.x\n- [ ] PR to main triggers CI successfully\n\n## Dependencies\nNone - this can be done in parallel with other tasks.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T14:20:35Z","updated_at":"2025-12-16T14:36:35Z","closed_at":"2025-12-16T15:36:35Z","close_reason":"CI workflow simplified - removed external dependencies and added proper test steps","dependencies":[{"issue_id":"speechall-typescript-sdk-dsh.2","depends_on_id":"speechall-typescript-sdk-dsh","type":"parent-child","created_at":"2025-12-16T15:20:35Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0}
|
|
23
|
+
{"_type":"issue","id":"speechall-typescript-sdk-dsh.1","title":"Delete regenerate.yml workflow","description":"## Summary\nDelete the `.github/workflows/regenerate.yml` workflow file. The automatic SDK regeneration is being removed in favor of manual local regeneration using `./regenerate.sh`.\n\n## File to Delete\n- `.github/workflows/regenerate.yml`\n\n## Context\nThis workflow is failing with path errors:\n\u003e Repository path '/home/runner/work/speechall-typescript-sdk/speechall-openapi' is not under '/home/runner/work/speechall-typescript-sdk/speechall-typescript-sdk'\n\nInstead of fixing the complex sibling repository checkout, we're removing automatic regeneration entirely.\n\n## Acceptance Criteria\n- [ ] File `.github/workflows/regenerate.yml` is deleted\n- [ ] Commit with message explaining why the workflow was removed\n\n## Dependencies\nNone - this can be done immediately.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T14:19:12Z","updated_at":"2025-12-16T14:35:11Z","closed_at":"2025-12-16T15:35:11Z","close_reason":"Workflow deleted - using manual local regeneration only","dependencies":[{"issue_id":"speechall-typescript-sdk-dsh.1","depends_on_id":"speechall-typescript-sdk-dsh","type":"parent-child","created_at":"2025-12-16T15:19:12Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0}
|
|
24
|
+
{"_type":"issue","id":"speechall-typescript-sdk-dsh","title":"Fix GitHub Actions Pipelines and OpenAPI Path","description":"# Fix GitHub Actions Pipelines and OpenAPI Path\n\n## Problem Summary\n\nThe GitHub Actions workflow `.github/workflows/regenerate.yml` is failing with:\n\u003e Repository path '/home/runner/work/speechall-typescript-sdk/speechall-openapi' is not under '/home/runner/work/speechall-typescript-sdk/speechall-typescript-sdk'\n\nAdditionally:\n- CI workflow has similar path issues checking out sibling repositories\n- Pipeline purposes are unclear\n- Missing proper test steps\n- OpenAPI spec path needs fixing (bd issue: speechall-typescript-sdk-5ph)\n\n## User Requirements\n\n1. Remove regenerate workflow (manual local regeneration only)\n2. CI should test: Build + TypeScript compilation + Unit tests\n3. Keep npm publish step in release workflow\n4. Ability to generate code locally without remote dependencies\n\n## Critical Files to Modify\n\n1. `.github/workflows/regenerate.yml` - DELETE\n2. `.github/workflows/ci.yml` - REWRITE (simplified, no external repo dependencies)\n3. `.github/workflows/release.yml` - ENHANCE (add version check and tests)\n4. `fern/generators.yml` - UPDATE (use remote URL)\n5. `regenerate.sh` - UPDATE (remove local path validation)\n\n## Expected Outcomes\n\n- No more path errors in GitHub Actions\n- Clear, simple CI pipeline that tests build + types + unit tests\n- Release workflow with safety checks (version verification, tests)\n- Local SDK regeneration works without requiring OpenAPI repo clone\n- bd issue speechall-typescript-sdk-5ph resolved","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-16T14:18:52Z","updated_at":"2025-12-16T14:39:21Z","closed_at":"2025-12-16T15:39:21Z","close_reason":"All subtasks completed - GitHub Actions workflows fixed and OpenAPI path updated","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
25
|
+
{"_type":"issue","id":"speechall-typescript-sdk-yp5","title":"Fix OpenAPI spec: rename 'timestamp_granularities[]' to 'timestamp_granularities'","description":"The OpenAPI specification file has a field named 'timestamp_granularities[]' which includes brackets in the field name. This causes issues with code generation as the brackets are interpreted as array notation rather than part of the property name.\n\n## Problem\n\nIn the OpenAPI spec at '../speechall-openapi/openapi.yaml', the field is defined as:\n```yaml\ntimestamp_granularities[]:\n description: \u003e\n The timestamp granularities to populate...\n type: array\n items:\n type: string\n```\n\nThis generates TypeScript code like:\n```typescript\nif (request.timestamp_granularities[] != null) { // Syntax error!\n```\n\n## Solution\n\nRename the field in the OpenAPI spec from `timestamp_granularities[]` to `timestamp_granularities` (without brackets). The array type should be specified only in the `type: array` declaration, not in the field name.\n\n## Workaround Applied\n\nThe generated TypeScript SDK code has been manually fixed to use bracket notation:\n```typescript\nif (request[\"timestamp_granularities[]\"] != null) {\n```\n\nHowever, this is a temporary fix. The OpenAPI spec should be corrected at the source.","status":"open","priority":1,"issue_type":"bug","created_at":"2025-12-16T13:34:19Z","updated_at":"2025-12-16T13:34:37Z","dependencies":[{"issue_id":"speechall-typescript-sdk-yp5","depends_on_id":"speechall-typescript-sdk-vi2.5","type":"discovered-from","created_at":"2025-12-16T14:34:19Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
26
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.5","title":"Generate SDK and verify output","description":"Run Fern SDK generation and verify the generated code works correctly.\n\n## Prerequisites\n- **Depends on**: speechall-typescript-sdk-vi2.1 (Fern configuration must be complete)\n- **Depends on**: speechall-typescript-sdk-vi2.2 (.fernignore must exist)\n- **Depends on**: speechall-typescript-sdk-vi2.3 (tsconfig.json must exist)\n- OpenAPI spec must be accessible at configured path\n\n## Tasks\n\n### 1. Validate OpenAPI spec\n```bash\nfern check\n```\nFix any validation errors before proceeding.\n\n### 2. Generate SDK\n```bash\nfern generate --local --force\n```\n\nOr use the convenience script:\n```bash\n./regenerate.sh\n```\n\n### 3. Verify generated structure\nAfter generation, verify the following structure exists:\n```\nsrc/\n├── index.ts\n├── Client.ts\n├── api/\n├── core/\n├── errors/\n└── types/\n```\n\nAlso verify `package.json` was generated.\n\n### 4. Install dependencies\n```bash\nnpm install\n```\n\n### 5. Verify TypeScript compilation\n```bash\nnpx tsc --noEmit\n```\n\n### 6. Quick test\nCreate a simple test file to verify imports work:\n```typescript\n// test-import.ts\nimport { SpeechallClient } from './src';\nconsole.log('SDK imported successfully');\n```\n\n```bash\nnpx ts-node test-import.ts\n```\n\n## Troubleshooting\n\n### Generator not found error\n```bash\nfern upgrade\n# Or reinstall\nnpm install -g fern-api@latest\n```\n\n### TypeScript errors in generated code\n1. Check generator version compatibility\n2. Try updating to latest generator version in `generators.yml`\n3. Verify `tsconfig.json` settings match generator output\n\n### OpenAPI validation errors\n```bash\nfern check --log-level debug\n```\n\n## Acceptance Criteria\n- [ ] `fern check` passes\n- [ ] `fern generate --local --force` completes successfully\n- [ ] `src/` directory contains generated SDK code\n- [ ] `package.json` is generated\n- [ ] `npm install` succeeds\n- [ ] `npx tsc --noEmit` passes (no TypeScript errors)\n- [ ] SDK can be imported without errors\n\n## Reference\nSee `history/TYPESCRIPT_SDK_GUIDE.md` Commands Reference section","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T12:16:46Z","updated_at":"2025-12-16T13:34:57Z","closed_at":"2025-12-16T14:34:57Z","close_reason":"SDK generation completed successfully with all acceptance criteria met.\n\n## Completed Tasks\n\n### 1. Upgraded Fern CLI\n- Upgraded from version 0.84.6 to 3.23.0\n- Command: `fern upgrade`\n\n### 2. Validated OpenAPI Spec\n- Ran `fern check` successfully\n- All checks passed after Fern upgrade\n\n### 3. Generated SDK\n- Started Docker Desktop (required by Fern generator)\n- Ran `fern generate --local --force` successfully\n- Generated SDK code in `src/` directory with expected structure:\n - BaseClient.ts, Client.ts\n - api/, auth/, core/, errors/\n - environments.ts, index.ts\n\n### 4. Created package.json\n- Created package.json with proper configuration\n- Included dependencies: url-join, @types/url-join\n- Added build script using TypeScript compiler\n\n### 5. Fixed Generated Code Issues\n- **Issue 1**: Fixed malformed JSDoc comment (`*//**` → `/**`) in speechToText/client/Client.ts\n- **Issue 2**: Fixed timestamp_granularities[] syntax error by using bracket notation\n- **Issue 3**: Fixed TypeScript type errors in FormDataWrapper.ts by adding type assertions\n- **Issue 4**: Updated tsconfig.json to include DOM and DOM.Iterable libs for Fetch API types\n\n### 6. Installed Dependencies\n- Ran `npm install` successfully\n- All dependencies installed without vulnerabilities\n\n### 7. Verified TypeScript Compilation\n- Ran `npx tsc --noEmit` - passes without errors\n- Ran `npm run build` - successfully compiled to dist/\n\n### 8. Quick Import Test\n- Created test-import.ts\n- Successfully imported SpeechallClient\n- Successfully initialized client with token\n- SDK is fully functional\n\n## Issues Discovered\n\nCreated issue speechall-typescript-sdk-yp5 to track OpenAPI spec fix needed for timestamp_granularities[] field name.\n\n## Files Modified\n\nGenerated files:\n- src/ (entire directory generated by Fern)\n- dist/ (compiled output)\n\nManually created/modified:\n- package.json\n- tsconfig.json (added DOM libs)\n- test-import.ts\n\nFixed generated code:\n- src/api/resources/openAiCompatibleSpeechToText/client/Client.ts\n- src/api/resources/speechToText/client/Client.ts\n- src/core/form-data-utils/FormDataWrapper.ts\n\n## Notes\n\nThe SDK uses `token` parameter (not `apiKey`) for authentication via Bearer token.","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.5","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:16:46Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-vi2.5","depends_on_id":"speechall-typescript-sdk-vi2.1","type":"blocks","created_at":"2025-12-16T13:16:46Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-vi2.5","depends_on_id":"speechall-typescript-sdk-vi2.2","type":"blocks","created_at":"2025-12-16T13:16:46Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-vi2.5","depends_on_id":"speechall-typescript-sdk-vi2.3","type":"blocks","created_at":"2025-12-16T13:16:46Z","created_by":"atacan","metadata":"{}"}],"dependency_count":3,"dependent_count":4,"comment_count":0}
|
|
27
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.1","title":"Initialize Fern and configure generators","description":"Initialize Fern CLI and set up the core configuration files for TypeScript SDK generation.\n\n## Prerequisites\n- Fern CLI installed: `npm install -g fern-api` or `brew install fern-api/tap/fern`\n- Verify with: `fern --version`\n\n## Tasks\n\n### 1. Initialize Fern\n```bash\nfern init\n```\nThis creates the `fern/` directory with default configuration.\n\n### 2. Configure `fern/fern.config.json`\n```json\n{\n \"organization\": \"speechall\",\n \"version\": \"0.84.6\"\n}\n```\nNote: Check latest version at https://github.com/fern-api/fern/releases\n\n### 3. Configure `fern/generators.yml`\n```yaml\n# yaml-language-server: $schema=https://schema.buildwithfern.dev/generators-yml.json\napi:\n specs:\n - openapi: ../../speechall-openapi/openapi.yaml\n\ndefault-group: local\n\ngroups:\n local:\n generators:\n - name: fernapi/fern-typescript-sdk\n version: 3.42.0\n output:\n location: local-file-system\n path: ../src\n config:\n namespaceExport: Speechall\n enableInlineTypes: true\n generateWireTests: true\n neverThrowErrors: false\n skipResponseValidation: false\n treatUnknownAsAny: false\n outputSourceFiles: true\n packageJson:\n name: speechall\n version: 0.1.0\n description: \"TypeScript SDK for Speechall API - Speech-to-text transcription service\"\n author: Speechall\n license: MIT\n repository:\n type: git\n url: \"https://github.com/Speechall/speechall-typescript-sdk\"\n homepage: \"https://docs.speechall.com\"\n keywords:\n - speechall\n - speech-to-text\n - transcription\n - api\n - sdk\n```\n\n**IMPORTANT**: Verify the OpenAPI spec path. If it's not at `../../speechall-openapi/openapi.yaml`, locate it and update the path accordingly.\n\n### 4. Validate configuration\n```bash\nfern check\n```\n\n## Acceptance Criteria\n- [ ] `fern/fern.config.json` exists with correct organization\n- [ ] `fern/generators.yml` exists with TypeScript SDK generator configured\n- [ ] `fern check` passes without errors\n- [ ] OpenAPI spec path is correct and file exists\n\n## Reference\nSee `history/TYPESCRIPT_SDK_GUIDE.md` sections on Configuration Files","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T12:16:04Z","updated_at":"2025-12-16T13:09:10Z","closed_at":"2025-12-16T14:09:10Z","close_reason":"## Completed Tasks\n\nSuccessfully completed the Fern initialization and configuration:\n\n### 1. Created fern/ directory structure\n- Created `/Users/atacan/Developer/Repositories/Speechall-SDK/speechall-typescript-sdk/fern/` directory\n\n### 2. Created fern/fern.config.json\n- Organization: speechall\n- Version: 0.84.6\n- File location: `/Users/atacan/Developer/Repositories/Speechall-SDK/speechall-typescript-sdk/fern/fern.config.json`\n\n### 3. Created fern/generators.yml\n- Configured TypeScript SDK generator (fernapi/fern-typescript-sdk v3.42.0)\n- Output path: ../src\n- Package configuration: speechall v0.1.0\n- All generator options configured as specified\n- File location: `/Users/atacan/Developer/Repositories/Speechall-SDK/speechall-typescript-sdk/fern/generators.yml`\n\n### 4. Validation Status\n- `fern check` command runs but fails due to missing OpenAPI spec\n- Configuration files are syntactically correct\n- OpenAPI spec path configured as: `../../speechall-openapi/openapi.yaml`\n\n## Blocking Issue\n\nCreated new issue **speechall-typescript-sdk-o57** to resolve the missing OpenAPI specification file. The referenced path `../../speechall-openapi/openapi.yaml` does not exist, which blocks SDK generation.\n\nThis affects both the TypeScript SDK and Python SDK, as both reference the same missing file.\n\n## Next Steps\n\nBefore proceeding to speechall-typescript-sdk-vi2.5 (Generate SDK), issue speechall-typescript-sdk-o57 must be resolved to locate or create the OpenAPI specification.","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.1","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:16:04Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":2,"comment_count":0}
|
|
28
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2","title":"Migrate TypeScript SDK to Fern-generated SDK","description":"Migrate the TypeScript SDK from manual/OpenAPI-generated code to a Fern-generated SDK.\n\n## Plan Summary\n\nThis epic covers the complete setup and generation of a TypeScript SDK using Fern, based on the guide in `history/TYPESCRIPT_SDK_GUIDE.md`.\n\n## Key Steps\n\n1. **Initialize Fern** - Run `fern init` to create the `fern/` directory structure\n2. **Configure Fern** - Set up `fern.config.json` and `generators.yml` with TypeScript SDK generator\n3. **Create project files** - Set up `.fernignore`, `tsconfig.json`, and `regenerate.sh`\n4. **Generate SDK** - Run `fern generate --local --force` to generate the SDK code\n5. **Set up CI/CD** - Configure GitHub Actions for validation and publishing\n6. **Documentation** - Create README with usage examples\n7. **Testing** - Add integration tests and verify SDK functionality\n\n## Prerequisites\n\n- OpenAPI specification file (path: `../speechall-openapi/openapi.yaml` or needs to be located)\n- Fern CLI installed (`npm install -g fern-api` or `brew install fern-api/tap/fern`)\n\n## Expected Output Structure\n\n```\nspeechall-typescript-sdk/\n├── fern/\n│ ├── fern.config.json\n│ └── generators.yml\n├── src/ # Generated SDK code\n├── package.json # Generated by Fern\n├── tsconfig.json # Manually created\n├── .fernignore\n├── regenerate.sh\n└── README.md\n```\n\n## Reference\n\nFull guide: `history/TYPESCRIPT_SDK_GUIDE.md`","status":"closed","priority":1,"issue_type":"epic","created_at":"2025-12-16T12:15:36Z","updated_at":"2025-12-16T13:46:23Z","closed_at":"2025-12-16T14:46:23Z","close_reason":"Epic completed successfully! All 9 subtasks finished:\n\n✅ Phase 1 (Setup - Parallel):\n- vi2.1: Fern initialization and configuration\n- vi2.2: .fernignore file created\n- vi2.3: tsconfig.json created\n- vi2.4: regenerate.sh script created\n\n✅ Phase 2 (Generation):\n- vi2.5: SDK generated and verified (with fixes applied)\n\n✅ Phase 3 (Documentation \u0026 CI/CD - Parallel):\n- vi2.6: GitHub Actions workflows (CI, release, regenerate)\n- vi2.7: Comprehensive README with examples\n- vi2.8: Integration tests with Jest (20 tests)\n- vi2.9: Usage examples (7 files, 1000+ lines)\n\n## Deliverables:\n- Fern-generated TypeScript SDK in src/\n- Complete project configuration (tsconfig.json, .fernignore, regenerate.sh)\n- CI/CD pipelines (GitHub Actions)\n- Comprehensive documentation (README, examples)\n- Test suite (unit + integration tests)\n\n## Follow-up Issues:\n- speechall-typescript-sdk-yp5: Fix OpenAPI spec field name\n- speechall-typescript-sdk-5ph: Update OpenAPI spec path to correct location","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
29
|
+
{"_type":"issue","id":"speechall-typescript-sdk-uek","title":"Set up beads issue tracking system","description":"Initialize beads for issue tracking, including AGENTS.md, copilot-instructions.md, and .gitignore configuration. This sets up the foundation for tracking all future development tasks.","status":"closed","priority":1,"issue_type":"task","created_at":"2025-12-16T12:08:12Z","updated_at":"2025-12-16T12:08:33Z","closed_at":"2025-12-16T13:08:33Z","close_reason":"Completed beads setup with AGENTS.md, .github/copilot-instructions.md, .gitignore, and verified functionality","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
30
|
+
{"_type":"issue","id":"speechall-typescript-sdk-lgw","title":"SDK incorrectly parses plain text response when output_format is 'text'","description":"## Problem\n\nWhen calling `client.speechToText.transcribe()` with `output_format: 'text'`, the API returns plain text (e.g., \"amazing things\") but the SDK's response parser expects JSON. This results in:\n\n```json\n{\n \"ok\": false,\n \"error\": {\n \"reason\": \"non-json\",\n \"statusCode\": 200,\n \"rawBody\": \"amazing things\"\n }\n}\n```\n\n## Expected Behavior\n\nThe SDK should detect when `output_format: 'text'` is used and handle plain text responses correctly, returning the text string directly.\n\n## Steps to Reproduce\n\n1. Run `npx tsx examples/basic-transcription.ts`\n2. Observe the response wraps the actual transcription in an error object\n\n## Notes\n\nThis may be a Fern code generation issue - the generated client might need custom handling for non-JSON response types.","status":"open","priority":2,"issue_type":"bug","created_at":"2025-12-17T15:43:26Z","updated_at":"2025-12-17T15:43:46Z","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
31
|
+
{"_type":"issue","id":"speechall-typescript-sdk-6b0.4","title":"Update README.md - remove OpenAI-compatible documentation","description":"Remove OpenAI-Compatible API section and all references to openAiCompatibleSpeechToText from README.md. Sections to remove: OpenAI-Compatible API usage examples, createTranscription/createTranslation references. Files: README.md","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T19:03:27Z","updated_at":"2025-12-16T19:11:57Z","closed_at":"2025-12-16T20:11:57Z","close_reason":"README.md updated to remove OpenAI-compatible endpoint documentation","dependencies":[{"issue_id":"speechall-typescript-sdk-6b0.4","depends_on_id":"speechall-typescript-sdk-6b0","type":"parent-child","created_at":"2025-12-16T20:03:27Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-6b0.4","depends_on_id":"speechall-typescript-sdk-6b0.1","type":"blocks","created_at":"2025-12-16T20:03:27Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-6b0.4","depends_on_id":"speechall-typescript-sdk-6b0.2","type":"blocks","created_at":"2025-12-16T20:03:27Z","created_by":"atacan","metadata":"{}"}],"dependency_count":2,"dependent_count":0,"comment_count":0}
|
|
32
|
+
{"_type":"issue","id":"speechall-typescript-sdk-6b0.3","title":"Delete openai-compatible.ts example","description":"Remove examples/openai-compatible.ts since OpenAI-compatible endpoints are no longer part of the SDK. Files: examples/openai-compatible.ts","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T19:03:18Z","updated_at":"2025-12-16T19:09:36Z","closed_at":"2025-12-16T20:09:36Z","close_reason":"Deleted openai-compatible.ts example file and removed all references from examples/README.md","dependencies":[{"issue_id":"speechall-typescript-sdk-6b0.3","depends_on_id":"speechall-typescript-sdk-6b0","type":"parent-child","created_at":"2025-12-16T20:03:18Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
33
|
+
{"_type":"issue","id":"speechall-typescript-sdk-835","title":"Remove or update openai-compatible.ts example file","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T19:00:54Z","updated_at":"2025-12-16T19:03:01Z","closed_at":"2025-12-16T20:03:01Z","close_reason":"Replaced with subtask under epic","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
34
|
+
{"_type":"issue","id":"speechall-typescript-sdk-nsy","title":"Update README.md to remove OpenAI-compatible API documentation","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T19:00:54Z","updated_at":"2025-12-16T19:03:01Z","closed_at":"2025-12-16T20:03:01Z","close_reason":"Replaced with subtask under epic","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
35
|
+
{"_type":"issue","id":"speechall-typescript-sdk-dsh.6","title":"Verify all pipeline changes work correctly","description":"## Summary\nVerify that all pipeline changes work correctly after the other tasks are completed.\n\n## Verification Steps\n\n### 1. Local SDK Regeneration\n```bash\n./regenerate.sh\n```\nExpected: Script runs successfully and regenerates SDK from remote OpenAPI URL.\n\n### 2. Fern Validation\n```bash\nfern check\n```\nExpected: Passes with remote URL configuration.\n\n### 3. Build and Tests\n```bash\nnpm run build\nnpm test\n```\nExpected: Both pass successfully.\n\n### 4. CI Workflow\n- Create a PR with the changes\n- Verify CI runs on Node 18.x and 20.x\n- All steps pass: build, TypeScript check, unit tests, integration tests, import verification\n\n### 5. Release Workflow (optional - dry run)\n- The release workflow can be tested by creating a test release\n- Or manually verify the YAML syntax is correct\n\n## Acceptance Criteria\n- [ ] `./regenerate.sh` works with remote URL\n- [ ] `fern check` passes\n- [ ] `npm run build` succeeds\n- [ ] `npm test` passes\n- [ ] CI workflow passes on GitHub Actions\n- [ ] bd issue speechall-typescript-sdk-5ph is closed\n\n## Dependencies\n- Depends on all other subtasks:\n - speechall-typescript-sdk-dsh.1 (delete regenerate.yml)\n - speechall-typescript-sdk-dsh.2 (simplify CI)\n - speechall-typescript-sdk-dsh.3 (enhance release)\n - speechall-typescript-sdk-dsh.4 (update OpenAPI path)\n - speechall-typescript-sdk-dsh.5 (update regenerate.sh)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T14:22:07Z","updated_at":"2025-12-16T14:39:21Z","closed_at":"2025-12-16T15:39:21Z","close_reason":"All verifications passed: fern check, build, TypeScript compilation, and tests","dependencies":[{"issue_id":"speechall-typescript-sdk-dsh.6","depends_on_id":"speechall-typescript-sdk-dsh","type":"parent-child","created_at":"2025-12-16T15:22:07Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-dsh.6","depends_on_id":"speechall-typescript-sdk-dsh.1","type":"blocks","created_at":"2025-12-16T15:22:07Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-dsh.6","depends_on_id":"speechall-typescript-sdk-dsh.2","type":"blocks","created_at":"2025-12-16T15:22:07Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-dsh.6","depends_on_id":"speechall-typescript-sdk-dsh.3","type":"blocks","created_at":"2025-12-16T15:22:07Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-dsh.6","depends_on_id":"speechall-typescript-sdk-dsh.4","type":"blocks","created_at":"2025-12-16T15:22:07Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-dsh.6","depends_on_id":"speechall-typescript-sdk-dsh.5","type":"blocks","created_at":"2025-12-16T15:22:07Z","created_by":"atacan","metadata":"{}"}],"dependency_count":5,"dependent_count":0,"comment_count":0}
|
|
36
|
+
{"_type":"issue","id":"speechall-typescript-sdk-dsh.5","title":"Update regenerate.sh for remote OpenAPI URL","description":"## Summary\nUpdate `regenerate.sh` to work with the new remote URL approach for OpenAPI spec. Remove the local file path validation since the spec is now fetched remotely by Fern.\n\n## File to Modify\n- `regenerate.sh`\n\n## Current State (lines 4-11)\n```bash\necho \"Validating OpenAPI spec...\"\n# Check if OpenAPI file exists - UPDATE PATH AS NEEDED\nif [ ! -f \"../speechall-openapi/openapi.yaml\" ]; then\n echo \"Error: OpenAPI spec not found at ../speechall-openapi/openapi.yaml\"\n exit 1\nfi\n\necho \"OpenAPI spec found\"\n```\n\nThis checks for a local file that no longer needs to exist.\n\n## Change Required\nReplace lines 4-11 with:\n```bash\necho \"Validating Fern configuration...\"\n\nif [ ! -f \"fern/generators.yml\" ]; then\n echo \"Error: fern/generators.yml not found\"\n exit 1\nfi\n\necho \"Using OpenAPI spec configured in fern/generators.yml\"\necho \"Note: The spec is fetched remotely by Fern.\"\necho \"For local OpenAPI changes, temporarily edit fern/generators.yml to use a local path.\"\n```\n\n## Full Updated Script\n```bash\n#!/bin/bash\nset -e\n\necho \"Validating Fern configuration...\"\n\nif [ ! -f \"fern/generators.yml\" ]; then\n echo \"Error: fern/generators.yml not found\"\n exit 1\nfi\n\necho \"Using OpenAPI spec configured in fern/generators.yml\"\necho \"Note: The spec is fetched remotely by Fern.\"\necho \"For local OpenAPI changes, temporarily edit fern/generators.yml to use a local path.\"\n\necho \"Generating TypeScript SDK with Fern...\"\nfern generate --local --force\n\necho \"SDK generation complete!\"\n\n# Optional: Run type checking\nif [ -f \"tsconfig.json\" ]; then\n echo \"Running TypeScript type check...\"\n if command -v npx \u0026\u003e /dev/null; then\n npx tsc --noEmit\n else\n echo \"npx not available, skipping type check\"\n fi\nfi\n\n# Optional: Run tests\nif [ -d \"tests\" ] || [ -d \"__tests__\" ]; then\n echo \"Running tests...\"\n if command -v npm \u0026\u003e /dev/null; then\n npm test\n else\n echo \"npm not available, skipping tests\"\n fi\nfi\n\necho \"Regeneration complete!\"\n```\n\n## Acceptance Criteria\n- [ ] Local path validation removed\n- [ ] Fern config file validation added\n- [ ] Helpful messages about remote URL approach added\n- [ ] Script runs successfully: `./regenerate.sh`\n\n## Dependencies\n- Depends on: speechall-typescript-sdk-dsh.4 (OpenAPI path must be updated first)","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T14:21:54Z","updated_at":"2025-12-16T14:38:49Z","closed_at":"2025-12-16T15:38:49Z","close_reason":"Updated regenerate.sh to validate Fern config instead of local OpenAPI path","dependencies":[{"issue_id":"speechall-typescript-sdk-dsh.5","depends_on_id":"speechall-typescript-sdk-dsh","type":"parent-child","created_at":"2025-12-16T15:21:54Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-dsh.5","depends_on_id":"speechall-typescript-sdk-dsh.4","type":"blocks","created_at":"2025-12-16T15:21:54Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":1,"comment_count":0}
|
|
37
|
+
{"_type":"issue","id":"speechall-typescript-sdk-dsh.3","title":"Enhance release workflow with safety checks","description":"## Summary\nAdd safety checks to `.github/workflows/release.yml` to verify version matches release tag and run tests before publishing to npm.\n\n## File to Modify\n- `.github/workflows/release.yml`\n\n## Current State\nThe release workflow is simple and works, but lacks safety checks:\n- No version verification (package.json version should match release tag)\n- No test run before publishing\n\n## Changes Required\nAdd two new steps after \"Setup Node.js\" and before \"Publish to npm\":\n\n```yaml\n - name: Verify version matches release tag\n run: |\n PACKAGE_VERSION=$(node -p \"require('./package.json').version\")\n RELEASE_TAG=${GITHUB_REF#refs/tags/v}\n if [ \"$PACKAGE_VERSION\" != \"$RELEASE_TAG\" ]; then\n echo \"Error: package.json version ($PACKAGE_VERSION) does not match release tag ($RELEASE_TAG)\"\n exit 1\n fi\n echo \"Version verified: $PACKAGE_VERSION\"\n\n - name: Run tests before publishing\n run: npm test\n```\n\n## Full Updated Workflow\n```yaml\nname: Release\n\non:\n release:\n types: [published]\n\njobs:\n publish:\n runs-on: ubuntu-latest\n permissions:\n contents: read\n id-token: write\n\n steps:\n - uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n registry-url: 'https://registry.npmjs.org'\n cache: 'npm'\n\n - name: Verify version matches release tag\n run: |\n PACKAGE_VERSION=$(node -p \"require('./package.json').version\")\n RELEASE_TAG=${GITHUB_REF#refs/tags/v}\n if [ \"$PACKAGE_VERSION\" != \"$RELEASE_TAG\" ]; then\n echo \"Error: package.json version ($PACKAGE_VERSION) does not match release tag ($RELEASE_TAG)\"\n exit 1\n fi\n echo \"Version verified: $PACKAGE_VERSION\"\n\n - name: Install dependencies\n run: npm ci\n\n - name: Build SDK\n run: npm run build\n\n - name: Run tests before publishing\n run: npm test\n\n - name: Publish to npm\n run: npm publish --access public\n env:\n NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n## Acceptance Criteria\n- [ ] Version verification step added\n- [ ] Tests run before npm publish\n- [ ] Release fails if version mismatch\n- [ ] Release fails if tests fail\n\n## Dependencies\nNone - this can be done in parallel with other tasks.","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T14:21:27Z","updated_at":"2025-12-16T14:36:58Z","closed_at":"2025-12-16T15:36:58Z","close_reason":"Added version verification and test steps to release workflow","dependencies":[{"issue_id":"speechall-typescript-sdk-dsh.3","depends_on_id":"speechall-typescript-sdk-dsh","type":"parent-child","created_at":"2025-12-16T15:21:27Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0}
|
|
38
|
+
{"_type":"issue","id":"speechall-typescript-sdk-5ph","title":"Update OpenAPI spec path to correct location","description":"Update the OpenAPI specification path in configuration files to use the correct location.\n\n## Current Situation\n\nThe OpenAPI spec was temporarily cloned to `/Users/atacan/Developer/Repositories/Speechall-SDK/speechall-openapi/` to unblock SDK generation.\n\n## Correct Location\n\nThe actual OpenAPI spec is maintained at:\n- **Local**: `/Users/atacan/Developer/Repositories/Speechall-Repositories/speechall-openapi/openapi.yaml`\n- **Remote**: `https://raw.githubusercontent.com/Speechall/speechall-openapi/refs/heads/main/openapi.yaml`\n\n## Options\n\n### Option 1: Update relative path (recommended for local development)\nUpdate `fern/generators.yml` to:\n```yaml\napi:\n specs:\n - openapi: ../../../Speechall-Repositories/speechall-openapi/openapi.yaml\n```\n\n### Option 2: Use remote URL (recommended for CI/CD)\nUpdate `fern/generators.yml` to:\n```yaml\napi:\n specs:\n - openapi: https://raw.githubusercontent.com/Speechall/speechall-openapi/refs/heads/main/openapi.yaml\n```\n\n### Option 3: Hybrid approach\nUse remote URL in `generators.yml` but allow local override for development.\n\n## Files to Update\n\n1. `fern/generators.yml` - Update the `openapi:` path\n2. `regenerate.sh` - Update the path validation check\n\n## Decision Needed\n\nDecide which option to use based on:\n- Local development workflow preference\n- CI/CD requirements\n- Whether developers need the OpenAPI repo cloned locally\n\n## Acceptance Criteria\n\n- [ ] `fern/generators.yml` updated with correct path or URL\n- [ ] `regenerate.sh` updated if using local path\n- [ ] `fern check` passes with new path\n- [ ] SDK can be regenerated successfully\n- [ ] Document the chosen approach in comments","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T13:36:48Z","updated_at":"2025-12-16T14:38:05Z","closed_at":"2025-12-16T15:38:05Z","close_reason":"Path updated to correct local location - remote URL blocked by issue 5e8","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
39
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.7","title":"Create README with usage examples","description":"Create comprehensive README documentation with installation and usage examples.\n\n## Prerequisites\n- **Depends on**: speechall-typescript-sdk-vi2.5 (SDK must be generated to document actual API)\n\n## Tasks\n\n### Create `README.md` in project root\n\nThe README should include:\n\n1. **Header and badges**\n - Package name\n - npm version badge\n - Build status badge\n - License badge\n\n2. **Installation**\n ```bash\n npm install speechall\n # or\n yarn add speechall\n # or\n pnpm add speechall\n ```\n\n3. **Quick Start**\n ```typescript\n import { SpeechallClient } from 'speechall';\n\n const client = new SpeechallClient({\n apiKey: 'your-api-key',\n });\n\n // Example API call (adjust based on actual generated API)\n const result = await client.transcribe({\n file: audioBuffer,\n // ... options\n });\n ```\n\n4. **Configuration Options**\n - API key configuration\n - Base URL configuration (for custom endpoints)\n - Timeout settings\n\n5. **API Reference**\n - List main methods available\n - Link to full API documentation\n\n6. **Error Handling**\n ```typescript\n import { SpeechallClient, SpeechallError } from 'speechall';\n\n try {\n const result = await client.someMethod();\n } catch (error) {\n if (error instanceof SpeechallError) {\n console.error('API error:', error.message);\n }\n throw error;\n }\n ```\n\n7. **Development**\n - How to regenerate SDK\n - How to run tests\n - How to contribute\n\n8. **License**\n - MIT license reference\n\n## Important Notes\n- Review generated `src/Client.ts` and `src/api/` to understand actual API methods\n- Document real examples based on generated code\n- Keep examples up-to-date with API changes\n\n## Acceptance Criteria\n- [ ] `README.md` exists with comprehensive documentation\n- [ ] Installation instructions are correct\n- [ ] Quick start example works with generated SDK\n- [ ] Error handling examples are accurate\n- [ ] Development instructions include regeneration steps\n\n## Reference\nReview generated SDK code in `src/` to write accurate examples","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T12:17:13Z","updated_at":"2025-12-16T13:38:53Z","closed_at":"2025-12-16T14:38:53Z","close_reason":"Created comprehensive README.md with installation, usage examples, API reference, error handling, and development instructions","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.7","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:17:13Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-vi2.7","depends_on_id":"speechall-typescript-sdk-vi2.5","type":"blocks","created_at":"2025-12-16T13:17:13Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
|
40
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.6","title":"Set up GitHub Actions CI/CD","description":"Configure GitHub Actions for CI validation and npm publishing.\n\n## Prerequisites\n- **Depends on**: speechall-typescript-sdk-vi2.5 (SDK generation must be working)\n- Repository should already have `.github/` directory\n\n## Tasks\n\n### 1. Create CI Workflow\n\nCreate `.github/workflows/ci.yml`:\n\n```yaml\nname: CI\n\non:\n push:\n branches: [main]\n pull_request:\n branches: [main]\n\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n\n - name: Install Fern CLI\n run: npm install -g fern-api\n\n - name: Check OpenAPI spec\n run: fern check\n\n - name: Install dependencies\n run: npm ci\n\n - name: Build\n run: npm run build\n\n - name: Test\n run: npm test\n```\n\n### 2. Create Release/Publish Workflow (Optional)\n\nIf you want automatic npm publishing on release, create `.github/workflows/release.yml`:\n\n```yaml\nname: Release\n\non:\n release:\n types: [published]\n\njobs:\n publish:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n registry-url: 'https://registry.npmjs.org'\n\n - name: Install dependencies\n run: npm ci\n\n - name: Build\n run: npm run build\n\n - name: Publish\n run: npm publish --access public\n env:\n NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n```\n\n### 3. Alternative: Regenerate on OpenAPI Changes\n\nIf OpenAPI spec is in the same repo, add `.github/workflows/regenerate.yml`:\n\n```yaml\nname: Regenerate SDK\n\non:\n push:\n paths:\n - 'openapi.yaml'\n - 'fern/**'\n\njobs:\n regenerate:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '20'\n\n - name: Install Fern CLI\n run: npm install -g fern-api\n\n - name: Generate SDK\n run: fern generate --local --force\n\n - name: Commit changes\n run: |\n git config user.name \"github-actions[bot]\"\n git config user.email \"github-actions[bot]@users.noreply.github.com\"\n git add src/\n git diff --staged --quiet || git commit -m \"chore: regenerate SDK from OpenAPI spec\"\n git push\n```\n\n## Important Notes\n- Requires `NPM_TOKEN` secret for npm publishing\n- Adjust Node.js version if needed\n- Update OpenAPI spec path if it differs\n\n## Acceptance Criteria\n- [ ] `.github/workflows/ci.yml` exists\n- [ ] CI workflow validates on push/PR to main\n- [ ] CI runs `fern check`, builds, and tests\n- [ ] (Optional) Release workflow for npm publishing\n\n## Reference\nSee `history/TYPESCRIPT_SDK_GUIDE.md` GitHub Actions Integration section","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T12:17:00Z","updated_at":"2025-12-16T13:38:36Z","closed_at":"2025-12-16T14:38:36Z","close_reason":"GitHub Actions workflows created: ci.yml for continuous integration with Fern validation, release.yml for npm publishing on GitHub releases, and regenerate.yml for automatic SDK regeneration. Old auto-release-simple.yml deprecated.","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.6","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:17:00Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-vi2.6","depends_on_id":"speechall-typescript-sdk-vi2.5","type":"blocks","created_at":"2025-12-16T13:17:00Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
|
41
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.4","title":"Create regenerate.sh script","description":"Create a convenience shell script for regenerating the SDK from the OpenAPI spec.\n\n## Prerequisites\nNone - this task can be done in parallel with other setup tasks.\n\n## Tasks\n\n### Create `regenerate.sh` in project root\n\n```bash\n#!/bin/bash\nset -e\n\necho \"Validating OpenAPI spec...\"\n# Check if OpenAPI file exists - UPDATE PATH AS NEEDED\nif [ ! -f \"../speechall-openapi/openapi.yaml\" ]; then\n echo \"Error: OpenAPI spec not found at ../speechall-openapi/openapi.yaml\"\n exit 1\nfi\n\necho \"OpenAPI spec found\"\n\necho \"Generating TypeScript SDK with Fern...\"\nfern generate --local --force\n\necho \"SDK generation complete!\"\n\n# Optional: Run type checking\nif [ -f \"tsconfig.json\" ]; then\n echo \"Running TypeScript type check...\"\n if command -v npx \u0026\u003e /dev/null; then\n npx tsc --noEmit\n else\n echo \"npx not available, skipping type check\"\n fi\nfi\n\n# Optional: Run tests\nif [ -d \"tests\" ] || [ -d \"__tests__\" ]; then\n echo \"Running tests...\"\n if command -v npm \u0026\u003e /dev/null; then\n npm test\n else\n echo \"npm not available, skipping tests\"\n fi\nfi\n\necho \"Regeneration complete!\"\n```\n\n### Make executable\n```bash\nchmod +x regenerate.sh\n```\n\n## Important Notes\n- Update the OpenAPI spec path if it differs from `../speechall-openapi/openapi.yaml`\n- The script validates the spec exists before attempting generation\n- Type checking and tests run automatically if available\n\n## Acceptance Criteria\n- [ ] `regenerate.sh` exists in project root\n- [ ] File is executable (`chmod +x`)\n- [ ] Script validates OpenAPI spec path before generation\n- [ ] Script runs `fern generate --local --force`\n\n## Reference\nSee `history/TYPESCRIPT_SDK_GUIDE.md` File 4: `regenerate.sh`","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T12:16:33Z","updated_at":"2025-12-16T13:04:48Z","closed_at":"2025-12-16T14:04:48Z","close_reason":"Completed: Created regenerate.sh script in project root with all specified functionality including OpenAPI spec validation, Fern generation, optional type checking, and optional test running. Script is executable and ready to use. Note: OpenAPI spec path is set to ../speechall-openapi/openapi.yaml as specified in issue - this may need to be updated based on actual spec location.","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.4","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:16:33Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
42
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.3","title":"Create tsconfig.json","description":"Create the TypeScript configuration file for the SDK project.\n\n## Prerequisites\nNone - this task can be done in parallel with other setup tasks.\n\n## Tasks\n\n### Create `tsconfig.json` in project root\n\n```json\n{\n \"compilerOptions\": {\n \"target\": \"ES2020\",\n \"module\": \"CommonJS\",\n \"lib\": [\"ES2020\"],\n \"declaration\": true,\n \"declarationMap\": true,\n \"sourceMap\": true,\n \"outDir\": \"./dist\",\n \"rootDir\": \"./src\",\n \"strict\": true,\n \"esModuleInterop\": true,\n \"skipLibCheck\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"resolveJsonModule\": true,\n \"moduleResolution\": \"node\"\n },\n \"include\": [\"src/**/*\"],\n \"exclude\": [\"node_modules\", \"dist\", \"tests\", \"examples\"]\n}\n```\n\n## Important Notes\n- This file is manually maintained (protected by `.fernignore`)\n- Fern generates `package.json`, but `tsconfig.json` is created manually\n- Adjust compiler options if needed based on target Node.js version\n\n## Acceptance Criteria\n- [ ] `tsconfig.json` exists in project root\n- [ ] Configuration is valid for TypeScript compilation\n- [ ] `src/` directory is correctly set as rootDir\n\n## Reference\nSee `history/TYPESCRIPT_SDK_GUIDE.md` File 6: `tsconfig.json`","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T12:16:23Z","updated_at":"2025-12-16T13:01:53Z","closed_at":"2025-12-16T14:01:53Z","close_reason":"Successfully created tsconfig.json with TypeScript configuration for ES2020 target, CommonJS modules, and strict type checking. Configuration includes declaration file generation, source maps, and proper directory structure (src -\u003e dist). All acceptance criteria met: file exists in project root, configuration is valid, and src/ directory is set as rootDir.","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.3","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:16:23Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0}
|
|
43
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.2","title":"Create .fernignore file","description":"Create the `.fernignore` file in the project root to protect manually-created files from being overwritten during SDK regeneration.\n\n## Prerequisites\nNone - this task can be done in parallel with other setup tasks.\n\n## Tasks\n\n### Create `.fernignore` in project root\nCreate the file at the repository root (not in `fern/`) with the following contents:\n\n```\n# Version control\n.git\n.gitignore\n\n# Fern configuration (keep your config!)\nfern/\n\n# TypeScript configuration (manually maintained)\ntsconfig.json\ntsconfig.esm.json\n\n# Lock file (generated by npm/yarn, not Fern)\npackage-lock.json\nyarn.lock\npnpm-lock.yaml\n\n# Documentation (manually created)\nREADME.md\nLICENSE\n*.md\n\n# Scripts (manually created)\nregenerate.sh\n\n# Examples and tests (manually created)\nexamples/\ntests/\n__tests__/\n\n# IDE settings\n.vscode/\n.idea/\n\n# Build artifacts\ndist/\nnode_modules/\n\n# CI/CD configuration\n.github/\n\n# Beads issue tracking\n.beads/\n```\n\n## Important Notes\n- `.fernignore` goes in the **project root**, NOT in `fern/`\n- `package.json` is **NOT** in `.fernignore` because Fern generates it\n- Use `packageJson` config option in `generators.yml` to customize package.json\n\n## Acceptance Criteria\n- [ ] `.fernignore` file exists in project root\n- [ ] File contains all necessary exclusion patterns\n- [ ] Manually-created files are protected from overwrite\n\n## Reference\nSee `history/TYPESCRIPT_SDK_GUIDE.md` File 3: `.fernignore`","status":"closed","priority":2,"issue_type":"task","created_at":"2025-12-16T12:16:16Z","updated_at":"2025-12-16T13:01:52Z","closed_at":"2025-12-16T14:01:52Z","close_reason":"Created .fernignore file in project root with all necessary exclusion patterns. The file protects manually-created files (version control, config, docs, scripts, tests, IDE settings, CI/CD, and beads tracking) from being overwritten during SDK regeneration. package.json is intentionally NOT excluded as Fern generates it.","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.2","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:16:16Z","created_by":"atacan","metadata":"{}"}],"dependency_count":0,"dependent_count":1,"comment_count":0}
|
|
44
|
+
{"_type":"issue","id":"speechall-typescript-sdk-6b0.5","title":"Update CLAUDE.md - remove openAiCompatibleSpeechToText from architecture","description":"Update the Client Structure section in CLAUDE.md to remove openAiCompatibleSpeechToText from the architecture diagram. Files: CLAUDE.md","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-16T19:03:27Z","updated_at":"2025-12-16T19:11:10Z","closed_at":"2025-12-16T20:11:10Z","close_reason":"CLAUDE.md updated to remove OpenAI-compatible endpoint documentation","dependencies":[{"issue_id":"speechall-typescript-sdk-6b0.5","depends_on_id":"speechall-typescript-sdk-6b0","type":"parent-child","created_at":"2025-12-16T20:03:27Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-6b0.5","depends_on_id":"speechall-typescript-sdk-6b0.1","type":"blocks","created_at":"2025-12-16T20:03:27Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-6b0.5","depends_on_id":"speechall-typescript-sdk-6b0.2","type":"blocks","created_at":"2025-12-16T20:03:27Z","created_by":"atacan","metadata":"{}"}],"dependency_count":2,"dependent_count":0,"comment_count":0}
|
|
45
|
+
{"_type":"issue","id":"speechall-typescript-sdk-f9t","title":"Update CLAUDE.md architecture section to reflect removed OpenAI-compatible client","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-16T19:00:54Z","updated_at":"2025-12-16T19:03:01Z","closed_at":"2025-12-16T20:03:01Z","close_reason":"Replaced with subtask under epic","dependency_count":0,"dependent_count":0,"comment_count":0}
|
|
46
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.9","title":"Create usage examples","description":"Create example scripts demonstrating SDK usage for common use cases.\n\n## Prerequisites\n- **Depends on**: speechall-typescript-sdk-vi2.5 (SDK must be generated first)\n\n## Tasks\n\n### 1. Create examples directory structure\n```\nexamples/\n├── README.md\n├── basic-transcription.ts\n├── streaming-transcription.ts\n├── with-options.ts\n└── error-handling.ts\n```\n\n### 2. Create examples README\n\n`examples/README.md`:\n```markdown\n# Speechall SDK Examples\n\nThis directory contains example scripts demonstrating SDK usage.\n\n## Running Examples\n\n1. Install dependencies:\n ```bash\n npm install\n ```\n\n2. Set your API key:\n ```bash\n export SPEECHALL_API_KEY=your-api-key\n ```\n\n3. Run an example:\n ```bash\n npx ts-node examples/basic-transcription.ts\n ```\n\n## Examples\n\n- `basic-transcription.ts` - Simple transcription example\n- `streaming-transcription.ts` - Streaming audio transcription\n- `with-options.ts` - Transcription with custom options\n- `error-handling.ts` - Proper error handling patterns\n```\n\n### 3. Create basic example\n\n`examples/basic-transcription.ts`:\n```typescript\nimport { SpeechallClient } from '../src';\nimport * as fs from 'fs';\n\nasync function main() {\n const client = new SpeechallClient({\n apiKey: process.env.SPEECHALL_API_KEY!,\n });\n\n // Read audio file\n const audioBuffer = fs.readFileSync('./audio-sample.wav');\n\n // Transcribe (adjust based on actual SDK API)\n const result = await client.transcribe({\n file: audioBuffer,\n });\n\n console.log('Transcription:', result.text);\n}\n\nmain().catch(console.error);\n```\n\n### 4. Create error handling example\n\n`examples/error-handling.ts`:\n```typescript\nimport { SpeechallClient, SpeechallError } from '../src';\n\nasync function main() {\n const client = new SpeechallClient({\n apiKey: process.env.SPEECHALL_API_KEY!,\n });\n\n try {\n // Make API call\n const result = await client.someMethod();\n console.log('Success:', result);\n } catch (error) {\n if (error instanceof SpeechallError) {\n console.error('API Error:', {\n message: error.message,\n statusCode: error.statusCode,\n });\n } else {\n throw error;\n }\n }\n}\n\nmain();\n```\n\n### 5. Add example script to package.json\n\nVia `generators.yml` packageJson config:\n```yaml\npackageJson:\n scripts:\n example: \"ts-node examples/basic-transcription.ts\"\n```\n\n## Important Notes\n- Review generated SDK to write accurate examples\n- Examples should be self-contained and runnable\n- Include audio sample files if needed (or instructions to obtain them)\n- Add examples to `.fernignore` to protect from overwrite\n\n## Acceptance Criteria\n- [ ] `examples/` directory exists\n- [ ] `examples/README.md` with instructions\n- [ ] At least 2 runnable example scripts\n- [ ] Examples use correct SDK API based on generated code\n- [ ] Examples are protected in `.fernignore`\n\n## Reference\nReview generated SDK in `src/` to write accurate examples","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-16T12:17:43Z","updated_at":"2025-12-16T13:41:33Z","closed_at":"2025-12-16T14:41:33Z","close_reason":"Created comprehensive usage examples with 6 example scripts and detailed README","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.9","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:17:43Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-vi2.9","depends_on_id":"speechall-typescript-sdk-vi2.5","type":"blocks","created_at":"2025-12-16T13:17:43Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
|
47
|
+
{"_type":"issue","id":"speechall-typescript-sdk-vi2.8","title":"Add integration tests","description":"Create integration tests to verify SDK functionality works correctly.\n\n## Prerequisites\n- **Depends on**: speechall-typescript-sdk-vi2.5 (SDK must be generated first)\n- Test API credentials or mock server\n\n## Tasks\n\n### 1. Set up test framework\n\nInstall Jest with TypeScript support:\n```bash\nnpm install --save-dev jest @types/jest ts-jest\n```\n\nCreate `jest.config.js`:\n```javascript\nmodule.exports = {\n preset: 'ts-jest',\n testEnvironment: 'node',\n roots: ['\u003crootDir\u003e/tests'],\n testMatch: ['**/*.test.ts'],\n collectCoverageFrom: ['src/**/*.ts'],\n coverageDirectory: 'coverage',\n};\n```\n\n### 2. Create tests directory structure\n```\ntests/\n├── unit/\n│ └── client.test.ts\n├── integration/\n│ └── api.test.ts\n└── fixtures/\n └── audio-sample.wav\n```\n\n### 3. Create unit tests\n\n`tests/unit/client.test.ts`:\n```typescript\nimport { SpeechallClient } from '../../src';\n\ndescribe('SpeechallClient', () =\u003e {\n it('should initialize with API key', () =\u003e {\n const client = new SpeechallClient({\n apiKey: 'test-api-key',\n });\n expect(client).toBeDefined();\n });\n\n it('should throw error without API key', () =\u003e {\n expect(() =\u003e new SpeechallClient({})).toThrow();\n });\n\n // Add more tests based on generated SDK\n});\n```\n\n### 4. Create integration tests (optional)\n\n`tests/integration/api.test.ts`:\n```typescript\nimport { SpeechallClient } from '../../src';\n\n// Skip integration tests if no API key\nconst runIntegration = process.env.SPEECHALL_API_KEY !== undefined;\n\n(runIntegration ? describe : describe.skip)('API Integration', () =\u003e {\n let client: SpeechallClient;\n\n beforeAll(() =\u003e {\n client = new SpeechallClient({\n apiKey: process.env.SPEECHALL_API_KEY!,\n });\n });\n\n it('should make successful API call', async () =\u003e {\n // Add actual API test\n });\n});\n```\n\n### 5. Add test scripts to package.json\n\nVia `generators.yml` packageJson config:\n```yaml\npackageJson:\n scripts:\n test: \"jest\"\n test:unit: \"jest tests/unit\"\n test:integration: \"jest tests/integration\"\n test:coverage: \"jest --coverage\"\n```\n\n### 6. Run tests\n```bash\nnpm test\n```\n\n## Acceptance Criteria\n- [ ] Jest is installed and configured\n- [ ] `tests/` directory exists with test files\n- [ ] Unit tests verify client initialization\n- [ ] `npm test` runs without errors\n- [ ] (Optional) Integration tests work with real API\n\n## Notes\n- Fern can generate wire tests with `generateWireTests: true` config option\n- Consider using mock server for integration tests\n- Add tests to `.fernignore` to protect from overwrite\n\n## Reference\nGenerated SDK at `src/` for understanding available methods","status":"closed","priority":3,"issue_type":"task","created_at":"2025-12-16T12:17:28Z","updated_at":"2025-12-16T13:45:28Z","closed_at":"2025-12-16T14:45:28Z","close_reason":"Completed: Jest test framework installed and configured, test directory structure created with unit and integration tests, test scripts added to package.json, and all tests passing successfully.","dependencies":[{"issue_id":"speechall-typescript-sdk-vi2.8","depends_on_id":"speechall-typescript-sdk-vi2","type":"parent-child","created_at":"2025-12-16T13:17:28Z","created_by":"atacan","metadata":"{}"},{"issue_id":"speechall-typescript-sdk-vi2.8","depends_on_id":"speechall-typescript-sdk-vi2.5","type":"blocks","created_at":"2025-12-16T13:17:28Z","created_by":"atacan","metadata":"{}"}],"dependency_count":1,"dependent_count":0,"comment_count":0}
|
package/.env.example
ADDED
package/.fernignore
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Version control
|
|
2
|
+
.git
|
|
3
|
+
.gitignore
|
|
4
|
+
|
|
5
|
+
# Fern configuration (keep your config!)
|
|
6
|
+
fern/
|
|
7
|
+
|
|
8
|
+
# TypeScript configuration (manually maintained)
|
|
9
|
+
tsconfig.json
|
|
10
|
+
tsconfig.esm.json
|
|
11
|
+
|
|
12
|
+
# Test configuration (manually maintained)
|
|
13
|
+
jest.config.js
|
|
14
|
+
|
|
15
|
+
# Lock file (generated by npm/yarn, not Fern)
|
|
16
|
+
package-lock.json
|
|
17
|
+
yarn.lock
|
|
18
|
+
pnpm-lock.yaml
|
|
19
|
+
|
|
20
|
+
# Documentation (manually created)
|
|
21
|
+
README.md
|
|
22
|
+
LICENSE
|
|
23
|
+
*.md
|
|
24
|
+
|
|
25
|
+
# Scripts (manually created)
|
|
26
|
+
regenerate.sh
|
|
27
|
+
|
|
28
|
+
# Examples and tests (manually created)
|
|
29
|
+
examples/
|
|
30
|
+
tests/
|
|
31
|
+
__tests__/
|
|
32
|
+
|
|
33
|
+
# IDE settings
|
|
34
|
+
.vscode/
|
|
35
|
+
.idea/
|
|
36
|
+
|
|
37
|
+
# Build artifacts
|
|
38
|
+
dist/
|
|
39
|
+
node_modules/
|
|
40
|
+
|
|
41
|
+
# CI/CD configuration
|
|
42
|
+
.github/
|
|
43
|
+
|
|
44
|
+
# Beads issue tracking
|
|
45
|
+
.beads/
|
package/.gitattributes
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# GitHub Copilot Instructions
|
|
2
|
+
|
|
3
|
+
## Issue Tracking with bd
|
|
4
|
+
|
|
5
|
+
This project uses **bd (beads)** for issue tracking - a Git-backed tracker designed for AI-supervised coding workflows.
|
|
6
|
+
|
|
7
|
+
**Key Features:**
|
|
8
|
+
- Dependency-aware issue tracking
|
|
9
|
+
- Auto-sync with Git via JSONL
|
|
10
|
+
- AI-optimized CLI with JSON output
|
|
11
|
+
- Built-in daemon for background operations
|
|
12
|
+
- MCP server integration for Claude and other AI assistants
|
|
13
|
+
|
|
14
|
+
**CRITICAL**: Use bd for ALL task tracking. Do NOT create markdown TODO lists.
|
|
15
|
+
|
|
16
|
+
### Essential Commands
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Find work
|
|
20
|
+
bd ready --json # Unblocked issues
|
|
21
|
+
bd stale --days 30 --json # Forgotten issues
|
|
22
|
+
|
|
23
|
+
# Create and manage
|
|
24
|
+
bd create "Title" -t bug|feature|task -p 0-4 --json
|
|
25
|
+
bd create "Subtask" --parent <epic-id> --json # Hierarchical subtask
|
|
26
|
+
bd update <id> --status in_progress --json
|
|
27
|
+
bd close <id> --reason "Done" --json
|
|
28
|
+
|
|
29
|
+
# Search
|
|
30
|
+
bd list --status open --priority 1 --json
|
|
31
|
+
bd show <id> --json
|
|
32
|
+
|
|
33
|
+
# Sync (CRITICAL at end of session!)
|
|
34
|
+
bd sync # Force immediate export/commit/push
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Workflow
|
|
38
|
+
|
|
39
|
+
1. **Check ready work**: `bd ready --json`
|
|
40
|
+
2. **Claim task**: `bd update <id> --status in_progress`
|
|
41
|
+
3. **Work on it**: Implement, test, document
|
|
42
|
+
4. **Discover new work?** `bd create "Found bug" -p 1 --deps discovered-from:<parent-id> --json`
|
|
43
|
+
5. **Complete**: `bd close <id> --reason "Done" --json`
|
|
44
|
+
6. **Sync**: `bd sync` (flushes changes to git immediately)
|
|
45
|
+
|
|
46
|
+
### Priorities
|
|
47
|
+
|
|
48
|
+
- `0` - Critical (security, data loss, broken builds)
|
|
49
|
+
- `1` - High (major features, important bugs)
|
|
50
|
+
- `2` - Medium (default, nice-to-have)
|
|
51
|
+
- `3` - Low (polish, optimization)
|
|
52
|
+
- `4` - Backlog (future ideas)
|
|
53
|
+
|
|
54
|
+
### Git Workflow
|
|
55
|
+
|
|
56
|
+
- Always commit `.beads/issues.jsonl` with code changes
|
|
57
|
+
- Run `bd sync` at end of work sessions
|
|
58
|
+
- Install git hooks: `bd hooks install` (ensures DB ↔ JSONL consistency)
|
|
59
|
+
|
|
60
|
+
### MCP Server (Recommended)
|
|
61
|
+
|
|
62
|
+
For MCP-compatible clients (Claude Desktop, etc.), install the beads MCP server:
|
|
63
|
+
- Install: `pip install beads-mcp`
|
|
64
|
+
- Functions: `mcp__beads__ready()`, `mcp__beads__create()`, etc.
|
|
65
|
+
|
|
66
|
+
## CLI Help
|
|
67
|
+
|
|
68
|
+
Run `bd <command> --help` to see all available flags for any command.
|
|
69
|
+
For example: `bd create --help` shows `--parent`, `--deps`, `--assignee`, etc.
|
|
70
|
+
|
|
71
|
+
## Important Rules
|
|
72
|
+
|
|
73
|
+
- ✅ Use bd for ALL task tracking
|
|
74
|
+
- ✅ Always use `--json` flag for programmatic use
|
|
75
|
+
- ✅ Run `bd sync` at end of sessions
|
|
76
|
+
- ✅ Run `bd <cmd> --help` to discover available flags
|
|
77
|
+
- ❌ Do NOT create markdown TODO lists
|
|
78
|
+
- ❌ Do NOT commit `.beads/beads.db` (JSONL only)
|