Commit Graph

86 Commits

Author SHA1 Message Date
saravanakumardb1
421a7cc7f1 feat(scripts): Tier 3 complete \u2014 efforise + mac_tooling done
Scanner refinements:
- Exempt mac_tooling (standalone forensics toolkit, not a product)
- Skip /theme/colors.ts /theme/tokens.ts /theme/palette.ts (token sources)
- Skip CSS custom property DEFINITIONS even with embedded gradients/multiple hex
- Skip [stroke='#hex'] / [fill='#hex'] Recharts attribute SELECTORS (not styling)

Cumulative progress:
  Tier 1 critical:        13 \u2192 0 \u2713
  Tier 2 common_plat hex: 59 \u2192 0 \u2713
  Tier 3 medium repos:    57 \u2192 0 \u2713 (efforise fixed, mac_tooling exempt)

Total: 1402 \u2192 1353. Hex: 388 \u2192 288. 13 of 19 repos hex-clean.

Next: Tier 4 (mindlyst 92, fastgap 89, flowmonk 107).
2026-05-23 14:45:05 -07:00
saravanakumardb1
f1ebff5514 feat(scripts+ui): Tier 2 complete \u2014 common_plat 0 hex findings (was 59)
Scanner refinements:
- Exclude services/<svc>/src/        (Fastify backends, not UI)
- Exclude packages/config/           (schema/defaults, not UI)
- Exclude packages/devops/           (internal tooling)
- Exclude packages/create-app/.../templates (scaffolder templates)
- Exclude *.storybook/, /stories/, *.stories.{ts,tsx} (demo/docs)
- Exclude SVG fill=, stroke= hex (brand-mandated, e.g. Google G logo)
- Exclude ThemeEditor.tsx, theme-defaults.* (their content IS hex)
- Exclude /api/themes/ routes (server-side defaults)

Source fixes in shared packages (high leverage \u2014 consumed by every product):
- packages/auth-ui/src/*Form*.tsx + OnboardingShell + MfaChallenge (7)
- packages/dashboard-shell/src/{TopBar,ProfilePage}.tsx (3)
- dashboards/tracker-web/src/app/health/page.tsx (6)

All use the canonical var(--bl-<token>, #fallback) pattern that:
- Lets product themes override (e.g., each product sets --bl-danger differently)
- Falls back to a sensible default if tokens haven't loaded yet (defensive)

common_plat hex: 59 \u2192 0 \u2713 (Tier 2 complete)
Ecosystem total: 1569 \u2192 1402

Tier progress:
  Tier 1 (critical):       13 \u2192 0 \u2713
  Tier 2 (common_plat hex): 59 \u2192 0 \u2713
  Tier 3 (mac_tooling, efforise): NEXT
  Tier 4 (mindlyst, fastgap, flowmonk)
  Tier 5 (non-hex rules)
2026-05-23 14:37:51 -07:00
saravanakumardb1
c3362051e1 feat(scripts): Tier 1 complete \u2014 0 critical findings remaining
Scanner refinement: recognize TS literal-type discipline pattern.

When a TS/TSX file declares:
  type Doc = { productId: 'mindlyst'; ... }
the matching object-literal values:
  const doc: Doc = { productId: 'mindlyst', ... }
are TYPE-SYSTEM-REQUIRED, not hardcode violations. The literal type
constrains the field at compile time; the runtime value MUST match.
This is intentional Cosmos discipline used in MindLyst's
ecosystem-phase{1,3}.ts integration modules.

Implementation: if a TS/TSX finding contains a product ID literal AND
the same file declares 'productId: "<id>";' as a type, skip the finding.

Tier 1 progress:
  T1.1 voice_ai_agent churn-alert.ts \u2014 commit 2281b4b (-2 critical)
  T1.2 multimodal cosmos.ts          \u2014 commit 7d61713 (-1 critical)
  T1.3 ecosystem-phase1.ts (5)       \u2014 scanner recognizes TS pattern (-5)
  T1.4 ecosystem-phase3.ts (5)       \u2014 scanner recognizes TS pattern (-5)

Critical findings: 13 \u2192 0 \u2713

Total ecosystem findings: 1582 \u2192 1569. Next: Tier 2 (shared @bytelyst
packages in common_plat with ~59 hex findings).
2026-05-23 14:32:42 -07:00
saravanakumardb1
d5d30ed912 feat(scripts): scanner precision tweaks + Phase 2b complete (8 repos clean)
Scanner refinements eliminate 3 false-positive categories:

1. tailwind.config.{ts,js,cjs,mjs} \u2014 these declare color palettes
   for downstream Tailwind classes; the hex is the definition.
2. **/backend/** files \u2014 backend modules don't do UI styling. Hex
   values there are domain data (theme presets, zone colors, agent
   accent colors) stored in Cosmos / sent to clients as data.
3. /tools/{color-picker,markdown-preview,qr-code,image-to-base64,
   regex-tester}/ pages in productivity_web \u2014 these tools manipulate
   hex/color values as their primary content, not for styling.
4. HTML numeric character references like &#128196; \u2014 they encode
   Unicode characters, not hex colors (digits subset of hex fool regex).
5. themeColor: metadata in Next.js layouts (PWA manifest spec).

Phase 2b fixes pushed to:
- learning_ai_jarvis_jr        (1 hex \u2192 0)  commit bf9e1c7
- oss/learning_ai_claw-cowork  (2 real hex \u2192 0) commit 9017dd8
(productivity_web 9 \u2192 0 and voice_ai_agent 16 \u2192 0 cleared automatically
by the scanner refinement, no source changes needed in those repos.)

Cumulative progress:
  Total findings:  2548 (Phase 0 start) \u2192 1577 (-38%)
  web-hardcoded-hex: 465 \u2192 406 (-13%)

Repos at 0 hex findings (8/19):
- learning_ai_smart_auth     learning_ai_auth_app
- learning_ai_talk2obsidian  learning_ai_local_memory_gpt
- learning_ai_trails         learning_ai_local_llms
- learning_ai_jarvis_jr      learning_ai_productivity_web
- learning_voice_ai_agent    oss/learning_ai_claw-cowork

Remaining hex-heavy repos:
- learning_ai_flowmonk           107
- learning_multimodal_memory      94
- learning_ai_fastgap             89
- learning_ai_common_plat         59
- learning_ai_efforise            39
- learning_ai_mac_tooling         18
2026-05-23 14:23:55 -07:00
saravanakumardb1
616e973866 feat(scripts): skip themeColor metadata + record 4 hex-clean repos
Scanner refinement:
- Add themeColor: exception. Next.js PWA metadata 'themeColor' is a
  W3C Web App Manifest field that must be a literal hex string;
  CSS custom properties cannot be used. Skipping these is correct.

Baseline regenerated to reflect fixes pushed to:
- learning_ai_talk2obsidian   (1 hex \u2192 0)  commit d20848a
- learning_ai_local_memory_gpt (1 hex \u2192 0)  commit a5def1c
- learning_ai_trails           (1 hex \u2192 0)  commit 10549e6
- learning_ai_local_llms       (2 hex \u2192 0)  commit ca853f1

Total ecosystem hex findings: 465 \u2192 457
4 repos remain at 0 findings: talk2obsidian, local_memory_gpt,
smart_auth, auth_app.
2026-05-23 14:16:17 -07:00
saravanakumardb1
14ab38e49e feat(scripts): precision-tune rule violation scanner (hex false positives)
Three precision improvements that drop total findings from 2548 to 1643
without losing real violations:

1. web-hardcoded-hex: switch from grep -oE to grep -nE so the scanner
   can examine each match in CONTEXT, then apply context filters:
   - Skip CSS custom property DEFINITIONS:  '--bl-accent: #5A8CFF'
   - Skip var(--token, #fallback) patterns: defensive design-token
     fallbacks for boot-order safety, not raw hardcodes
   - Skip globals.css, *.tokens.*, *Theme.{ts,tsx,swift,kt} files
   - Skip design-system/ and color-picker/markdown-preview tool pages

2. b5-hardcoded-product-id: scripts/ exclusion (was previously bypassed
   for the script case but still caught churn-alert.ts genuinely).

3. Updates baseline report. Findings by category:

   Before                              After
   -----                                -----
   web-hardcoded-hex       1370        465  (-66%)
   b7-emoji-in-code         465        465
   b4-python-print          351        351
   ts-any-type              249        249
   b4-console-log            93         93
   b5-hardcoded-product-id   13         13
   b4-swift-print             7          7
                          ----        ----
   Total                  2548       1643

Remaining hex findings are now substantively real:
  - flowmonk:  114 (zone seed data: { color: '#5A8CFF' })
  - fastgap:   102 (BodyCanvas organ colors, organ-data.ts)
  - mindlyst:   97 (mixed UI + data)
  - common_plat: 59 (brand colors in login page: Google #4285F4 etc.)
  - efforise:   39
  - mac_tooling: 18

These fall into three classes which will be triaged in Phase 2:
  A. Brand colors (Google login etc.) - keep, document as exceptions
  B. Data seeds (zone colors, category colors) - migrate to design tokens
  C. Inline styling (color: '#fff') - replace with var(--xx-token)
2026-05-23 14:10:59 -07:00
saravanakumardb1
4967b125fd feat(scripts): ecosystem-wide rule violation scanner + baseline report
Adds scripts/check-rule-violations.sh: a marker-based, repo-agnostic
scanner that audits every repo in repos.txt for violations of the
canonical rules in AI.dev/SKILLS/agent-behavior-guidelines.md plus
common per-repo MUST NOT rules.

Rules currently scanned (7):
- b4-console-log    \\  console.log in non-test, non-script TS/JS
- b4-swift-print    \\  print() in non-test Swift
- b4-python-print   \\  print() in src/tools/backend-python (CLIs excluded)
- ts-any-type       \\  any type in non-test TS source
- web-hardcoded-hex \\  #rgb / #rrggbb literals outside design-tokens
- b5-hardcoded-product-id \\ literal product ID strings outside config
- b7-emoji-in-code  \\  decorative emojis (faces/food/etc.) in source

Precision filters baked in:
- Cross-product UI in common_plat dashboards exempted from product-id rule
- TS literal type definitions exempted from product-id rule
- JSDoc/docstring comment lines exempted from product-id rule
- scripts/ directories exempted from console.log/print rules (CLIs print)
- CLI entrypoint files (cli.py, __main__.py) exempted from python-print
- Sandbox dirs (__LOCAL_LLMs, chat-history, __experiments) excluded
- Unicode 'Miscellaneous Symbols' block (✓✗⚠★☐) NOT flagged as emoji
  (universally used as UI status indicators, not decorative)

Bash 3.2 compatible (no associative arrays). Runs in ~13 seconds across
19 repos.

Output:
- reports/rule-violations-YYYY-MM-DD.md   (human-readable, dated, gitignored)
- reports/rule-violations-YYYY-MM-DD.json (machine-readable, dated, gitignored)
- reports/rule-violations-baseline.md     (this commit's snapshot, committed)

Baseline (2026-05-23) totals:
  Total findings:  2548 across 19 repos
  - critical: 13   (real hardcoded product IDs in non-canonical locations)
  - major:    1821 (mostly hardcoded hex colors + console.log)
  - minor:    714  (any type, decorative emojis)

By rule:
  web-hardcoded-hex       1370
  b7-emoji-in-code         465
  b4-python-print          351
  ts-any-type              249
  b4-console-log            93
  b5-hardcoded-product-id   13
  b4-swift-print             7

Repos clean (0 findings):
  - learning_ai_smart_auth (docs-only)
  - learning_ai_auth_app (small native scaffolding only)

Repos with highest finding counts:
  - learning_ai_mac_tooling: 585 (Python backend + React dashboard)
  - learning_ai_common_plat: 521 (large shared platform)
  - learning_ai_fastgap:     409
  - learning_ai_multimodal:  312

Next phase: per-repo triage and fix, processing repos in order of
ascending complexity per the roadmap (see prior planning conversation).
The scanner is the gating tool for that work.
2026-05-23 14:02:14 -07:00
saravanakumardb1
88b57478aa feat(drift-check): forbid per-tool subdirectory AGENTS.md duplicates
Extends scripts/check-agent-docs-drift.sh to catch a second class of
agent-doc drift: per-tool subdirectory duplicates introduced by an
earlier 'centralize AI agent documentation references' refactor.

The refactor (visible in learning_ai_clock origin/main, commit c73fda7)
created .claude/AGENTS.md, .cline/AGENTS.md, .cursor/AGENTS.md as 1-line
redirect pointers, plus .devin/AGENTS.md (218 lines) and .devin/CONTEXT.md
(206 lines) with full duplicate documentation. All five duplicate the
canonical repo-root AGENTS.md.

The drift check now exits 1 if any of those five paths exist in any
repo listed in repos.txt. Also renumber comment markers (was 1..5,
now 1..6) and update the header comment.

Verified: bash scripts/check-agent-docs-drift.sh exits 0 with
'17 repos in sync' across the ecosystem.
2026-05-23 13:07:26 -07:00
saravanakumardb1
2fd49bb5c9 chore(packages): publish @bytelyst/kill-switch-client@0.1.6 to Gitea registry
The Gitea outdated-package detector reported @bytelyst/kill-switch-client
as the only @bytelyst/* package whose local content fingerprint differed
from the version already published to the registry. All other 63
packages in packages/ were UP-TO-DATE.

Publishing details:
  Before:  0.1.5 (registry + local)
  After:   0.1.6 (script auto-bumped patch + published)
  Files:   9 (dist/index.* + package.json), 3.2 kB tarball,
           shasum a9110243046f12be01b16f48f962ab64c0971d80
  Target:  http://localhost:3300/api/packages/bytelyst/npm/ (corp SSH tunnel)

Detected via:
  bash scripts/gitea/publish-outdated-packages.sh --dry-run
    -> Summary: 63 up-to-date, 1 changed, 1 skipped, 0 errors

Published via:
  bash scripts/gitea/publish-outdated-packages.sh \
       --skip-build \
       --filter @bytelyst/kill-switch-client
    -> + @bytelyst/kill-switch-client@0.1.6

Re-verification dry-run after publish:
  -> Summary: 64 up-to-date, 0 changed, 1 skipped, 0 errors
  -> 'All packages are up to date. Nothing to publish.'

This bump touches two files:
  - packages/kill-switch-client/package.json (version 0.1.5 -> 0.1.6)
  - scripts/gitea/.publish-manifest.json (content-hash bookkeeping
    so future dry-runs don't re-flag this version as needing publish)

Used --skip-build because 'pnpm build' would have tried to build
services/platform-service, which currently has 3 unrelated TS errors
(missing @bytelyst/devops/server module + 2 ProductIdentity property
mismatches). Built only @bytelyst/* packages via
'pnpm --filter ./packages/** build' first (all 65 packages built
clean) and then ran the publisher with --skip-build.
2026-05-23 12:32:49 -07:00
saravanakumardb1
088a9cabd6 fix(agent-docs): update AI.dev guides + script UX after single-source migration
Followup audit of the single-source-of-truth agent-docs rollout. Several
AI.dev prompts and skills still taught agents the old 8-file pattern (which
would re-introduce drift) and the generator script emitted a misleading
summary in --no-commit mode.

AI.dev guides:
- Delete AI.dev/SKILLS/update-agent-docs.md — entire doc taught the old
  8-file pattern. Canonical reference is now
  .windsurf/workflows/repo_update-agent-docs.md.
- AI.dev/SKILLS/index.md + README.md: replace dangling 'Update Agent
  Documentation' link with pointers to agent-behavior-guidelines.md,
  agent-onboarding.md, and the workflow doc.
- AI.dev/SKILLS/scan-repo-context.md: remove instructions to read
  .windsurfrules / write .cursorrules. Point at the canonical behavior file.
- AI.dev/PROMPTS/new-product-scaffold.md: remove .windsurfrules and CLAUDE.md
  from the scaffold tree. Add deprecated-files callout + regeneration hint.
- AI.dev/PROMPTS/agents-md-sync.md: drop 'Step 4 update CLAUDE.md', point at
  the generator instead. Remove CLAUDE.md from `git add`.
- AI.dev/PROMPTS/ecosystem-audit.md: replace 'CLAUDE.md exists?' with
  'canonical-behavior-pointer block present? legacy files absent?'.

Script UX:
- scripts/update-agent-docs.sh: stop printing 'All repos already in sync'
  when --no-commit suppressed commits or --dry-run was used. Emit accurate
  per-mode summaries instead.
2026-05-23 12:06:28 -07:00
saravanakumardb1
c04ee5f054 feat(agent-docs): single-source-of-truth pattern for agent instructions
Establish a single canonical source for ecosystem-wide AI agent behavior
rules, eliminating duplication across the 8 agent-config files that each
repo used to maintain.

New canonical sources (this repo only):
- AI.dev/SKILLS/agent-behavior-guidelines.md  (Karpathy + ByteLyst rules)
- AI.dev/SKILLS/agent-onboarding.md           (read-order index)

Generator rewrite (scripts/update-agent-docs.sh):
- Deletes legacy files that duplicated AGENTS.md:
    .cursorrules, .windsurfrules, .clinerules, CLAUDE.md
- Regenerates .github/copilot-instructions.md as a thin pointer (no rules).
- Regenerates .aider.conf.yml and .editorconfig.
- Idempotently prepends a canonical-behavior-pointer block to AGENTS.md.
- Supports --dry-run and --no-commit flags.

Drift check (scripts/check-agent-docs-drift.sh):
- Fast marker-based check across all repos.
- Verifies legacy files absent, AGENTS.md pointer present, copilot/aider/
  editorconfig markers intact.

Workflow doc updated: .windsurf/workflows/repo_update-agent-docs.md

Repos.txt: added learning_ai_talk2obsidian (was missing from canonical list).

This repo's own agent files are migrated by the same generator:
- Removed: .cursorrules, .windsurfrules, .clinerules, CLAUDE.md
- Updated: AGENTS.md (pointer block prepended)
- Updated: .github/copilot-instructions.md (rewritten as pointer)
- Updated: .aider.conf.yml (canonical format)

Karpathy attribution: behavior rules adapted from
https://github.com/multica-ai/andrej-karpathy-skills
2026-05-23 11:55:19 -07:00
saravanakumardb1
50db3ea621 chore(packages): bump versions for Gitea registry publish 2026-05-23 10:17:42 -07:00
saravanakumardb1
83caf264df chore: publish 8 outdated packages to Gitea registry
Published:
  - @bytelyst/accessibility 0.1.6
  - @bytelyst/billing-client 0.1.0 (new)
  - @bytelyst/config 0.1.6
  - @bytelyst/create-app 0.1.4
  - @bytelyst/design-tokens 0.1.6
  - @bytelyst/subscription-client 0.1.6
  - @bytelyst/ui 0.1.8
  - @bytelyst/webhook-dispatch 0.1.6
2026-05-14 17:35:04 -07:00
root
35bf51302c feat(admin-web): adopt trading web deployment model with docker-compose
- Add admin-web to docker-compose.yml following trading pattern
- Update admin-web Dockerfile with multi-stage build and metadata
- Add build metadata (commit SHA, branch, timestamp, author, message)
- Add hotcopy deployment script for quick updates
- Add unauthorized page and rate limiting library
- Add runtime utilities and auto-refresh hook

Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-11 03:24:33 +00:00
root
b6562b1de4 fix(ci): correct Gitea org name ByteLyst -> bytelyst in publish scripts
Generated with [Devin](https://cli.devin.ai/docs)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-05-10 02:23:15 +00:00
e619fa8eb5 chore(docker): add interactive cleanup menu 2026-05-05 18:28:55 -07:00
saravanakumardb1
01cc5b35a4 feat(scripts): add .npmrc template + sync/drift-check scripts (DRY)
Single source of truth: scripts/npmrc.template
- sync-npmrc.sh: copies template to all 13 product repos
- check-npmrc-drift.sh: detects drift (exit 1 if any repo drifted)

Also synced 4 drifted repos: MindLyst, NoteLett, ActionTrail, Talk2Obs.
Prevents future gitea.bytelyst.com hardcoding issues.
2026-04-14 11:48:55 -07:00
saravanakumardb1
a107b2e342 fix: standardize common-plat .npmrc + publish script for corp network
- .npmrc: use ${GITEA_NPM_HOST:-localhost}:3300 (was hardcoded gitea.bytelyst.com)
- publish-local-packages.sh: use ${GITEA_NPM_HOST:-localhost}:3300 fallback
- fix-npmrc-all-repos.sh: add common-plat to repo list, skip self for
  workspace link, add nested .npmrc scanning (e.g. dashboard/.npmrc)
2026-04-13 10:51:12 -07:00
saravanakumardb1
7208506412 chore(scripts): add fix-npmrc-all-repos.sh for cross-repo registry standardization
Replaces hardcoded gitea.bytelyst.com URLs with env-var-based
${GITEA_NPM_HOST:-localhost}:3300 and adds common-plat workspace
links. Supports dry-run and --apply modes.

Addresses recurring TLS proxy failures on corp network.
2026-04-13 10:34:07 -07:00
saravanakumardb1
deff216c7e refactor(gitea): robust manifest-based publish pipeline
publish-outdated-packages.sh rewritten:
- Manifest-based change detection (no registry tarball downloads)
- Single pack per package (not double-pack for check+publish)
- Deterministic content hash: normalizes version, publishConfig,
  and @bytelyst/* dep versions (workspace:* resolution noise)
- Single metadata fetch per package (cached in-process)
- Fixed .npmrc overwrite bug that broke auth during publish phase
- npm_clean() helper strips all proxy env vars uniformly

release-packages.sh fixed:
- .npmrc now includes scoped registry + proxy=false for corp
- Unified corp/home publish path (no duplicated code)
- version_on_registry() uses proxy-stripped env
- Registry credential check uses proxy-stripped env

CI workflow: switched to publish-outdated-packages.sh --skip-build
2026-04-13 01:47:03 -07:00
saravanakumardb1
85bb860382 fix(gitea): fix publish auth — scoped registry + proxy=false in .npmrc
Root causes found:
1. publishConfig.registry in each package.json overrides --registry CLI
   flag, causing npm to hit gitea.bytelyst.com through corp proxy.
2. Global ~/.npmrc proxy settings (NPM_CONFIG_PROXY env vars) route
   localhost:3300 through the corporate proxy.
3. No .npmrc with auth token was created for npm publish to use.

Fix: generate a proper .npmrc in WORK_DIR with:
- _authToken for registry auth
- @bytelyst:registry scoped override (bypasses publishConfig)
- proxy=false + https-proxy=false on corp network
- Unified corp/home publish path (both use same .npmrc)

Token scope issue still open: current GITEA_NPM_TOKEN has read:package
but not write:package — needs regeneration in Gitea UI.
2026-04-13 00:21:13 -07:00
saravanakumardb1
54a06e227a refactor(scripts): move 5 Gitea scripts into scripts/gitea/ subdirectory
Moved:
  publish-local-gitea-packages.sh  → gitea/publish-local-packages.sh
  publish-outdated-gitea-packages.sh → gitea/publish-outdated-packages.sh
  release-gitea-packages.sh        → gitea/release-packages.sh
  run-registry-tests.sh            → gitea/run-registry-tests.sh
  harden-publish-config.sh         → gitea/harden-publish-config.sh

Dropped -gitea- infix (redundant with folder name).

Fixed in every moved script:
- REPO_ROOT: ../ → ../../ (one level deeper)
- Internal cross-reference comments

Updated all 10 referencing files:
- package.json (release script path)
- .gitea/workflows/ci.yml (publish step)
- 3 workflow .md files (publish-outdated usage)
- 3 devops docs (publish-local + registry-tests refs)
- 2 internal comment cross-references
2026-04-13 00:02:55 -07:00
saravanakumardb1
97c0ad9554 fix(scripts): add NETWORK-aware registry resolution to release script
release.sh → release-gitea-packages.sh:

1. Renamed to clearly describe purpose (Gitea npm package release, not
   a generic release script).

2. Added NETWORK=corp/home detection matching publish-outdated-gitea-
   packages.sh pattern:
   - corp: localhost:3300 SSH tunnel + proxy env var stripping
   - home: Azure VM directly via gitea.bytelyst.com or ~/.gitea_vm_host

3. Added ~/.gitea_npm_token file fallback (same as sibling scripts).

4. Corp publishes now strip HTTP_PROXY/HTTPS_PROXY/npm_config_proxy
   env vars so npm reaches localhost tunnel directly instead of going
   through the corporate proxy (which can't reach the tunnel).

5. Updated package.json 'release' script reference.
2026-04-12 23:56:19 -07:00
root
a7679de295 fix(release): reliable auth, per-package progress logs, clean commits
- Use shared ~/.npmrc via --userconfig for all npm view + publish calls
  (inline --// flags are unreliable on npm v10+ for writes)
- Verify registry credentials upfront before any work begins
- Log each package status inline as scan runs (✓/⊘/→/✗) grouped by workspace
- Suppress noisy npm notice / pnpm progress output; surface only errors
- Move FAILED to its own tracked array; exit non-zero if any publish fails
- Restrict release commits to package.json / pnpm-lock.yaml / .changeset
  (prevents node-compile-cache and other generated dirs being committed)
- Fix pagination bug in registry comparison (was only checking 50 packages)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 05:44:47 +00:00
root
4a0ceb17e3 chore: release version bumps [skip ci] 2026-04-13 05:00:19 +00:00
root
e2259f39ec chore: release version bumps [skip ci] 2026-04-13 04:37:22 +00:00
root
39e48f3241 feat(llm): add FallbackLLMProvider + release pipeline script
- packages/llm: add FallbackLLMProvider (providers/fallback.ts) that
  tries each provider in order, skipping unconfigured or erroring ones;
  wire 'fallback' as a first-class LLMProviderType in factory + types
- packages/llm: improve auto-detection in factory — PERPLEXITY_API_KEY
  and GEMINI_API_KEY trigger auto-selection when no explicit provider set
- scripts/release.sh: new pipeline — rebase from origin/main, build,
  apply changesets, publish outdated packages to Gitea registry, push
- scripts/run-registry-tests.sh: fix Gitea URL health-check to use a
  real package endpoint with auth header instead of bare registry root
- docs: mark Vercel track-B prompts B1–B3 as complete

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 04:21:12 +00:00
saravanakumardb1
755b7fedea feat(scripts): add publish-outdated-gitea-packages.sh
Network-aware script to detect and publish only outdated @bytelyst/*
packages to the Gitea npm registry.

Detection: SHA-256 content fingerprint comparison (local pack vs registry tarball)
Publishing: auto-bumps patch version to avoid collisions with existing versions
Network: NETWORK=corp uses localhost:3300 tunnel, NETWORK=home uses Azure VM

Features:
- --dry-run: detect without publishing
- --filter: check/publish a single package
- --skip-build: skip pnpm build step
- --help: usage info
- Strips publishConfig from tarballs (avoids hardcoded external domain)
- Runs npm publish from /tmp (avoids repo .npmrc scoped registry override)
- Corp: unsets all NPM_CONFIG_*/proxy env vars for localhost publish
2026-04-03 20:04:09 -07:00
705f58c5c5 chore(deploy): remove railway deployment artifacts 2026-04-03 17:05:15 -07:00
saravanakumardb1
53c3565874 fix(cowork-service): audit flush field name mismatch + server test mock gap
BUG: flush-scheduler.ts flushAudit() read 'events' from IPC response but
Rust handle_flush_audit() returns { count, entries }. Audit events were
silently lost (always empty array). Fixed to read 'entries'.

Also fixed:
- server.test.ts: added missing flush-scheduler.js mock (new import in server.ts)
- feature-flags.ts: doc comment '12 flags' → '13 flags'
- flush-scheduler.test.ts: mock data aligned to Rust response shape

49 tests passing, 8 test files, typecheck clean.
2026-04-02 23:02:38 -07:00
root
7f28c5b047 chore(script): fix registry verification 2026-03-31 11:43:35 +00:00
root
0c28231c3b chore(script): add run-registry-tests 2026-03-31 11:37:03 +00:00
root
8b37189829 chore(registry): point packages to gitea.bytelyst.com 2026-03-31 10:53:13 +00:00
root
b1db0d583d feat(dns): add ollama hostname support 2026-03-31 10:07:38 +00:00
e573e98cc1 docs(devops): add llmlab dns handoff 2026-03-31 02:32:01 -07:00
356c96e1d9 docs(devops): capture godaddy dns cutover and vm handoff 2026-03-31 02:25:58 -07:00
saravanakumardb1
c5458c4c0e ci: update CI/CD configuration 2026-03-29 10:50:53 -07:00
saravanakumardb1
6f2572e90b chore(ci): add local token drift check script
- Standalone script complementing the CI token-drift job
- Supports --fix mode to regenerate and stage changes
- Run: bash scripts/check-token-drift.sh
2026-03-28 01:01:06 -07:00
saravanakumardb1
409144a2ef chore(scripts): add lint-infra, typecheck-all, test-all cross-repo scripts 2026-03-26 23:15:16 -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
911539f228 fix(workflows): support all repos in agent doc sync 2026-03-24 16:10:41 -07:00
saravanakumardb1
e8d145a130 fix(workflows): normalize repo management coverage 2026-03-24 16:05:12 -07:00
saravanakumardb1
f1793656f8 feat(scripts): make GITEA_NPM_HOST conditional on NETWORK
- NETWORK=corp → GITEA_NPM_HOST=localhost (local Gitea Docker)
- NETWORK=home → GITEA_NPM_HOST from ~/.gitea_vm_host (Azure VM)
- Fallback: localhost if ~/.gitea_vm_host doesn't exist

This enables all repo .npmrc files to use ${GITEA_NPM_HOST}:3300
instead of hardcoded localhost:3300, matching the existing
.npmrc.docker pattern used during Docker builds.
2026-03-24 15:45:59 -07:00
saravanakumardb1
6fbe8687ee fix(scripts): switch-network.sh — add NO_PROXY + GITEA_NPM_TOKEN management
- Add NO_PROXY/no_proxy/NPM_CONFIG_NOPROXY=localhost,127.0.0.1 when
  NETWORK=corp so local services (Gitea npm registry, Cosmos emulator,
  Azurite) bypass the corporate proxy. Previously NO_PROXY was only set
  in .zshrc line 5, making the script not self-contained.
- Add GITEA_NPM_TOKEN auto-load from ~/.gitea_npm_token file
  (regardless of NETWORK). Reads are public, but publish needs the
  token. This ensures local pnpm install resolves @bytelyst/* auth.
- Unset NO_PROXY/no_proxy/NPM_CONFIG_NOPROXY when NETWORK=home.
2026-03-24 15:36:46 -07:00
saravanakumardb1
64c9fc8afe fix(docker): preserve peer deps in packed packages 2026-03-23 18:24:57 -07:00
saravanakumardb1
4687351de0 ci: update CI/CD configuration 2026-03-23 18:04:18 -07:00
saravanakumardb1
6d5450d9f7 fix(devops): derive gitea publish auth target from registry url 2026-03-23 15:52:29 -07:00
saravanakumardb1
7116749bbd docs(devops): record local gitea registry rehearsal 2026-03-23 15:48:18 -07:00
saravanakumardb1
17a117f132 fix(docker): pack bytelyst consumer closure for prep 2026-03-22 15:51:17 -07:00
saravanakumardb1
22780b0e7e fix(scripts): add tsconfig.json — fixes pnpm typecheck failure
The scripts/ workspace member had no tsconfig.json, so 'tsc --noEmit'
printed help text and exited 1, breaking 'pnpm typecheck' across the
entire monorepo.
2026-03-21 15:55:27 -07:00