spec-cat 0.1.29 → 0.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/_nuxt/{DWfl6VER.js → B-mPy4v0.js} +1 -1
- package/.output/public/_nuxt/BBwCne8P.js +4 -0
- package/.output/public/_nuxt/{BYSSU_C5.js → BgvgELpz.js} +1 -1
- package/.output/public/_nuxt/{WBf5CG5l.js → BjiM5vTO.js} +1 -1
- package/.output/public/_nuxt/{DHRTMwte.js → CEJ6U1Qq.js} +1 -1
- package/.output/public/_nuxt/{DL_gJOgv.js → CS51gfpH.js} +1 -1
- package/.output/public/_nuxt/{BuAdOXGq.js → CkMVxEkR.js} +1 -1
- package/.output/public/_nuxt/{Dpc_a9DZ.js → Cs3CDuzi.js} +1 -1
- package/.output/public/_nuxt/{C3xB8Cgs.js → CtGpX7eD.js} +1 -1
- package/.output/public/_nuxt/{C7HUOCmf.js → CyiHvGEK.js} +1 -1
- package/.output/public/_nuxt/DD--WXKu.js +1 -0
- package/.output/public/_nuxt/{CjahVUNV.js → DhEjAk03.js} +1 -1
- package/.output/public/_nuxt/{BvFtAA65.js → UKPh86SU.js} +34 -34
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/ddb67c8c-22f4-45e8-a41d-13e5496d70bb.json +1 -0
- package/.output/server/chunks/_/error-500.mjs.map +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs +1 -1
- package/.output/server/chunks/build/client.precomputed.mjs.map +1 -1
- package/.output/server/chunks/nitro/nitro.mjs +644 -644
- package/.output/server/chunks/nitro/nitro.mjs.map +1 -1
- package/.output/server/chunks/routes/renderer.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/README.md +113 -101
- package/package.json +1 -1
- package/.output/public/_nuxt/DJrEvjo-.js +0 -4
- package/.output/public/_nuxt/builds/meta/65ae0c7c-58de-4f20-a97f-c1be9bfe34bb.json +0 -1
- package/.output/public/_nuxt/ggQsoUsu.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nitro.mjs","sources":["../../../../node_modules
|
|
1
|
+
{"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/uncrypto/dist/crypto.node.mjs","../../../../node_modules/crossws/dist/shared/crossws.DfCzGthR.mjs","../../../../node_modules/crossws/dist/shared/crossws.D9ehKjSh.mjs","../../../../node_modules/crossws/dist/shared/crossws.By9qWDAI.mjs","../../../../node_modules/crossws/dist/shared/crossws.CipVM6lf.mjs","../../../../node_modules/crossws/dist/adapters/node.mjs","../../../../node_modules/destr/dist/index.mjs","../../../../node_modules/ufo/dist/index.mjs","../../../../node_modules/h3/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/radix3/dist/index.mjs","../../../../node_modules/defu/dist/defu.mjs","../../../../node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/h3/dist/index.mjs","../../../../node_modules/hookable/dist/index.mjs","../../../../node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/ofetch/dist/node.mjs","../../../../node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/unstorage/dist/index.mjs","../../../../node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/klona/dist/index.mjs","../../../../node_modules/scule/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/unctx/dist/index.mjs","../../../../node_modules/nitropack/dist/runtime/internal/context.mjs","../../../../node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/error.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../server/utils/projectDir.ts","../../../../server/plugins/projectDir.ts","../../../../server/utils/specCatStore.ts","../../../../server/utils/logger.ts","../../../../server/utils/specSearch/database.ts","../../../../server/utils/specSearch/embeddings.ts","../../../../server/utils/specSearch/chunker.ts","../../../../server/utils/specSearch/indexer.ts","../../../../server/utils/specSearch/scheduler.ts","../../../../server/plugins/specSearchScheduler.ts","../../../../node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/theme.ts","../../../../node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/nitropack/dist/runtime/internal/shutdown.mjs","../../../../node_modules/nitropack/dist/presets/node/runtime/node-server.mjs"],"names":["isPlainObject","getQuery","serialize","createRouter","f","h","i","l","createError","mergeHeaders","s","nodeFetch","Headers","Headers$1","AbortController$1","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","_inlineAppConfig","createRadixRouter","readFile","writeFile","require","log","readdir","nitroApp","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown","HttpsServer","HttpServer","wsAdapter"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,49,50,52,53,54,55,56]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderer.mjs","sources":["../../../../node_modules
|
|
1
|
+
{"version":3,"file":"renderer.mjs","sources":["../../../../node_modules/@unhead/vue/dist/shared/vue.N9zWjxoK.mjs","../../../../node_modules/@unhead/vue/dist/shared/vue.Bm-NbY4b.mjs","../../../../node_modules/@unhead/vue/dist/server.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/renderer/build-files.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/renderer/payload.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/utils/renderer/app.mjs","../../../../node_modules/@nuxt/nitro-server/dist/runtime/handlers/renderer.mjs"],"names":[],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7]}
|
package/README.md
CHANGED
|
@@ -1,105 +1,112 @@
|
|
|
1
1
|
# Spec Cat
|
|
2
|
-
Spec Cat is a local development workbench designed to make spec-driven development safer, faster, and a bit more delightful.
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
`spec -> plan -> tasks -> implement -> review`
|
|
14
|
-
|
|
15
|
-
This workflow follows GitHub Spec-Kit conventions and tracks planning/implementation around documents in `specs/`.
|
|
16
|
-
Spec Cat is not only convention-compatible: it is a wrapper/orchestration project around Spec-Kit workflows (`/speckit.*`), adding UI, conversation state, worktree safety, and review/finalize controls on top.
|
|
17
|
-
|
|
18
|
-
The core idea is simple.
|
|
19
|
-
- Specs are the source of truth.
|
|
20
|
-
- Changes are isolated by worktree.
|
|
21
|
-
- AI helps quickly, but outcomes remain reviewable by humans.
|
|
3
|
+
```
|
|
4
|
+
____ ____ _
|
|
5
|
+
/ ___| _ __ ___ ___ / ___|__ _| |_
|
|
6
|
+
\___ \| '_ \ / _ \/ __|| | / _` | __|
|
|
7
|
+
___) | |_) | __/ (__ | |__| (_| | |_
|
|
8
|
+
|____/| .__/ \___|\___| \____\__,_|\__|
|
|
9
|
+
|_|
|
|
10
|
+
```
|
|
22
11
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
- The more repetitive spec pipeline work is automated, the smaller team quality variance becomes.
|
|
26
|
-
- Even when AI makes mistakes, teams should be able to recover safely through a worktree/preview/finalize flow.
|
|
12
|
+
A local development workbench for spec-driven development.
|
|
13
|
+
Write specs, visualize git history, chat with AI, isolate work in worktrees — all in one screen.
|
|
27
14
|
|
|
28
|
-
##
|
|
29
|
-
Below are the major features in the current repository (implemented + some in progress).
|
|
15
|
+
## What It Does
|
|
30
16
|
|
|
31
|
-
|
|
32
|
-
- Use Git / Features / Conversations / Chat panels on a single screen
|
|
33
|
-
- Prioritizes context continuity over route switching
|
|
17
|
+
Spec Cat orchestrates the spec-driven workflow:
|
|
34
18
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
19
|
+
```
|
|
20
|
+
spec -> (clarify) -> plan -> tasks -> implement -> review
|
|
21
|
+
```
|
|
38
22
|
|
|
39
|
-
|
|
40
|
-
- Automatic discovery of the `specs/` directory
|
|
41
|
-
- Status checks for `spec.md`, `plan.md`, and `tasks.md` from feature cards
|
|
42
|
-
- Markdown viewing/editing for spec files in a modal
|
|
23
|
+
Every change starts from a spec, gets planned, broken into tasks, implemented in an isolated worktree, and reviewed before merging. AI assists at each step, but humans stay in control.
|
|
43
24
|
|
|
44
|
-
|
|
45
|
-
- Streaming responses, session resume, and permission modes (`plan`, `ask`, `auto`, `bypass`)
|
|
46
|
-
- Provider Registry supports Claude and Codex selection
|
|
47
|
-
- Incompatible provider/model combinations are safely normalized on the server
|
|
25
|
+
## Screen Layout
|
|
48
26
|
|
|
49
|
-
|
|
50
|
-
- Worktree isolation per conversation
|
|
51
|
-
- `Preview` (apply to main workspace) -> `Finalize` (clean up after review) flow
|
|
52
|
-
- Stop/recovery paths when conflicts occur
|
|
27
|
+
Four-column workbench on a single page:
|
|
53
28
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
- Results are reviewed in the same conversation/worktree flow
|
|
29
|
+
| Git Graph | Features | Conversations | Chat |
|
|
30
|
+
|-----------|----------|---------------|------|
|
|
31
|
+
| Branch/commit visualization, diffs, 50+ git operations | Spec status cards, markdown viewer, traceability | Session list, archive, search | AI streaming, permission modes, worktree controls |
|
|
58
32
|
|
|
59
|
-
|
|
60
|
-
- Keeps `specs/*` as the source of truth
|
|
61
|
-
- Keyword search + embedding-based semantic search (SQLite cache)
|
|
33
|
+
## Features
|
|
62
34
|
|
|
63
|
-
###
|
|
64
|
-
-
|
|
65
|
-
-
|
|
35
|
+
### Git Graph & Operations
|
|
36
|
+
- Interactive commit graph with branch/tag/stash visualization
|
|
37
|
+
- Context menus for merge, rebase, cherry-pick, reset, revert, stash, tag, push/pull
|
|
38
|
+
- Inline diff viewer for any commit or uncommitted changes
|
|
39
|
+
- Find widget for searching commits by subject or hash
|
|
40
|
+
- Remote management (add, edit, fetch, push, pull)
|
|
41
|
+
|
|
42
|
+
### Spec Management
|
|
43
|
+
- Auto-discovers `specs/` directory with per-feature status (`spec.md`, `plan.md`, `tasks.md`)
|
|
44
|
+
- Markdown viewer/editor modal with syntax highlighting (CodeMirror)
|
|
45
|
+
- FR traceability analysis — verifies every requirement maps through plan to tasks
|
|
46
|
+
- Keyword + embedding-based semantic search across all specs (SQLite + sqlite-vec)
|
|
47
|
+
|
|
48
|
+
### AI Chat
|
|
49
|
+
- Streaming responses with thinking blocks, tool use, and result summaries
|
|
50
|
+
- **Permission modes**: `ask` (confirm each action), `plan` (upfront approval), `auto` (no prompts), `bypass` (admin)
|
|
51
|
+
- **Providers**: Claude, Gemini, Codex — with capability-based selection and safe fallbacks
|
|
52
|
+
- Session resume on page reload, per-conversation stream isolation
|
|
53
|
+
- Commit message generation from diffs
|
|
54
|
+
|
|
55
|
+
### Worktree Isolation
|
|
56
|
+
- Each conversation gets its own git worktree
|
|
57
|
+
- **Preview**: apply worktree changes to main workspace for review
|
|
58
|
+
- **Finalize**: clean up worktree after merge
|
|
59
|
+
- **Sync**: keep worktree alive for continued iteration
|
|
60
|
+
- Rebase conflict resolution with AI-assisted suggestions
|
|
61
|
+
|
|
62
|
+
### Conversations
|
|
63
|
+
- Archive-first management (soft delete, not hard delete)
|
|
64
|
+
- Linked to features and worktree branches
|
|
65
|
+
- Persistent across sessions via filesystem-backed storage
|
|
66
|
+
|
|
67
|
+
### Cascade / Auto Mode
|
|
68
|
+
- Chain spec pipeline commands per feature (`specify -> plan -> tasks -> implement`)
|
|
69
|
+
- Sequential or parallel processing of multiple features
|
|
70
|
+
- Results reviewed in the same conversation/worktree flow
|
|
71
|
+
|
|
72
|
+
### Skills & Tools
|
|
73
|
+
- Registered tool schemas sent per AI request (request-scoped, not global)
|
|
74
|
+
- Skill prompt system for spec-kit operations
|
|
75
|
+
- Provider adapters map tools to each provider's format
|
|
76
|
+
|
|
77
|
+
### Theme
|
|
78
|
+
- Dark / light mode with retro-style color palette
|
|
79
|
+
- Persisted via cookie
|
|
66
80
|
|
|
67
81
|
## Tech Stack
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
## Model API Tool Registration Policy
|
|
80
|
-
- Tool schemas are request-scoped: each model API call includes the tool schema payload.
|
|
81
|
-
- App startup loads only the internal tool registry (definitions + executors).
|
|
82
|
-
- Provider adapters map that registry per provider format at request time.
|
|
82
|
+
|
|
83
|
+
| Layer | Tech |
|
|
84
|
+
|-------|------|
|
|
85
|
+
| Framework | Nuxt 3, Vue 3, TypeScript |
|
|
86
|
+
| State | Pinia |
|
|
87
|
+
| Styling | Tailwind CSS |
|
|
88
|
+
| Server | Nitro with WebSocket support |
|
|
89
|
+
| Editor | CodeMirror 6 |
|
|
90
|
+
| Search | SQLite (better-sqlite3) + sqlite-vec for embeddings |
|
|
91
|
+
| Markdown | marked + shiki + DOMPurify |
|
|
92
|
+
| AI | Claude CLI, Gemini API, Codex CLI |
|
|
83
93
|
|
|
84
94
|
## Getting Started
|
|
85
|
-
|
|
86
|
-
|
|
95
|
+
|
|
96
|
+
### Requirements
|
|
97
|
+
- Node.js >= 20
|
|
87
98
|
- `pnpm`
|
|
88
|
-
-
|
|
89
|
-
- For Claude: authenticated `claude` CLI
|
|
90
|
-
- For Codex: `codex` CLI or `CODEX_CLI_PATH` configuration
|
|
99
|
+
- For AI features: authenticated `claude` CLI, `codex` CLI, or Gemini API credentials
|
|
91
100
|
|
|
92
|
-
###
|
|
93
|
-
```bash
|
|
94
|
-
pnpm install
|
|
95
|
-
```
|
|
101
|
+
### Install & Run
|
|
96
102
|
|
|
97
|
-
### 3) Run in development
|
|
98
103
|
```bash
|
|
104
|
+
pnpm install
|
|
99
105
|
pnpm dev
|
|
100
106
|
```
|
|
101
107
|
|
|
102
|
-
###
|
|
108
|
+
### Run via npx
|
|
109
|
+
|
|
103
110
|
```bash
|
|
104
111
|
npx spec-cat
|
|
105
112
|
npx spec-cat --port 4310 --host 0.0.0.0
|
|
@@ -107,32 +114,37 @@ npx spec-cat --project /path/to/your/project
|
|
|
107
114
|
SPEC_CAT_PROJECT_DIR=/path/to/your/project npx spec-cat
|
|
108
115
|
```
|
|
109
116
|
|
|
110
|
-
###
|
|
117
|
+
### Scripts
|
|
118
|
+
|
|
111
119
|
```bash
|
|
112
|
-
pnpm
|
|
113
|
-
pnpm
|
|
114
|
-
pnpm
|
|
115
|
-
pnpm
|
|
116
|
-
pnpm
|
|
120
|
+
pnpm dev # Development server
|
|
121
|
+
pnpm build # Production build
|
|
122
|
+
pnpm preview # Preview production build
|
|
123
|
+
pnpm typecheck # Type checking
|
|
124
|
+
pnpm test # Run tests
|
|
125
|
+
pnpm test:coverage # Tests with coverage
|
|
117
126
|
```
|
|
118
127
|
|
|
119
|
-
##
|
|
120
|
-
|
|
128
|
+
## Directory Structure
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
components/ 70+ Vue components (chat, git, features, worktree, settings)
|
|
132
|
+
composables/ Reusable composition functions (stream, graph, dialogs, theme)
|
|
133
|
+
stores/ Pinia stores (chat, gitGraph, layout, settings, worktree)
|
|
134
|
+
server/api/ 90+ Nitro API endpoints
|
|
135
|
+
server/utils/ AI providers, git ops, spec search, job queue, event bus
|
|
136
|
+
pages/ Main workbench, settings, worktrees, design guide
|
|
137
|
+
types/ TypeScript type definitions
|
|
138
|
+
utils/ Client-side utilities
|
|
139
|
+
specs/ Feature spec documents (source of truth)
|
|
140
|
+
lib/speckit/ Spec-kit templates and prompts
|
|
141
|
+
```
|
|
121
142
|
|
|
122
|
-
|
|
143
|
+
## Settings
|
|
123
144
|
|
|
124
|
-
|
|
145
|
+
Per-project settings stored at `~/.spec-cat/projects/{project-hash}/settings.json`.
|
|
146
|
+
Same repo opened from different paths gets separate settings.
|
|
125
147
|
|
|
126
|
-
##
|
|
127
|
-
```text
|
|
128
|
-
components/ UI components
|
|
129
|
-
stores/ Pinia state management
|
|
130
|
-
server/api/ Nitro API endpoints
|
|
131
|
-
server/utils/ provider/worktree/spec/git utilities
|
|
132
|
-
specs/ Feature spec docs (source of truth)
|
|
133
|
-
tests/ Vitest tests
|
|
134
|
-
```
|
|
148
|
+
## License
|
|
135
149
|
|
|
136
|
-
|
|
137
|
-
Spec Cat aims to be more than an "AI codes for you" app.
|
|
138
|
-
It is a workbench where structure does not collapse, even when AI and humans build together.
|
|
150
|
+
MIT
|