@perrylink/dsh-github 0.4.0 → 0.6.0

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 (64) hide show
  1. package/README.es.md +29 -14
  2. package/README.hi.md +29 -14
  3. package/README.md +52 -14
  4. package/README.pt.md +30 -15
  5. package/README.zh-CN.md +52 -14
  6. package/action.yml +161 -0
  7. package/lib/approval-gate.d.ts +14 -9
  8. package/lib/approval-gate.d.ts.map +1 -1
  9. package/lib/approval-gate.js +39 -1
  10. package/lib/approval-gate.js.map +1 -1
  11. package/lib/ci/bot.d.ts +50 -0
  12. package/lib/ci/bot.d.ts.map +1 -0
  13. package/lib/ci/bot.js +168 -0
  14. package/lib/ci/bot.js.map +1 -0
  15. package/lib/ci/pipeline.d.ts +84 -0
  16. package/lib/ci/pipeline.d.ts.map +1 -0
  17. package/lib/ci/pipeline.js +380 -0
  18. package/lib/ci/pipeline.js.map +1 -0
  19. package/lib/ci/review-rules.d.ts +41 -0
  20. package/lib/ci/review-rules.d.ts.map +1 -0
  21. package/lib/ci/review-rules.js +108 -0
  22. package/lib/ci/review-rules.js.map +1 -0
  23. package/lib/ci/tool.d.ts +4 -0
  24. package/lib/ci/tool.d.ts.map +1 -0
  25. package/lib/ci/tool.js +155 -0
  26. package/lib/ci/tool.js.map +1 -0
  27. package/lib/commands.d.ts.map +1 -1
  28. package/lib/commands.js +5 -2
  29. package/lib/commands.js.map +1 -1
  30. package/lib/config.d.ts +65 -1
  31. package/lib/config.d.ts.map +1 -1
  32. package/lib/config.js +75 -2
  33. package/lib/config.js.map +1 -1
  34. package/lib/github.d.ts +11 -7
  35. package/lib/github.d.ts.map +1 -1
  36. package/lib/github.js +28 -7
  37. package/lib/github.js.map +1 -1
  38. package/lib/index.d.ts +15 -9
  39. package/lib/index.d.ts.map +1 -1
  40. package/lib/index.js +13 -1
  41. package/lib/index.js.map +1 -1
  42. package/lib/jobs.js +4 -3
  43. package/lib/jobs.js.map +1 -1
  44. package/lib/present.d.ts +146 -0
  45. package/lib/present.d.ts.map +1 -1
  46. package/lib/present.js +140 -1
  47. package/lib/present.js.map +1 -1
  48. package/lib/review.d.ts +11 -1
  49. package/lib/review.d.ts.map +1 -1
  50. package/lib/review.js +12 -9
  51. package/lib/review.js.map +1 -1
  52. package/lib/state.d.ts +3 -1
  53. package/lib/state.d.ts.map +1 -1
  54. package/lib/state.js +11 -6
  55. package/lib/state.js.map +1 -1
  56. package/lib/tools.d.ts +71 -0
  57. package/lib/tools.d.ts.map +1 -1
  58. package/lib/tools.js +379 -16
  59. package/lib/tools.js.map +1 -1
  60. package/package.json +6 -2
  61. package/scripts/action-patch.mjs +138 -0
  62. package/scripts/action-post.mjs +48 -0
  63. package/scripts/check-readmes.mjs +113 -0
  64. package/scripts/prepare.mjs +34 -0
package/lib/ci/tool.js ADDED
@@ -0,0 +1,155 @@
1
+ /**
2
+ * The `ci_run` tool — the one-shot CI pipeline entry point used by the
3
+ * composite action's headless session (and available in interactive sessions
4
+ * where `ci.enabled` is on).
5
+ *
6
+ * Tasks:
7
+ * - `review`: one deterministic pass — analyze, post comments (configurable),
8
+ * publish the status check, and write the JSON/Markdown reports.
9
+ * - `analyze`: read-only preparation — returns the capped diff and static
10
+ * findings without any write, so a `model` engine can author its own body.
11
+ * - `publish`: post the (optionally model-authored) review and the check.
12
+ *
13
+ * Every write is gated by the same `tools/pre-execute` approval gate as the
14
+ * other tools: interactive sessions ask the human; the CI driver
15
+ * (`DSH_GITHUB_CI_DRIVER=1`) auto-allows exactly the actions listed in
16
+ * `ci.autoApprove`.
17
+ * @module dsh-github/ci/tool
18
+ */
19
+ import { defineTool } from '@deepseek-ai/dsh-tools';
20
+ import { errorValue } from "../tools.js";
21
+ import { ERROR_SCHEMA, RATE_LIMIT_SCHEMA } from "../tools.js";
22
+ import { ciRunCall, ciRunResult } from "../present.js";
23
+ import { identityMeta } from "../present.js";
24
+ import { runCiPipeline } from "./pipeline.js";
25
+ const FINDING_SCHEMA = {
26
+ type: 'object',
27
+ additionalProperties: false,
28
+ properties: {
29
+ file: { type: 'string', required: true },
30
+ line: { oneOf: [{ type: 'integer' }, { type: 'null' }] },
31
+ severity: { type: 'string', required: true, enum: ['info', 'warning', 'error'] },
32
+ rule: { type: 'string', required: true },
33
+ message: { type: 'string', required: true },
34
+ },
35
+ };
36
+ const TASKS = ['review', 'analyze', 'publish'];
37
+ /** `ci_run`: run one CI review pass (write; approval-gated upstream). */
38
+ export function ciRunTool(state) {
39
+ return defineTool({
40
+ name: 'ci_run',
41
+ description: 'Run one dsh-github CI pass over a pull request. task "review" analyzes the diff, posts inline '
42
+ + 'review comments, publishes the status check, and writes dsh-github-ci-result.json / dsh-github-ci-summary.md. '
43
+ + 'task "analyze" returns the capped diff and static findings without writing anything (read-only), so you can '
44
+ + 'author the review yourself. task "publish" posts your review `body`/`findings` and the check. Repeated runs '
45
+ + 'for the same head commit are idempotent (comments and checks are not duplicated). Requires approval unless '
46
+ + 'auto-approved by the CI driver configuration.',
47
+ parameters: {
48
+ task: { type: 'string', required: true, enum: [...TASKS], description: 'Which CI pass to run.' },
49
+ pr: { type: 'string', required: true, description: 'PR number, #number, owner/repo#number, or pull URL.' },
50
+ ownerRepo: { type: 'string', description: 'Repository as owner/repo. Defaults to configured or git origin.' },
51
+ maxDiffChars: { type: 'number', description: 'Cap for the diff text. Defaults to the plugin config.' },
52
+ body: { type: 'string', description: 'Review-body override (publish task).' },
53
+ findings: { type: 'array', items: FINDING_SCHEMA, description: 'Extra findings authored by you (publish task).' },
54
+ postComments: { type: 'boolean', description: 'Post review comments. Defaults to the ci.postComments config.' },
55
+ postCheck: { type: 'boolean', description: 'Publish the status check. Defaults to true.' },
56
+ },
57
+ output: {
58
+ schema: {
59
+ oneOf: [{
60
+ type: 'object',
61
+ additionalProperties: false,
62
+ properties: {
63
+ status: { type: 'string', required: true, const: 'ok' },
64
+ repo: { type: 'string', required: true },
65
+ pr: { type: 'integer', required: true },
66
+ headSha: { type: 'string', required: true },
67
+ verdict: { type: 'string', required: true, enum: ['pass', 'needs-changes', 'skipped'] },
68
+ engine: { type: 'string', required: true, enum: ['static', 'model'] },
69
+ findings: { type: 'array', items: FINDING_SCHEMA },
70
+ summary: { type: 'string', required: true },
71
+ truncated: { type: 'boolean', required: true },
72
+ alreadyReviewed: { type: 'boolean', required: true },
73
+ diffText: { type: 'string' },
74
+ checkRun: {
75
+ type: 'object',
76
+ additionalProperties: false,
77
+ properties: {
78
+ id: { type: 'integer', required: true },
79
+ url: { type: 'string', required: true },
80
+ conclusion: { type: 'string', required: true },
81
+ },
82
+ },
83
+ review: {
84
+ type: 'object',
85
+ additionalProperties: false,
86
+ properties: {
87
+ url: { type: 'string', required: true },
88
+ inlineComments: { type: 'integer', required: true },
89
+ },
90
+ },
91
+ files: {
92
+ type: 'object',
93
+ additionalProperties: false,
94
+ properties: {
95
+ json: { type: 'string', required: true },
96
+ markdown: { type: 'string', required: true },
97
+ },
98
+ },
99
+ rateLimit: RATE_LIMIT_SCHEMA,
100
+ },
101
+ }, ERROR_SCHEMA],
102
+ },
103
+ render: (args, value) => {
104
+ if (value.status === 'error') {
105
+ return [{ type: 'text', text: `${value.message}${value.guidance !== undefined ? `\n${value.guidance}` : ''}` }];
106
+ }
107
+ const lines = [`CI ${args.task}: PR #${value.pr} (${value.repo}) verdict ${value.verdict}`, value.summary];
108
+ if (value.checkRun !== undefined)
109
+ lines.push(`check: ${value.checkRun.url} (${value.checkRun.conclusion})`);
110
+ if (value.review !== undefined && value.review.url.length > 0)
111
+ lines.push(`review: ${value.review.url}`);
112
+ if (value.files !== undefined)
113
+ lines.push(`reports: ${value.files.json} · ${value.files.markdown}`);
114
+ if (value.diffText !== undefined)
115
+ lines.push(`diff (${value.diffText.length} chars${value.truncated ? ', truncated' : ''}):\n${value.diffText}`);
116
+ return [{ type: 'text', text: lines.join('\n') }];
117
+ },
118
+ presentationMeta: identityMeta,
119
+ },
120
+ isConcurrencySafe: () => false,
121
+ presentCall: ciRunCall,
122
+ presentResult: ciRunResult,
123
+ async execute(args, exec) {
124
+ const ref = state.parsePrRef(args.pr);
125
+ if (ref === null)
126
+ return errorValue('invalid-pr', `"${args.pr}" is not a PR reference`, 'Use a number, "#number", "owner/repo#number", or a pull URL.');
127
+ const repoResult = ref.repo !== undefined ? { ok: true, repo: ref.repo } : await state.resolveRepo(undefined, exec.signal);
128
+ if (!repoResult.ok)
129
+ return errorValue(repoResult.code, repoResult.message, repoResult.guidance);
130
+ const findings = args.findings?.map(finding => ({
131
+ file: String(finding.file),
132
+ line: finding.line ?? null,
133
+ severity: finding.severity,
134
+ rule: String(finding.rule),
135
+ message: String(finding.message),
136
+ })) ?? [];
137
+ const outcome = await runCiPipeline(state, {
138
+ repo: repoResult.repo,
139
+ pr: ref.number,
140
+ task: args.task,
141
+ ...args.maxDiffChars !== undefined && args.maxDiffChars > 0 ? { maxDiffChars: Math.floor(args.maxDiffChars) } : {},
142
+ ...args.body !== undefined ? { body: args.body } : {},
143
+ ...findings.length > 0 ? { findings } : {},
144
+ ...args.postComments !== undefined ? { postComments: args.postComments } : {},
145
+ ...args.postCheck !== undefined ? { postCheck: args.postCheck } : {},
146
+ signal: exec.signal,
147
+ });
148
+ if (outcome.status === 'error') {
149
+ return errorValue(outcome.code, outcome.message, outcome.guidance, outcome.rateLimit !== undefined ? outcome.rateLimit : undefined);
150
+ }
151
+ return outcome;
152
+ },
153
+ });
154
+ }
155
+ //# sourceMappingURL=tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool.js","sourceRoot":"","sources":["../../src/ci/tool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAoC,eAAe,EAAe,WAAW,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAiB7C,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAY3F;AAoCD,2CAA2C;AAC3C,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAoClH;AAiED,0CAA0C;AAC1C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAoB9F;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAS7G;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAA"}
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,iBAAiB,EAAoC,eAAe,EAAe,WAAW,EAAE,MAAM,YAAY,CAAA;AAChI,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAiB7C,uCAAuC;AACvC,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAY3F;AAoCD,2CAA2C;AAC3C,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAuClH;AAiED,0CAA0C;AAC1C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAoB9F;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,IAAI,CAS7G;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAA"}
package/lib/commands.js CHANGED
@@ -107,10 +107,13 @@ export function registerReviewCommand(commands, jobs, state) {
107
107
  if (record.status !== 'completed' || record.report === null) {
108
108
  return { kind: 'error', text: `review job "${jobId}" is ${record.status}; wait for completion before posting.` };
109
109
  }
110
+ const reportSummary = record.report.findings.length === 0 && record.report.summary.startsWith('model review')
111
+ ? 'model review'
112
+ : `${record.report.findings.length} finding(s)`;
110
113
  notify(invocation.agent, `The user ran /review post ${jobId}. Call the review_post tool with { "jobId": "${jobId}" } to publish the review `
111
- + `for PR #${record.pr} in ${record.repo} (${record.report.findings.length} finding(s)). Use mode "inline" for line-anchored `
114
+ + `for PR #${record.pr} in ${record.repo} (${reportSummary}). Use mode "inline" for line-anchored `
112
115
  + 'comments or "summary" for one aggregated comment. Posting asks the human for approval.');
113
- return { kind: 'success', text: `queued review_post for job ${jobId} (PR #${record.pr}, ${record.report.findings.length} finding(s)). Posting requires your approval.` };
116
+ return { kind: 'success', text: `queued review_post for job ${jobId} (PR #${record.pr}, ${reportSummary}). Posting requires your approval.` };
114
117
  }
115
118
  return startReview(invocation, input, jobs, state);
116
119
  },
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
package/lib/config.d.ts CHANGED
@@ -9,9 +9,56 @@
9
9
  */
10
10
  import z from '@deepseek-ai/schemastery';
11
11
  /** GitHub write actions the plugin may perform (each still requires approval). */
12
- export type GithubAction = 'pr.create' | 'review.post' | 'issue.create' | 'issue.comment' | 'issue.close';
12
+ export type GithubAction = 'pr.create' | 'review.post' | 'issue.create' | 'issue.comment' | 'issue.close' | 'pr.merge' | 'pr.update' | 'ci.run';
13
13
  /** Where a GitHub token is looked up. `auto` tries them in order. */
14
14
  export type TokenSource = 'auto' | 'credentials' | 'env' | 'gh';
15
+ /**
16
+ * The CI surface: the one-shot `ci_run` tool, the polling review bot, the
17
+ * `/ci` command family, and the status-check gate. Every tunable is a Schema
18
+ * key so the composite action can map its inputs 1:1 onto this section.
19
+ */
20
+ export interface CiConfig {
21
+ /** Master switch for the CI surface. Defaults to false (interactive use unchanged). */
22
+ enabled: boolean;
23
+ /** Review engine: `static` runs the deterministic analyzer; `model` lets the headless agent author the review body. */
24
+ engine: 'static' | 'model';
25
+ /**
26
+ * Write actions auto-allowed while running as the CI driver
27
+ * (`DSH_GITHUB_CI_DRIVER=1`, unattended). Empty in interactive sessions —
28
+ * there every write still asks the human.
29
+ */
30
+ autoApprove: GithubAction[];
31
+ /** Status-check name published by the CI gate (per PR head commit). */
32
+ checkName: string;
33
+ /** `needs-changes` verdict → check conclusion `failure`; `false` publishes `neutral` instead (non-blocking gate). */
34
+ blocking: boolean;
35
+ /** Lowest severity that flips the verdict to `needs-changes`. */
36
+ failOn: 'error' | 'warning';
37
+ /** Review-bot poll interval; `0` disables polling (manual `/ci scan` still works). */
38
+ pollIntervalMs: number;
39
+ /** Label filters; a PR must carry at least one listed label. Empty = all PRs. */
40
+ labelFilters: string[];
41
+ /** Path filters (globs, e.g. `src/**`); when set, a PR must touch a matching path. Empty = all PRs. */
42
+ pathFilters: string[];
43
+ /** Sensitive-path globs flagged by the sensitive-file rule (error/warning per `sensitiveSeverity`). */
44
+ sensitivePathPatterns: string[];
45
+ /** Severity of the sensitive-file rule. */
46
+ sensitiveSeverity: 'error' | 'warning';
47
+ /** File extensions treated as code by the test-existence rule (with leading dot). */
48
+ codeExtensions: string[];
49
+ /** Path globs treated as tests by the test-existence rule. */
50
+ testPathPatterns: string[];
51
+ /** Scope caps for the change-size rule (`large-change` findings). */
52
+ maxChangedFiles: number;
53
+ maxAddedLines: number;
54
+ maxRemovedLines: number;
55
+ /** Cap of concurrently reviewed PRs inside one bot scan. */
56
+ maxConcurrent: number;
57
+ /** Whether the pipeline posts review comments (inline findings + PR-level body). */
58
+ postComments: boolean;
59
+ /** Report-file directory; defaults to the CI output directory env var, then the workspace dir. */
60
+ reportDir: string;
61
+ }
15
62
  export interface Config {
16
63
  /**
17
64
  * Token lookup order: `auto` resolves credentials-seam reference → `env`
@@ -35,6 +82,12 @@ export interface Config {
35
82
  reviewJobTimeoutMs: number;
36
83
  /** Cap for in-memory review-job records; oldest settled records evict first. */
37
84
  maxReviewRecords: number;
85
+ /** Cap for file contents read by gh_file. */
86
+ maxFileChars: number;
87
+ /** Cap for analyzer findings per review. */
88
+ maxFindings: number;
89
+ /** Line length beyond which the analyzer flags a long-line finding. */
90
+ maxLineLength: number;
38
91
  /**
39
92
  * Review engine: `static` runs the deterministic analyzer; `model` delegates
40
93
  * the capped diff to a one-shot subagent through the host's `subagents` seam
@@ -49,12 +102,23 @@ export interface Config {
49
102
  retryBaseMs: number;
50
103
  /** Ceiling for 429 retry backoff. */
51
104
  retryMaxWaitMs: number;
105
+ /** Hard per-request timeout; aborts the fetch when exceeded. */
106
+ requestTimeoutMs: number;
52
107
  /** GitHub REST base URL; change for GitHub Enterprise. */
53
108
  apiBaseUrl: string;
54
109
  /** Whitelist of write actions; everything else is denied before approval. */
55
110
  allowedActions: GithubAction[];
56
111
  /** Working directory for read-only git inspection; defaults to the process cwd. */
57
112
  workspaceDir?: string;
113
+ /** CI integration: bot, gate, and one-shot runner (see {@link CiConfig}). */
114
+ ci: CiConfig;
58
115
  }
116
+ /** Default sensitive-path globs for the sensitive-file rule. */
117
+ export declare const DEFAULT_SENSITIVE_PATTERNS: string[];
118
+ /** Default code extensions for the test-existence rule (with leading dot). */
119
+ export declare const DEFAULT_CODE_EXTENSIONS: string[];
120
+ /** Default test-path globs for the test-existence rule. */
121
+ export declare const DEFAULT_TEST_PATTERNS: string[];
122
+ export declare const CiConfig: z<CiConfig>;
59
123
  export declare const Config: z<Config>;
60
124
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,kFAAkF;AAClF,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,CAAA;AAEzG,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,aAAa,GAAG,KAAK,GAAG,IAAI,CAAA;AAE/D,MAAM,WAAW,MAAM;IACrB;;;;OAIG;IACH,WAAW,EAAE,WAAW,CAAA;IACxB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAA;IAChB,6EAA6E;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,4EAA4E;IAC5E,UAAU,EAAE,OAAO,CAAA;IACnB,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAA;IACpB,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAA;IAC1B,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,8EAA8E;IAC9E,kBAAkB,EAAE,MAAM,CAAA;IAC1B,gFAAgF;IAChF,gBAAgB,EAAE,MAAM,CAAA;IACxB;;;;OAIG;IACH,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC9B,0FAA0F;IAC1F,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,yDAAyD;IACzD,UAAU,EAAE,MAAM,CAAA;IAClB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAA;IACnB,qCAAqC;IACrC,cAAc,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAA;IAClB,6EAA6E;IAC7E,cAAc,EAAE,YAAY,EAAE,CAAA;IAC9B,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAID,eAAO,MAAM,MAAM,EAAE,CAAC,CAAC,MAAM,CAmD3B,CAAA"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/config.js CHANGED
@@ -9,6 +9,65 @@
9
9
  */
10
10
  import z from '@deepseek-ai/schemastery';
11
11
  const OWNER_REPO_PATTERN = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
12
+ /** Default sensitive-path globs for the sensitive-file rule. */
13
+ export const DEFAULT_SENSITIVE_PATTERNS = [
14
+ '.env', '.env.*', '*.pem', '*.key', '*.p12', '*.pfx',
15
+ 'id_rsa*', 'id_ed25519*', 'id_dsa*',
16
+ '**/credentials*.json', '**/secrets/**', '**/.npmrc', '**/.pypirc',
17
+ '.github/workflows/*.yml', '.github/workflows/*.yaml',
18
+ ];
19
+ /** Default code extensions for the test-existence rule (with leading dot). */
20
+ export const DEFAULT_CODE_EXTENSIONS = [
21
+ '.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs', '.py', '.go', '.rs',
22
+ '.java', '.kt', '.c', '.h', '.cpp', '.hpp', '.cs', '.rb', '.php',
23
+ '.swift', '.scala', '.sh', '.ps1',
24
+ ];
25
+ /** Default test-path globs for the test-existence rule. */
26
+ export const DEFAULT_TEST_PATTERNS = [
27
+ '**/test/**', '**/tests/**', '**/__tests__/**', '**/spec/**', '**/e2e/**',
28
+ '**/*.test.*', '**/*.spec.*', '**/test_*', '**/*_test.*',
29
+ ];
30
+ const CI_ACTION_VALUES = ['pr.create', 'review.post', 'issue.create', 'issue.comment', 'issue.close', 'pr.merge', 'pr.update', 'ci.run'];
31
+ export const CiConfig = z.object({
32
+ enabled: z.boolean().default(false)
33
+ .description('Master switch for the CI surface (ci_run tool, review bot, /ci commands, status-check gate).'),
34
+ engine: z.union(['static', 'model']).default('static')
35
+ .description('Review engine: static (deterministic analyzer) or model (headless agent authors the review body).'),
36
+ autoApprove: z.array(z.union(CI_ACTION_VALUES)).default([])
37
+ .description('Write actions auto-allowed while running as the CI driver (DSH_GITHUB_CI_DRIVER=1); interactive sessions always ask.'),
38
+ checkName: z.string().default('dsh-github-review')
39
+ .description('Status-check name published by the CI gate.'),
40
+ blocking: z.boolean().default(true)
41
+ .description('needs-changes verdict fails the check; false publishes a neutral (non-blocking) conclusion.'),
42
+ failOn: z.union(['error', 'warning']).default('error')
43
+ .description('Lowest finding severity that flips the verdict to needs-changes.'),
44
+ pollIntervalMs: z.number().step(1).min(0).default(60_000)
45
+ .description('Review-bot poll interval; 0 disables polling (manual /ci scan still works).'),
46
+ labelFilters: z.array(z.string()).default([])
47
+ .description('Label filters for the bot and pipeline; a PR must carry at least one listed label. Empty matches all.'),
48
+ pathFilters: z.array(z.string()).default([])
49
+ .description('Path globs for the bot and pipeline; when set, a PR must touch at least one matching path. Empty matches all.'),
50
+ sensitivePathPatterns: z.array(z.string()).default(DEFAULT_SENSITIVE_PATTERNS)
51
+ .description('Sensitive-path globs flagged by the sensitive-file rule.'),
52
+ sensitiveSeverity: z.union(['error', 'warning']).default('warning')
53
+ .description('Severity of the sensitive-file rule.'),
54
+ codeExtensions: z.array(z.string()).default(DEFAULT_CODE_EXTENSIONS)
55
+ .description('Extensions treated as code by the test-existence rule (leading dot).'),
56
+ testPathPatterns: z.array(z.string()).default(DEFAULT_TEST_PATTERNS)
57
+ .description('Path globs treated as tests by the test-existence rule.'),
58
+ maxChangedFiles: z.number().step(1).min(1).default(30)
59
+ .description('File-count cap before a large-change finding.'),
60
+ maxAddedLines: z.number().step(1).min(1).default(1000)
61
+ .description('Added-line cap before a large-change finding.'),
62
+ maxRemovedLines: z.number().step(1).min(1).default(1000)
63
+ .description('Removed-line cap before a large-change finding.'),
64
+ maxConcurrent: z.number().step(1).min(1).default(2)
65
+ .description('Cap of concurrently reviewed PRs inside one bot scan.'),
66
+ postComments: z.boolean().default(true)
67
+ .description('Whether the CI pipeline posts review comments (inline findings plus the PR-level body).'),
68
+ reportDir: z.string().default('')
69
+ .description('Report-file directory; defaults to DSH_GITHUB_CI_OUTPUT_DIR, then the workspace directory.'),
70
+ });
12
71
  export const Config = z.object({
13
72
  tokenSource: z.union(['auto', 'credentials', 'env', 'gh'])
14
73
  .default('auto')
@@ -38,6 +97,15 @@ export const Config = z.object({
38
97
  maxReviewRecords: z.number().step(1).min(1)
39
98
  .default(50)
40
99
  .description('Cap for in-memory review-job records; oldest settled records evict first.'),
100
+ maxFileChars: z.number().step(1).min(1)
101
+ .default(12000)
102
+ .description('Character cap for file contents read by gh_file.'),
103
+ maxFindings: z.number().step(1).min(1)
104
+ .default(50)
105
+ .description('Cap for analyzer findings per review.'),
106
+ maxLineLength: z.number().step(1).min(1)
107
+ .default(300)
108
+ .description('Line length beyond which the analyzer flags a long-line finding.'),
41
109
  reviewMode: z.union(['static', 'model'])
42
110
  .default('static')
43
111
  .description('Review engine: static (deterministic analyzer) or model (one-shot subagent through the subagents seam).'),
@@ -52,13 +120,18 @@ export const Config = z.object({
52
120
  retryMaxWaitMs: z.number().step(1).min(1)
53
121
  .default(60_000)
54
122
  .description('Ceiling for 429 retry backoff.'),
123
+ requestTimeoutMs: z.number().step(1).min(1000)
124
+ .default(30_000)
125
+ .description('Hard per-request timeout; aborts the fetch when exceeded.'),
55
126
  apiBaseUrl: z.string()
56
127
  .default('https://api.github.com')
57
128
  .description('GitHub REST base URL (change for GitHub Enterprise).'),
58
- allowedActions: z.array(z.union(['pr.create', 'review.post', 'issue.create', 'issue.comment', 'issue.close']))
59
- .default(['pr.create', 'review.post', 'issue.create', 'issue.comment', 'issue.close'])
129
+ allowedActions: z.array(z.union(CI_ACTION_VALUES))
130
+ .default(['pr.create', 'review.post', 'issue.create', 'issue.comment', 'issue.close', 'pr.merge', 'pr.update', 'ci.run'])
60
131
  .description('Write actions this plugin may perform; each still requires approval.'),
61
132
  workspaceDir: z.string()
62
133
  .description('Working directory for read-only git inspection (defaults to process cwd).'),
134
+ ci: CiConfig
135
+ .description('CI integration: review bot, status-check gate, and the one-shot ci_run tool.'),
63
136
  });
64
137
  //# sourceMappingURL=config.js.map
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/github.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Minimal GitHub REST client: JSON requests with 429 backoff-retry and
3
- * rate-limit surfacing, plus the `application/vnd.github.diff` text endpoint.
2
+ * Minimal GitHub REST client: JSON requests with 429/403 rate-limit
3
+ * backoff-retry and rate-limit surfacing, plus the
4
+ * `application/vnd.github.diff` text endpoint.
4
5
  *
5
6
  * The token travels only in the Authorization header of outgoing requests;
6
7
  * request bodies, error messages, and returned values never contain it.
@@ -37,14 +38,17 @@ interface ClientOptions {
37
38
  maxRetries: number;
38
39
  retryBaseMs: number;
39
40
  retryMaxWaitMs: number;
41
+ /** Hard per-request deadline; aborts the fetch when exceeded. */
42
+ requestTimeoutMs: number;
40
43
  fetchImpl: typeof fetch;
41
44
  }
42
45
  /**
43
- * Authenticated GitHub REST client with 429 retry.
46
+ * Authenticated GitHub REST client with rate-limit retry.
44
47
  *
45
- * Retries honor Retry-After / x-ratelimit-reset and the caller's signal;
46
- * non-2xx responses surface as {@link GithubError} carrying the status and
47
- * current rate-limit facts. Errors never contain the token.
48
+ * Retries 429 (primary limit) and 403-with-Retry-After (secondary limit /
49
+ * abuse detection) honoring Retry-After / x-ratelimit-reset and the caller's
50
+ * signal; other non-2xx responses surface as {@link GithubError} carrying the
51
+ * status and current rate-limit facts. Errors never contain the token.
48
52
  */
49
53
  export declare class GithubClient {
50
54
  private readonly token;
@@ -57,7 +61,7 @@ export declare class GithubClient {
57
61
  text: string;
58
62
  rateLimit: RateLimitInfo;
59
63
  }>;
60
- /** Fetch with Authorization, 429 retry, and signal handling. */
64
+ /** Fetch with Authorization, timeout, and retry (429/403 rate limits always; reads also on network errors and 5xx). */
61
65
  private request;
62
66
  }
63
67
  /** Build a client from config; resolves the base URL once. */
@@ -1 +1 @@
1
- {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,4EAA4E;AAC5E,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;gBAErB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa;CAMtE;AAED,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,aAAa,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,SAAS,EAAE,OAAO,KAAK,CAAA;CACxB;AAqDD;;;;;;GAMG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAKjD,wEAAwE;IAClE,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAiBtH,yDAAyD;IACnD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC;IAgBxI,gEAAgE;YAClD,OAAO;CA0BtB;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,aAAa,CAQ/F"}
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../src/github.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,2EAA2E;AAC3E,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,4EAA4E;AAC5E,qBAAa,WAAY,SAAQ,KAAK;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAA;gBAErB,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa;CAMtE;AAED,0DAA0D;AAC1D,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,CAAC,CAAA;IACP,SAAS,EAAE,aAAa,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,6DAA6D;IAC7D,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;IACtB,iEAAiE;IACjE,gBAAgB,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,OAAO,KAAK,CAAA;CACxB;AAwDD;;;;;;;GAOG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;IAKjD,wEAAwE;IAClE,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;IAkBtH,yDAAyD;IACnD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,aAAa,CAAA;KAAE,CAAC;IAgBxI,uHAAuH;YACzG,OAAO;CA0CtB;AAED,8DAA8D;AAC9D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,GAAG,aAAa,CAS/F"}
package/lib/github.js CHANGED
@@ -12,6 +12,8 @@ export class GithubError extends Error {
12
12
  const JSON_ACCEPT = 'application/vnd.github+json';
13
13
  const API_VERSION = '2022-11-28';
14
14
  const USER_AGENT = 'dsh-github';
15
+ /** Methods safe to retry on network failures and 5xx responses (reads only; writes stay idempotent). */
16
+ const SAFE_RETRY_METHODS = new Set(['GET', 'HEAD']);
15
17
  function rateLimitFromHeaders(headers) {
16
18
  const remaining = headers.get('x-ratelimit-remaining');
17
19
  const reset = headers.get('x-ratelimit-reset');
@@ -59,11 +61,12 @@ function sleep(ms, signal) {
59
61
  });
60
62
  }
61
63
  /**
62
- * Authenticated GitHub REST client with 429 retry.
64
+ * Authenticated GitHub REST client with rate-limit retry.
63
65
  *
64
- * Retries honor Retry-After / x-ratelimit-reset and the caller's signal;
65
- * non-2xx responses surface as {@link GithubError} carrying the status and
66
- * current rate-limit facts. Errors never contain the token.
66
+ * Retries 429 (primary limit) and 403-with-Retry-After (secondary limit /
67
+ * abuse detection) honoring Retry-After / x-ratelimit-reset and the caller's
68
+ * signal; other non-2xx responses surface as {@link GithubError} carrying the
69
+ * status and current rate-limit facts. Errors never contain the token.
67
70
  */
68
71
  export class GithubClient {
69
72
  token;
@@ -88,6 +91,8 @@ export class GithubClient {
88
91
  }
89
92
  throw new GithubError(response.status, message, rateLimit);
90
93
  }
94
+ if (response.status === 204)
95
+ return { status: response.status, data: undefined, rateLimit };
91
96
  const data = await response.json();
92
97
  return { status: response.status, data, rateLimit };
93
98
  }
@@ -109,10 +114,12 @@ export class GithubClient {
109
114
  }
110
115
  return { text: await response.text(), rateLimit };
111
116
  }
112
- /** Fetch with Authorization, 429 retry, and signal handling. */
117
+ /** Fetch with Authorization, timeout, and retry (429/403 rate limits always; reads also on network errors and 5xx). */
113
118
  async request(method, path, options) {
114
119
  let attempt = 0;
115
120
  for (;;) {
121
+ const timeoutSignal = AbortSignal.timeout(this.options.requestTimeoutMs);
122
+ const signal = options.signal === undefined ? timeoutSignal : AbortSignal.any([options.signal, timeoutSignal]);
116
123
  let response;
117
124
  try {
118
125
  response = await this.options.fetchImpl(new URL(path, this.options.apiBaseUrl), {
@@ -125,15 +132,28 @@ export class GithubClient {
125
132
  ...options.body !== undefined ? { 'Content-Type': 'application/json' } : {},
126
133
  },
127
134
  ...options.body !== undefined ? { body: JSON.stringify(options.body) } : {},
128
- signal: options.signal,
135
+ signal,
129
136
  });
130
137
  }
131
138
  catch (error) {
132
139
  if (options.signal?.aborted)
133
140
  throw options.signal.reason instanceof Error ? options.signal.reason : new Error('aborted');
141
+ // A deadline exceeded or a transport failure is retryable for safe
142
+ // (read) methods only; a caller abort above always fails fast.
143
+ if (SAFE_RETRY_METHODS.has(method) && attempt < this.options.maxRetries) {
144
+ await sleep(Math.min(this.options.retryBaseMs * 2 ** attempt, this.options.retryMaxWaitMs), options.signal);
145
+ attempt += 1;
146
+ continue;
147
+ }
134
148
  throw error;
135
149
  }
136
- if (response.status !== 429 || attempt >= this.options.maxRetries)
150
+ // Retry primary (429) and secondary (403 + Retry-After) rate limits for
151
+ // every method, plus transient 5xx responses for safe read methods; a
152
+ // 403 without Retry-After is a permission denial and must fail fast.
153
+ const retryable = response.status === 429
154
+ || (response.status === 403 && response.headers.get('retry-after') !== null)
155
+ || (SAFE_RETRY_METHODS.has(method) && (response.status === 502 || response.status === 503 || response.status === 504));
156
+ if (!retryable || attempt >= this.options.maxRetries)
137
157
  return response;
138
158
  await sleep(retryDelayMs(response.headers, attempt, this.options), options.signal);
139
159
  attempt += 1;
@@ -147,6 +167,7 @@ export function clientOptionsFromConfig(config, fetchImpl) {
147
167
  maxRetries: config.maxRetries,
148
168
  retryBaseMs: config.retryBaseMs,
149
169
  retryMaxWaitMs: config.retryMaxWaitMs,
170
+ requestTimeoutMs: config.requestTimeoutMs,
150
171
  fetchImpl: fetchImpl ?? globalThis.fetch.bind(globalThis),
151
172
  };
152
173
  }