Skip to content

Commit 27b7b43

Browse files
committed
first commit
0 parents  commit 27b7b43

550 files changed

Lines changed: 66571 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# caveman-commit
2+
3+
Terse Conventional Commits. Why over what.
4+
5+
## What it does
6+
7+
Generates commit messages in Conventional Commits format. Subject ≤50 chars, hard cap 72. Imperative mood. Body only when the *why* is non-obvious or there are breaking changes. No AI attribution, no "this commit does X", no emoji unless the project uses them. Body always required for breaking changes, security fixes, data migrations, and reverts — future debuggers need the context.
8+
9+
Outputs only the message. Does not stage, commit, or amend.
10+
11+
## How to invoke
12+
13+
```
14+
/caveman-commit
15+
```
16+
17+
Also triggers on phrases like "write a commit", "commit message", "generate commit".
18+
19+
## Example output
20+
21+
Diff: new endpoint for user profile.
22+
23+
```
24+
feat(api): add GET /users/:id/profile
25+
26+
Mobile client needs profile data without the full user payload
27+
to reduce LTE bandwidth on cold-launch screens.
28+
29+
Closes #128
30+
```
31+
32+
Diff: breaking API rename.
33+
34+
```
35+
feat(api)!: rename /v1/orders to /v1/checkout
36+
37+
BREAKING CHANGE: clients on /v1/orders must migrate to /v1/checkout
38+
before 2026-06-01. Old route returns 410 after that date.
39+
```
40+
41+
## See also
42+
43+
- [`SKILL.md`](./SKILL.md) — full LLM-facing instructions
44+
- [Caveman README](../../README.md) — repo overview
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
name: caveman-commit
3+
description: >
4+
Ultra-compressed commit message generator. Cuts noise from commit messages while preserving
5+
intent and reasoning. Conventional Commits format. Subject ≤50 chars, body only when "why"
6+
isn't obvious. Use when user says "write a commit", "commit message", "generate commit",
7+
"/commit", or invokes /caveman-commit. Auto-triggers when staging changes.
8+
---
9+
10+
Write commit messages terse and exact. Conventional Commits format. No fluff. Why over what.
11+
12+
## Rules
13+
14+
**Subject line:**
15+
- `<type>(<scope>): <imperative summary>``<scope>` optional
16+
- Types: `feat`, `fix`, `refactor`, `perf`, `docs`, `test`, `chore`, `build`, `ci`, `style`, `revert`
17+
- Imperative mood: "add", "fix", "remove" — not "added", "adds", "adding"
18+
- ≤50 chars when possible, hard cap 72
19+
- No trailing period
20+
- Match project convention for capitalization after the colon
21+
22+
**Body (only if needed):**
23+
- Skip entirely when subject is self-explanatory
24+
- Add body only for: non-obvious *why*, breaking changes, migration notes, linked issues
25+
- Wrap at 72 chars
26+
- Bullets `-` not `*`
27+
- Reference issues/PRs at end: `Closes #42`, `Refs #17`
28+
29+
**What NEVER goes in:**
30+
- "This commit does X", "I", "we", "now", "currently" — the diff says what
31+
- "As requested by..." — use Co-authored-by trailer
32+
- "Generated with Claude Code" or any AI attribution
33+
- Emoji (unless project convention requires)
34+
- Restating the file name when scope already says it
35+
36+
## Examples
37+
38+
Diff: new endpoint for user profile with body explaining the why
39+
- ❌ "feat: add a new endpoint to get user profile information from the database"
40+
-
41+
```
42+
feat(api): add GET /users/:id/profile
43+
44+
Mobile client needs profile data without the full user payload
45+
to reduce LTE bandwidth on cold-launch screens.
46+
47+
Closes #128
48+
```
49+
50+
Diff: breaking API change
51+
-
52+
```
53+
feat(api)!: rename /v1/orders to /v1/checkout
54+
55+
BREAKING CHANGE: clients on /v1/orders must migrate to /v1/checkout
56+
before 2026-06-01. Old route returns 410 after that date.
57+
```
58+
59+
## Auto-Clarity
60+
61+
Always include body for: breaking changes, security fixes, data migrations, anything reverting a prior commit. Never compress these into subject-only — future debuggers need the context.
62+
63+
## Boundaries
64+
65+
Only generates the commit message. Does not run `git commit`, does not stage files, does not amend. Output the message as a code block ready to paste. "stop caveman-commit" or "normal mode": revert to verbose commit style.

.agents/skills/caveman/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
# caveman
2+
3+
Talk like smart caveman. Same brain, fewer tokens.
4+
5+
## What it does
6+
7+
Compress every model response to caveman-style prose. Drops articles, filler, pleasantries, and hedging. Keeps every technical detail, code block, error string, and symbol exact. Cuts ~65-75% of output tokens with full accuracy preserved. Mode persists for the whole session until changed or stopped.
8+
9+
Six intensity levels:
10+
11+
| Level | What change |
12+
|-------|-------------|
13+
| `lite` | Drop filler/hedging. Sentences stay full. Professional but tight. |
14+
| `full` | Default. Drop articles, fragments OK, short synonyms. |
15+
| `ultra` | Bare fragments. Abbreviations (DB, auth, fn). Arrows for causality. |
16+
| `wenyan-lite` | Classical Chinese register, light compression. |
17+
| `wenyan-full` | Maximum 文言文. 80-90% character reduction. |
18+
| `wenyan-ultra` | Extreme classical compression. |
19+
20+
Auto-clarity rule: caveman drops to normal prose for security warnings, irreversible-action confirmations, multi-step sequences where fragment ambiguity risks misread, and when user repeats a question. Resumes after the clear part.
21+
22+
## How to invoke
23+
24+
```
25+
/caveman # full mode (default)
26+
/caveman lite # lighter compression
27+
/caveman ultra # extreme compression
28+
/caveman wenyan # classical Chinese
29+
stop caveman # back to normal prose
30+
```
31+
32+
## Example output
33+
34+
Question: "Why does my React component re-render?"
35+
36+
Normal prose:
37+
> Your component re-renders because you create a new object reference each render. Wrapping it in `useMemo` will fix the issue.
38+
39+
Caveman (full):
40+
> New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`.
41+
42+
Caveman (ultra):
43+
> Inline obj prop → new ref → re-render. `useMemo`.
44+
45+
## See also
46+
47+
- [`SKILL.md`](./SKILL.md) — full LLM-facing instructions
48+
- [Caveman README](../../README.md) — repo overview, install, benchmarks

.agents/skills/caveman/SKILL.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
---
2+
name: caveman
3+
description: >
4+
Ultra-compressed communication mode. Cuts token usage ~75% by speaking like caveman
5+
while keeping full technical accuracy. Supports intensity levels: lite, full (default), ultra,
6+
wenyan-lite, wenyan-full, wenyan-ultra.
7+
Use when user says "caveman mode", "talk like caveman", "use caveman", "less tokens",
8+
"be brief", or invokes /caveman. Also auto-triggers when token efficiency is requested.
9+
---
10+
11+
Respond terse like smart caveman. All technical substance stay. Only fluff die.
12+
13+
## Persistence
14+
15+
ACTIVE EVERY RESPONSE. No revert after many turns. No filler drift. Still active if unsure. Off only: "stop caveman" / "normal mode".
16+
17+
Default: **full**. Switch: `/caveman lite|full|ultra`.
18+
19+
## Rules
20+
21+
Drop: articles (a/an/the), filler (just/really/basically/actually/simply), pleasantries (sure/certainly/of course/happy to), hedging. Fragments OK. Short synonyms (big not extensive, fix not "implement a solution for"). Technical terms exact. Code blocks unchanged. Errors quoted exact.
22+
23+
Pattern: `[thing] [action] [reason]. [next step].`
24+
25+
Not: "Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
26+
Yes: "Bug in auth middleware. Token expiry check use `<` not `<=`. Fix:"
27+
28+
## Intensity
29+
30+
| Level | What change |
31+
|-------|------------|
32+
| **lite** | No filler/hedging. Keep articles + full sentences. Professional but tight |
33+
| **full** | Drop articles, fragments OK, short synonyms. Classic caveman |
34+
| **ultra** | Abbreviate prose words (DB/auth/config/req/res/fn/impl), strip conjunctions, arrows for causality (X → Y), one word when one word enough. Code symbols, function names, API names, error strings: never abbreviate |
35+
| **wenyan-lite** | Semi-classical. Drop filler/hedging but keep grammar structure, classical register |
36+
| **wenyan-full** | Maximum classical terseness. Fully 文言文. 80-90% character reduction. Classical sentence patterns, verbs precede objects, subjects often omitted, classical particles (之/乃/為/其) |
37+
| **wenyan-ultra** | Extreme abbreviation while keeping classical Chinese feel. Maximum compression, ultra terse |
38+
39+
Example — "Why React component re-render?"
40+
- lite: "Your component re-renders because you create a new object reference each render. Wrap it in `useMemo`."
41+
- full: "New object ref each render. Inline object prop = new ref = re-render. Wrap in `useMemo`."
42+
- ultra: "Inline obj prop → new ref → re-render. `useMemo`."
43+
- wenyan-lite: "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。"
44+
- wenyan-full: "物出新參照,致重繪。useMemo .Wrap之。"
45+
- wenyan-ultra: "新參照→重繪。useMemo Wrap。"
46+
47+
Example — "Explain database connection pooling."
48+
- lite: "Connection pooling reuses open connections instead of creating new ones per request. Avoids repeated handshake overhead."
49+
- full: "Pool reuse open DB connections. No new connection per request. Skip handshake overhead."
50+
- ultra: "Pool = reuse DB conn. Skip handshake → fast under load."
51+
- wenyan-full: "池reuse open connection。不每req新開。skip handshake overhead。"
52+
- wenyan-ultra: "池reuse conn。skip handshake → fast。"
53+
54+
## Auto-Clarity
55+
56+
Drop caveman when:
57+
- Security warnings
58+
- Irreversible action confirmations
59+
- Multi-step sequences where fragment order or omitted conjunctions risk misread
60+
- Compression itself creates technical ambiguity (e.g., `"migrate table drop column backup first"` — order unclear without articles/conjunctions)
61+
- User asks to clarify or repeats question
62+
63+
Resume caveman after clear part done.
64+
65+
Example — destructive op:
66+
> **Warning:** This will permanently delete all rows in the `users` table and cannot be undone.
67+
> ```sql
68+
> DROP TABLE users;
69+
> ```
70+
> Caveman resume. Verify backup exist first.
71+
72+
## Boundaries
73+
74+
Code/commits/PRs: write normal. "stop caveman" or "normal mode": revert. Level persist until changed or session end.
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
name: angular-best-practices
3+
description: Applies Hickory Chat Angular conventions—AppModule and lazy feature NgModules, core/shared/features layout, DevExtreme as default UI, NgRx outside dumb components, and DI via @Injectable services. Use when editing the frontend, adding features, reviewing Angular structure, or migrating from standalone bootstrap.
4+
disable-model-invocation: true
5+
---
6+
7+
# Hickory Chat — Angular frontend
8+
9+
Baseline Angular guidance lives in the official [angular-developer](https://github.com/angular/skills/tree/main/angular-developer) skill. This file states **Hickory deltas** only.
10+
11+
## References (short)
12+
13+
- [angular-developer (GitHub)](https://github.com/angular/skills/tree/main/angular-developer)
14+
- [Angular NgModules](https://angular.dev/guide/ngmodules)
15+
- [Angular dependency injection](https://angular.dev/guide/di)
16+
- [Angular style guide](https://angular.dev/style-guide)
17+
- [DevExtreme Angular components](https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started_with_DevExtreme_Angular_Components/)
18+
- [NgRx documentation](https://ngrx.io/docs)
19+
20+
More links: [reference.md](reference.md).
21+
22+
## Module and bootstrap
23+
24+
- **Target:** `AppModule` + **lazy-loaded feature `NgModule`s** under `features/`. Root: `RouterModule.forRoot` with `loadChildren` pointing at feature modules.
25+
- **Current repo:** may still use `bootstrapApplication`; migrate to `platformBrowserDynamic().bootstrapModule(AppModule)` and move providers from `app.config.ts` into `AppModule` when doing that work.
26+
- **Core:** `AppModule` (or `CoreModule` imported only once with `forRoot` guards) holds **singleton `providers`**, `HTTP_INTERCEPTORS`, `StoreModule.forRoot` / `EffectsModule.forRoot`, DevExtreme theme setup hooks as needed.
27+
- **Shared:** `SharedModule``imports` / `exports` only; **no `providers`** unless documented. Export DevExtreme `Dx*Module` (or a `DevExtremeModule` barrel) so features import `SharedModule`, not scattered vendor modules.
28+
- **Features:** one `NgModule` per feature; **`StoreModule.forFeature` / `EffectsModule.forFeature`**; feature-scoped **`providers`**.
29+
30+
## Dependency injection
31+
32+
- Non-UI logic in **`@Injectable()`** classes; register on **`AppModule`** (singletons) or **feature module `providers`** (feature scope).
33+
- Components consume services via **constructor** or **`inject()`**; never `new MyService()` in a component.
34+
- Prefer **explicit module `providers`** for discoverability. Use **`providedIn: 'root'`** only for truly global, tree-shakable helpers.
35+
- Use **`HttpClient`** in dedicated API services; avoid raw `fetch` in components unless justified.
36+
37+
## Components, services, NgRx
38+
39+
- **Dumb components:** template, bindings, user events → outputs or **`Store.dispatch`**. No HTTP, no heavy business rules, no ad-hoc `BehaviorSubject` app state.
40+
- **NgRx:** reducers, selectors, effects live with the feature (or shared facades). No reducer logic in templates.
41+
- **DevExtreme:** default UI for grids, editors, navigation, layout. Wrap repeated patterns in `shared/`. Theming per [DevExtreme themes](https://js.devexpress.com/Documentation/Guide/Themes_and_Styles/).
42+
43+
## Directories (`frontend/src/app/`)
44+
45+
| Area | Role |
46+
|------|------|
47+
| `core/` | Source for app-wide singletons wired from `AppModule` / `CoreModule`. |
48+
| `shared/` | `SharedModule`, presentational components, DevExtreme exports. |
49+
| `features/<name>/` | Feature module, routes, components, feature services, NgRx slice. |
50+
51+
**Assets:** this repo uses **`frontend/public/`** per `angular.json` (not `src/assets/` unless you add it).
52+
53+
**Environments:** `frontend/src/environments/` + `angular.json` file replacements per [Angular build](https://angular.dev/guide/build).
54+
55+
## Tests
56+
57+
- **`npm test`** (Vitest via Angular CLI). New or changed behavior needs new or updated specs.
58+
- **Layout:** unit specs live under **`frontend/test/app/...`**, mirroring **`frontend/src/app/...`** (e.g. `src/app/core/auth/auth.service.ts``test/app/core/auth/auth.service.spec.ts`). Production code stays in `src/`; specs stay out of the app bundle via `tsconfig.app.json` excludes.
59+
- **Imports in specs:** use path aliases from **`tsconfig.spec.json`**: `@app/*``src/app/*`, `@environments/*``src/environments/*`.
60+
- **`angular.json`:** the unit-test `include` globs are resolved relative to **`sourceRoot`** (`src`), so this repo uses **`../test/**/*.spec.ts`** to pick up the sibling `test/` tree.
61+
- **NgRx:** test pure reducers/selectors directly; **`@ngrx/store/testing`** / mock store for components.
62+
- **NgModules in tests:** `TestBed.configureTestingModule` with `imports: [SharedModule, FeatureUnderTestModule, RouterTestingModule.withRoutes(...)]` when possible—not full `AppModule` unless necessary.
63+
- **DI in tests:** `TestBed.overrideProvider` or `{ provide, useClass | useValue }` on test `providers`.
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Angular — extended references (Hickory Chat)
2+
3+
## Official Angular team skill
4+
5+
- [angular-developer — SKILL.md (raw)](https://raw.githubusercontent.com/angular/skills/main/angular-developer/SKILL.md)
6+
- [angular-developer — references folder](https://github.com/angular/skills/tree/main/angular-developer/references)
7+
8+
## Angular (angular.dev)
9+
10+
- [Documentation home](https://angular.dev)
11+
- [NgModules](https://angular.dev/guide/ngmodules)
12+
- [Dependency injection in Angular](https://angular.dev/guide/di)
13+
- [Routing & navigation](https://angular.dev/guide/routing)
14+
- [HttpClient](https://angular.dev/guide/http)
15+
- [Testing](https://angular.dev/guide/testing)
16+
- [Style guide](https://angular.dev/style-guide)
17+
- [Application build & environments](https://angular.dev/guide/build)
18+
19+
## NgRx
20+
21+
- [NgRx Store — installation](https://ngrx.io/guide/store/install)
22+
- [NgRx Store](https://ngrx.io/guide/store)
23+
- [NgRx Effects](https://ngrx.io/guide/effects)
24+
- [Store testing (@ngrx/store/testing)](https://ngrx.io/guide/store/testing)
25+
26+
## DevExtreme
27+
28+
- [Angular components — getting started](https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started_with_DevExtreme_Angular_Components/)
29+
- [Themes and styles](https://js.devexpress.com/Documentation/Guide/Themes_and_Styles/)
30+
31+
## Cross-cutting
32+
33+
- [Vertical slice architecture (Jimmy Bogard)](https://www.jimmybogard.com/vertical-slice-architecture/)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
name: aspnet-best-practices
3+
description: Guides ASP.NET Core API work for Hickory Chat—hosting, DI lifetimes, minimal APIs vs controllers, configuration, validation, errors, and logging, with unit tests when behavior changes. Use when editing backend C# API code or reviewing .NET changes.
4+
disable-model-invocation: true
5+
---
6+
7+
# Hickory Chat — ASP.NET Core
8+
9+
## References (short)
10+
11+
- [ASP.NET Core fundamentals](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/)
12+
- [Dependency injection](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection)
13+
- [Minimal APIs](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis)
14+
- [Unit testing in .NET](https://learn.microsoft.com/en-us/dotnet/core/testing/)
15+
16+
More: [reference.md](reference.md).
17+
18+
## Checklist
19+
20+
- **Composition root:** `Program.cs` in **Api** registers implementations for interfaces defined in **Application**; **Domain** stays free of ASP.NET references.
21+
- **DI lifetimes:** `Singleton` for stateless shared services; `Scoped` for per-request (DbContext, unit of work); `Transient` only when a new instance every injection is correct.
22+
- **Configuration:** `IOptions<T>` / `IOptionsMonitor<T>` over raw `IConfiguration` in application code where practical.
23+
- **Errors:** consistent status codes; consider `ProblemDetails` for APIs.
24+
- **Security:** no secrets in source; validate input at the boundary.
25+
- **Tests:** add or update **unit tests** when adding or changing behavior (see `unit-testing` skill).
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# ASP.NET Core — extended references
2+
3+
- [Minimal APIs overview](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/minimal-apis)
4+
- [Controllers](https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/actions)
5+
- [Configuration](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/)
6+
- [Middleware](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/)
7+
- [Handle errors](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/error-handling)
8+
- [Logging](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/)
9+
- [Authentication](https://learn.microsoft.com/en-us/aspnet/core/security/authentication/)
10+
- [OpenAPI / Swashbuckle](https://learn.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger)

0 commit comments

Comments
 (0)