Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gittensory.yml.example
Original file line number Diff line number Diff line change
Expand Up @@ -899,6 +899,7 @@ settings:
# e2eTestGen: false # Auto-generated E2E test scaffolding. Default: false.
# planner: false # The @gittensory plan / issue-planner completion. Default: false.
# summaries: false # AI summaries/rewrite text. Default: false.
# chatQa: false # @gittensory chat <question> grounded LLM Q&A. Ollama-ONLY (never the frontier env.AI); needs env.AI_ADVISORY set. Co-requisite: commandRateLimitPolicy: hold (defaults off). Default: false.

# Maintainer AI review tuning (`.gittensory.yml` top-level `review:` block). These knobs shape the advisory AI
# review prompt and file selection only — gate/slop/secret-scan are unaffected.
Expand Down
7 changes: 6 additions & 1 deletion apps/gittensory-ui/public/openapi.json
Original file line number Diff line number Diff line change
Expand Up @@ -9167,13 +9167,18 @@
},
"summaries": {
"type": "boolean"
},
"chatQa": {
"type": "boolean",
"description": "Opt the `@gittensory chat <question>` grounded Q&A surface (#4595) into local Ollama inference. Ollama-only: unlike the four capabilities above it NEVER falls back to the frontier env.AI when off; it declines unless this is true AND env.AI_ADVISORY is configured. Co-requisite: set `commandRateLimitPolicy` to `hold` (it defaults to `off` fleet-wide) so the tighter `commandRateLimitAiMaxPerWindow` ceiling actually throttles this cost-bearing command."
}
},
"required": [
"slop",
"e2eTestGen",
"planner",
"summaries"
"summaries",
"chatQa"
]
},
"gittensorLabel": {
Expand Down
8 changes: 7 additions & 1 deletion apps/gittensory-ui/src/lib/command-reference.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,12 @@ export const PUBLIC_COMMAND_ENTRIES = [
description:
"Answer contribution-quality questions from connected cached sources with citations.",
},
{
id: "chat",
title: "Gittensory grounded chat Q&A",
description:
"Answer a question in natural prose from cached decision-pack facts via local Ollama (maintainer/collaborator; read-only).",
},
{
id: "preflight",
title: "Gittensory preflight",
Expand Down Expand Up @@ -55,7 +61,7 @@ export const PUBLIC_COMMAND_ENTRIES = [
] as const;

export const PUBLIC_COMMAND_LIST =
"@gittensory help\n@gittensory ask\n@gittensory preflight\n@gittensory blockers\n@gittensory duplicate-check\n@gittensory miner-context\n@gittensory next-action\n@gittensory reviewability\n@gittensory repo-fit\n@gittensory packet";
"@gittensory help\n@gittensory ask\n@gittensory chat\n@gittensory preflight\n@gittensory blockers\n@gittensory duplicate-check\n@gittensory miner-context\n@gittensory next-action\n@gittensory reviewability\n@gittensory repo-fit\n@gittensory packet";

export const MAINTAINER_COMMAND_ENTRIES = [
{
Expand Down
1 change: 1 addition & 0 deletions config/examples/gittensory.full.yml
Original file line number Diff line number Diff line change
Expand Up @@ -912,6 +912,7 @@ settings:
# e2eTestGen: false # Auto-generated E2E test scaffolding. Default: false.
# planner: false # The @gittensory plan / issue-planner completion. Default: false.
# summaries: false # AI summaries/rewrite text. Default: false.
# chatQa: false # @gittensory chat <question> grounded LLM Q&A. Ollama-ONLY (never the frontier env.AI); needs env.AI_ADVISORY set. Co-requisite: commandRateLimitPolicy: hold (defaults off). Default: false.

# Maintainer AI review tuning (`.gittensory.yml` top-level `review:` block). These knobs shape the advisory AI
# review prompt and file selection only — gate/slop/secret-scan are unaffected.
Expand Down
1 change: 1 addition & 0 deletions packages/gittensory-engine/src/focus-manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1959,6 +1959,7 @@ function parseSettingsOverride(value: JsonValue | undefined, warnings: string[],
if (typeof rawRouting.e2eTestGen === "boolean") sparseRouting.e2eTestGen = validated.e2eTestGen;
if (typeof rawRouting.planner === "boolean") sparseRouting.planner = validated.planner;
if (typeof rawRouting.summaries === "boolean") sparseRouting.summaries = validated.summaries;
if (typeof rawRouting.chatQa === "boolean") sparseRouting.chatQa = validated.chatQa;
out.advisoryAiRouting = sparseRouting;
} else if (r.advisoryAiRouting !== undefined) {
warnings.push(`Manifest "settings.advisoryAiRouting" must be an object; ignoring it and keeping any existing policy.`);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ export const DEFAULT_ADVISORY_AI_ROUTING: AdvisoryAiRoutingConfig = {
e2eTestGen: false,
planner: false,
summaries: false,
chatQa: false,
};

function normalizeField(value: unknown, field: keyof AdvisoryAiRoutingConfig, warnings: string[]): boolean {
Expand All @@ -31,5 +32,6 @@ export function normalizeAdvisoryAiRoutingConfig(input: unknown, warnings: strin
e2eTestGen: normalizeField(record.e2eTestGen, "e2eTestGen", warnings),
planner: normalizeField(record.planner, "planner", warnings),
summaries: normalizeField(record.summaries, "summaries", warnings),
chatQa: normalizeField(record.chatQa, "chatQa", warnings),
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ export const DEFAULT_COMMAND_AUTHORIZATION_POLICY: RepositoryCommandAuthorizatio
"noise-report": ["maintainer", "collaborator"],
"gate-override": ["maintainer", "collaborator"],
plan: ["maintainer", "collaborator"],
// #4595: deliberately narrower than "ask"'s default (which allows confirmed_miner) -- chat is Ollama-only
// grounded LLM generation, a materially larger surface than ask's deterministic-only answer, so v1 starts
// maintainer/collaborator-only. Explicit registration here (rather than falling through to `default`) also
// activates the pr_author-widening guard below, so a self-hoster can't accidentally yml themselves into
// "anyone commenting on their own PR" without it.
chat: ["maintainer", "collaborator"],
// #1960 PR control-surface verbs. "review" is deliberately widenable to confirmed_miner (same self-rerun
// precedent already applied to review-now, #824) — a confirmed miner may re-trigger review on their own PR.
// The rest (pause/resume/resolve/configuration/explain) are conservative maintainer/collaborator-only
Expand Down
3 changes: 3 additions & 0 deletions packages/gittensory-engine/src/types/manifest-deps-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ export type AdvisoryAiRoutingConfig = {
e2eTestGen: boolean;
planner: boolean;
summaries: boolean;
/** Grounded `@gittensory chat <question>` LLM Q&A (#4595). Ollama-only: unlike the four fields above it NEVER
* falls back to the frontier env.AI when off -- it simply declines. Default false. */
chatQa: boolean;
};

export type ContributorBlacklistEntry = {
Expand Down
Loading
Loading