Commit Graph

68 Commits

Author SHA1 Message Date
saravanakumardb1
307b84c2a2 feat(packages): Phase 3.2 - Create @bytelyst/survey-client package
- package.json: ESM module config
- src/index.ts: Survey client factory with types, validation, offline cache
- tsconfig.json: TypeScript configuration

Includes offline response caching for resilience
2026-03-03 07:36:12 -08:00
saravanakumardb1
c720f1c8de feat(packages): Phase 3.1 - Create @bytelyst/broadcast-client package
- package.json: ESM module config
- src/index.ts: Broadcast client factory with types, hooks
- tsconfig.json: TypeScript configuration
2026-03-03 07:34:39 -08:00
saravanakumardb1
88fda8cf39 test(feedback): implement TODO-5 and TODO-7 - GDPR test and Azure lifecycle docs
- Add gdpr.test.ts with GDPR deletion compliance tests
- Add Azure lifecycle policy configuration section to roadmap
- Include Azure Portal, CLI, and Terraform examples
- Document 90-day TTL for GDPR compliance
2026-03-03 07:20:23 -08:00
saravanakumardb1
85d9356a19 feat(platform-sdk): implement TODO-2 and TODO-3 - Swift and Kotlin feedback clients
- Add BLFeedbackClient.swift with submitFeedback(), captureAndSubmit(), captureScreen()
- Add BLFeedbackClient.kt with FeedbackParams, DeviceContext, screenshot capture
- Include implementation instructions and error handling
- Mirror API structure between Swift and Kotlin SDKs
2026-03-03 07:18:45 -08:00
saravanakumardb1
bd19d444f1 test(feedback-client): implement TODO-4 - integration tests for screenshot flow
- Add integration tests for full SAS flow (generate SAS → upload → submit)
- Add test for feedback without screenshot
- Add upload progress tracking test
- Add unit tests for content type validation and size limits
- Skip integration tests if blob storage not configured
2026-03-03 07:11:40 -08:00
saravanakumardb1
921f21164d feat(feedback-client): implement TODO-1 - web screenshot capture
- Add ScreenshotOptions and CaptureResult interfaces
- Implement captureScreenshot() with getDisplayMedia for screen capture
- Implement captureElement() placeholder for DOM element capture
- Implement captureAndSubmit() flow
- Fix getDisplayMedia constraints (remove cursor property)
2026-03-03 07:11:07 -08:00
saravanakumardb1
b261cda1cd feat(feedback-client): Phase 2.1 - create @bytelyst/feedback-client TypeScript SDK 2026-03-03 00:03:03 -08:00
saravanakumardb1
d876bb0626 feat(blob): add feedbackScreenshots container for user feedback attachments 2026-03-02 23:54:38 -08:00
saravanakumardb1
6a23a02cd4 fix(diagnostics): BUG-4, BUG-5, BUG-7, BUG-8 - race condition, transactions, test isolation, auth validation
- BUG-4: Add optimistic concurrency control with retry to updateSessionStats
- BUG-5: Document transaction limitations in batch operations
- BUG-7: Fix test isolation with unique productIds per test run
- BUG-8: Add session ownership validation to ingest endpoints
2026-03-02 23:47:14 -08:00
saravanakumardb1
ee9d4b358d feat(cloud-agnostic): complete Sprints 4-6 — secrets consumer migration, @bytelyst/speech package, push verified 2026-03-02 09:46:24 -08:00
saravanakumardb1
faca108813 docs(sdk): fix stale route references in Swift SDK source comments and README 2026-03-02 09:17:09 -08:00
saravanakumardb1
1beb6ae7ed fix(kotlin-sdk): add /api prefix to all API paths for consistency
Normalize Kotlin SDK API paths to match Swift SDK and TypeScript SDK convention:
- BLAuthClient: /auth/* → /api/auth/*
- BLBlobClient: /blob/sas → /api/blob/sas
- BLCrashReporter: /telemetry/events → /api/telemetry/events
- BLFeatureFlagClient: /flags/poll → /api/flags/poll
- BLKillSwitchClient: /flags/kill-switch → /api/flags/kill-switch
- BLLicenseClient: /licenses/* → /api/licenses/*
- BLTelemetryClient: /telemetry/events → /api/telemetry/events

All SDKs now consistently include /api prefix in paths, with baseUrl
configured as http://host:port/api. Fixes incompatibility introduced
in recent path normalization (commit 78b942a).
2026-03-02 09:16:12 -08:00
saravanakumardb1
053190d660 fix(kotlin-sdk): add missing /api prefix to flags, kill-switch, and telemetry routes 2026-03-02 09:15:03 -08:00
saravanakumardb1
78b942a105 fix(sdk): normalize API path convention — all SDK components now include /api prefix in paths 2026-03-02 09:10:19 -08:00
saravanakumardb1
10e252617b feat(packages): fix test assertions for x-request-id header compatibility
- Update kill-switch-client and feature-flag-client tests to use
  expect.objectContaining for headers to handle x-request-id
- Move React Native SDK roadmap to completed/

Total: 44 client-side package tests passing
2026-03-02 09:08:45 -08:00
saravanakumardb1
7ca2139418 refactor(storage): migrate to storage abstraction 2026-03-02 09:07:33 -08:00
saravanakumardb1
6fe41de481 fix(datastore): SQL now emits ARRAY_CONTAINS OR CONTAINS for array+string support 2026-03-02 01:50:09 -08:00
saravanakumardb1
4d126cb051 feat(platform-service): migrate 6 repositories to @bytelyst/datastore (flags, settings, comments, votes, products, themes) — 756/756 tests pass 2026-03-02 00:51:03 -08:00
saravanakumardb1
dfa5eb73fa feat(packages): add cloud-agnostic abstraction packages — datastore, storage, llm, push + refactor secrets (58 tests) 2026-03-02 00:43:06 -08:00
saravanakumardb1
b33d3cf2b3 feat(platform): add webhook subscriptions module, DB migration runner, Swagger UI — complete 23/25 roadmap items 2026-03-01 23:38:48 -08:00
saravanakumardb1
1373b6dd8b feat(blob-client): scaffold @bytelyst/blob-client — browser/RN-safe blob storage via SAS URLs (12 tests) 2026-03-01 21:51:34 -08:00
saravanakumardb1
5c5a18570d fix(ts-clients): add DOM lib to browser-safe package tsconfigs (fetch/AbortController/setTimeout require DOM types) 2026-03-01 21:33:53 -08:00
saravanakumardb1
2518e1a92e fix(ts-clients): add x-request-id header to feature-flag-client and kill-switch-client 2026-03-01 21:17:38 -08:00
saravanakumardb1
f953c2b0bc fix(kotlin-sdk): thread-safety, resource leaks, URL encoding, JSON safety, deprecated API
- BLTelemetryClient/BLAuditLogger/BLCrashReporter: @Synchronized isoNow() for SimpleDateFormat thread-safety

- BLCrashReporter: replace unsafe JSON string interpolation with buildJsonObject + JsonArray

- BLBlobClient: close OkHttp Response body with .use {} to prevent resource leak

- BLFeatureFlagClient/BLKillSwitchClient: URL-encode query parameter values

- build.gradle.kts: kotlinOptions {} -> compilerOptions {} (Kotlin 2.1 convention)
2026-03-01 21:17:27 -08:00
saravanakumardb1
70703a5009 test(kotlin-sdk): add JUnit5 + MockWebServer tests for PlatformConfig, PlatformClient, FeatureFlag, KillSwitch, License (35 tests) 2026-03-01 20:36:58 -08:00
saravanakumardb1
91c48a7bc7 feat(sdk): add kotlin-platform-sdk (13 components) + 4 new TS client packages (32 tests) 2026-03-01 18:15:57 -08:00
saravanakumardb1
dcabe46de2 feat(jarvis): add jarvis-agents, jarvis-sessions, jarvis-memory modules (63 tests) 2026-03-01 07:09:12 -08:00
saravanakumardb1
a0157211f5 feat(design-tokens): add JarvisJr product color palette to bytelyst.tokens.json 2026-03-01 06:49:47 -08:00
saravanakumardb1
ae55616444 fix(swift-sdk): match date decoding strategy in BLAuditLogger
saveEvents used .iso8601 encoding but loadEvents used the default
decoder (.deferredToDate). ISO8601 date strings could not be decoded
back, causing loadEvents() to return [] after the first log — breaking
event rotation and losing all previous audit entries.
2026-02-28 22:55:00 -08:00
saravanakumardb1
b4be39888b fix(swift-sdk): remove productId prefix from BLAuthClient keychain keys
BLAuthClient stored tokens as '{productId}_access_token' but all app
wrappers use KeychainHelper.read(key: "access_token") — the bare key.
This caused a critical mismatch: after login, BlobService/LicenseService
could not find the token, and token migration from UserDefaults was invisible
to BLAuthClient.isAuthenticated.

The Keychain service name (bundleId) already namespaces per product,
making the productId prefix redundant. Now uses bare 'access_token' and
'refresh_token' keys matching existing app conventions.
2026-02-28 22:54:01 -08:00
saravanakumardb1
77d6ff328f fix(swift-sdk): URL-encode license key + add request tracing to kill switch
BLLicenseClient.checkStatus: percent-encode key before inserting into URL
path to prevent malformed URLs with special characters.

BLKillSwitchClient: add X-Product-Id and X-Request-Id headers for
consistency with BLPlatformClient request tracing pattern.
2026-02-28 22:52:00 -08:00
saravanakumardb1
b068e4bc1a fix(swift-sdk): guard BLBiometricAuth and BLCrashReporter for watchOS compatibility
BLBiometricAuth imports LocalAuthentication (unavailable on watchOS).
BLCrashReporter imports MetricKit (unavailable on watchOS).
Package.swift declares watchOS 10+ as a platform target.

Fix: wrap both files in #if canImport() guards.
BLCrashReport model struct stays outside the guard (data-only, all platforms).
2026-02-28 22:51:26 -08:00
saravanakumardb1
23d14f33ea feat(swift-sdk): add 6 new components — BLBlobClient, BLKillSwitchClient, BLLicenseClient, BLBiometricAuth, BLCrashReporter, BLAuditLogger
New SDK components extracted from product apps:
- BLBlobClient — Azure Blob Storage upload via SAS tokens (from LysnrAI BlobService)
- BLKillSwitchClient — Kill switch check from platform-service (from LysnrAI KillSwitchService)
- BLLicenseClient — License key activation + status (from LysnrAI LicenseService)
- BLBiometricAuth — Face ID / Touch ID wrapper (from LysnrAI BiometricAuth)
- BLCrashReporter — MetricKit crash reporting (from ChronoMind CrashReporter)
- BLAuditLogger — Local rotating JSON audit log (from LysnrAI AuditLogger)

SDK now has 13 source files. Updated README with full component table
and migration status (3 apps fully migrated, 18 wrappers total).
2026-02-28 22:38:43 -08:00
saravanakumardb1
78000cdf6a feat(swift-sdk): add ByteLystPlatformSDK — shared Swift package for all iOS/watchOS/macOS apps
Extracts duplicated platform integration code from ChronoMind + LysnrAI into a
single Swift Package. Eliminates ~1,100+ lines of copied code per product app.

Components:
- BLPlatformConfig — product-specific configuration (productId, baseURL, bundleId)
- BLPlatformClient — generic HTTP client with auth injection, x-request-id, timeout
- BLKeychain — Keychain CRUD for secure token storage
- BLTelemetryClient — telemetry queue + batch flush (matches @bytelyst/telemetry-client)
- BLAuthClient — full auth operations (matches @bytelyst/auth-client)
- BLFeatureFlagClient — feature flag polling from platform-service /flags/poll
- BLSyncEngine — generic offline-first sync with delta pull + batch push

Platforms: iOS 17+, watchOS 10+, macOS 14+
2026-02-28 22:12:20 -08:00
saravanakumardb1
4863b62055 feat(fastify-core): deny CORS by default when origin unset, add graceful shutdown handlers 2026-02-28 20:23:58 -08:00
saravanakumardb1
04f4a5f81e feat(api-client): add timeout, retry with exponential backoff for idempotent requests 2026-02-28 20:23:49 -08:00
saravanakumardb1
7210464019 fix(tracker-web): replace broken webpack alias with transpilePackages — build now succeeds
fix(config): mock Azure SDK in keyvault tests — eliminates timeouts, 26/26 pass in <1s
2026-02-28 12:11:37 -08:00
saravanakumardb1
062d87a93a test(react-auth): add tests for updateUser, onInit, and onInit-null-fallback 2026-02-28 11:48:48 -08:00
saravanakumardb1
1925370604 fix(react-auth): add updateUser to AuthContextValue + provider for local user state mutation 2026-02-28 11:38:27 -08:00
saravanakumardb1
da165a589a refactor(dashboards): wire @bytelyst/telemetry-client into admin-web + tracker-web, add onInit + baseUrl to react-auth 2026-02-28 11:27:57 -08:00
saravanakumardb1
b400c76c0a feat(packages): add @bytelyst/auth-client + telemetry-client, extend react-auth lifecycle
- @bytelyst/auth-client: browser/RN-safe auth API wrapper (17 tests)
- @bytelyst/telemetry-client: shared telemetry with configurable transport (11 tests)
- @bytelyst/react-auth: add register, forgotPw, changePw, deleteAccount, token refresh (10 tests)
- eslint.config: add missing browser globals
2026-02-28 04:49:46 -08:00
saravanakumardb1
4e94ecd721 feat(auth): add forgot-password/change-password API routes to admin dashboard + wire email delivery
Admin dashboard:
- platform-client.ts: Added forgotPasswordViaService, changePasswordViaService, deleteAccountViaService
- app/api/auth/forgot-password/route.ts: New API route proxying to platform-service
- app/api/auth/change-password/route.ts: New API route for authenticated password change

Platform-service (from prior session):
- auth/routes.ts: Added /auth/change-password and DELETE /auth/account endpoints, wired email verification on register
- auth/types.ts: Added ChangePasswordSchema and DeleteAccountSchema
- delivery/subscribers.ts: Updated password reset subscriber, added email verification subscriber
- delivery/channels/email.ts: Added ByteLyst email API provider (sendViaBytelyst)
- delivery/types.ts: Added 'bytelyst' provider
- events/types.ts: Added resetToken/displayName to user.password_reset, added user.email_verification_requested event
2026-02-28 04:17:04 -08:00
saravanakumardb1
772f428967 feat(platform): add P0 foundational modules — event bus, scheduled jobs, password reset, email verification, status page 2026-02-28 02:29:08 -08:00
saravanakumardb1
fbb2197f7c test(platform-service): add repository tests for notifications, plans, subscriptions, usage, tokens, memory + fix extraction-service flaky test 2026-02-16 11:59:06 -08:00
saravanakumardb1
2e5b4de0c4 feat(config): add Azure Key Vault secret resolution with env fallback 2026-02-14 22:15:02 -08:00
saravanakumardb1
81609e9358 fix: remove stale port references from monitoring, docs, and AI.dev skills 2026-02-14 21:48:21 -08:00
95b45a9fd3 fix(cosmos): init containers on startup for local compose 2026-02-14 20:57:17 -08:00
e9b33fb518 feat(monitoring): add @bytelyst/monitoring package 2026-02-14 15:57:41 -08:00
125eb03745 feat(blob): add @bytelyst/blob shared package 2026-02-14 15:53:33 -08:00
saravanakumardb1
c292bb5cc1 feat(extraction): scaffold extraction-service + @bytelyst/extraction package
- extraction-service: Fastify scaffold (port 4005) with extract/tasks modules
- src/lib/: config, errors, cosmos, product-config, python-bridge
- src/modules/extract/: types (Zod schemas), routes (POST /extract, batch, models)
- src/modules/tasks/: types, repository (Cosmos CRUD), routes (CRUD endpoints)
- Python sidecar: FastAPI app, LangExtract wrapper, models, task registry
- @bytelyst/extraction package: types, client factory, index exports
- Both pnpm build pass clean
2026-02-14 13:31:40 -08:00