@kenkaiiii/ggcoder 4.3.159 → 4.3.160

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.
Files changed (52) hide show
  1. package/dist/core/language-detector.d.ts +32 -0
  2. package/dist/core/language-detector.d.ts.map +1 -0
  3. package/dist/core/language-detector.js +191 -0
  4. package/dist/core/language-detector.js.map +1 -0
  5. package/dist/core/language-detector.test.d.ts +2 -0
  6. package/dist/core/language-detector.test.d.ts.map +1 -0
  7. package/dist/core/language-detector.test.js +109 -0
  8. package/dist/core/language-detector.test.js.map +1 -0
  9. package/dist/core/prompt-commands.d.ts.map +1 -1
  10. package/dist/core/prompt-commands.js +93 -0
  11. package/dist/core/prompt-commands.js.map +1 -1
  12. package/dist/core/setup-history.d.ts +7 -0
  13. package/dist/core/setup-history.d.ts.map +1 -0
  14. package/dist/core/setup-history.js +50 -0
  15. package/dist/core/setup-history.js.map +1 -0
  16. package/dist/core/setup-history.test.d.ts +2 -0
  17. package/dist/core/setup-history.test.d.ts.map +1 -0
  18. package/dist/core/setup-history.test.js +48 -0
  19. package/dist/core/setup-history.test.js.map +1 -0
  20. package/dist/core/style-packs/index.d.ts +19 -0
  21. package/dist/core/style-packs/index.d.ts.map +1 -0
  22. package/dist/core/style-packs/index.js +50 -0
  23. package/dist/core/style-packs/index.js.map +1 -0
  24. package/dist/core/style-packs/packs.d.ts +18 -0
  25. package/dist/core/style-packs/packs.d.ts.map +1 -0
  26. package/dist/core/style-packs/packs.js +228 -0
  27. package/dist/core/style-packs/packs.js.map +1 -0
  28. package/dist/core/verify-commands.d.ts +35 -0
  29. package/dist/core/verify-commands.d.ts.map +1 -0
  30. package/dist/core/verify-commands.js +209 -0
  31. package/dist/core/verify-commands.js.map +1 -0
  32. package/dist/core/verify-commands.test.d.ts +2 -0
  33. package/dist/core/verify-commands.test.d.ts.map +1 -0
  34. package/dist/core/verify-commands.test.js +85 -0
  35. package/dist/core/verify-commands.test.js.map +1 -0
  36. package/dist/system-prompt.d.ts +2 -1
  37. package/dist/system-prompt.d.ts.map +1 -1
  38. package/dist/system-prompt.js +25 -3
  39. package/dist/system-prompt.js.map +1 -1
  40. package/dist/ui/App.d.ts +19 -1
  41. package/dist/ui/App.d.ts.map +1 -1
  42. package/dist/ui/App.js +189 -7
  43. package/dist/ui/App.js.map +1 -1
  44. package/dist/ui/theme/dark-ansi.json +2 -1
  45. package/dist/ui/theme/dark-daltonized.json +2 -1
  46. package/dist/ui/theme/dark.json +2 -1
  47. package/dist/ui/theme/light-ansi.json +2 -1
  48. package/dist/ui/theme/light-daltonized.json +2 -1
  49. package/dist/ui/theme/light.json +2 -1
  50. package/dist/ui/theme/theme.d.ts +1 -0
  51. package/dist/ui/theme/theme.d.ts.map +1 -1
  52. package/package.json +3 -3
@@ -0,0 +1,19 @@
1
+ import type { LanguageId } from "../language-detector.js";
2
+ /**
3
+ * Load the style-pack content for a given language. Checks for a per-project
4
+ * override at `<cwd>/.gg/styles/<id>.md` first, falling back to the bundled
5
+ * pack. Returns `null` if neither exists (defensive — should not happen for
6
+ * any LanguageId in PACKS).
7
+ */
8
+ export declare function loadPack(id: LanguageId, cwd: string): string | null;
9
+ /**
10
+ * Render the full "Language Style Packs" section that gets spliced into the
11
+ * system prompt. Returns an empty string when the active set is empty so the
12
+ * caller can skip the section entirely.
13
+ *
14
+ * The output is intentionally compact: a single header followed by each pack
15
+ * separated by a blank line. Packs already include their own \`### <Language>\`
16
+ * sub-headers.
17
+ */
18
+ export declare function renderStylePacksSection(active: Set<LanguageId>, cwd: string): string;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/style-packs/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAI1D;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAepF"}
@@ -0,0 +1,50 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { languagesToSortedArray } from "../language-detector.js";
4
+ import { PACKS } from "./packs.js";
5
+ /**
6
+ * Load the style-pack content for a given language. Checks for a per-project
7
+ * override at `<cwd>/.gg/styles/<id>.md` first, falling back to the bundled
8
+ * pack. Returns `null` if neither exists (defensive — should not happen for
9
+ * any LanguageId in PACKS).
10
+ */
11
+ export function loadPack(id, cwd) {
12
+ const overridePath = path.join(cwd, ".gg", "styles", `${id}.md`);
13
+ try {
14
+ const stat = fs.statSync(overridePath);
15
+ if (stat.isFile()) {
16
+ return fs.readFileSync(overridePath, "utf-8").trim();
17
+ }
18
+ }
19
+ catch {
20
+ /* no override — fall through to bundled */
21
+ }
22
+ return PACKS[id] ?? null;
23
+ }
24
+ /**
25
+ * Render the full "Language Style Packs" section that gets spliced into the
26
+ * system prompt. Returns an empty string when the active set is empty so the
27
+ * caller can skip the section entirely.
28
+ *
29
+ * The output is intentionally compact: a single header followed by each pack
30
+ * separated by a blank line. Packs already include their own \`### <Language>\`
31
+ * sub-headers.
32
+ */
33
+ export function renderStylePacksSection(active, cwd) {
34
+ if (active.size === 0)
35
+ return "";
36
+ const ids = languagesToSortedArray(active);
37
+ const parts = [];
38
+ for (const id of ids) {
39
+ const pack = loadPack(id, cwd);
40
+ if (pack)
41
+ parts.push(pack);
42
+ }
43
+ if (parts.length === 0)
44
+ return "";
45
+ return (`## Language Style Packs\n\n` +
46
+ `Conventions for new code in each active language. Library names below are ` +
47
+ `illustrative — use whatever the project already imports.\n\n` +
48
+ parts.join("\n\n"));
49
+ }
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/style-packs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAc,EAAE,GAAW;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACjE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IACD,OAAO,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAuB,EAAE,GAAW;IAC1E,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,IAAI;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,CACL,6BAA6B;QAC7B,4EAA4E;QAC5E,8DAA8D;QAC9D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CACnB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { LanguageId } from "../language-detector.js";
2
+ /**
3
+ * Per-language style packs injected into the system prompt when the detector
4
+ * sees the language is active in the project.
5
+ *
6
+ * Design principles (apply to every pack):
7
+ * 1. Apply the strictest reasonable subset of *idiomatic* style — nothing
8
+ * exotic the model has to think about. The agent already knows these
9
+ * patterns; the pack just narrows the choice space.
10
+ * 2. Optimize for low ambiguity, not for human readability. Bullet form.
11
+ * 3. Errors as values, schema at boundaries, mechanical formatting,
12
+ * one canonical way to do common tasks.
13
+ * 4. ~30-50 lines per pack. Anything longer is bloat in the system prompt.
14
+ * 5. Avoid triple backticks (template literal conflict). Use single
15
+ * backticks for inline tokens, escape with \\\` when needed.
16
+ */
17
+ export declare const PACKS: Readonly<Record<LanguageId, string>>;
18
+ //# sourceMappingURL=packs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packs.d.ts","sourceRoot":"","sources":["../../../src/core/style-packs/packs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CA2OtD,CAAC"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Per-language style packs injected into the system prompt when the detector
3
+ * sees the language is active in the project.
4
+ *
5
+ * Design principles (apply to every pack):
6
+ * 1. Apply the strictest reasonable subset of *idiomatic* style — nothing
7
+ * exotic the model has to think about. The agent already knows these
8
+ * patterns; the pack just narrows the choice space.
9
+ * 2. Optimize for low ambiguity, not for human readability. Bullet form.
10
+ * 3. Errors as values, schema at boundaries, mechanical formatting,
11
+ * one canonical way to do common tasks.
12
+ * 4. ~30-50 lines per pack. Anything longer is bloat in the system prompt.
13
+ * 5. Avoid triple backticks (template literal conflict). Use single
14
+ * backticks for inline tokens, escape with \\\` when needed.
15
+ */
16
+ export const PACKS = {
17
+ typescript: `### TypeScript
18
+
19
+ - **Tooling.** \`tsc --strict\` always. Enable \`noUncheckedIndexedAccess\`, \`exactOptionalPropertyTypes\`, \`noImplicitOverride\`. Prettier + \`@typescript-eslint/strict-type-checked\`.
20
+ - **Types.** Explicit return types on every exported function and async function. Inference is fine inside function bodies. Never use \`any\`. Never use \`as\` casts except \`as const\`. Never use the non-null \`!\` operator. Ban the \`Function\` type and \`Object\` type.
21
+ - **Data.** Validate every external boundary (HTTP, env, file, IPC) with Zod or Valibot. Never trust untyped JSON. Discriminated unions over class hierarchies. \`Readonly<T>\` for immutable shapes.
22
+ - **Errors.** Use \`Result<T, E>\` (e.g. \`neverthrow\`) for expected failures — network errors, validation failures, missing records. Reserve \`throw\` for truly unrecoverable bugs (impossible states, assertion failures). Never throw for control flow.
23
+ - **Modules.** Named exports only — no \`export default\`. One concept per file. No barrel files (\`index.ts\` re-exports). Feature folders (\`users/\`), not layer folders (\`controllers/services/repos/\`).
24
+ - **Async.** \`async/await\` only — no \`.then\` chains. Always await or explicitly return promises. No floating promises.
25
+ - **Avoid.** \`enum\` (use \`as const\` objects + \`typeof\` unions). Class inheritance beyond one level. \`namespace\`. Decorators outside framework-required slots. Conditional/mapped types in app code (keep in \`types.ts\` if unavoidable).`,
26
+ javascript: `### JavaScript
27
+
28
+ - **Tooling.** ESM only (\`"type": "module"\`). Prettier + ESLint with \`eslint:recommended\` and \`eslint-plugin-import\`. If types matter at all, use TypeScript instead of JSDoc.
29
+ - **Types.** If you must stay on JS, annotate exported functions with JSDoc \`@param\`/\`@returns\` so the LSP can infer. Otherwise treat the project as untyped and validate aggressively at boundaries.
30
+ - **Data.** Validate every external boundary with Zod. Use plain objects + factory functions, not classes, for data shapes. \`Object.freeze\` for constants.
31
+ - **Errors.** Return \`{ ok: true, value } | { ok: false, error }\` discriminated objects for expected failures. \`throw\` only for unrecoverable bugs. Always handle promise rejections.
32
+ - **Modules.** Named exports only. One concept per file. Use feature folders. No CommonJS \`require\` in new code.
33
+ - **Async.** \`async/await\` exclusively. \`Promise.all\` for parallel work; never sequential awaits in a loop unless ordering is required.
34
+ - **Avoid.** \`var\`. Implicit globals. \`==\` (use \`===\`). Prototype mutation. \`with\`. \`eval\`. \`arguments\` (use rest params).`,
35
+ python: `### Python
36
+
37
+ - **Tooling.** Python 3.12+. Ruff (lint + format) and Pyright in strict mode. \`pyproject.toml\` is the single config file — no \`setup.py\`, \`setup.cfg\`, or \`requirements.txt\` in new projects. Use \`uv\` for env/dep management.
38
+ - **Types.** Annotate every parameter, return, and class field. Use built-in generics: \`list[str]\`, \`dict[str, int]\`, \`X | None\` (not \`Optional\`). Never bare \`Any\`. \`TypedDict\` for dict shapes only at API boundaries; prefer dataclasses or Pydantic models for everything else.
39
+ - **Data.** Internal value objects: \`@dataclass(slots=True, frozen=True)\`. External boundaries (HTTP, files, env, IPC): Pydantic v2 \`BaseModel\` with \`model_config = ConfigDict(strict=True, frozen=True)\`. Pydantic guards the boundary; type checker guards the interior.
40
+ - **Errors.** Raise specific custom exceptions for unrecoverable bugs. For expected failures, return \`tuple[T, None] | tuple[None, ErrorType]\` or a small \`Result\` dataclass. Never use bare \`except:\` — always catch a specific class.
41
+ - **Structure.** One concept per module. \`src/\` layout. No top-level mutable state. \`__init__.py\` re-exports only public API. Feature folders.
42
+ - **Idioms.** \`match\` statements over \`isinstance\` chains. Discriminated unions via \`Literal\` tag fields. Comprehensions over \`map\`/\`filter\`. \`pathlib.Path\`, never raw string paths.
43
+ - **Avoid.** Decorators that mutate (use \`@dataclass\`, \`@property\`, \`@staticmethod\`, framework-required only). \`*args\`/\`**kwargs\` except at adapter edges. Mutable default arguments. \`from x import *\`. Circular imports — refactor into a smaller module.`,
44
+ go: `### Go
45
+
46
+ - **Tooling.** \`gofmt\` non-negotiable. \`go vet\` + \`staticcheck\` in CI. \`golangci-lint\` with a conservative preset. Latest stable Go.
47
+ - **Errors.** \`if err != nil { return fmt.Errorf("doing X: %w", err) }\` — wrap with context at every layer. Define sentinel errors as \`var ErrXxx = errors.New("xxx")\` at package level. Use \`errors.Is\`/\`errors.As\` for matching. Never \`panic\` outside \`init\` or truly impossible states.
48
+ - **Types.** Small interfaces defined at the consumer, not the producer (\`io.Reader\`-style, 1-3 methods). Accept interfaces, return structs. No empty interface \`any\` except at adapter boundaries.
49
+ - **Concurrency.** \`context.Context\` is the first parameter on every I/O or long-running function — always propagate, never \`context.Background()\` deep in a call chain. Goroutines launched only with clear lifecycle ownership (\`errgroup\`, \`sync.WaitGroup\`, or paired \`done\` channel).
50
+ - **Structure.** Flat package layout by feature (\`user/\`, \`order/\`), not by layer. \`cmd/<binary>/main.go\` for executables. \`internal/\` for packages not meant to be imported externally. No \`utils\` or \`common\` packages.
51
+ - **Generics.** Use only when they remove real duplication. Concrete types are the default.
52
+ - **Avoid.** \`init()\` functions with side effects. Global mutable state. Returning bare \`error\` without wrapping context. Naked returns in functions longer than 5 lines. \`interface{}\` in new code.`,
53
+ rust: `### Rust
54
+
55
+ - **Tooling.** \`rustfmt\` + \`clippy\` with at minimum \`-W clippy::pedantic\`. Stable channel unless you have a specific reason. \`cargo test\` + \`cargo doc\` in CI.
56
+ - **Errors.** Libraries: define typed error enums with \`thiserror\` so callers can match specific variants. Binaries / application code: use \`anyhow::Result\` + \`.context("doing X")\`. Use the \`?\` operator everywhere; reserve \`match\` for cases that need transformation. Never \`unwrap()\` outside tests, examples, or proven-impossible states (add \`// SAFETY:\` comment when truly unavoidable).
57
+ - **Types.** Prefer concrete types and \`impl Trait\` returns over \`dyn Trait\` + generics towers. Newtype wrappers (\`struct UserId(Uuid)\`) over raw primitives for domain types. Lifetimes named meaningfully (\`'src\`, \`'arena\`), not \`'a\`, \`'b\`.
58
+ - **Modules.** One concept per file. \`mod.rs\` only re-exports. Feature folders. \`pub(crate)\` by default; \`pub\` only for genuine library API.
59
+ - **Async.** \`tokio\` is the default runtime. \`async fn\` in traits via \`async-trait\` only when stable async-fn-in-trait won't work. Avoid mixing runtimes.
60
+ - **Unsafe.** Forbidden in app code without an explicit \`// SAFETY:\` comment explaining the invariant. Encapsulate in a safe wrapper module.
61
+ - **Avoid.** Macro-heavy crates in app logic. Custom \`macro_rules!\` unless it removes >5 real call sites. Trait towers. \`Box<dyn Error>\` (use \`anyhow::Error\`). String-typed APIs where an enum would do.`,
62
+ java: `### Java
63
+
64
+ - **Tooling.** Java 21+ (LTS). \`google-java-format\` or \`spotless\`. Error Prone + Checker Framework or NullAway in CI. Maven or Gradle Kotlin DSL — pick one per repo and stick.
65
+ - **Types.** Use \`record\` for all immutable data carriers. \`sealed interface\` + permits for sum types; pattern-match in \`switch\`. \`Optional<T>\` for return types only — never as a field or parameter.
66
+ - **Errors.** Custom unchecked exceptions extending \`RuntimeException\` for business errors. Wrap checked exceptions at adapter boundaries — don't propagate \`IOException\` through service layers. Use sealed \`Result<T, E>\` types for cases where the caller must handle both branches.
67
+ - **Nullability.** \`@Nullable\`/\`@NonNull\` (JSpecify) on every API boundary. Treat unannotated as non-null. NullAway in CI.
68
+ - **Structure.** Package by feature. Constructor injection only — no field injection, no setter injection. No static mutable state. \`final\` by default on classes and fields.
69
+ - **Avoid.** Reflection in business code (frameworks may need it). Lombok in new code (records cover 95% of cases). AOP / proxy magic. Checked exceptions on new APIs. Inheritance beyond one level.`,
70
+ kotlin: `### Kotlin
71
+
72
+ - **Tooling.** Kotlin 2.0+. \`ktlint\` + \`detekt\`. Strict explicit API mode in libraries.
73
+ - **Types.** \`data class\` for value objects. \`sealed class\` / \`sealed interface\` for sum types — exhaustive \`when\` over \`if\`. Inline \`value class\` for domain primitives. Avoid \`Any\` and platform types.
74
+ - **Nullability.** Use the type system — never \`!!\`. Prefer \`?.let\`, \`requireNotNull\`, or explicit \`if\` checks. Treat all Java interop returns as nullable.
75
+ - **Errors.** \`Result<T>\` or a custom sealed \`Either\`-like type for expected failures. Reserve exceptions for bugs. \`runCatching\` only at adapter edges.
76
+ - **Coroutines.** Structured concurrency via \`coroutineScope\` / \`supervisorScope\`. Never \`GlobalScope\`. \`Dispatchers.IO\` for blocking work, \`Default\` for CPU. Always pass a \`CoroutineContext\` or scope into suspend functions that launch children.
77
+ - **Structure.** Package by feature. One top-level public declaration per file (extension functions excepted). Use \`internal\` visibility liberally.
78
+ - **Avoid.** Companion-object factories when a top-level function works. Nested classes for grouping (use packages). Reflection. Overusing operator overloading.`,
79
+ csharp: `### C#
80
+
81
+ - **Tooling.** C# 12+ on .NET 8+. \`<Nullable>enable</Nullable>\` and \`<TreatWarningsAsErrors>true</TreatWarningsAsErrors>\` project-wide. \`dotnet format\`. Roslyn analyzers + StyleCop.
82
+ - **Types.** \`record\` (positional or with-init) for DTOs and value objects. \`required\` properties over multi-arg constructors. File-scoped namespaces. One public type per file.
83
+ - **Nullability.** NRTs on, no \`!\` operator except for proven-non-null cases with a comment. \`is null\` / \`is not null\` over \`==\`.
84
+ - **Errors.** Custom exceptions for unrecoverable. \`Result<T, E>\` (e.g. via \`OneOf\`, \`ErrorOr\`, or a small custom type) for expected failures across service boundaries. Never use exceptions for control flow.
85
+ - **Async.** \`async Task<Result<T>>\` everywhere. No \`async void\` except event handlers. Always pass \`CancellationToken\` through I/O calls. Avoid \`.Result\`, \`.Wait()\`, and \`.GetAwaiter().GetResult()\` — they deadlock.
86
+ - **LINQ.** Keep chains shallow (≤ 3 operators). Pull complex queries into named methods or local functions.
87
+ - **Avoid.** Reflection in hot paths. Static mutable state. Source generators in app code (libraries only). Multi-level inheritance. Manual \`IDisposable\` when \`using\` works.`,
88
+ cpp: `### C++
89
+
90
+ - **Tooling.** C++20 minimum, C++23 when toolchain allows. \`clang-format\` + \`clang-tidy\` with \`cppcoreguidelines-*\` and \`modernize-*\` checks. AddressSanitizer + UBSan in test builds. CMake with presets.
91
+ - **Resources.** RAII universal. \`std::unique_ptr\` by default, \`std::shared_ptr\` only when ownership is genuinely shared. Never raw owning pointers. Never \`new\`/\`delete\` in app code.
92
+ - **Types.** \`std::string_view\` and \`std::span\` for non-owning views. \`std::optional<T>\` for nullable returns. \`auto\` for obvious types, explicit for API surfaces.
93
+ - **Errors.** \`std::expected<T, E>\` (C++23) — or \`tl::expected\` if stuck on older toolchain — for expected failures. \`throw\` only for genuinely exceptional cases (allocation failure, programmer errors). Exception specifications via \`noexcept\` on functions that must not throw.
94
+ - **Generics.** Concepts (C++20), never SFINAE. \`std::ranges\` over raw iterator pairs.
95
+ - **Headers/modules.** C++20 modules when supported; otherwise include guards via \`#pragma once\`. No transitive includes — each file includes what it uses.
96
+ - **Avoid.** C-style casts (use \`static_cast\` / \`reinterpret_cast\`). Raw arrays in new code (use \`std::array\` or \`std::vector\`). Macros for anything other than include guards or platform conditionals. Template metaprogramming beyond \`if constexpr\` + concepts. Multiple inheritance of non-interface classes.`,
97
+ c: `### C
98
+
99
+ - **Tooling.** C11 or C17. \`clang-format\` + \`clang-tidy\`. \`-Wall -Wextra -Wpedantic -Werror\` always. AddressSanitizer + UBSan in test builds. Run a fuzzer on parsers.
100
+ - **Memory.** Pair every \`malloc\` with a clear owner and a single \`free\` site. Prefer arena/region allocators for groups of related allocations. Zero-initialize structs. Never trust \`strlen\` on untrusted input — track lengths explicitly.
101
+ - **Types.** \`stdint.h\` integer types (\`int32_t\`, \`size_t\`, \`uintptr_t\`) — never bare \`int\`/\`long\` for sizes or counts. \`bool\` from \`stdbool.h\`. Use \`enum\` for tagged unions; carry a tag field.
102
+ - **Errors.** Return \`int\` status codes or a small enum; pass results back via out-pointers. Always check return values. Define \`Result_T\` structs for richer cases. Never use \`errno\` across thread boundaries without copying.
103
+ - **Structure.** One concept per \`.c\` + \`.h\` pair. Header declares public API only; static functions are file-local. No global mutable state (use opaque handles).
104
+ - **Strings.** Length-prefixed slices or explicit \`(ptr, len)\` pairs over null-terminated wherever possible. \`snprintf\` with explicit buffer sizes — never \`sprintf\`, \`strcpy\`, \`gets\`.
105
+ - **Avoid.** Macros beyond \`#include\` guards, platform conditionals, and named constants. Variable-length arrays. Implicit int. \`goto\` except for unified cleanup paths.`,
106
+ ruby: `### Ruby
107
+
108
+ - **Tooling.** Ruby 3.3+. \`standardrb\` or \`rubocop\` (strict preset). \`sorbet\` with \`# typed: strict\` on every file in new projects. RSpec for tests.
109
+ - **Types.** \`T::Struct\` (Sorbet) for value objects. \`T.nilable\`, \`T::Array[X]\`, etc. on every method signature. RBS files alongside libraries.
110
+ - **Errors.** Custom exception classes per domain, inheriting a single base \`AppError\`. \`raise\` for unrecoverable; for expected failures return \`Success(value)\` / \`Failure(err)\` via \`dry-monads\` or a small custom Result type.
111
+ - **Structure.** Files match class names. Modules by feature. \`Zeitwerk\` autoloading. Frozen string literals magic comment at the top of every file.
112
+ - **Idioms.** \`Data.define\` (Ruby 3.2+) for immutable value objects when not using Sorbet. Keyword arguments over positional past 2 args. Guard clauses over nested \`if\`. \`tap\` for side effects on a chain.
113
+ - **Avoid.** \`method_missing\` and \`respond_to_missing?\` in new code. Monkey-patching core classes. \`define_method\` at runtime. \`eval\` family. Heavy DSLs outside the few canonical cases (Rails routes, RSpec, etc. — isolate them).`,
114
+ php: `### PHP
115
+
116
+ - **Tooling.** PHP 8.3+. PHPStan or Psalm at max level. \`php-cs-fixer\` or \`pint\`. Composer with strict autoload.
117
+ - **Types.** \`declare(strict_types=1);\` at the top of every file. Type every parameter, return, and property. \`readonly\` classes and properties everywhere possible. Enums (backed) for closed sets — never string constants.
118
+ - **Data.** Constructor property promotion for DTOs: \`public function __construct(public readonly string $name, public readonly int $age) {}\`. Final classes by default.
119
+ - **Errors.** Typed custom exceptions per domain. For expected failures, return a small \`Result\` value object or use a discriminated union of result classes. Never catch \`\\\\Throwable\` except at the request boundary.
120
+ - **Structure.** PSR-4 autoloading. Package by feature. No global state. Constructor injection only.
121
+ - **Avoid.** Untyped parameters or returns. \`@\` error suppression. Globals. Static mutable state. Multiple inheritance via traits as a workaround for poor design. \`extract()\`, \`compact()\`, variable variables.`,
122
+ swift: `### Swift
123
+
124
+ - **Tooling.** Swift 5.10+ or 6 with strict concurrency. \`swift-format\` or SwiftLint. \`-warnings-as-errors\` in CI.
125
+ - **Types.** \`struct\` by default; \`class\` only for identity-bearing references. \`enum\` with associated values for sum types. \`@frozen\` on stable public enums. Generics over protocol existentials when possible.
126
+ - **Optionals.** Use the type system — no \`!\` force-unwraps except for genuinely impossible-to-fail cases (with a comment). \`guard let\` / \`if let\` everywhere else.
127
+ - **Errors.** \`throws\` + typed \`throws\` (Swift 6) for expected failures across module boundaries. \`Result<Success, Failure>\` when storing/passing async outcomes. Never use \`try!\` outside tests.
128
+ - **Concurrency.** \`async\`/\`await\` + structured concurrency (\`TaskGroup\`, \`async let\`). Actors for mutable shared state. \`@MainActor\` on UI-touching code. Avoid \`Task.detached\`.
129
+ - **Structure.** One public type per file. Group files by feature. Extensions for protocol conformances, kept in the same file unless cross-cutting.
130
+ - **Avoid.** Implicit-unwrapped optionals (\`Type!\`) in new code. \`NSObject\` inheritance unless interop requires it. Singletons as the primary state container. Reflection (\`Mirror\`) in hot paths.`,
131
+ scala: `### Scala
132
+
133
+ - **Tooling.** Scala 3. \`scalafmt\` + \`scalafix\`. \`-Wunused:all\`, \`-Werror\`, \`-explain\` compiler flags. Run on the latest stable Scala 3.
134
+ - **Types.** \`case class\` for records, \`enum\` for sum types — never sealed-trait-and-case-objects boilerplate in Scala 3. Opaque types for domain primitives. Avoid implicit conversions; use \`given\`/\`using\` for type-class instances only.
135
+ - **Errors.** \`Either[E, A]\` for expected failures, \`Try\` only at the foreign-exception boundary, exceptions only for unrecoverable bugs. With effect libraries (Cats Effect / ZIO): use the effect type's error channel.
136
+ - **Effects.** Pick one effect system per repo (Cats Effect IO or ZIO) and stick with it. Avoid mixing Future + IO. Tagless final only when the abstraction is genuinely load-bearing.
137
+ - **Structure.** Package by feature. One top-level definition per file when public. Heavy use of \`extension\` methods over implicit classes.
138
+ - **Avoid.** \`null\`. \`var\` in business code. Implicit conversions. Operator-soup DSLs in app logic (libraries only). \`asInstanceOf\` outside adapter boundaries.`,
139
+ elixir: `### Elixir
140
+
141
+ - **Tooling.** Latest stable Elixir + Erlang/OTP. \`mix format\`. \`credo --strict\` + \`dialyzer\` (with \`@spec\` on every public function).
142
+ - **Types.** \`@spec\` and \`@type\` on every public function and module — feed Dialyzer. Use structs (\`defstruct\` + \`@enforce_keys\`) for domain data, never bare maps for typed records.
143
+ - **Errors.** \`{:ok, value} | {:error, reason}\` tuples for expected outcomes. \`with\` chains for happy-path composition. Bang functions (\`!\`) raise on failure — use sparingly, only when callers genuinely can't recover. Never \`rescue\` arbitrary exceptions in business code.
144
+ - **Processes.** Use OTP behaviors (\`GenServer\`, \`Supervisor\`, \`Task.Supervisor\`) — never raw \`spawn\`/\`spawn_link\` in app code. Let-it-crash with a supervision tree, not defensive try/rescue.
145
+ - **Structure.** Context modules (Phoenix-style) group functionality by bounded context. Public API on the context module; implementation modules are internal.
146
+ - **Avoid.** Macros in app code (libraries may need them; mark with care). \`Process.put\`/\`get\` for state. Atom-keyed maps from untrusted input (\`String.to_atom\` on user data leaks). Hidden side effects in pipelines.`,
147
+ haskell: `### Haskell
148
+
149
+ - **Tooling.** GHC 9.6+. \`ormolu\` or \`fourmolu\`. HLint with strict suggestions. Stack or Cabal — pick one per repo. \`-Wall -Wcompat -Werror\` for libraries.
150
+ - **Types.** Explicit top-level signatures on every binding, even when inferable. Records with named fields and \`DuplicateRecordFields\` + \`OverloadedRecordDot\` (or use \`generic-lens\`). Newtype wrappers for domain primitives.
151
+ - **Errors.** \`Either ErrorType a\` for expected failures. \`Maybe\` only for genuine absence, not for "computation failed". Exceptions only at the IO boundary; convert to \`Either\` immediately.
152
+ - **Effects.** Pick one effect strategy per repo: plain \`IO\` for simple apps, \`ReaderT\` over \`IO\` for typical services, or a single effect system (effectful / freer-simple). Don't mix.
153
+ - **Structure.** One module per type + its operations. No \`Util\` or \`Misc\` modules. Public API surface in module export lists — never \`module X where\` with no export list.
154
+ - **Avoid.** Partial functions (\`head\`, \`!!\`, \`fromJust\`) — use total alternatives. Lens-heavy chains in app logic. \`undefined\` in committed code. Orphan instances.`,
155
+ ocaml: `### OCaml
156
+
157
+ - **Tooling.** OCaml 5+ via opam. \`dune\` build system. \`ocamlformat\` with the project preset locked. Merlin for editor support.
158
+ - **Types.** Annotate every public binding in \`.mli\` interface files. Phantom types or private types for domain invariants. Avoid open polymorphic variants in libraries (use plain variants).
159
+ - **Errors.** \`Result.t\` from the stdlib for expected failures. Exceptions only for impossible states or at the I/O boundary. \`( let* )\` syntax for monadic chaining over nested \`match\`.
160
+ - **Modules.** Heavy use of modules and module signatures. One main type per module, named \`t\`, with operations as \`Module.op\`. Functors only when they buy real abstraction; otherwise plain modules.
161
+ - **Structure.** One \`.ml\` per concept with a matching \`.mli\` exposing only public API. Dune libraries grouped by feature.
162
+ - **Avoid.** \`Obj.magic\` outside truly unavoidable interop. Global mutable state. Polymorphic equality (\`=\`) on complex types — use type-specific \`equal\` functions. Pervasives \`Stdlib\` shadowing without a clear reason.`,
163
+ fsharp: `### F#
164
+
165
+ - **Tooling.** Latest stable F# on .NET 8+. \`fantomas\` formatter. \`<TreatWarningsAsErrors>true</TreatWarningsAsErrors>\`. FSharpLint or analyzers.
166
+ - **Types.** Records and discriminated unions for all domain types. Single-case DUs for domain primitives. Avoid classes in new code except for interop. Type providers only when the source schema is stable.
167
+ - **Errors.** \`Result<'T, 'TError>\` for expected failures, \`Option\` for absence. \`ResultBuilder\` (\`result { ... }\`) computation expression for sequencing. Exceptions only at the .NET interop boundary.
168
+ - **Structure.** Modules over classes. File order matters in F# — put types and core helpers first, composition later. One concept per file. Keep \`open\` statements at the top.
169
+ - **Async.** \`Async\` for F#-native flows, \`Task\` at .NET boundaries. Use \`task { }\` computation expression when interop matters.
170
+ - **Avoid.** Mutable state outside small, well-contained pockets. Object expressions where a module function would do. \`obj\` and downcasts in business code. \`null\` even for interop — wrap immediately in \`Option\`.`,
171
+ clojure: `### Clojure
172
+
173
+ - **Tooling.** Latest stable Clojure. \`clj-kondo\` linter (treat warnings as errors). \`cljfmt\` formatter. \`tools.deps\` (\`deps.edn\`) over Leiningen for new projects.
174
+ - **Specs/schemas.** Use Malli (preferred) or Spec at every external boundary. Schema-driven generative tests on core data. Keep schemas alongside the namespace they describe.
175
+ - **Errors.** Return \`{:ok ...}\` / \`{:error ...}\` maps for expected failures. \`ex-info\` with structured data for genuine exceptions. Never bare \`throw\` of a string. \`try\`/\`catch\` only at process or request boundaries.
176
+ - **State.** Atoms for shared local state, refs only when coordination is required, never global vars for mutable state. Components / Integrant / Mount for system lifecycle — pick one per repo.
177
+ - **Structure.** Namespace per concept. Keep functions small, composable, pure where possible. Side effects pushed to the edge.
178
+ - **Avoid.** Macros in app code unless they remove genuine ceremony. Dynamic vars (\`*var*\`) for hidden parameters. \`def\` inside functions. \`eval\` in production code. Threading-macro chains longer than ~5 steps without a named intermediate.`,
179
+ dart: `### Dart
180
+
181
+ - **Tooling.** Dart 3+. \`dart format\`. \`very_good_analysis\` or \`flutter_lints\` strict preset. Sound null safety enabled.
182
+ - **Types.** Explicit types on every public API. \`final\` everywhere unless mutation is intentional. Records (Dart 3) and patterns for ad-hoc structured data. \`sealed class\` + pattern matching for sum types.
183
+ - **Errors.** Custom exceptions for unrecoverable cases. \`Result<T, E>\` sealed class for expected failures. Never throw \`String\` or untyped values.
184
+ - **Async.** \`async\`/\`await\`. \`Future\` for one-shot, \`Stream\` for sequences. Always handle errors via \`.catchError\` or try/catch at the boundary.
185
+ - **Structure.** One public class per file. Feature folders. \`part\`/\`part of\` only for code generation (\`freezed\`, \`json_serializable\`).
186
+ - **Avoid.** \`dynamic\` in new code. Implicit \`new\` (write it out where ambiguous). \`var\` for public API. Mutable static fields. Long widget build methods — extract.`,
187
+ lua: `### Lua
188
+
189
+ - **Tooling.** Lua 5.4 or LuaJIT — declare which. \`stylua\` for formatting. \`luacheck\` with strict globals. Annotate with LuaCATS / EmmyLua for editor support.
190
+ - **Types.** \`---@type\`, \`---@param\`, \`---@return\` annotations on every public function. \`---@class\` for tables used as records.
191
+ - **Tables.** Decide if a table is a record, array, or map at the call site and stick to it. Don't mix array and map fields. Sequence tables (\`{ "a", "b" }\`) treated as 1-indexed sequences without holes.
192
+ - **Errors.** Return \`value, nil\` on success / \`nil, errString\` on failure for expected outcomes. \`error()\` only for unrecoverable programmer errors. \`pcall\` at module / request boundaries.
193
+ - **Modules.** \`local M = {}; … return M\` pattern. No global side effects on require. \`local\` everything unless explicit module export.
194
+ - **Avoid.** Implicit globals — set \`luacheck\` to flag them. Metatable cleverness in app logic. \`setfenv\`/\`getfenv\` (gone in 5.2+) or environment hacks. String-key tables when an index would work.`,
195
+ zig: `### Zig
196
+
197
+ - **Tooling.** Pin a specific Zig version per project (the language is pre-1.0 and shifting). \`zig fmt\`. Run all sanitizers in test builds.
198
+ - **Errors.** Use Zig's error union type \`!T\` everywhere appropriate. Define a single error set per module, named \`Error\`. Use \`try\` for propagation, \`catch\` for handling at the boundary. Never \`unreachable\` in production paths.
199
+ - **Memory.** Explicit allocator passed in to every function that allocates. Pair every \`alloc\` with a \`defer\` \`free\`. Use arena allocators for grouped lifetimes.
200
+ - **Comptime.** Use \`comptime\` for genuine compile-time work (generics, config) — not as a substitute for runtime code.
201
+ - **Structure.** One concept per file. Public API at the top. Tests in the same file as the code they test.
202
+ - **Avoid.** \`@cImport\` outside a single \`c.zig\` boundary module. Heap allocation in hot paths when a fixed-size buffer works. Mixing different allocators in one ownership chain.`,
203
+ sql: `### SQL
204
+
205
+ - **Tooling.** \`sqlfluff\` with a strict dialect-specific preset. Migrations are append-only, numbered, and reversible — never edit an applied migration.
206
+ - **Style.** Uppercase keywords. One clause per line, trailing commas in select lists, leading commas allowed if the team agrees. Always alias tables; always qualify columns with the alias.
207
+ - **Selects.** Never \`SELECT *\` in application code. CTEs over nested subqueries. Window functions over self-joins where they work.
208
+ - **Schema.** Explicit \`NOT NULL\` on every column that should have it. Foreign keys with \`ON DELETE\` actions specified. Generated/identity columns for surrogate keys; never auto-incrementing without a \`PRIMARY KEY\`.
209
+ - **Migrations.** One change per migration. Idempotent where the engine supports it. Always include a rollback plan in a comment. No data migrations mixed with schema migrations.
210
+ - **Avoid.** String interpolation into queries from app code — use parameterized queries. \`SELECT INTO\` for permanent tables. ORM lazy-loading patterns hidden behind \`N+1\` queries. Wide tables with \`JSON\` columns where a relational design fits.`,
211
+ bash: `### Bash / Shell
212
+
213
+ - **Tooling.** \`#!/usr/bin/env bash\` shebang. \`set -euo pipefail; IFS=$'\\n\\t'\` at the top of every script. \`shellcheck\` clean — no exceptions.
214
+ - **Style.** Quote every variable expansion (\`"$var"\`). \`[[ ]]\` not \`[ ]\` for tests. \`$(cmd)\` not backticks. Functions over inline blocks past ~10 lines.
215
+ - **Errors.** Check command exit codes explicitly when \`set -e\` semantics aren't sufficient (e.g. pipes — use \`pipefail\`). \`trap\` for cleanup. Never \`|| true\` to silence errors without a comment explaining why.
216
+ - **Args.** Use \`getopts\` or a small parser, not positional indexing past 2 args. \`--\` to separate flags from arguments when passing to other commands.
217
+ - **Structure.** Top of script: shebang, \`set\` flags, \`readonly\` constants, then function definitions, then \`main\` call. One concern per script.
218
+ - **Avoid.** \`eval\`. Word splitting / glob expansion by leaving variables unquoted. Mutating \`IFS\` in the middle of a script. Scripts longer than ~100 lines — switch to Python or Go.`,
219
+ terraform: `### Terraform / HCL
220
+
221
+ - **Tooling.** Latest stable Terraform or OpenTofu. \`terraform fmt\`. \`tflint\` + \`tfsec\` (or \`checkov\`) in CI. Pinned provider versions in \`required_providers\`. Remote state with locking always.
222
+ - **Structure.** Modules by infrastructure concern (\`network/\`, \`compute/\`, \`data/\`). \`main.tf\`, \`variables.tf\`, \`outputs.tf\`, \`versions.tf\` per module. No monolithic root module — environments compose modules.
223
+ - **Variables.** Every variable has a \`type\` and a \`description\`. \`sensitive = true\` on secrets. Validate with \`validation\` blocks. No untyped \`any\` variables.
224
+ - **State.** One state file per environment + concern. Never commit \`.tfstate\` or \`.tfvars\` with secrets to git. Use \`tfvars\` files per environment, kept out of public repos.
225
+ - **Resources.** Explicit \`tags\` blocks on every resource that supports them. Lifecycle \`prevent_destroy = true\` on stateful infrastructure (databases, buckets) unless intentionally ephemeral.
226
+ - **Avoid.** \`count\` for set-like collections — use \`for_each\` with a map. Hard-coded provider regions or account IDs (use variables). Implicit dependencies — declare \`depends_on\` when ordering matters. \`local-exec\` provisioners as a primary tool (use them only as a last resort).`,
227
+ };
228
+ //# sourceMappingURL=packs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packs.js","sourceRoot":"","sources":["../../../src/core/style-packs/packs.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,KAAK,GAAyC;IACzD,UAAU,EAAE;;;;;;;;kPAQoO;IAEhP,UAAU,EAAE;;;;;;;;uIAQyH;IAErI,MAAM,EAAE;;;;;;;;wQAQ8P;IAEtQ,EAAE,EAAE;;;;;;;;2MAQqM;IAEzM,IAAI,EAAE;;;;;;;;gNAQwM;IAE9M,IAAI,EAAE;;;;;;;qMAO6L;IAEnM,MAAM,EAAE;;;;;;;;iKAQuJ;IAE/J,MAAM,EAAE;;;;;;;;kLAQwK;IAEhL,GAAG,EAAE;;;;;;;;6TAQsT;IAE3T,CAAC,EAAE;;;;;;;;6KAQwK;IAE3K,IAAI,EAAE;;;;;;;6OAOqO;IAE3O,GAAG,EAAE;;;;;;;uNAOgN;IAErN,KAAK,EAAE;;;;;;;;yMAQgM;IAEvM,KAAK,EAAE;;;;;;;sKAO6J;IAEpK,MAAM,EAAE;;;;;;;8NAOoN;IAE5N,OAAO,EAAE;;;;;;;6KAOkK;IAE3K,KAAK,EAAE;;;;;;;mOAO0N;IAEjO,MAAM,EAAE;;;;;;;2NAOiN;IAEzN,OAAO,EAAE;;;;;;;sPAO2O;IAEpP,IAAI,EAAE;;;;;;;2KAOmK;IAEzK,GAAG,EAAE;;;;;;;2MAOoM;IAEzM,GAAG,EAAE;;;;;;;uLAOgL;IAErL,GAAG,EAAE;;;;;;;2PAOoP;IAEzP,IAAI,EAAE;;;;;;;2LAOmL;IAEzL,SAAS,EAAE;;;;;;;iSAOoR;CAChS,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { LanguageId } from "./language-detector.js";
2
+ /**
3
+ * A verification command the agent should consider running after meaningful
4
+ * edits to satisfy the active style pack(s). These are *recommendations* —
5
+ * the agent picks the relevant ones for the change it just made.
6
+ *
7
+ * Detection is filesystem-only (manifest reads + script-name scans) — no
8
+ * command execution. Cheap to compute alongside language detection.
9
+ */
10
+ export interface VerifyCommand {
11
+ /** Display label for the prompt (e.g. "lint", "typecheck", "test"). */
12
+ label: string;
13
+ /** The exact shell command, including the runner (pnpm/cargo/uv/etc.). */
14
+ command: string;
15
+ /** Which language pack this command verifies — for grouping in the prompt. */
16
+ language: LanguageId;
17
+ }
18
+ /**
19
+ * Compute the recommended verify commands for the active language set in `cwd`.
20
+ *
21
+ * Conservative by design: we only emit a command when its existence is
22
+ * essentially guaranteed by a manifest or convention. We never invent commands
23
+ * that might not exist. False positives here would train the agent to run
24
+ * commands that fail, which is worse than no recommendation at all.
25
+ */
26
+ export declare function detectVerifyCommands(cwd: string, active: Set<LanguageId>): VerifyCommand[];
27
+ /**
28
+ * Render the Verification section for the system prompt. Returns empty string
29
+ * when no commands were detected so the caller can skip the section entirely.
30
+ *
31
+ * Commands are grouped by language so the agent can quickly pick the relevant
32
+ * subset when its edit only touched one language.
33
+ */
34
+ export declare function renderVerifySection(cmds: readonly VerifyCommand[]): string;
35
+ //# sourceMappingURL=verify-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-commands.d.ts","sourceRoot":"","sources":["../../src/core/verify-commands.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,aAAa,EAAE,CAkI1F;AA2CD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,aAAa,EAAE,GAAG,MAAM,CAuB1E"}
@@ -0,0 +1,209 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ /**
4
+ * Compute the recommended verify commands for the active language set in `cwd`.
5
+ *
6
+ * Conservative by design: we only emit a command when its existence is
7
+ * essentially guaranteed by a manifest or convention. We never invent commands
8
+ * that might not exist. False positives here would train the agent to run
9
+ * commands that fail, which is worse than no recommendation at all.
10
+ */
11
+ export function detectVerifyCommands(cwd, active) {
12
+ const cmds = [];
13
+ // ── Node ecosystem (TS / JS) — read scripts from package.json
14
+ if (active.has("typescript") || active.has("javascript")) {
15
+ const scripts = readPackageJsonScripts(cwd);
16
+ if (scripts) {
17
+ const runner = detectNodeRunner(cwd);
18
+ const lang = active.has("typescript") ? "typescript" : "javascript";
19
+ // Common script names, in priority order — we pick the first match per category.
20
+ const pick = (...candidates) => {
21
+ for (const c of candidates) {
22
+ if (typeof scripts[c] === "string")
23
+ return c;
24
+ }
25
+ return null;
26
+ };
27
+ const lintScript = pick("lint", "lint:check");
28
+ if (lintScript)
29
+ cmds.push({ label: "lint", command: `${runner} ${lintScript}`, language: lang });
30
+ const typecheckScript = pick("typecheck", "check", "type-check");
31
+ if (typecheckScript)
32
+ cmds.push({ label: "typecheck", command: `${runner} ${typecheckScript}`, language: lang });
33
+ const formatScript = pick("format:check", "format-check", "prettier:check");
34
+ if (formatScript)
35
+ cmds.push({ label: "format", command: `${runner} ${formatScript}`, language: lang });
36
+ const testScript = pick("test", "test:unit");
37
+ if (testScript)
38
+ cmds.push({ label: "test", command: `${runner} ${testScript}`, language: lang });
39
+ }
40
+ else if (active.has("typescript") && fileExists(path.join(cwd, "tsconfig.json"))) {
41
+ // No package.json scripts — fall back to direct tsc invocation.
42
+ cmds.push({ label: "typecheck", command: "tsc --noEmit", language: "typescript" });
43
+ }
44
+ }
45
+ // ── Python — pyproject.toml conventions
46
+ if (active.has("python")) {
47
+ const pyproject = readFileSafe(path.join(cwd, "pyproject.toml"));
48
+ if (pyproject) {
49
+ if (/\[tool\.ruff/.test(pyproject)) {
50
+ cmds.push({ label: "lint", command: "ruff check .", language: "python" });
51
+ cmds.push({ label: "format", command: "ruff format --check .", language: "python" });
52
+ }
53
+ if (/\[tool\.pyright/.test(pyproject)) {
54
+ cmds.push({ label: "typecheck", command: "pyright", language: "python" });
55
+ }
56
+ else if (/\[tool\.mypy/.test(pyproject)) {
57
+ cmds.push({ label: "typecheck", command: "mypy .", language: "python" });
58
+ }
59
+ if (/\[tool\.pytest/.test(pyproject)) {
60
+ cmds.push({ label: "test", command: "pytest", language: "python" });
61
+ }
62
+ }
63
+ }
64
+ // ── Go — universally available toolchain
65
+ if (active.has("go")) {
66
+ cmds.push({ label: "vet", command: "go vet ./...", language: "go" });
67
+ cmds.push({ label: "format", command: "gofmt -l .", language: "go" });
68
+ cmds.push({ label: "test", command: "go test ./...", language: "go" });
69
+ }
70
+ // ── Rust — Cargo guarantees the toolchain
71
+ if (active.has("rust")) {
72
+ cmds.push({
73
+ label: "lint",
74
+ command: "cargo clippy --all-targets -- -D warnings",
75
+ language: "rust",
76
+ });
77
+ cmds.push({ label: "format", command: "cargo fmt --check", language: "rust" });
78
+ cmds.push({ label: "test", command: "cargo test", language: "rust" });
79
+ }
80
+ // ── Java — Gradle/Maven detection
81
+ if (active.has("java") || active.has("kotlin")) {
82
+ const lang = active.has("kotlin") ? "kotlin" : "java";
83
+ if (fileExists(path.join(cwd, "gradlew"))) {
84
+ cmds.push({ label: "build", command: "./gradlew build", language: lang });
85
+ cmds.push({ label: "test", command: "./gradlew test", language: lang });
86
+ }
87
+ else if (fileExists(path.join(cwd, "pom.xml"))) {
88
+ cmds.push({ label: "verify", command: "mvn verify", language: lang });
89
+ }
90
+ }
91
+ // ── C# — dotnet CLI
92
+ if (active.has("csharp")) {
93
+ cmds.push({ label: "build", command: "dotnet build --no-incremental", language: "csharp" });
94
+ cmds.push({
95
+ label: "format",
96
+ command: "dotnet format --verify-no-changes",
97
+ language: "csharp",
98
+ });
99
+ cmds.push({ label: "test", command: "dotnet test", language: "csharp" });
100
+ }
101
+ // ── Ruby — bundle + standardrb/rubocop conventions
102
+ if (active.has("ruby")) {
103
+ if (fileExists(path.join(cwd, "Gemfile"))) {
104
+ cmds.push({ label: "lint", command: "bundle exec rubocop", language: "ruby" });
105
+ cmds.push({ label: "test", command: "bundle exec rspec", language: "ruby" });
106
+ }
107
+ }
108
+ // ── Elixir — mix is canonical
109
+ if (active.has("elixir")) {
110
+ cmds.push({ label: "format", command: "mix format --check-formatted", language: "elixir" });
111
+ cmds.push({ label: "test", command: "mix test", language: "elixir" });
112
+ }
113
+ // ── PHP — composer + phpstan conventions
114
+ if (active.has("php")) {
115
+ if (fileExists(path.join(cwd, "composer.json"))) {
116
+ cmds.push({ label: "test", command: "composer test", language: "php" });
117
+ }
118
+ }
119
+ // ── Bash — shellcheck when scripts present
120
+ if (active.has("bash")) {
121
+ cmds.push({ label: "lint", command: "shellcheck **/*.sh", language: "bash" });
122
+ }
123
+ // ── Terraform / OpenTofu
124
+ if (active.has("terraform")) {
125
+ cmds.push({ label: "validate", command: "terraform validate", language: "terraform" });
126
+ cmds.push({
127
+ label: "format",
128
+ command: "terraform fmt -check -recursive",
129
+ language: "terraform",
130
+ });
131
+ }
132
+ return cmds;
133
+ }
134
+ // ── helpers ──────────────────────────────────────────────────────────────
135
+ function fileExists(p) {
136
+ try {
137
+ return fs.statSync(p).isFile();
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ }
143
+ function readFileSafe(p) {
144
+ try {
145
+ return fs.readFileSync(p, "utf-8");
146
+ }
147
+ catch {
148
+ return null;
149
+ }
150
+ }
151
+ function readPackageJsonScripts(cwd) {
152
+ const raw = readFileSafe(path.join(cwd, "package.json"));
153
+ if (!raw)
154
+ return null;
155
+ try {
156
+ const parsed = JSON.parse(raw);
157
+ return parsed.scripts && typeof parsed.scripts === "object" ? parsed.scripts : null;
158
+ }
159
+ catch {
160
+ return null;
161
+ }
162
+ }
163
+ /**
164
+ * Detect the Node package runner: pnpm if `pnpm-lock.yaml` exists, yarn if
165
+ * `yarn.lock`, bun if `bun.lockb`, otherwise npm. Conservative default — npm
166
+ * is always available.
167
+ */
168
+ function detectNodeRunner(cwd) {
169
+ if (fileExists(path.join(cwd, "pnpm-lock.yaml")))
170
+ return "pnpm";
171
+ if (fileExists(path.join(cwd, "yarn.lock")))
172
+ return "yarn";
173
+ if (fileExists(path.join(cwd, "bun.lockb")))
174
+ return "bun";
175
+ return "npm run";
176
+ }
177
+ /**
178
+ * Render the Verification section for the system prompt. Returns empty string
179
+ * when no commands were detected so the caller can skip the section entirely.
180
+ *
181
+ * Commands are grouped by language so the agent can quickly pick the relevant
182
+ * subset when its edit only touched one language.
183
+ */
184
+ export function renderVerifySection(cmds) {
185
+ if (cmds.length === 0)
186
+ return "";
187
+ const byLang = new Map();
188
+ for (const c of cmds) {
189
+ const list = byLang.get(c.language);
190
+ if (list)
191
+ list.push(c);
192
+ else
193
+ byLang.set(c.language, [c]);
194
+ }
195
+ const sortedLangs = [...byLang.keys()].sort();
196
+ const lines = [];
197
+ for (const lang of sortedLangs) {
198
+ const list = byLang.get(lang);
199
+ const parts = list.map((c) => `\`${c.command}\` (${c.label})`).join(", ");
200
+ lines.push(`- **${lang}**: ${parts}`);
201
+ }
202
+ return (`## Verification\n\n` +
203
+ `After meaningful edits, run the relevant verification commands below to ` +
204
+ `confirm pack compliance. Pick only the commands matching the language(s) ` +
205
+ `you actually touched. If a command fails, fix the issues before reporting ` +
206
+ `the task complete \u2014 never claim success on unverified output.\n\n` +
207
+ lines.join("\n"));
208
+ }
209
+ //# sourceMappingURL=verify-commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-commands.js","sourceRoot":"","sources":["../../src/core/verify-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=verify-commands.test.d.ts.map