Skip to content

Conversation

Copy link

Copilot AI commented Dec 24, 2025

Complete migration from React 19 to SolidJS using exclusively createMutable from solid-js/store for all state management—no signals, no effects, no external state libraries. Implements JavaScript Proxy-based automatic caching system for transparent localStorage integration.

Changes

Build Configuration

  • package.json: Replaced React deps with solid-js, vite-plugin-solid, lucide-solid, solid-markdown
  • vite.config.ts: Switched from @vitejs/plugin-react to vite-plugin-solid
  • tsconfig.json: Updated JSX config to "preserve" with jsxImportSource: "solid-js"

Core Application

  • index.tsx: React's ReactDOM.createRoot() → SolidJS render()
  • App.tsx: Converted to SolidJS Component with routing logic intact
  • store.ts: New centralized global state using createMutable (auth, theme, navigation) + Proxy-based auto-caching
  • Removed React Context API (ThemeContext)

Proxy-Based Auto-Caching (store.ts)

  • JavaScript Proxy implementation: Automatic cache save/load via property interception
    • Proxy getter: Automatically loads data from localStorage when properties are accessed
    • Proxy setter: Automatically saves data to localStorage when properties are assigned
  • Transparent caching: No explicit cache calls needed in application code
  • Helper functions: For parameterized cache keys (setRepoIssuesCache, setIssueExpandedDataCache, setWorkflowFilesCache)
  • Type safety: Full TypeScript support with proper type inference

Cache Usage Example:

// Before (manual cache service)
const data = getCached<Repository[]>(CacheKeys.repos()) || [];
setCache(CacheKeys.repos(), newData);

// After (Proxy auto-caching)
const data = cache.repos;  // Proxy automatically loads from localStorage
cache.repos = newData;     // Proxy automatically saves to localStorage

// Parameterized cache keys
const issues = cache.repoIssues(owner, repo);  // Auto-loads via function call
setRepoIssuesCache(owner, repo, newIssues);    // Helper for saving

Components (All Converted)

  • Button, Toast, RepoCard, Markdown, ThemeToggle
  • classNameclass, map()<For>, &&<Show>
  • Toast state management via createMutable singleton

Views (All Converted)

  • TokenGate: Full conversion with local createMutable state
  • Dashboard: Complete implementation (438 lines) with all features:
    • Uses Proxy-based auto-caching (cache.repos direct access)
    • Repository CRUD operations
    • Modal management and secrets handling
    const state = createMutable({
      repos: cachedRepos,
      loading: false,
      isCreateModalOpen: false,
      newRepo: { name: '', description: '', private: false, auto_init: true },
      // ... 15+ state properties
    });
    
    // Direct mutations, automatically reactive
    state.loading = true;
    state.repos = await fetchRepositories(props.token);
  • RepoDetail: Complete implementation (310 lines) with all features:
    • 19 state variables managed via createMutable
    • Uses Proxy auto-caching for issues and workflow files
    • Issue creation, listing, and filtering
    • Workflow file references and integration
    • Repository secrets management
    • Modal handling with keyboard shortcuts
  • IssueDetail: Complete implementation (292 lines) with all features:
    • 15 state variables managed via createMutable
    • Uses Proxy auto-caching for expanded issue data
    • Issue comments display and posting
    • Related PRs with merge functionality
    • Workflow runs and deployment tracking
    • Complex nested state (Maps, arrays)

State Management Pattern

All components follow this pattern:

// React
const [items, setItems] = useState([]);
setItems([...items, newItem]);

// SolidJS with createMutable
const state = createMutable({ items: [] });
state.items.push(newItem);  // Directly mutable, auto-tracked

Status

  • ✅ Application builds successfully
  • ✅ All functionality fully operational
  • ✅ 100% migration complete - all views and components converted
  • ✅ Zero usage of createSignal or createEffect
  • ✅ Exclusively createMutable for all reactive state
  • ✅ Proxy-based auto-caching - no manual cache calls needed

Build Metrics

  • TypeScript compilation: PASSING
  • Vite build: PASSING (1.11MB bundle, 340KB gzipped)
  • 1946 modules transformed successfully
Original prompt

This section details on the original issue you should resolve

<issue_title>rewrite using solidjs with createMutable only</issue_title>
<issue_description></issue_description>

Comments on the Issue (you are @copilot in this section)


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 5 commits December 24, 2025 06:01
Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
…sueDetail

Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
Copilot AI changed the title [WIP] Rewrite using SolidJS with createMutable Migrate from React to SolidJS with createMutable-only state management Dec 24, 2025
Copilot AI requested a review from friuns December 24, 2025 06:13
@github-actions github-actions bot temporarily deployed to commit December 24, 2025 06:18 Inactive
@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://694b85cb91fdb8e3917bca25--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: 819f698

@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://694b85cc0fcc29dd87ee13fc--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: 351cbfe

@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://694b85ce1d20c7e2bde6c75e--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: 5bf5891

@friuns
Copy link
Owner

friuns commented Dec 24, 2025

@copilot convert rest code remember prefer createMutable over signal

Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
Copy link
Author

Copilot AI commented Dec 24, 2025

@copilot convert rest code remember prefer createMutable over signal

Completed! All remaining code has been converted to SolidJS using createMutable exclusively.

Converted:

  • ✅ RepoDetail.tsx (310 lines) - 19 state variables via createMutable
  • ✅ IssueDetail.tsx (292 lines) - 15 state variables via createMutable
  • ✅ Fixed Markdown component import

State Management:
All state uses createMutable only - no signals, no effects. Direct mutable assignments throughout:

state.loading = true;
state.issues = await fetchIssues(...);
state.comments = [...state.comments, newComment];

Build: ✅ Passing (commit: ddbc9ee)

The entire application now uses SolidJS with createMutable-only state management as requested.

Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
@friuns
Copy link
Owner

friuns commented Dec 24, 2025

@jules

❌ Workflow Failed

Workflow: Deploy to Netlify
Run: #33
Commit: 30dcf7c
Triggered by: @friuns

❌ deploy

Failed Steps: Install dependencies

📋 View Logs
... (truncated 234 lines)

2025-12-24T06:18:33.4979018Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:33.4979821Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.4980690Z npm warn EBADENGINE }
2025-12-24T06:18:33.4981189Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:33.4981866Z npm warn EBADENGINE   package: '@vercel/nft@1.1.1',
2025-12-24T06:18:33.4982788Z npm warn EBADENGINE   required: { node: '>=20' },
2025-12-24T06:18:33.4983664Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.4984296Z npm warn EBADENGINE }
2025-12-24T06:18:33.4984818Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:33.4985482Z npm warn EBADENGINE   package: 'glob@13.0.0',
2025-12-24T06:18:33.4986221Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:33.4987068Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.4987721Z npm warn EBADENGINE }
2025-12-24T06:18:33.4988235Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:33.4988909Z npm warn EBADENGINE   package: 'undici@7.14.0',
2025-12-24T06:18:33.4989651Z npm warn EBADENGINE   required: { node: '>=20.18.1' },
2025-12-24T06:18:33.4990698Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.4991314Z npm warn EBADENGINE }
2025-12-24T06:18:33.4991834Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:33.4992514Z npm warn EBADENGINE   package: 'minimatch@10.1.1',
2025-12-24T06:18:33.4993269Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:33.4994145Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.4994791Z npm warn EBADENGINE }
2025-12-24T06:18:33.4995316Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:33.4996008Z npm warn EBADENGINE   package: 'path-scurry@2.0.1',
2025-12-24T06:18:33.4996775Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:33.4997632Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.4998288Z npm warn EBADENGINE }
2025-12-24T06:18:33.4998797Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:33.4999481Z npm warn EBADENGINE   package: 'lru-cache@11.2.4',
2025-12-24T06:18:33.5000213Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:33.5001304Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.5001907Z npm warn EBADENGINE }
2025-12-24T06:18:33.5002374Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:33.5003332Z npm warn EBADENGINE   package: 'wrangler@4.56.0',
2025-12-24T06:18:33.5004056Z npm warn EBADENGINE   required: { node: '>=20.0.0' },
2025-12-24T06:18:33.5004877Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:33.5005479Z npm warn EBADENGINE }
2025-12-24T06:18:33.5082881Z npm error code EUSAGE
2025-12-24T06:18:33.5083586Z npm error
2025-12-24T06:18:33.5085779Z npm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.
2025-12-24T06:18:33.5087592Z npm error
2025-12-24T06:18:33.5088536Z npm error Missing: lucide-solid@0.468.0 from lock file
2025-12-24T06:18:33.5090859Z npm error Missing: solid-js@1.9.10 from lock file
2025-12-24T06:18:33.5091629Z npm error Missing: solid-markdown@2.1.1 from lock file
2025-12-24T06:18:33.5092489Z npm error Missing: vite-plugin-solid@2.11.10 from lock file
2025-12-24T06:18:33.5093362Z npm error Missing: seroval@1.3.2 from lock file
2025-12-24T06:18:33.5094152Z npm error Missing: seroval-plugins@1.3.3 from lock file
2025-12-24T06:18:33.5095016Z npm error Missing: property-information@6.5.0 from lock file
2025-12-24T06:18:33.5095866Z npm error Missing: style-to-object@0.3.0 from lock file
2025-12-24T06:18:33.5096686Z npm error Missing: unist-util-visit@4.1.2 from lock file
2025-12-24T06:18:33.5098946Z npm error Missing: babel-preset-solid@1.9.10 from lock file
2025-12-24T06:18:33.5099763Z npm error Missing: merge-anything@5.1.7 from lock file
2025-12-24T06:18:33.5100707Z npm error Missing: solid-refresh@0.6.3 from lock file
2025-12-24T06:18:33.5101405Z npm error Missing: vitefu@1.1.1 from lock file
2025-12-24T06:18:33.5102268Z npm error Missing: babel-plugin-jsx-dom-expressions@0.40.3 from lock file
2025-12-24T06:18:33.5103413Z npm error Missing: @babel/helper-module-imports@7.18.6 from lock file
2025-12-24T06:18:33.5104342Z npm error Missing: @babel/plugin-syntax-jsx@7.27.1 from lock file
2025-12-24T06:18:33.5104852Z npm error Missing: html-entities@2.3.3 from lock file
2025-12-24T06:18:33.5105241Z npm error Missing: is-what@4.1.16 from lock file
2025-12-24T06:18:33.5105663Z npm error Missing: inline-style-parser@0.1.1 from lock file
2025-12-24T06:18:33.5106100Z npm error Missing: @types/unist@2.0.11 from lock file
2025-12-24T06:18:33.5106489Z npm error Missing: unist-util-is@5.2.1 from lock file
2025-12-24T06:18:33.5106933Z npm error Missing: unist-util-visit-parents@5.1.3 from lock file
2025-12-24T06:18:33.5107265Z npm error
2025-12-24T06:18:33.5107512Z npm error Clean install a project
2025-12-24T06:18:33.5107746Z npm error
2025-12-24T06:18:33.5107920Z npm error Usage:
2025-12-24T06:18:33.5108255Z npm error npm ci
2025-12-24T06:18:33.5108479Z npm error
2025-12-24T06:18:33.5108674Z npm error Options:
2025-12-24T06:18:33.5109131Z npm error [--install-strategy <hoisted|nested|shallow|linked>] [--legacy-bundling]
2025-12-24T06:18:33.5109773Z npm error [--global-style] [--omit <dev|optional|peer> [--omit <dev|optional|peer> ...]]
2025-12-24T06:18:33.5110617Z npm error [--include <prod|dev|optional|peer> [--include <prod|dev|optional|peer> ...]]
2025-12-24T06:18:33.5111258Z npm error [--strict-peer-deps] [--foreground-scripts] [--ignore-scripts] [--no-audit]
2025-12-24T06:18:33.5111742Z npm error [--no-bin-links] [--no-fund] [--dry-run]
2025-12-24T06:18:33.5112237Z npm error [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]]
2025-12-24T06:18:33.5112789Z npm error [-ws|--workspaces] [--include-workspace-root] [--install-links]
2025-12-24T06:18:33.5113128Z npm error
2025-12-24T06:18:33.5113485Z npm error aliases: clean-install, ic, install-clean, isntall-clean
2025-12-24T06:18:33.5113810Z npm error
2025-12-24T06:18:33.5114053Z npm error Run "npm help ci" for more info
2025-12-24T06:18:33.5114659Z npm error A complete log of this run can be found in: /home/runner/.npm/_logs/2025-12-24T06_18_30_167Z-debug-0.log
2025-12-24T06:18:33.5328733Z ##[error]Process completed with exit code 1.
2025-12-24T06:18:33.5454622Z Post job cleanup.
2025-12-24T06:18:33.6377708Z [command]/usr/bin/git version
2025-12-24T06:18:33.6412615Z git version 2.52.0
2025-12-24T06:18:33.6453994Z Temporarily overriding HOME='/home/runner/work/_temp/07788165-f03e-46d4-a802-2b927d2097b2' before making global git config changes
2025-12-24T06:18:33.6454862Z Adding repository directory to the temporary git global config as a safe directory
2025-12-24T06:18:33.6459132Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/VibeGithub/VibeGithub
2025-12-24T06:18:33.6497477Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2025-12-24T06:18:33.6528566Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2025-12-24T06:18:33.6754446Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2025-12-24T06:18:33.6774308Z http.https://github.com/.extraheader
2025-12-24T06:18:33.6785920Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2025-12-24T06:18:33.6814813Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2025-12-24T06:18:33.7038353Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2025-12-24T06:18:33.7071632Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2025-12-24T06:18:33.7410726Z Cleaning up orphan processes


🤖 This comment was automatically generated by GitHub Actions

@friuns
Copy link
Owner

friuns commented Dec 24, 2025

@jules

❌ Workflow Failed

Workflow: Deploy to Netlify
Run: #34
Commit: 1e1ba19
Triggered by: @friuns

❌ deploy

Failed Steps: Install dependencies

📋 View Logs
... (truncated 234 lines)

2025-12-24T06:18:34.5990669Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:34.5991083Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.5991398Z npm warn EBADENGINE }
2025-12-24T06:18:34.5991852Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:34.5992438Z npm warn EBADENGINE   package: '@vercel/nft@1.1.1',
2025-12-24T06:18:34.5993315Z npm warn EBADENGINE   required: { node: '>=20' },
2025-12-24T06:18:34.5993768Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.5994096Z npm warn EBADENGINE }
2025-12-24T06:18:34.5994379Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:34.5994706Z npm warn EBADENGINE   package: 'glob@13.0.0',
2025-12-24T06:18:34.5995062Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:34.5995475Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.5995792Z npm warn EBADENGINE }
2025-12-24T06:18:34.5996056Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:34.5996388Z npm warn EBADENGINE   package: 'undici@7.14.0',
2025-12-24T06:18:34.5996750Z npm warn EBADENGINE   required: { node: '>=20.18.1' },
2025-12-24T06:18:34.5997161Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.5997478Z npm warn EBADENGINE }
2025-12-24T06:18:34.5997735Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:34.5998072Z npm warn EBADENGINE   package: 'minimatch@10.1.1',
2025-12-24T06:18:34.5998488Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:34.5998905Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.5999233Z npm warn EBADENGINE }
2025-12-24T06:18:34.5999484Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:34.5999833Z npm warn EBADENGINE   package: 'path-scurry@2.0.1',
2025-12-24T06:18:34.6000204Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:34.6000614Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.6000933Z npm warn EBADENGINE }
2025-12-24T06:18:34.6001185Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:34.6001519Z npm warn EBADENGINE   package: 'lru-cache@11.2.4',
2025-12-24T06:18:34.6001886Z npm warn EBADENGINE   required: { node: '20 || >=22' },
2025-12-24T06:18:34.6002296Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.6002769Z npm warn EBADENGINE }
2025-12-24T06:18:34.6003031Z npm warn EBADENGINE Unsupported engine {
2025-12-24T06:18:34.6003520Z npm warn EBADENGINE   package: 'wrangler@4.56.0',
2025-12-24T06:18:34.6003883Z npm warn EBADENGINE   required: { node: '>=20.0.0' },
2025-12-24T06:18:34.6004287Z npm warn EBADENGINE   current: { node: 'v18.20.8', npm: '10.8.2' }
2025-12-24T06:18:34.6004622Z npm warn EBADENGINE }
2025-12-24T06:18:34.6145116Z npm error code EUSAGE
2025-12-24T06:18:34.6145694Z npm error
2025-12-24T06:18:34.6147528Z npm error `npm ci` can only install packages when your package.json and package-lock.json or npm-shrinkwrap.json are in sync. Please update your lock file with `npm install` before continuing.
2025-12-24T06:18:34.6148934Z npm error
2025-12-24T06:18:34.6149557Z npm error Missing: lucide-solid@0.468.0 from lock file
2025-12-24T06:18:34.6150069Z npm error Missing: solid-js@1.9.10 from lock file
2025-12-24T06:18:34.6150470Z npm error Missing: solid-markdown@2.1.1 from lock file
2025-12-24T06:18:34.6150909Z npm error Missing: vite-plugin-solid@2.11.10 from lock file
2025-12-24T06:18:34.6151288Z npm error Missing: seroval@1.3.2 from lock file
2025-12-24T06:18:34.6151668Z npm error Missing: seroval-plugins@1.3.3 from lock file
2025-12-24T06:18:34.6152083Z npm error Missing: property-information@6.5.0 from lock file
2025-12-24T06:18:34.6152922Z npm error Missing: style-to-object@0.3.0 from lock file
2025-12-24T06:18:34.6153577Z npm error Missing: unist-util-visit@4.1.2 from lock file
2025-12-24T06:18:34.6154223Z npm error Missing: babel-preset-solid@1.9.10 from lock file
2025-12-24T06:18:34.6154872Z npm error Missing: merge-anything@5.1.7 from lock file
2025-12-24T06:18:34.6155492Z npm error Missing: solid-refresh@0.6.3 from lock file
2025-12-24T06:18:34.6156057Z npm error Missing: vitefu@1.1.1 from lock file
2025-12-24T06:18:34.6156760Z npm error Missing: babel-plugin-jsx-dom-expressions@0.40.3 from lock file
2025-12-24T06:18:34.6157968Z npm error Missing: @babel/helper-module-imports@7.18.6 from lock file
2025-12-24T06:18:34.6158961Z npm error Missing: @babel/plugin-syntax-jsx@7.27.1 from lock file
2025-12-24T06:18:34.6159765Z npm error Missing: html-entities@2.3.3 from lock file
2025-12-24T06:18:34.6160406Z npm error Missing: is-what@4.1.16 from lock file
2025-12-24T06:18:34.6161103Z npm error Missing: inline-style-parser@0.1.1 from lock file
2025-12-24T06:18:34.6161790Z npm error Missing: @types/unist@2.0.11 from lock file
2025-12-24T06:18:34.6162437Z npm error Missing: unist-util-is@5.2.1 from lock file
2025-12-24T06:18:34.6163362Z npm error Missing: unist-util-visit-parents@5.1.3 from lock file
2025-12-24T06:18:34.6163894Z npm error
2025-12-24T06:18:34.6164274Z npm error Clean install a project
2025-12-24T06:18:34.6164654Z npm error
2025-12-24T06:18:34.6164938Z npm error Usage:
2025-12-24T06:18:34.6165250Z npm error npm ci
2025-12-24T06:18:34.6165474Z npm error
2025-12-24T06:18:34.6165669Z npm error Options:
2025-12-24T06:18:34.6166102Z npm error [--install-strategy <hoisted|nested|shallow|linked>] [--legacy-bundling]
2025-12-24T06:18:34.6166756Z npm error [--global-style] [--omit <dev|optional|peer> [--omit <dev|optional|peer> ...]]
2025-12-24T06:18:34.6167379Z npm error [--include <prod|dev|optional|peer> [--include <prod|dev|optional|peer> ...]]
2025-12-24T06:18:34.6167987Z npm error [--strict-peer-deps] [--foreground-scripts] [--ignore-scripts] [--no-audit]
2025-12-24T06:18:34.6168463Z npm error [--no-bin-links] [--no-fund] [--dry-run]
2025-12-24T06:18:34.6168946Z npm error [-w|--workspace <workspace-name> [-w|--workspace <workspace-name> ...]]
2025-12-24T06:18:34.6169484Z npm error [-ws|--workspaces] [--include-workspace-root] [--install-links]
2025-12-24T06:18:34.6169830Z npm error
2025-12-24T06:18:34.6170168Z npm error aliases: clean-install, ic, install-clean, isntall-clean
2025-12-24T06:18:34.6170493Z npm error
2025-12-24T06:18:34.6170725Z npm error Run "npm help ci" for more info
2025-12-24T06:18:34.6171302Z npm error A complete log of this run can be found in: /home/runner/.npm/_logs/2025-12-24T06_18_31_053Z-debug-0.log
2025-12-24T06:18:34.6393959Z ##[error]Process completed with exit code 1.
2025-12-24T06:18:34.6519374Z Post job cleanup.
2025-12-24T06:18:34.7465667Z [command]/usr/bin/git version
2025-12-24T06:18:34.7503482Z git version 2.52.0
2025-12-24T06:18:34.7545914Z Temporarily overriding HOME='/home/runner/work/_temp/e37ed173-ce25-4510-84a5-dd6fe5517a37' before making global git config changes
2025-12-24T06:18:34.7547189Z Adding repository directory to the temporary git global config as a safe directory
2025-12-24T06:18:34.7551328Z [command]/usr/bin/git config --global --add safe.directory /home/runner/work/VibeGithub/VibeGithub
2025-12-24T06:18:34.7757579Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2025-12-24T06:18:34.7815836Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2025-12-24T06:18:34.8215241Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2025-12-24T06:18:34.8254804Z http.https://github.com/.extraheader
2025-12-24T06:18:34.8271024Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2025-12-24T06:18:34.8307442Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2025-12-24T06:18:34.8555448Z [command]/usr/bin/git config --local --name-only --get-regexp ^includeIf\.gitdir:
2025-12-24T06:18:34.8586853Z [command]/usr/bin/git submodule foreach --recursive git config --local --show-origin --name-only --get-regexp remote.origin.url
2025-12-24T06:18:34.8931305Z Cleaning up orphan processes


🤖 This comment was automatically generated by GitHub Actions

@github-actions github-actions bot temporarily deployed to commit December 24, 2025 06:52 Inactive
@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://694b8db2e2c7faf7345b130f--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: 2f39794

@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://694b8db5653b5de57601272d--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: ddbc9ee

@friuns
Copy link
Owner

friuns commented Dec 25, 2025

make generic CacheKeys that autmatically saves and loads keys in store.ts, so i dont have use it in code everywhere @copilot

Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
Copy link
Author

Copilot AI commented Dec 25, 2025

make generic CacheKeys that autmatically saves and loads keys in store.ts, so i dont have use it in code everywhere @copilot

Done! Created a generic CacheKeys class in store.ts that automatically handles saving and loading.

New cache API:

// In store.ts - generic wrapper with type safety
export class CacheKeys<T> {
  get(): T | null
  set(value: T): void
  getOrDefault(defaultValue: T): T
  clear(): void
}

// Predefined instances
export const cache = {
  repos: new CacheKeys<Repository[]>(...),
  repoIssues: (owner, repo) => new CacheKeys<Issue[]>(...),
  // ... etc
}

Usage simplified:

// Before
const data = getCached<Repository[]>(CacheKeys.repos()) || [];
setCache(CacheKeys.repos(), data);

// After
const data = cache.repos.getOrDefault([]);
cache.repos.set(data);

All views (Dashboard, RepoDetail, IssueDetail) updated to use the new cache API. No more manual getCached/setCache calls everywhere.

Build: ✅ Passing (commit: e65af5d)

Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
@github-actions github-actions bot temporarily deployed to commit December 25, 2025 04:01 Inactive
@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://694cb71eba8931a0fd0835ab--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: 0d8468f

@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://694cb71fba8931a0fd0835b1--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: e65af5d

@friuns
Copy link
Owner

friuns commented Dec 28, 2025

i mean use Proxy class inside store.ts that will automatically cache everything @copilot

@friuns
Copy link
Owner

friuns commented Dec 29, 2025

i mean use Proxy class inside store.ts that will automatically cache everything https://gh.io/copilot-coding-agent-docs

@friuns
Copy link
Owner

friuns commented Dec 30, 2025

@copilot i mean use Proxy class inside store.ts that will automatically cache everything

Co-authored-by: friuns <7095563+friuns@users.noreply.github.com>
Copy link
Author

Copilot AI commented Dec 30, 2025

@copilot i mean use Proxy class inside store.ts that will automatically cache everything

Implemented! Now using JavaScript Proxy class in store.ts for automatic caching.

How it works:

  • Proxy intercepts property access (getter) → automatically loads from localStorage
  • Proxy intercepts property assignment (setter) → automatically saves to localStorage

New usage:

// Direct property access - Proxy auto-loads from cache
const repos = cache.repos;
const issues = cache.repoIssues(owner, repo);

// Direct assignment - Proxy auto-saves to cache
cache.repos = newRepos;

// Parameterized keys use helpers
setRepoIssuesCache(owner, repo, newIssues);

All views updated to use Proxy-based auto-caching. No more manual .get() / .set() / .getOrDefault() calls.

Build: ✅ Passing (commit: db3b234)

Copilot AI changed the title Migrate from React to SolidJS with createMutable-only state management Migrate from React to SolidJS with createMutable-only state management and Proxy-based auto-caching Dec 30, 2025
@github-actions
Copy link

🚀 Netlify Deployment

Deploy URL: https://69540d4ff12e6b052fc5632f--my-test-site3.netlify.app

Branch: copilot/rewrite-using-solidjs
Commit: db3b234

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

rewrite using solidjs with createMutable only

2 participants