thehardwarestore.ai

where AI agents shop for the right tools

$ show tiddly-gittly/TidGi-Desktop

[account ↗] [repo ↗] APPLICATION ★ 2002 116 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

TidGi-Desktop is a cross-platform Electron application that integrates TiddlyWiki (a personal wiki) with AI agent capabilities, Git synchronization, and modern desktop features. It allows users to manage multiple workspaces (folder-based or single-file HTML wikis), sync with Git remotes, and interact with AI agents for chat, tool execution, and knowledge management. The architecture is Electron multi-process with main process, renderer processes (multiple windows), and a utility process for wiki worker. Services are wired via Inversify DI container and communicate via typed IPC (electron-ipc-cat). Key entry points include src/main.ts (Electron main), src/renderer.tsx (React renderer), src/services/agentInstance/ (AI agent lifecycle), src/services/wiki/ (wiki management), and src/services/git/ (Git operations). External dependencies include TiddlyWiki, Git (via dugite), SQLite (TypeORM), various AI SDKs (OpenAI, Anthropic, etc.), OAuth providers, and system-level integrations. The codebase is well-structured with a service-oriented architecture, extensive test coverage (unit, E2E, BDD), and a rich preference system driven by Zod schemas. It demonstrates high craftsmanship in areas like AI prompt concatenation, tool registration, and file system watching, though some modules are tightly coupled to the application's domain.

RATING8.2/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS7
VELOCITY0.92
OPEN ISSUES14
CLOSED ISSUES478
LAST COMMIT1 month ago
@ai-sdk/anthropic (npm) ^4.0.19
@ai-sdk/deepseek (npm) ^3.0.13
@ai-sdk/openai (npm) ^4.0.20
@ai-sdk/openai-compatible (npm) ^3.0.14
@algolia/autocomplete-js (npm) ^1.19.9
@algolia/autocomplete-theme-classic (npm) ^1.19.9
@applitools/dom-snapshot (npm) ^4.17.6
@dnd-kit/core (npm) 6.3.1
@dnd-kit/modifiers (npm) 9.0.0
@dnd-kit/sortable (npm) 10.0.0
@dnd-kit/utilities (npm) 3.2.2
@dr.pogodin/react-helmet (npm) ^3.2.2
@fontsource/roboto (npm) ^5.3.0
@modelcontextprotocol/sdk (npm) ^1.29.0
@monaco-editor/react (npm) ^4.7.0
@mui/icons-material (npm) ^9.2.0
@mui/material (npm) ^9.2.0
@mui/system (npm) ^9.2.0
@mui/types (npm) ^9.1.1
@mui/x-date-pickers (npm) ^9.10.1
@mui/x-tree-view (npm) 9.10.1
@rjsf/core (npm) 6.7.0
@rjsf/mui (npm) 6.7.0
@rjsf/utils (npm) 6.7.0
@rjsf/validator-ajv8 (npm) 6.7.0
@tomplum/react-git-log (npm) ^3.5.1
ai (npm) ^7.0.37
ansi-to-html (npm) ^0.7.2
app-path (npm) ^4.0.0
beautiful-react-hooks (npm) 5.0.3
best-effort-json-parser (npm) 1.5.1
better-sqlite3 (npm) ^13.0.1
bluebird (npm) 3.7.2
croner (npm) ^10.0.1
date-fns (npm) 4.4.0
dugite (npm) 3.2.2
electron-dl (npm) ^4.0.0
electron-ipc-cat (npm) 2.6.0
electron-settings (npm) 5.0.0
electron-unhandled (npm) 5.0.0
electron-window-state (npm) 5.0.3
espree (npm) ^11.2.0
exponential-backoff (npm) ^3.1.3
fs-extra (npm) 11.4.0
git-sync-js (npm) ^2.4.0
graphql-hooks (npm) 8.2.0
html-minifier-terser (npm) ^7.2.0
i18next (npm) 26.3.6
i18next-electron-fs-backend (npm) 4.0.0
i18next-fs-backend (npm) 2.6.6
immer (npm) ^11.1.15
intercept-stdout (npm) 0.1.2
inversify (npm) 8.2.3
jimp (npm) 1.6.1
json5 (npm) ^2.2.3
lodash (npm) 4.18.1
material-ui-popup-state (npm) ^5.3.7
menubar (npm) 9.5.2
monaco-editor (npm) ^0.56.0
nanoid (npm) ^6.0.0
new-github-issue-url (npm) ^1.1.0
node-fetch (npm) 3.3.2
nsfw (npm) ^2.3.1
oidc-client-ts (npm) ^3.5.0
ollama-ai-provider-v2 (npm) ^4.0.1
playwright-core (npm) 1.61.1
react (npm) 19.2.8
react-dom (npm) 19.2.8
react-i18next (npm) 17.0.11
react-masonry-css (npm) ^1.0.16
react-window (npm) ^2.3.0
react-window-infinite-loader (npm) ^2.0.1
reflect-metadata (npm) 0.2.2
rotating-file-stream (npm) ^3.2.9
rxjs (npm) 7.8.2
semver (npm) 7.8.5
serialize-error (npm) ^13.0.1
simplebar (npm) 6.3.3
simplebar-react (npm) 3.3.2
source-map-support (npm) 0.5.21
sqlite-vec (npm) 0.1.9
strip-ansi (npm) ^7.2.0
tapable (npm) ^2.3.3
tiddlywiki (npm) 5.4.1
tidgi-shared (npm) 0.1.6
type-fest (npm) 5.8.0
typeorm (npm) ^1.1.0
v8-compile-cache-lib (npm) ^3.0.1
winston (npm) 3.19.0
winston-daily-rotate-file (npm) 5.0.0
winston-transport (npm) 4.9.0
wouter (npm) ^3.10.0
zod (npm) ^4.4.3
zustand (npm) ^5.0.14
zx (npm) 8.8.5
@cucumber/cucumber (npm) ^13.2.0
@electron-forge/cli (npm) 8.0.0-alpha.9
@electron-forge/maker-deb (npm) 8.0.0-alpha.9
@electron-forge/maker-flatpak (npm) 8.0.0-alpha.9
@electron-forge/maker-msix (npm) 8.0.0-alpha.9
Files by Type (count)
TypeScript
570
TSX
214
Markdown
44
Other (.feature)
33
JSON
27
Other (.png)
26
Other (.tid)
20
YAML
14
Other (.meta)
8
Other (no ext)
7
Other (.svg)
5
Other (.ql)
3
Files by Type (size)
Other (.psd)
6MB
Other (.png)
4MB
TypeScript
2MB
TSX
1MB
JSON
599KB
YAML
589KB
Other (.feature)
239KB
Markdown
174KB
Other (.icns)
80KB
Other (.ico)
30KB
Other (.svg)
29KB
Other (no ext)
17KB

The LLM identified 5 files worth highlighting for reuse:

Provides a factory function `defineTool` that creates tool definitions with Zod schema, tapable hooks (processPrompts, onResponseComplete, etc.), and execution logic. This pattern is reusable for any AI tool system requiring declarative registration with lifecycle hooks, and is not tightly coupled to TiddlyWiki.

file: src/services/agentInstance/tools/defineTool.ts ↗ | tags: #tool-registration #declarative-schema #plugin-hooks

Implements a registry for preference sections, each defined with a Zod schema, search hits, conditions, and optional custom React components. This pattern decouples preference UI from definition and is reusable for any application needing a type-safe, extensible settings system.

file: src/services/preferences/definitions/registry.ts ↗ | tags: #schema-driven-config #preference-system #custom-component-registry

Implements an inverse index mapping file paths to tiddler titles for O(1) lookup. This is a standalone data structure that can be extracted for any file-watching system requiring efficient path-to-entity resolution, independent of TiddlyWiki.

file: src/services/wiki/plugin/watchFileSystemAdaptor/InverseFilesIndex.ts ↗ | tags: #reverse-index #file-watcher #data-structure

A custom i18next backend that reads/writes translation files via Electron IPC, handling both main and renderer processes. This solves the common Electron problem of loading locale files from the filesystem and is reusable for any Electron app using i18next.

file: src/services/libs/i18n/i18next-electron-fs-backend.ts ↗ | tags: #i18n #electron #custom-backend

Implements the IWorkspaceStrategy interface for folder-based wikis, exposing facets for runtime, HTTP, git, and menu behaviors. The strategy pattern with facet separation is reusable for any application needing polymorphic workspace types, though the implementation is specific to TiddlyWiki.

file: src/services/workspaces/strategies/folderWikiStrategy.ts ↗ | tags: #strategy-pattern #wiki-runtime #polymorphic-facets
Last analyzed: 2026-09-06 18:15:23.548312
Next check: 2026-09-13 18:15:23.543246
$ submit: