e6b58b7187
feat(events): add phase3 trail report contracts
2026-04-03 19:47:54 -07:00
78918fbd90
feat(events): add phase2 plan routine habit contracts
2026-04-03 19:34:37 -07:00
76f1b47484
feat(events): add phase1 ecosystem contracts
2026-04-03 16:29:30 -07:00
root
8b37189829
chore(registry): point packages to gitea.bytelyst.com
2026-03-31 10:53:13 +00:00
saravanakumardb1
de13a08a98
chore: update chat history archive + design-tokens tarball
2026-03-31 01:42:48 -07:00
e174335a9e
fix(rn-platform-sdk): align providers with platform-service APIs
...
- Feature flags: GET /flags/poll legacy { flags } + optional userId
- Kill switch: GET /settings/kill-switch, map message to reason
- Broadcasts: GET /broadcasts, POST dismiss; map server message shape
- Surveys: GET /surveys/active; submit via start/response/complete
- Auth: register(); login/register bodies include productId
- Telemetry: map queued events to TelemetryEventSchema; RN Platform import
- prepare script runs tsc on install
Made-with: Cursor
2026-03-30 01:12:18 -07:00
e13d0cba6b
fix(subscription-client): add missing X-Product-Id header to API requests
...
Aligns with referral-client, org-client, and marketplace-client which
all send this header. The billing API likely requires it for product
scoping.
Made-with: Cursor
2026-03-30 00:26:48 -07:00
1ee97327ee
feat(packages): create 9 NomGap-required platform packages
...
Create source implementations for packages imported by NomGap:
- @bytelyst/accessibility — ARIA helper functions (alertLabel, progressLabel, etc.)
- @bytelyst/celebrations — celebration engine for milestones
- @bytelyst/gentle-notifications — guilt-free notification filtering
- @bytelyst/time-references — human-friendly fasting time references
- @bytelyst/subscription-client — billing/subscription HTTP client
- @bytelyst/quick-actions — progressive disclosure UI helpers
- @bytelyst/referral-client — referral program client
- @bytelyst/marketplace-client — influencer marketplace client
- @bytelyst/org-client — B2B org management client
Made-with: Cursor
2026-03-29 22:24:02 -07:00
root
eba6c7a641
chore(platform): align docker and package outputs
2026-03-29 23:41:08 +00:00
saravanakumardb1
ac6d1e0911
chore(fastify-sse): add vitest devDependency
...
Package was running tests via workspace-hoisted vitest but had no
explicit devDependency. Adds vitest ^3.0.0 for standalone build
correctness.
2026-03-29 12:54:27 -07:00
saravanakumardb1
3e092490f3
chore: bump ollama-client, use-theme, use-keyboard-shortcuts to 0.1.1 for Gitea publish
2026-03-29 12:53:34 -07:00
saravanakumardb1
ea2e68562b
chore(hooks): add typecheck script to use-theme and use-keyboard-shortcuts
...
Aligns with other packages that expose tsc --noEmit for CI.
2026-03-29 12:52:31 -07:00
saravanakumardb1
bb86bf220e
fix(use-theme): remove redundant applyTheme from toggleTheme
...
toggleTheme was calling applyTheme() inside the state updater AND
the useEffect was also applying on state change — double DOM write.
Now toggleTheme relies solely on the useEffect, matching setTheme
behavior.
2026-03-29 12:52:19 -07:00
saravanakumardb1
2688f7e3ca
fix(ollama-client): remove timeout from pull(), guard formatBytes NaN, simplify stream body, use fetchJson for delete()
2026-03-29 12:50:49 -07:00
saravanakumardb1
26ac2a3dec
chore(fastify-sse): bump to 0.3.0 for Gitea publish
2026-03-29 12:49:28 -07:00
saravanakumardb1
3f808eff56
fix(ollama-client): add explicit Node types to tsconfig
...
config.ts imports child_process and fs — declare types: ['node']
explicitly instead of relying on root tsconfig inheritance.
2026-03-29 12:48:18 -07:00
saravanakumardb1
e6ccaec2fe
fix(fastify-sse): add X-Accel-Buffering header to per-request startSSE
...
Aligns with hub.ts which already includes this header. Prevents
nginx/Traefik from buffering SSE chunks behind a reverse proxy.
2026-03-29 12:47:13 -07:00
saravanakumardb1
e194365711
fix(use-theme): add SSR safety guards for window access
...
setTheme, toggleTheme, and storage event listener now check
typeof window before accessing localStorage/addEventListener.
Prevents crashes in Next.js server components.
2026-03-29 12:46:18 -07:00
saravanakumardb1
6f4957d821
fix(use-keyboard-shortcuts): enforce symmetric modifier matching
...
Modifiers (shift, alt, meta) are now checked in both directions:
when not required, the physical key must NOT be pressed either.
Before: Cmd+K shortcut would fire on Cmd+Shift+K or Cmd+Alt+K.
After: exact modifier combination is enforced.
4 regression tests added.
2026-03-29 12:45:32 -07:00
saravanakumardb1
31cf7c0c6f
feat(ollama-client): shared Ollama API client package
2026-03-29 12:43:01 -07:00
saravanakumardb1
bfa55998a2
feat(use-keyboard-shortcuts): shared React keyboard shortcuts hook
2026-03-29 12:40:43 -07:00
saravanakumardb1
0f5dc91648
feat(use-theme): shared React theme toggle hook
2026-03-29 12:40:06 -07:00
saravanakumardb1
c28dbc873e
feat(fastify-sse): add per-request SSE helpers
2026-03-29 12:38:57 -07:00
saravanakumardb1
f808a3c05d
fix(ui): use extensionless imports + bundler resolution for source-consumed package
2026-03-29 02:03:48 -07:00
saravanakumardb1
a8d37bd103
feat(ui): add Sidebar, StatCard, LoadingSpinner components + README docs — Level 3 component coverage
2026-03-29 00:19:45 -07:00
saravanakumardb1
b7cb44267b
feat(design-tokens): add per-product CSS exports and regenerate all token files
2026-03-28 23:16:19 -07:00
saravanakumardb1
11a832e271
feat(ui): add Storybook for @bytelyst/ui component library
...
- Storybook 8 with React Vite framework + a11y addon
- Stories for Button (7 variants), Badge (6), Input (5), Card (4)
- Dark/elevated/light background presets
- Run: pnpm --filter @bytelyst/ui storybook
2026-03-28 00:59:25 -07:00
saravanakumardb1
5da71f3735
feat(ui): add Input, Textarea, Card, Label, Select, Separator components to @bytelyst/ui
...
- Input: with label, error, hint, a11y attributes
- Textarea: resizable with label, error, hint
- Card: with CardHeader, CardTitle, CardDescription sub-components
- Label: with required indicator
- Select: native select with chevron icon, label, error
- Separator: horizontal/vertical with ARIA roles
- All components use --bl-* design token CSS variables
- 12 total components in @bytelyst/ui
2026-03-28 00:33:38 -07:00
saravanakumardb1
6b6f147de7
feat(design-tokens): extend generator with per-product Swift + Kotlin native themes
...
- Add generateProductSwift() and generateProductKotlin() to generate.ts
- Add PRODUCT_NATIVE_MAP for 10 products (ChronoMind, JarvisJr, PeakPulse, LysnrAI, NomGap, ActionTrail, FlowMonk, NoteLett, LocalMemGPT, LocalLLMLab)
- Output 20 native token files in generated/native/
- Fix TS type narrowing for gradient objects (line 382)
- Update DESIGN_SYSTEM_AUDIT.md with Appendix G remediation results
2026-03-28 00:25:03 -07:00
saravanakumardb1
46ee14371c
fix(ci): add --pool forks to all vitest test scripts to fix kill EPERM on Node v25
...
Root cause: tinypool worker teardown calls kill() which returns EPERM
in the act_runner host environment on Node.js v25.2.1. Tests pass but
the vitest process crashes during cleanup, causing CI failure.
Fix: --pool forks CLI flag on every package/service test script, plus
pool: 'forks' in all vitest.config.ts files. This uses child_process.fork()
worker management which handles termination cleanly.
60 package.json files updated, 10 vitest.config.ts files updated.
2026-03-27 23:23:38 -07:00
saravanakumardb1
252403f74e
feat(ui): create @bytelyst/ui with Button, Toast, Modal, ConfirmDialog, Badge, EmptyState
2026-03-27 16:29:37 -07:00
saravanakumardb1
b3a1ee5db9
feat(design-tokens): per-product CSS generation for all 11 products
2026-03-27 16:24:58 -07:00
saravanakumardb1
915f59f595
feat(design-tokens): add actiontrail, notelett, localmemgpt, localllmlab product palettes
2026-03-27 16:23:13 -07:00
saravanakumardb1
b6348fd4fe
fix(security): harden npm publish — add .npmrc + publishConfig to all 57 packages
...
- Created .npmrc with @bytelyst scoped registry pointing to local Gitea
- Added publishConfig.registry to all 57 @bytelyst/* package.json files
- Created scripts/harden-publish-config.sh for future re-runs
- Prevents accidental publish to npmjs.org or corporate JFrog registry
2026-03-26 21:51:05 -07:00
saravanakumardb1
adfa5b9fec
fix(react-auth): align source version with published package
2026-03-23 18:36:15 -07:00
saravanakumardb1
841cdf3a16
fix(platform-service+events): 3 more gaps in diagnostics + delivery
...
- diagnostics/subscribers: wire session.created email notification to
target user using existing 'diagnostics-session-created' template
(was just logging instead of sending the email)
- events/types: add missing 'currency' field to payment.failed schema
(payment.succeeded had it, payment.failed did not — inconsistency)
- delivery/subscribers: use event.payload.currency instead of hardcoded
empty string in payment-failed email variables
- Typecheck clean, 1483/1483 tests pass
2026-03-22 01:20:24 -07:00
saravanakumardb1
1576b699b0
feat(platform-service): resolve all P3 TODOs — diagnostics notifications + test cleanup
...
- diagnostics/subscribers: notify admin via email when debug session is
cancelled (looks up session creator via getSession + getUserById)
- diagnostics/subscribers: email session summary (logs/traces/screenshots)
to admin when debug session completes
- diagnostics/subscribers: send Slack alert via dispatchSlack for FATAL
logs ingested during debug sessions (on-call engineer notification)
- feedback-client/integration.test.ts: replace TODO-4 with clear NOTE,
fix unused var lint errors
- feedback-client/gdpr.test.ts: mark lifecycle policy as accepted,
remove console.log + unused blobPath variable
- Update WORKSPACE_TODO_AUDIT.md — P3 section: all 5 resolved
- Typecheck clean, 1483/1483 tests pass
2026-03-22 01:03:51 -07:00
saravanakumardb1
9471d4c56f
fix(test): add @vitest-environment happy-dom to React UI test files
...
6 test files across 4 packages (auth-ui, dashboard-components,
dashboard-shell, react-auth) failed with 'document is not defined'
when run from the monorepo root because the root vitest config uses
environment: 'node'. The package-local configs set happy-dom but are
ignored when vitest is invoked from root.
Fix: Add per-file '// @vitest-environment happy-dom' annotations,
which is the recommended vitest pattern for mixed-environment monorepos.
This ensures tests work regardless of which config is loaded.
Recovers 148 tests across 6 files.
2026-03-21 16:21:42 -07:00
saravanakumardb1
7613d6890f
feat(field-encrypt): admin-panel encryption toggle via feature flags
...
- FieldEncryptorConfig.enabled: false returns NullFieldEncryptor (no-op)
- NullFieldEncryptor stores plaintext as-is, decrypt returns ct directly
- 7 new tests for toggle behavior (50/50 total)
- encryption_enabled added to COMMON_FLAGS (seeded for all 10 products)
2026-03-21 15:24:19 -07:00
saravanakumardb1
4a47db72ae
fix(flags): SSE stream endpoint + client — pass productId via query string
...
EventSource API cannot set custom headers, so the SSE /flags/stream
endpoint and feature-flag-client were broken for streaming mode:
- Server: accept productId and token from query string as fallback
when x-product-id / authorization headers are absent
- Client: pass productId (and optional auth token) as query params
when constructing the EventSource URL
2026-03-21 12:12:14 -07:00
saravanakumardb1
ca6a4d41d8
feat(flags): production-grade feature flag system — multi-variate, segments, audit, SSE, scheduling, prerequisites
...
- types.ts: multi-variate flags (boolean/string/number/JSON), targeting rules with 18 operators, scheduling (enableAt/disableAt/gradual rollout), prerequisites, segments, audit log, evaluation context
- evaluator.ts: pure evaluation engine — schedule checking, prerequisite dependencies (circular detection), individual targeting, targeting rules (AND clauses), segment matching, percentage rollout (FNV-1a), OS version/platform/region filtering
- repository.ts: 3 collections — feature_flags, flag_segments, flag_audit_log
- routes.ts: 18 endpoints — flag CRUD, toggle, archive, kill switch (with tag filter), segment CRUD, audit log, POST /flags/evaluate (multi-variate), SSE /flags/stream, legacy /flags/poll backward-compat
- seed.ts: updated to produce full FeatureFlagDoc with variations, version
- flags.test.ts: 63 tests — schema validation, evaluator engine, targeting rules, segments, prerequisites, scheduling, gradual rollouts, multi-variate, version comparison, deterministic hashing
- @bytelyst/events: added flag.created, flag.updated, flag.deleted, flag.kill_switch event types
- @bytelyst/feature-flag-client: multi-variate support (getValue, getEvaluation, getAllEvaluations), SSE streaming mode, onChange listeners, auth token injection
- event-dispatcher.ts + webhooks/types.ts: wired new flag events
2026-03-21 11:44:49 -07:00
saravanakumardb1
ce08587680
feat(secure-storage-web): create @bytelyst/secure-storage-web — encrypted IndexedDB storage
...
- IndexedDB-backed key-value store with non-extractable AES-256-GCM CryptoKey
- Key material never leaves browser crypto subsystem
- API: set, get, delete, clear, has, keys — all async
- Namespace isolation for multi-app usage
- Falls back to localStorage when SubtleCrypto unavailable
- 16 Vitest tests (fake-indexeddb), all passing
- Add IndexedDB globals to root ESLint config
2026-03-21 11:19:19 -07:00
saravanakumardb1
1bce981f43
feat(client-encrypt): create @bytelyst/client-encrypt — Web Crypto API encryption
...
- AES-256-GCM via SubtleCrypto (browsers + React Native with polyfill)
- Wire-compatible EncryptedField with @bytelyst/field-encrypt (server) and
BLFieldEncrypt (Swift/Kotlin native SDKs)
- encryptField, decryptField, generateKey, keyFromHex, keyToHex
- PBKDF2 key derivation (600k iterations per OWASP 2023)
- isEncryptedField type guard, toHex/fromHex helpers
- 22 Vitest tests, all passing
- Add Web Crypto globals to root ESLint config
2026-03-21 11:15:27 -07:00
saravanakumardb1
9bb322113a
feat(native-sdks): add Keychain/SecureStore key derivation to BLFieldEncrypt
...
- Swift: getOrCreateKey(service:account:), loadKey(), deleteKey()
- Generates random AES-256 key, persists as hex in BLKeychain
- Subsequent calls return the same key for stable per-device DEK
- Kotlin: getOrCreateKey(store:account:), loadKey(), deleteKey()
- Generates random AES-256 key, persists as hex in BLSecureStore
- Uses EncryptedSharedPreferences for at-rest protection
- All existing tests still pass (21/21 Kotlin)
2026-03-21 11:10:02 -07:00
saravanakumardb1
ee762b4612
feat(native-sdks): add BLFieldEncrypt to Swift + Kotlin platform SDKs
...
- Swift: BLFieldEncrypt.swift + BLFieldEncryptTests.swift (22 tests)
- CryptoKit AES-256-GCM, BLEncryptedField Codable struct
- encrypt/decrypt, AAD support, generateKey, keyFromHex, isEncrypted
- Data hex helpers (hexString, init?(hexString:))
- Kotlin: BLFieldEncrypt.kt + BLFieldEncryptTest.kt (21 tests)
- javax.crypto AES-256-GCM, BLEncryptedField data class
- encrypt/decrypt, AAD support, generateKey, keyFromHex, isEncrypted
- ByteArray/String hex extension functions
- Wire-compatible: same EncryptedField JSON structure as @bytelyst/field-encrypt (TS)
- { __encrypted: true, v: 1, alg: 'aes-256-gcm', ct, iv, tag, dekId }
- All hex-encoded, 12-byte IV, 16-byte auth tag
- Fix: ByteLystPlatform.kt getString() → read() (pre-existing compile error)
2026-03-21 10:58:02 -07:00
saravanakumardb1
b8ce14c259
test(broadcast-client): cover deep links and client
2026-03-21 10:56:49 -07:00
saravanakumardb1
bb3f5385fc
feat(field-encrypt): create @bytelyst/field-encrypt package with AES-256-GCM envelope encryption
...
- 10 source files: types, aes-gcm, 3 key providers (memory/env/akv), envelope, key-cache, dek-store, guards, migration, factory
- 42 Vitest tests: AES-GCM roundtrips, tamper detection, unicode, 100KB payloads, key providers, DEK cache TTL/LRU, envelope lifecycle, migration (dry-run + idempotent), config validation
- AKV MEK creation script (scripts/create-encryption-keys.sh) for 10 product MEKs
- .env.example updated with FIELD_ENCRYPT_* vars
2026-03-21 09:18:10 -07:00
saravanakumardb1
6856d23a2e
fix(swift-sdk): resolve BLAuditLogger + BLCrashReporter build errors in ByteLystPlatform
...
- BLAuditLogger is an enum (static API) — cannot be constructed; use .Type reference + configure()
- BLCrashReporter is @MainActor — defer construction to start() via Task { @MainActor }
2026-03-20 23:28:47 -07:00
saravanakumardb1
b9e37bb8b4
feat(telemetry-client,diagnostics-client): add createWebTelemetry + createWebDiagnostics convenience factories
...
- telemetry-client: createWebTelemetry() wraps createTelemetryClient() with web defaults
- diagnostics-client: createWebDiagnostics() wraps DiagnosticsClient with install ID + web defaults
- Eliminates ~70 lines of boilerplate per web app
- 11/11 telemetry tests pass, 21/21 diagnostics tests pass
2026-03-20 18:47:18 -07:00
saravanakumardb1
0d8c0a5ffe
feat(backend-flags,backend-telemetry): create shared flag registry + telemetry buffer packages
...
- @bytelyst/backend-flags: createFlagRegistry() with defaults, 6 tests
- @bytelyst/backend-telemetry: createTelemetryBuffer() with enabled switch, 5 tests
2026-03-20 08:02:17 -07:00
saravanakumardb1
08661bbd97
feat(backend-config): create @bytelyst/backend-config package with shared Zod schema
...
- baseBackendConfigSchema: PORT, HOST, NODE_ENV, CORS_ORIGIN, SERVICE_NAME,
DB_PROVIDER, COSMOS_*, JWT_SECRET, PLATFORM_JWKS_URL
- parseBackendConfig() helper for env parsing
- Products extend via baseBackendConfigSchema.extend({...})
- 8 tests passing
2026-03-20 07:51:22 -07:00
saravanakumardb1
ea2cb4c0e6
fix(fastify-auth): support getter functions for jwtSecret/jwksUrl
...
Allows dynamic config resolution (e.g. test mocks that change config between calls).
Options can now be string | (() => string) for both jwtSecret and jwksUrl.
2026-03-20 07:38:26 -07:00
saravanakumardb1
f61a1f0b04
feat(fastify-auth): create @bytelyst/fastify-auth package with JWT auth + request context
...
- createAuthMiddleware(): RS256 JWKS + HS256 fallback (parameterized)
- createRequestContext(): productId validation + getUserId()
- Fastify request type augmentation for jwtPayload
- 15 tests passing
2026-03-20 07:30:53 -07:00
saravanakumardb1
f56672508a
chore: update dependencies
2026-03-19 21:25:30 -07:00
saravanakumardb1
70635ba80e
feat(kotlin-sdk): add ByteLystPlatform unified entry point + 2 new test files (4.2)
...
New source:
- ByteLystPlatform.kt — unified entry point wiring all services via Context + Config
(secureStore, client, auth, telemetry, flags, killSwitch, auditLog)
- start(userId?) / stop() lifecycle for telemetry + flags
- Mirrors Swift ByteLystPlatform API
New tests (2 files):
- BLKillSwitchResultTest — ok(), disabled, default, copy
- BLTelemetryEventTest — serialize, deserialize, optional fields
2026-03-19 21:09:24 -07:00
saravanakumardb1
933390e89b
feat(swift-sdk): add ByteLystPlatform unified entry point + 5 new test files (4.1)
...
New source:
- ByteLystPlatform.swift — unified entry point wiring all services
(config, client, telemetry, flags, killSwitch, crashReporter, keychain, auditLog, auth)
- BLKeychainAccessor — convenience wrapper binding BLKeychain to a bundleId
- start(userId:) / stop() lifecycle for telemetry + flags + killSwitch
New tests (5 files, ~25 test cases):
- ByteLystPlatformTests — init, start/stop, idempotency, keychain accessor
- BLPlatformConfigTests — default + custom init
- BLKillSwitchClientTests — default state, reset
- BLFeatureFlagClientTests — empty flags, unknown key, stop
- BLTelemetryClientTests — installId stability, session rotation, track/flush
Also: add .build/ and .swiftpm/ to .gitignore
2026-03-19 21:05:58 -07:00
saravanakumardb1
1fda345d38
feat(dashboard-shell): add @bytelyst/dashboard-shell package (4.3) — 41 tests
...
Components:
- DashboardShell — main layout combining sidebar + topbar + content area
- Sidebar — collapsible nav with sections, badges, active state, auto-settings link
- TopBar — user avatar/menu, notifications bell, sign out, custom actions
- ProfilePage — avatar, name/email form, loading/error/success states
- BillingPage — current plan card, status badge, trial info, plan comparison grid
- SettingsPage — section-based layout with empty state
Features:
- NavItem[] or NavSection[] for flat or grouped navigation
- ShellFeatures toggle: profile, billing, settings, notifications, themeToggle
- ShellUser with avatar, role, initials fallback
- onNavigate callback for SPA routers (Next.js, etc.)
- Collapsible sidebar with toggle button
- All styled via --bl-shell-* CSS custom properties with fallbacks
- 41 tests covering all components
2026-03-19 20:54:28 -07:00
saravanakumardb1
6354711f97
feat(create-app): add CLI Scaffolder (3.1) — interactive product repo generator
...
Scaffolder (scaffolder.ts):
- Interactive prompts: product name/ID/tagline/domain, port, platforms, features
- --from product.json flag to skip prompts (non-interactive)
- --dry-run preview mode
- Generates backend (always) + web (Next.js) + mobile (Expo) based on selection
- Template engine with {{VARIABLE}} and {{#IF FEATURE}} conditional blocks
- Backend scaffold: Fastify 5, Zod config, JWT auth, datastore, server.ts
- Web scaffold: Next.js 16 App Router, layout, page, product-config
- Mobile scaffold: Expo with app.json, index screen
- Root files: product.json, .gitignore, .env.example, README.md
Tests: 26 passing (11 template-engine + 15 scaffolder)
Tested with ActionTrail product.json dry-run — correct output
2026-03-19 20:31:35 -07:00
saravanakumardb1
43439e9c85
feat(auth-ui): complete Auth UI Kit (3.2) — 7 new components, 54 tests
...
New components:
- RegisterForm — name, email, password, confirm, terms, password strength
- ForgotPasswordForm — email input with success/error states, back link
- ResetPasswordForm — new password + confirm with strength indicator
- VerifyEmailForm — 6-digit code input with resend, numeric-only filter
- OnboardingShell — step indicator, progress bar, back/next/complete nav
- AuthPageLayout — full-page centered card with product branding
- PasswordStrengthBar — visual bar + label (weak/fair/good/strong)
Existing components preserved: LoginForm, MfaChallenge, SocialButtons
All styled via --bl-* CSS custom properties for product theming
54 tests (13 existing + 41 new) — all passing
2026-03-19 20:25:57 -07:00
saravanakumardb1
f051942ef6
feat(create-app): add API Route Generator (3.3) + AGENTS.md Auto-Generator (3.4)
...
3.3 API Route Generator (api-routes.ts):
- Two modes: 'direct' (Cosmos DB CRUD) and 'proxy' (backend fetch)
- Generates route.ts + [id]/route.ts (Next.js App Router named exports)
- Direct mode also generates lib/schemas/ + lib/repositories/ files
- withErrorHandler HOF wrapper, Zod validation, auth check
- Dry-run preview, configurable methods, skip existing files
3.4 AGENTS.md Auto-Generator (agents-md.ts):
- Reads shared/product.json for identity, port, domain
- Scans repo for backend modules, lib files, test counts
- Generates full AGENTS.md with identity, layout, stack, conventions
- --update preserves CUSTOM sections
- Creates CLAUDE.md, .cursorrules, .windsurfrules symlinks
2026-03-19 20:17:02 -07:00
saravanakumardb1
c3f81cc97a
fix(kotlin-sdk): add platform query parameter to kill-switch URL
...
BLKillSwitchClient was missing the platform query parameter that
BLFeatureFlagClient already sends. This caused the test
'sends correct query parameters' to fail.
2026-03-19 20:03:26 -07:00
saravanakumardb1
6ba86e0bf4
fix: replace corepack pnpm with pnpm in pretest/predev scripts
...
Node 25 removed corepack as a built-in. Replace all 'corepack pnpm'
invocations with direct 'pnpm' calls since pnpm is installed globally.
Affected: platform-service, tracker-web, blob, testing, LLM dashboard
2026-03-19 19:57:16 -07:00
saravanakumardb1
a0dafcd693
feat(config): overhaul product manifest schema + 51 tests
...
- Redesigned schema to match real-world product.json files across ecosystem
- Changed 'id' → 'productId' (matches all existing files)
- Support bundleId as string OR per-platform object
- Added backendPort, tagline, primarySurface, appStore, bundleIds fields
- Added legacy identity fields (licensePrefix, configDirName, envVarPrefix, etc.)
- Added duplicate container name validation via superRefine
- Fixed loadProductManifestSync: require() → readFileSync (ESM-safe)
- Added BundleIdSchema and AppStoreSchema exports
- Added 'mac' platform option
- 51 new tests covering all schemas, validation, file loading, real-world manifests
2026-03-19 19:43:46 -07:00
saravanakumardb1
6a79742605
chore(kotlin-sdk): add .gitignore and remove tracked build artifacts
2026-03-19 19:02:44 -07:00
saravanakumardb1
35487137e1
feat(kotlin-sdk): restore 13 deferred UI files — diagnostics, clients, Compose UI, passkeys, deep links
...
- Move 5 diagnostics files into src/main/.../diagnostics/ (DiagnosticsTypes, DiagnosticsClient, BreadcrumbTrail, DeviceStateCollector, NetworkInterceptor)
- Move 3 API clients (BLBroadcastClient, BLSurveyClient, BLFeedbackClient) — fix toMediaType, serializer pattern, coroutine imports
- Move 2 pure Kotlin files (DeepLinkRouter, BLPasskeyManager)
- Move 3 Compose UI files into src/main/.../ui/ (BLAuthUI, SurveyUI, BroadcastUI)
- Move 2 test files (DiagnosticsTypesTest, BLAuthClientSmartAuthTest) — fix JUnit5, Device JSON, serializer
- Add coil-compose dependency for AsyncImage
- Add appVersion/osVersion fields to BLPlatformConfig
- Fix OkHttp Headers iteration (name/value indexed access)
- Fix BroadcastUI string comparisons for status/style/priority
- Remove _deferred_ui/ directory — all files now compile in src/
- 57 tests total, 56 pass (1 pre-existing BLKillSwitchClientTest failure)
2026-03-19 18:25:35 -07:00
saravanakumardb1
90f8f64937
ci: update CI/CD configuration
2026-03-19 18:11:27 -07:00
saravanakumardb1
c9e58505a2
chore: gitignore swift-platform-sdk build artifacts
2026-03-19 17:01:52 -07:00
saravanakumardb1
6b63fda434
fix(kotlin-sdk): fix compile errors in kotlin-platform-sdk core components
...
- Fix MapSerializer/serializer imports in BLAuthClient, BLBlobClient, BLLicenseClient
- Add material-icons-extended dependency to build.gradle.kts
- Move 13 uncompiled files (UI, diagnostics, extended) to _deferred_ui/
(SurveyUI, BroadcastUI, BLAuthUI, DiagnosticsClient, NetworkInterceptor,
BreadcrumbTrail, DeviceStateCollector, DiagnosticsTypes, BLSurveyClient,
BLBroadcastClient, BLFeedbackClient, BLPasskeyManager, DeepLinkRouter)
- Move 2 broken test files to _deferred_ui/
- Core SDK compiles: 38/39 tests pass
- Unblocks all Android app builds (MindLyst, JarvisJr, LysnrAI, ChronoMind)
2026-03-19 17:01:34 -07:00
saravanakumardb1
3ef40028ab
fix(gradle): add corporate proxy SSL truststore + Compose deps for kotlin-platform-sdk
...
- switch-network.sh: set GRADLE_OPTS with custom truststore when NETWORK=corp
- kotlin-platform-sdk: add repos to settings.gradle.kts for composite builds
- kotlin-platform-sdk: add Compose plugin + BOM + UI/Material3/Foundation deps
- kotlin-platform-sdk: use kotlinOptions (stable) instead of compilerOptions
2026-03-19 15:13:50 -07:00
saravanakumardb1
96866dcaf6
fix(swift-sdk): add buildRequest, BLPlatformError, fix SDK compile errors for iOS 26
2026-03-19 14:22:18 -07:00
saravanakumardb1
be03efa111
feat(shared-packages): add 9 @bytelyst/* client packages with 100% API coverage
...
Packages added:
- @bytelyst/referral-client — referral API client + share helpers
- @bytelyst/subscription-client — subscription/plan API client + cache
- @bytelyst/celebrations — milestone triggers, confetti, positive messages
- @bytelyst/gentle-notifications — ND-friendly messaging, forbidden phrases
- @bytelyst/accessibility — VoiceOver/TalkBack label generators
- @bytelyst/quick-actions — progressive disclosure, smart defaults
- @bytelyst/time-references — familiar duration references
- @bytelyst/org-client — org/workspace/membership/license API client
- @bytelyst/marketplace-client — listing/review/install API client
All packages: pure TS, ESM, globalThis.fetch, no Node.js deps.
99 Vitest tests across 9 packages, 79/79 public methods covered.
Review fixes applied:
- time-references: fix module-level mutable state leak + add clearCustomReferences()
- accessibility: fix parameter reassignment in formatDurationForA11y/numberToWords
- subscription-client: fix flaky daysRemaining test (ms boundary race)
2026-03-19 13:10:09 -07:00
saravanakumardb1
79e704286f
feat(react-auth): include productId in login/register request bodies
...
When productId is configured via createAuthProvider({ productId }),
it is now included in the login and register POST bodies alongside
email/password. Previously it was only injected for OAuth calls.
This is required by platform-service which validates productId on
all auth endpoints.
2026-03-18 20:54:20 -07:00
root
885ee2d504
feat(events): add durable event bus worker path
2026-03-14 16:02:40 +00:00
root
b7c8e4fbef
test(router): tighten routing and telemetry assertions
2026-03-14 14:53:43 +00:00
root
8ad3e1be34
test(core): strengthen app and auth assertions
2026-03-14 14:25:18 +00:00
root
50fc9c93c5
test(llm-router): cover local ollama inference
2026-03-14 06:41:08 +00:00
root
7616901683
test(workspace): harden service bootstrap and sync coverage
2026-03-14 06:40:10 +00:00
root
128207ac21
fix(testing): stabilize workspace test dependencies
2026-03-14 06:35:29 +00:00
root
2b4fccb744
feat(queue): add durable worker runtime and extraction integration
2026-03-14 06:25:10 +00:00
root
bf2c285e41
feat(llm-router): unify local ollama routing
2026-03-14 06:17:17 +00:00
root
66a11c5713
Add Azurite-backed blob storage for prototype
2026-03-14 05:45:43 +00:00
root
a5e8890df2
Add Cosmos emulator prototype support
2026-03-14 05:24:01 +00:00
saravanakumardb1
5195f9c052
fix(platform): production readiness — admin-web client bundling, config sub-path exports, stale tests
...
- dashboards/admin-web: split product-constants.ts for client-safe imports
- dashboards/admin-web: serverExternalPackages + webpack fallbacks for @bytelyst/config
- dashboards/admin-web: instrumentation.ts uses @bytelyst/config/keyvault sub-path
- packages/config: add ./keyvault and ./product-identity sub-path exports
- packages/feedback-client: fix stale test expectation (TODO-1 → actual error message)
- packages/sync: fix reprocessFailed test (flush already pushes items)
2026-03-12 16:49:15 -07:00
saravanakumardb1
9438085cc0
fix(blob): rewrite tests for storage-delegated API
...
- Old tests imported removed functions (getBlobServiceClient, getContainerClient)
- Old tests mocked @azure/storage-blob directly but blob now delegates to @bytelyst/storage
- New tests use MemoryStorageProvider for functional validation
- Tests cover: isBlobStorageConfigured (4 cases), storage provider/bucket ops (5 cases), BLOB_CONTAINERS (1 case)
- 10/10 tests passing (was 2/8)
2026-03-12 16:44:52 -07:00
saravanakumardb1
4ca9b73d75
fix(platform): build react-native-platform-sdk + fix admin-web typecheck errors
...
- react-native-platform-sdk: add tsconfig.json + 13 source files (core, auth, telemetry, feature-flags, kill-switch, broadcasts, surveys)
- react-native-platform-sdk: React hooks + providers wrapping platform-service APIs via fetch
- admin-web: fix ThemeEditor.tsx + themes/active/route.ts lysnrai token type access
- tracker-web: product-context import path fix (pre-existing)
2026-03-12 16:36:13 -07:00
saravanakumardb1
2b3130821c
fix(auth): register magic_link event type + use admin productId for enterprise IdP
...
- Register 'auth.magic_link_requested' in @bytelyst/events PlatformEventSchemas
- Remove any-cast from magic-link/routes.ts — now properly typed
- Enterprise IdP creation uses admin's JWT productId instead of hardcoded 'smartauth'
- All 53 auth tests passing
2026-03-12 15:55:09 -07:00
saravanakumardb1
b8f22be677
fix(auth): SDK device/login-events response wrappers + correct API paths
...
- Swift + Kotlin SDKs: listDevices() now unwraps { devices: [...] }
- Swift + Kotlin SDKs: getLoginHistory() now unwraps { events: [...] }
- Swift + Kotlin SDKs: revokeDevice() uses fingerprint param (not doc ID)
- Swift + Kotlin SDKs: revokeAllDevices() uses POST /revoke-all (not DELETE)
- Swift + Kotlin SDKs: getLoginHistory() path /login-events (not /login-events/me)
- Swift + Kotlin SDKs: Device model updated to match backend response fields
- All 53 auth tests passing
2026-03-12 15:42:54 -07:00
saravanakumardb1
f4b9124065
feat(auth): add Phase 5C-5E endpoints + SDK methods — TOTP secret, push approvals, QR auth
...
- GET /auth/mfa/totp/secret — retrieve decrypted TOTP secret for auth app
- POST /auth/mfa/push/create, GET /pending, POST /:id/respond, GET /:id/status
- POST /auth/qr/create, POST /auth/qr/confirm, GET /auth/qr/:id/status
- Kotlin SDK: getTotpSecret, getPendingApprovals, respondToApproval, confirmQrLogin
- Swift SDK: getTotpSecret, getPendingApprovals, respondToApproval, confirmQrLogin
- All 53 auth tests passing
2026-03-12 15:01:51 -07:00
saravanakumardb1
b1b3fe42df
feat(llm-router): add @bytelyst/llm-router — pure-code LLM router for free-tier providers
...
- 4 providers: Groq, OpenRouter, Together AI, Cerebras
- Regex-based prompt classifier (code/math/reasoning/creative/general)
- Instance-level round-robin state (no shared module globals)
- Sliding-window health tracker (latency, error rate, rate-limit rate)
- Auto-fallback on 429/5xx with per-attempt latency tracking
- Telemetry hook for all routing decisions (auto + explicit)
- OpenRouter recommended headers (HTTP-Referer, X-Title)
- 47 tests across 5 test files, zero runtime deps
2026-03-12 13:45:49 -07:00
saravanakumardb1
ae13abfab2
fix(auth): address SmartAuth agent review gaps — Swift mock wiring, passkey SDK consistency, device list parity, JSDoc, SSR docs
2026-03-12 12:27:08 -07:00
saravanakumardb1
067a23449f
feat(auth): SmartAuth admin-web — OAuth proxy, MFA settings, devices, passkeys, security dashboard
...
- Add 15 API proxy routes for SmartAuth endpoints (OAuth, MFA, devices, passkeys, security)
- Add MFA Settings page (/settings/security) with TOTP setup/verify/disable flow
- Add Device Management page (/settings/devices) with trust badges and revoke actions
- Add Passkey Management page (/settings/passkeys) with WebAuthn registration
- Add Admin Security Dashboard (/ops/security) with stats, provider distribution, login events
- Update login page with Google Sign-In button (env-gated) and MFA challenge flow
- Add sidebar nav links for new security pages
- Fix sidebar nav highlighting for nested routes (exact match for parent items)
- Add NEXT_PUBLIC_GOOGLE_CLIENT_ID to .env.example
2026-03-12 11:13:14 -07:00
saravanakumardb1
362b915ea9
feat(auth): SmartAuth backend core — OAuth, MFA, passkeys, device trust, login events
...
Phase 0A: OneAuth schema extension — UserDoc evolution + auth_providers container
Phase 0B: Progressive lockout + IP rate limiting on login
Phase 1A-1B: Google/Microsoft/Apple OAuth + account linking
Phase 1D: Enhanced /auth/me — products, providers, MFA status
Phase 2A-2C: TOTP MFA + challenge flow + admin policies
Phase 3A-3B: WebAuthn passkeys + device trust
Phase 4A: Login events + rule-based risk scoring
New sub-modules: oauth/, mfa/, passkeys/, devices/, login-events/
New containers: auth_providers, auth_mfa, auth_mfa_policies, auth_passkeys, auth_devices, auth_login_events
Tests: 37 new (946 total, all passing), typecheck clean
2026-03-12 10:55:41 -07:00
saravanakumardb1
2c330387fc
feat(auth): native SDK passkey + BLAuthUI Swift + Kotlin social/MFA
...
SmartAuth v2 SDK extensions for both Swift and Kotlin platform SDKs:
Swift (BLAuthClient.swift):
- Social login, MFA, passkeys, providers, devices, step-up, login history
- New types: BLMfaChallenge, BLTotpSetup, BLMfaStatus, BLAuthProvider, etc.
- BLAuthState: added .mfaRequired case
Swift (BLAuthUI.swift) — 4 reusable views:
- BLLoginView, BLMfaChallengeView, BLPasskeyView, BLStepUpSheet
Kotlin (BLAuthClient.kt):
- Social login, MFA, providers, devices, step-up, login history
- MFA challenge detection in login(), encodeMap() helper
Kotlin (BLPasskeyManager.kt) — Credential Manager passkey wrapper
Kotlin (BLAuthUI.kt) — 5 Compose screens matching Swift BLAuthUI
Kotlin build.gradle.kts — Credential Manager dependencies
Tests: Swift (6 methods), Kotlin (5 methods)
2026-03-12 10:55:32 -07:00
saravanakumardb1
53f2a97d40
feat(auth): SmartAuth SDK packages — OAuth, MFA, passkeys, devices, RS256, auth-ui
...
Phase 1C: @bytelyst/auth-client + @bytelyst/react-auth Google Sign-In
- loginWithGoogle/Microsoft/Apple(idToken) → POST /auth/oauth/:provider
- getProviders/linkProvider/unlinkProvider → provider management
- React context: loginWithGoogle, providers state, refreshProviders
Phase 2D: MFA + Social Login SDK + Auth UI
- verifyMfa/setupTotp/verifyTotpSetup/disableMfa/getMfaStatus
- regenerateRecoveryCodes → recovery code management
- React context: mfaRequired/mfaChallenge/mfaMethods state, verifyMfa action
- login() handles MfaLoginResult (returns false, sets MFA state)
- NEW @bytelyst/auth-ui: LoginForm, MfaChallenge, SocialButtons components
Phase 3: Passkeys + Device SDK
- getPasskeyRegisterOptions/verifyPasskeyRegistration
- getPasskeyAuthOptions/verifyPasskeyAuth/listPasskeys/deletePasskey
- listDevices/trustDevice/revokeDevice/revokeAllDevices
Phase 4C: @bytelyst/auth RS256 support
- createJwtUtils({ algorithm: 'RS256', rsaPrivateKey, rsaPublicKey })
- Dual verification: RS256 first, HS256 fallback (migration-safe)
- Remote JWKS support via jwksUrl option
- Backward-compatible: HS256 remains default
Phase 5B: Admin security endpoints
- getSecurityOverview/unlockUser/exportAuthData/cancelDeletion
Tests: 101 total (36 auth-client + 21 react-auth + 13 auth-ui + 31 auth)
Builds: all 4 packages pass tsc
2026-03-12 10:50:56 -07:00
saravanakumardb1
a45aa8c3fe
feat(design-tokens): add flowmonk product-specific token namespace (--fm-*)
2026-03-10 19:35:19 -07:00
saravanakumardb1
ac525563dc
test(packages): add file-store tests for @bytelyst/event-store (9 tests), SSE hub tests for @bytelyst/fastify-sse (12 tests)
2026-03-10 18:48:07 -07:00
saravanakumardb1
07d698e700
feat(packages): add @bytelyst/event-store, @bytelyst/fastify-sse, @bytelyst/webhook-dispatch — reusable event infrastructure for product backends
2026-03-10 18:37:01 -07:00
saravanakumardb1
cfca118c71
feat(fastify-core): add shared optional jwt context
2026-03-06 12:52:49 -08:00
saravanakumardb1
acfad8a042
feat(fastify-core): harden lifecycle and readiness support
2026-03-06 12:47:29 -08:00
saravanakumardb1
00b0555c97
fix(fastify-core,mcp-server): add logLevel to ServiceAppOptions and wire config.LOG_LEVEL so log verbosity is actually honoured at runtime
2026-03-05 12:38:09 -08:00
saravanakumardb1
bf7769bdaa
fix(diagnostics-client): use session-scoped ingest endpoints; update MCP+A2A docs
2026-03-05 10:41:02 -08:00
saravanakumardb1
71b33fcf62
feat(design-tokens): add SSO brand color tokens
2026-03-04 19:54:40 -08:00
saravanakumardb1
2f7e3ad9b6
refactor(design-tokens): improve token validator
...
- ignore hsl(var(--...)) / rgb(var(--...))
- export generated/tokens entry
2026-03-04 18:13:13 -08:00
saravanakumardb1
a33f3cfbd6
docs: design system audit, onboarding guide, and AGENTS.md updates
...
- Comprehensive audit report: DESIGN_SYSTEM_AUDIT_2026-03-03.md
- Token consumption across all 7 repos
- 594 hardcoded colors identified
- Per-product breakdown with migration priorities
- Developer onboarding guide: ONBOARDING.md
- Platform-specific setup instructions
- Migration steps for each product
- Token cheat sheet and troubleshooting
- Updated AGENTS.md with Design System section
- Never hardcode colors rule
- Platform usage patterns (Web, iOS, Android, RN)
- Current adoption status table
- Validation commands
- Added design-tokens package README
- Quick start for all platforms
- Usage examples (CSS, TS, Swift, Kotlin, RN)
- CI integration examples
2026-03-03 21:55:02 -08:00
saravanakumardb1
2a0a59e56c
feat(design-tokens): add validation tooling and React Native bridge
...
- validate-tokens.js: Scan source files for hardcoded colors
- token-coverage.js: Report token adoption percentage per product
- generate-react-native.ts: Generator for Expo/NomGap StyleSheet tokens
All scripts include:
- Cross-platform file detection (.ts, .tsx, .swift, .kt)
- Product-specific token categorization
- Exit codes for CI integration
2026-03-03 21:51:56 -08:00
saravanakumardb1
78d28307ec
feat(design-tokens): v1.1.0 — add product-specific tokens and new categories
...
- Add product token sections:
- peakpulse: activity colors, speed zones, elevation, streaks
- chronomind: urgency levels, focus mode, pomodoro colors
- nomgap: fasting stage colors, autophagy meter, safety
- lysnrai: recording states, processing, dictation mode
- Add new token categories:
- zIndex: layers from hidden (-1) to tooltip (800)
- icon: xs (12) to 2xl (48)
- grid: 12-column system with breakpoints
- opacity: 0-100 scale
- Regenerate all platform outputs (CSS, TS, Kotlin, Swift, React Native)
- Version bumped to 1.1.0
2026-03-03 21:51:20 -08:00
saravanakumardb1
359d6e18a5
feat: Platform Acceleration + A/B Testing Framework
...
Platform Acceleration Phase 1:
- @bytelyst/sync package: Offline-first sync engine with conflict resolution
- Storage adapters: LocalStorage, InMemory, MMKV
- Deduplication, retry with backoff, auto-flush on reconnect
- 12 comprehensive tests
- @bytelyst/dashboard-components package: Shared React components
- ErrorPage, NotFoundPage, LoadingSpinner, LoadingSkeleton, EmptyState, PageHeader
- Theme-aware with CSS custom properties
A/B Testing Framework (Complete):
- Admin UI at /ops/ab-testing with experiments list, variant performance, AI suggestions
- Sidebar navigation with Beaker icon
- 40 tests passing in ab-testing module
All 909 platform-service tests pass.
2026-03-03 19:47:47 -08:00
saravanakumardb1
8749aa211d
fix(feedback-client): update tests to use fetch instead of post
2026-03-03 12:26:02 -08:00
saravanakumardb1
7714ab51fb
fix(events): add missing platform event schemas for campaign engine and notifications
2026-03-03 12:24:39 -08:00
saravanakumardb1
914e344a92
fix(feedback-client): correct ApiClient method usage and types
2026-03-03 12:20:43 -08:00
saravanakumardb1
7f5ff4c790
feat(config): implement P0-1 - Product manifest specification (product.json schema)
...
- Add ProductManifestSchema with Zod validation for product identity
- Support theme tokens, cosmos containers, feature flags, ports
- Add loadProductManifest(), validateProductManifest(), resolveTheme()
- Export all schemas and types from config package index
2026-03-03 10:01:40 -08:00
saravanakumardb1
fc8f8d33dc
feat(kotlin-platform-sdk): add diagnostics module (Phase 2.3)
...
New diagnostics package in kotlin-platform-sdk:
- DiagnosticsTypes: Session, TraceSpan, LogEntry, Breadcrumb, NetworkRequest
- DiagnosticsClient: singleton with StateFlow for reactive state
- BreadcrumbTrail: ring buffer (max 100) for timeline
- NetworkInterceptor: OkHttp interceptor for HTTP capture
- DeviceStateCollector: battery, memory, storage, network
- 16+ JUnit tests for types and breadcrumbs
Features:
- configure()/start()/stop() lifecycle
- trace() suspend span wrapper
- log() with breadcrumb integration
- ETag-based config polling
- 30-second batch flush
2026-03-03 09:31:59 -08:00
saravanakumardb1
abcf817cb3
feat(swift-diagnostics): implement Phase 2.2 Swift Client SDK
...
New package ByteLystDiagnostics with:
- Core types: DiagnosticsSession, TraceSpan, LogEntry, Breadcrumb
- DiagnosticsClient: actor-based singleton with polling
- BreadcrumbTrail: ring buffer (max 100) for timeline
- NetworkInterceptor: URLProtocol-based HTTP capture
- DeviceState: battery, memory, storage, network, thermal
- 20+ XCTest unit tests
Features:
- configure()/start()/stop() lifecycle
- trace() async span wrapper
- log() with breadcrumb integration
- breadcrumb() manual timeline markers
- ETag-based config polling
- 30-second batch flush
Platforms: iOS 15+, macOS 13+, watchOS 8+, tvOS 15+
2026-03-03 09:28:11 -08:00
saravanakumardb1
45dbb789a1
feat(react-native): React Native SDK foundation for NomGap
...
- package.json with React Native/Expo peer dependencies
- Main index.ts with module exports for all platform services
- Providers and hooks for auth, telemetry, feature flags, kill switch, broadcasts, surveys
2026-03-03 08:40:24 -08:00
saravanakumardb1
8acb8db7d7
feat(diagnostics-client): implement Phase 2.1 TypeScript SDK
...
New package @bytelyst/diagnostics-client with:
- DiagnosticsClient: singleton with polling for active sessions
- BreadcrumbTrail: ring buffer (max 100) for timeline
- NetworkInterceptor: fetch wrapper for HTTP capture
- DeviceState: memory, storage, network collection
- 21 Vitest tests (all passing)
2026-03-03 08:35:00 -08:00
saravanakumardb1
18dd263797
feat(sdk): Push deep link routing for all platforms
...
- TypeScript: DeepLinkRouter with URL parsing and handler registration
- Swift: BLDeepLinkRouter with iOS URL handling and Logger integration
- Kotlin: DeepLinkRouter with Android Uri parsing and handler mapping
- Common screen constants: broadcasts, surveys, settings, profile, etc.
2026-03-03 08:33:56 -08:00
saravanakumardb1
6e0b6c33c9
test(admin-web): Add Playwright E2E tests for broadcasts and surveys
...
- Broadcasts: list, create, target, clone, pause/resume, metrics, delete
- Surveys: list, create with NPS/questions, conditional logic, activate/pause
- Integration: navigation, targeting, incentives, export
2026-03-03 08:31:31 -08:00
saravanakumardb1
55a1256d8b
docs(swift,kotlin): Add comprehensive SDK READMEs with broadcast and survey examples
...
- Swift SDK README: Installation, Broadcast/Survey clients, SwiftUI integration, push notifications
- Kotlin SDK README: Gradle setup, Jetpack Compose components, FCM integration
2026-03-03 08:30:26 -08:00
saravanakumardb1
80df7c1c1e
docs(packages): Add comprehensive README for broadcast-client and survey-client
...
- Installation, quick start, API reference
- React integration examples with hooks and providers
- Offline support documentation
- Type definitions and error handling
2026-03-03 08:29:07 -08:00
saravanakumardb1
b472f73c94
feat(platform-sdk): Phase 4.2/4.3 - iOS and Android native UI components
...
- BLInAppMessageUI.swift: Banner + Modal SwiftUI components
- BLSurveyUI.swift: Survey modal with all 9 question types for iOS
- BroadcastUI.kt: Banner + Modal Jetpack Compose components
- SurveyUI.kt: Survey modal with all 9 question types for Android
2026-03-03 08:20:01 -08:00
saravanakumardb1
6027d618b7
feat(kotlin-sdk): Phase 3.4 - Broadcast and Survey clients
...
- BLBroadcastClient.kt: In-app message fetch, read/dismiss, click tracking, polling
- BLSurveyClient.kt: Survey fetch, start/submit/complete, offline cache, polling
- Full coroutine support with Result<T> return types
2026-03-03 07:44:39 -08:00
saravanakumardb1
b96503dc2d
feat(swift-sdk): Phase 3.3 - Broadcast and Survey clients
...
- BLBroadcastClient.swift: In-app message fetch, read/dismiss, click tracking, polling
- BLSurveyClient.swift: Survey fetch, start/submit/complete, offline cache, polling
2026-03-03 07:40:56 -08:00
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