@phamvuhoang/otto-core 0.3.0 → 0.4.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 (45) hide show
  1. package/dist/cli-help.d.ts +16 -3
  2. package/dist/cli-help.d.ts.map +1 -1
  3. package/dist/cli-help.js +14 -4
  4. package/dist/cli-help.js.map +1 -1
  5. package/dist/index.d.ts +5 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +5 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/linear-api.d.ts +161 -0
  10. package/dist/linear-api.d.ts.map +1 -0
  11. package/dist/linear-api.js +288 -0
  12. package/dist/linear-api.js.map +1 -0
  13. package/dist/linear-auth.d.ts +42 -0
  14. package/dist/linear-auth.d.ts.map +1 -0
  15. package/dist/linear-auth.js +115 -0
  16. package/dist/linear-auth.js.map +1 -0
  17. package/dist/linear-cli.d.ts +37 -0
  18. package/dist/linear-cli.d.ts.map +1 -0
  19. package/dist/linear-cli.js +176 -0
  20. package/dist/linear-cli.js.map +1 -0
  21. package/dist/linear-main.d.ts +5 -0
  22. package/dist/linear-main.d.ts.map +1 -0
  23. package/dist/linear-main.js +27 -0
  24. package/dist/linear-main.js.map +1 -0
  25. package/dist/preflight.d.ts +3 -0
  26. package/dist/preflight.d.ts.map +1 -1
  27. package/dist/preflight.js +13 -1
  28. package/dist/preflight.js.map +1 -1
  29. package/dist/run-bin.d.ts +21 -1
  30. package/dist/run-bin.d.ts.map +1 -1
  31. package/dist/run-bin.js +12 -6
  32. package/dist/run-bin.js.map +1 -1
  33. package/dist/stages.d.ts +10 -0
  34. package/dist/stages.d.ts.map +1 -1
  35. package/dist/stages.js +10 -0
  36. package/dist/stages.js.map +1 -1
  37. package/dist/watch.d.ts +37 -2
  38. package/dist/watch.d.ts.map +1 -1
  39. package/dist/watch.js +39 -4
  40. package/dist/watch.js.map +1 -1
  41. package/package.json +1 -1
  42. package/templates/linear-completion.md +17 -0
  43. package/templates/linearafk-issue.md +31 -0
  44. package/templates/linearafk.md +29 -0
  45. package/templates/linearprompt.md +39 -0
@@ -12,7 +12,12 @@ export type CliFlags = {
12
12
  reviewPanel: boolean;
13
13
  watch: boolean;
14
14
  watchIntervalSec?: number;
15
- issue?: number;
15
+ /**
16
+ * Normalized `--issue` value. A number for GitHub refs (the default parser);
17
+ * a canonical string for Linear refs (`ENG-123` / UUID, via an injected
18
+ * `parseIssue`). In both cases it is shell-safe for `OTTO_ISSUE`.
19
+ */
20
+ issue?: number | string;
16
21
  maxWaitMs?: number;
17
22
  fresh: boolean;
18
23
  verify: boolean;
@@ -35,7 +40,15 @@ export declare function parseDurationMs(raw: string): number;
35
40
  * pass the raw ref to a shell. See render.ts security invariant.
36
41
  */
37
42
  export declare function parseIssueRef(raw: string): number;
38
- export declare function parseFlags(argv: string[]): CliFlags;
43
+ /** Options for {@link parseFlags}. */
44
+ export type ParseFlagsOptions = {
45
+ /**
46
+ * How to validate/normalize the `--issue` value. Defaults to the GitHub
47
+ * number ref ({@link parseIssueRef}); otto-linear-afk injects a Linear parser.
48
+ */
49
+ parseIssue?: (raw: string) => number | string;
50
+ };
51
+ export declare function parseFlags(argv: string[], opts?: ParseFlagsOptions): CliFlags;
39
52
  /**
40
53
  * Resolve the @phamvuhoang/otto-core version by reading the package.json that
41
54
  * sits two levels up from the compiled cli-help.js (packages/core/dist/ →
@@ -58,7 +71,7 @@ export type PrintConfigOptions = {
58
71
  reviewLenses?: string[];
59
72
  watch?: boolean;
60
73
  watchIntervalSec?: number;
61
- issue?: number;
74
+ issue?: number | string;
62
75
  maxWaitMs?: number;
63
76
  mode?: string;
64
77
  branchStrategy?: "current" | "branch" | "worktree";
@@ -1 +1 @@
1
- {"version":3,"file":"cli-help.d.ts","sourceRoot":"","sources":["../src/cli-help.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmBjD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CA2LnD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAWxC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAInE;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,IAAI,CA+CN;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,kBAAuB,GAC5B,IAAI,CAqFN"}
1
+ {"version":3,"file":"cli-help.d.ts","sourceRoot":"","sources":["../src/cli-help.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAEF,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAWnD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAmBjD;AAED,sCAAsC;AACtC,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;CAC/C,CAAC;AAEF,wBAAgB,UAAU,CACxB,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE,iBAAsB,GAC3B,QAAQ,CA4LV;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAWxC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAInE;AAED,wBAAgB,SAAS,CACvB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAClB,IAAI,CA+CN;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,kBAAuB,GAC5B,IAAI,CAgGN"}
package/dist/cli-help.js CHANGED
@@ -44,7 +44,8 @@ export function parseIssueRef(raw) {
44
44
  }
45
45
  return n;
46
46
  }
47
- export function parseFlags(argv) {
47
+ export function parseFlags(argv, opts = {}) {
48
+ const parseIssue = opts.parseIssue ?? parseIssueRef;
48
49
  let help = false;
49
50
  let version = false;
50
51
  let printConfig = false;
@@ -116,7 +117,7 @@ export function parseFlags(argv) {
116
117
  continue;
117
118
  }
118
119
  if (expectingIssue) {
119
- issue = parseIssueRef(a);
120
+ issue = parseIssue(a);
120
121
  expectingIssue = false;
121
122
  continue;
122
123
  }
@@ -336,11 +337,20 @@ export function printConfig(bin, workspaceDir, packageDir, opts = {}) {
336
337
  const reviewStatus = reviewLenses.length
337
338
  ? `panel: ${reviewLenses.join(", ")}`
338
339
  : "single reviewer";
339
- const watchLabel = process.env.OTTO_WATCH_LABEL?.trim() || "otto";
340
+ // Linear watch polls OTTO_LINEAR_LABEL (the label its implementer selects);
341
+ // every other mode polls OTTO_WATCH_LABEL. Mirror run-bin's resolution so the
342
+ // reported label matches what a --watch run would actually poll. Linear mode
343
+ // never falls back to OTTO_WATCH_LABEL: run-bin's resolveWatchLabel returns
344
+ // OTTO_LINEAR_LABEL || "otto", short-circuiting before OTTO_WATCH_LABEL.
345
+ const watchLabel = mode === "linear"
346
+ ? process.env.OTTO_LINEAR_LABEL?.trim() || "otto"
347
+ : process.env.OTTO_WATCH_LABEL?.trim() || "otto";
340
348
  const watchStatus = watch
341
349
  ? `on (every ${watchIntervalSec ?? 300}s, label "${watchLabel}")`
342
350
  : "off";
343
- const issueStatus = issue != null ? `#${issue}` : "off";
351
+ // GitHub refs are numbers (rendered `#42`); Linear refs are already-canonical
352
+ // strings (`ENG-123` / UUID) and stand alone.
353
+ const issueStatus = issue == null ? "off" : typeof issue === "number" ? `#${issue}` : issue;
344
354
  const branchStatus = `${branchStrategy ?? "current"} (prefix "${branchPrefix ?? "otto/"}")`;
345
355
  process.stdout.write(`[${bin}] resolved config
346
356
  version ${bin} ${cli} (core ${core})
@@ -1 +1 @@
1
- {"version":3,"file":"cli-help.js","sourceRoot":"","sources":["../src/cli-help.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-help.js","sourceRoot":"","sources":["../src/cli-help.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,13 @@
1
1
  export { runAfk } from "./main.js";
2
2
  export { runGhAfk } from "./gh-main.js";
3
+ export { runLinearAfk, type RunLinearAfkOptions } from "./linear-main.js";
3
4
  export { runLoop, type LoopOptions, type LoopOutcome } from "./loop.js";
4
5
  export { STAGES, type Stage } from "./stages.js";
5
6
  export { renderTemplate, type RenderOptions, type RenderVars, } from "./render.js";
6
7
  export { runStage, type StageResult } from "./runner.js";
7
- export { runWatch, type RunWatchOptions } from "./watch.js";
8
+ export { runWatch, pollOpenIssues, pollLinearIssues, type RunWatchOptions, type PollResult, type WatchProvider, type LinearPollDeps, } from "./watch.js";
8
9
  export { runPreflight, whichBin, type PreflightResult, type PreflightProbes, } from "./preflight.js";
10
+ export { parseLinearRef, parseLinearIssueArg, resolveLinearAuth, resolveDoneState, linearConfigPath, createLinearClient, LinearApiError, type LinearRef, type LinearAuth, type LinearAuthDeps, type LinearClient, type LinearClientDeps, type LinearViewer, type LinearIssueSummary, type LinearIssueDetail, type LinearComment, type LinearWorkflowState, type DoneStateResolution, type LinearErrorKind, } from "./linear-api.js";
11
+ export { runLinearAuth, defaultLinearAuthDeps, type LinearAuthCliDeps, } from "./linear-auth.js";
12
+ export { runLinear, defaultLinearCliDeps, type LinearCliDeps, } from "./linear-cli.js";
9
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,EACd,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,KAAK,iBAAiB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,9 +1,13 @@
1
1
  export { runAfk } from "./main.js";
2
2
  export { runGhAfk } from "./gh-main.js";
3
+ export { runLinearAfk } from "./linear-main.js";
3
4
  export { runLoop } from "./loop.js";
4
5
  export { STAGES } from "./stages.js";
5
6
  export { renderTemplate, } from "./render.js";
6
7
  export { runStage } from "./runner.js";
7
- export { runWatch } from "./watch.js";
8
+ export { runWatch, pollOpenIssues, pollLinearIssues, } from "./watch.js";
8
9
  export { runPreflight, whichBin, } from "./preflight.js";
10
+ export { parseLinearRef, parseLinearIssueArg, resolveLinearAuth, resolveDoneState, linearConfigPath, createLinearClient, LinearApiError, } from "./linear-api.js";
11
+ export { runLinearAuth, defaultLinearAuthDeps, } from "./linear-auth.js";
12
+ export { runLinear, defaultLinearCliDeps, } from "./linear-cli.js";
9
13
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,OAAO,EAAsC,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAoB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAwB,MAAM,YAAY,CAAC;AAC5D,OAAO,EACL,YAAY,EACZ,QAAQ,GAGT,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,YAAY,EAA4B,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAsC,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,MAAM,EAAc,MAAM,aAAa,CAAC;AACjD,OAAO,EACL,cAAc,GAGf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,QAAQ,EAAoB,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,cAAc,EACd,gBAAgB,GAKjB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,YAAY,EACZ,QAAQ,GAGT,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,GAaf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,qBAAqB,GAEtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,SAAS,EACT,oBAAoB,GAErB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * A normalized Linear issue reference. Discriminated so callers know whether to
3
+ * query Linear by its human identifier (`ENG-123`) or by the issue UUID.
4
+ */
5
+ export type LinearRef = {
6
+ kind: "identifier";
7
+ identifier: string;
8
+ } | {
9
+ kind: "uuid";
10
+ uuid: string;
11
+ };
12
+ /**
13
+ * Normalize a user-supplied Linear issue reference to a {@link LinearRef}.
14
+ * Accepts a Linear identifier (`ENG-123`), an issue UUID, or a Linear issue
15
+ * URL (`https://linear.app/acme/issue/ENG-123/slug`). Team keys are uppercased
16
+ * to Linear's canonical form; UUIDs are lowercased. Throws on anything else.
17
+ *
18
+ * SECURITY: like {@link parseIssueRef} in cli-help.ts, the normalized value is
19
+ * the only part of a ref that may reach a shell (via a static template command
20
+ * reading an env var). The identifier/UUID regexes admit only `[A-Za-z0-9-]`,
21
+ * so a value like `$(rm -rf ~)` can never survive parsing.
22
+ */
23
+ export declare function parseLinearRef(raw: string): LinearRef;
24
+ /**
25
+ * Parse + canonicalize a `--issue` value to the single shell-safe string Otto
26
+ * exports as `OTTO_ISSUE` for the Linear single-issue template. Identifiers are
27
+ * uppercased, UUIDs lowercased; both admit only `[A-Za-z0-9-]`, so the result is
28
+ * safe to interpolate into the static `otto-linear view "$OTTO_ISSUE"` command.
29
+ * Throws (via {@link parseLinearRef}) on anything malformed.
30
+ */
31
+ export declare function parseLinearIssueArg(raw: string): string;
32
+ /** A resolved Linear credential plus where it came from (for `--print-config`). */
33
+ export type LinearAuth = {
34
+ token: string;
35
+ source: string;
36
+ };
37
+ /**
38
+ * Injectable env/fs so {@link resolveLinearAuth} stays pure and unit-testable
39
+ * without real env vars or a real home dir. Mirrors {@link PreflightProbes}.
40
+ */
41
+ export type LinearAuthDeps = {
42
+ env: NodeJS.ProcessEnv;
43
+ /** Read a file's contents, or null if it is absent/unreadable. */
44
+ readFile: (path: string) => string | null;
45
+ /** Home directory holding the credential file. */
46
+ home: string;
47
+ };
48
+ /** Canonical location of the stored Linear API key (outside any repo). */
49
+ export declare function linearConfigPath(home: string): string;
50
+ /**
51
+ * Resolve a Linear API key with precedence `OTTO_LINEAR_API_KEY` →
52
+ * `LINEAR_API_KEY` → `~/.config/otto/linear.json` (`{ "type": "apiKey",
53
+ * "token": "..." }`). Returns the token and its source, or null when no source
54
+ * yields a usable (non-empty) token. The config shape is kept extensible for a
55
+ * future OAuth `type`.
56
+ */
57
+ export declare function resolveLinearAuth(deps?: LinearAuthDeps): LinearAuth | null;
58
+ /**
59
+ * Why a Linear API call failed, so callers (notably watch-mode polling) can
60
+ * distinguish a bad/missing credential from a transient network blip or a
61
+ * malformed request. `auth` is surfaced specially by `--print-config`/`--watch`.
62
+ */
63
+ export type LinearErrorKind = "auth" | "request" | "network";
64
+ /** A typed Linear API failure carrying a {@link LinearErrorKind}. */
65
+ export declare class LinearApiError extends Error {
66
+ readonly kind: LinearErrorKind;
67
+ readonly status?: number;
68
+ constructor(message: string, kind: LinearErrorKind, status?: number);
69
+ }
70
+ /** Minimal viewer identity returned by {@link LinearClient.whoami}. */
71
+ export type LinearViewer = {
72
+ id: string;
73
+ name: string;
74
+ email: string;
75
+ };
76
+ /** A labelled open issue as returned by {@link LinearClient.listIssues}. */
77
+ export type LinearIssueSummary = {
78
+ id: string;
79
+ identifier: string;
80
+ title: string;
81
+ url: string;
82
+ /** Workflow state name (e.g. "Todo"). */
83
+ state: string;
84
+ };
85
+ /** One comment on an issue (author name flattened, never null). */
86
+ export type LinearComment = {
87
+ author: string;
88
+ body: string;
89
+ createdAt: string;
90
+ };
91
+ /** Full issue detail returned by {@link LinearClient.viewIssue}. */
92
+ export type LinearIssueDetail = LinearIssueSummary & {
93
+ description: string;
94
+ comments: LinearComment[];
95
+ };
96
+ /** A team's workflow state (column), with its category `type` and ordering. */
97
+ export type LinearWorkflowState = {
98
+ id: string;
99
+ name: string;
100
+ /** Workflow category: "completed", "started", "unstarted", "canceled", … */
101
+ type: string;
102
+ /** Ordering within the team's workflow; lower = earlier. */
103
+ position: number;
104
+ };
105
+ export type LinearClientDeps = {
106
+ token: string;
107
+ /** Injectable for tests; defaults to the global `fetch` (Node 20+). */
108
+ fetch?: typeof fetch;
109
+ /** Overridable endpoint (tests/self-hosting); defaults to Linear's API. */
110
+ endpoint?: string;
111
+ };
112
+ /** Narrow set of Linear GraphQL operations Otto needs. */
113
+ export type LinearClient = {
114
+ whoami(): Promise<LinearViewer>;
115
+ listIssues(opts: {
116
+ label: string;
117
+ team?: string;
118
+ limit: number;
119
+ }): Promise<LinearIssueSummary[]>;
120
+ viewIssue(ref: LinearRef): Promise<LinearIssueDetail>;
121
+ addComment(issueId: string, body: string): Promise<{
122
+ id: string;
123
+ }>;
124
+ listWorkflowStates(team: string): Promise<LinearWorkflowState[]>;
125
+ moveToDone(issueId: string, stateId: string): Promise<{
126
+ id: string;
127
+ state: string;
128
+ }>;
129
+ };
130
+ /**
131
+ * Build a Linear GraphQL client bound to one API key. Each method issues a
132
+ * single GraphQL request over injectable `fetch`, authenticating with the
133
+ * personal-API-key scheme (`Authorization: <key>`, no `Bearer`). Failures throw
134
+ * a {@link LinearApiError} classified as `auth`/`request`/`network`.
135
+ *
136
+ * Ref→id resolution beyond {@link viewIssue} (e.g. resolving a done-state id)
137
+ * is intentionally left to higher layers; these ops stay thin and 1:1 with the
138
+ * underlying GraphQL operations so they are trivial to mock and reason about.
139
+ */
140
+ export declare function createLinearClient(deps: LinearClientDeps): LinearClient;
141
+ /** Outcome of resolving the target "done" workflow state for an issue's team. */
142
+ export type DoneStateResolution = {
143
+ kind: "resolved";
144
+ state: LinearWorkflowState;
145
+ } | {
146
+ kind: "ambiguous";
147
+ reason: string;
148
+ };
149
+ /**
150
+ * Resolve which workflow state a completed issue should move to, given a team's
151
+ * states and an optional preferred state name (`OTTO_LINEAR_DONE_STATE`):
152
+ *
153
+ * 1. If `preferredName` is set, the state whose name matches it
154
+ * (case-insensitively) wins; if none matches the result is `ambiguous` — we
155
+ * never silently pick a different state than the user named.
156
+ * 2. Otherwise the first `type: "completed"` state by ascending `position`.
157
+ * 3. If neither yields a state the result is `ambiguous`; callers should
158
+ * comment on the issue and leave a human to move it rather than guess.
159
+ */
160
+ export declare function resolveDoneState(states: LinearWorkflowState[], preferredName?: string): DoneStateResolution;
161
+ //# sourceMappingURL=linear-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-api.d.ts","sourceRoot":"","sources":["../src/linear-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,288 @@
1
+ import { homedir } from "node:os";
2
+ import { join } from "node:path";
3
+ import { readFileSync } from "node:fs";
4
+ // A Linear issue identifier: team key (letter then letters/digits) + "-" +
5
+ // positive number (no leading zero — mirrors parseIssueRef strictness).
6
+ const IDENTIFIER_RE = /^[A-Za-z][A-Za-z0-9]*-[1-9]\d*$/;
7
+ // Issue UUID (RFC-4122 shape; we don't validate the version nibble).
8
+ const UUID_RE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
9
+ // `linear.app/<workspace>/issue/<IDENTIFIER>[/<slug>...]` — the identifier is
10
+ // the path segment after `/issue/`.
11
+ const URL_IDENTIFIER_RE = /\/issue\/([A-Za-z][A-Za-z0-9]*-[1-9]\d*)(?:[/?#]|$)/;
12
+ /**
13
+ * Normalize a user-supplied Linear issue reference to a {@link LinearRef}.
14
+ * Accepts a Linear identifier (`ENG-123`), an issue UUID, or a Linear issue
15
+ * URL (`https://linear.app/acme/issue/ENG-123/slug`). Team keys are uppercased
16
+ * to Linear's canonical form; UUIDs are lowercased. Throws on anything else.
17
+ *
18
+ * SECURITY: like {@link parseIssueRef} in cli-help.ts, the normalized value is
19
+ * the only part of a ref that may reach a shell (via a static template command
20
+ * reading an env var). The identifier/UUID regexes admit only `[A-Za-z0-9-]`,
21
+ * so a value like `$(rm -rf ~)` can never survive parsing.
22
+ */
23
+ export function parseLinearRef(raw) {
24
+ const s = raw.trim();
25
+ const urlMatch = s.match(URL_IDENTIFIER_RE);
26
+ if (urlMatch) {
27
+ return { kind: "identifier", identifier: urlMatch[1].toUpperCase() };
28
+ }
29
+ if (UUID_RE.test(s)) {
30
+ return { kind: "uuid", uuid: s.toLowerCase() };
31
+ }
32
+ if (IDENTIFIER_RE.test(s)) {
33
+ return { kind: "identifier", identifier: s.toUpperCase() };
34
+ }
35
+ throw new Error(`--issue must be a Linear identifier (ENG-123), an issue UUID, or a Linear issue URL, got: ${JSON.stringify(raw)}`);
36
+ }
37
+ /**
38
+ * Parse + canonicalize a `--issue` value to the single shell-safe string Otto
39
+ * exports as `OTTO_ISSUE` for the Linear single-issue template. Identifiers are
40
+ * uppercased, UUIDs lowercased; both admit only `[A-Za-z0-9-]`, so the result is
41
+ * safe to interpolate into the static `otto-linear view "$OTTO_ISSUE"` command.
42
+ * Throws (via {@link parseLinearRef}) on anything malformed.
43
+ */
44
+ export function parseLinearIssueArg(raw) {
45
+ const ref = parseLinearRef(raw);
46
+ return ref.kind === "uuid" ? ref.uuid : ref.identifier;
47
+ }
48
+ /** Canonical location of the stored Linear API key (outside any repo). */
49
+ export function linearConfigPath(home) {
50
+ return join(home, ".config", "otto", "linear.json");
51
+ }
52
+ const defaultAuthDeps = {
53
+ env: process.env,
54
+ readFile: (p) => {
55
+ try {
56
+ return readFileSync(p, "utf8");
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ },
62
+ home: homedir(),
63
+ };
64
+ /**
65
+ * Resolve a Linear API key with precedence `OTTO_LINEAR_API_KEY` →
66
+ * `LINEAR_API_KEY` → `~/.config/otto/linear.json` (`{ "type": "apiKey",
67
+ * "token": "..." }`). Returns the token and its source, or null when no source
68
+ * yields a usable (non-empty) token. The config shape is kept extensible for a
69
+ * future OAuth `type`.
70
+ */
71
+ export function resolveLinearAuth(deps = defaultAuthDeps) {
72
+ const { env, readFile, home } = deps;
73
+ for (const name of ["OTTO_LINEAR_API_KEY", "LINEAR_API_KEY"]) {
74
+ const token = env[name]?.trim();
75
+ if (token)
76
+ return { token, source: name };
77
+ }
78
+ const path = linearConfigPath(home);
79
+ const raw = readFile(path);
80
+ if (raw != null) {
81
+ try {
82
+ const token = JSON.parse(raw).token;
83
+ if (typeof token === "string" && token.trim()) {
84
+ return { token: token.trim(), source: path };
85
+ }
86
+ }
87
+ catch {
88
+ // malformed config → no credential from this source
89
+ }
90
+ }
91
+ return null;
92
+ }
93
+ // ---------------------------------------------------------------------------
94
+ // GraphQL client
95
+ // ---------------------------------------------------------------------------
96
+ /** Linear's GraphQL endpoint. */
97
+ const LINEAR_ENDPOINT = "https://api.linear.app/graphql";
98
+ /** A typed Linear API failure carrying a {@link LinearErrorKind}. */
99
+ export class LinearApiError extends Error {
100
+ kind;
101
+ status;
102
+ constructor(message, kind, status) {
103
+ super(message);
104
+ this.name = "LinearApiError";
105
+ this.kind = kind;
106
+ this.status = status;
107
+ }
108
+ }
109
+ function isAuthError(status, errors) {
110
+ if (status === 401 || status === 403)
111
+ return true;
112
+ return errors.some((e) => /authenticat/i.test(e?.message ?? "") ||
113
+ /^AUTHENTICATION/i.test(e?.extensions?.code ?? ""));
114
+ }
115
+ const ISSUE_FIELDS = `id identifier title url description state { name type }`;
116
+ const COMMENT_FIELDS = `comments { nodes { body createdAt user { name } } }`;
117
+ function mapDetail(raw) {
118
+ return {
119
+ id: raw.id,
120
+ identifier: raw.identifier,
121
+ title: raw.title,
122
+ url: raw.url,
123
+ description: raw.description ?? "",
124
+ state: raw.state.name,
125
+ comments: (raw.comments?.nodes ?? []).map((c) => ({
126
+ author: c.user?.name ?? "unknown",
127
+ body: c.body,
128
+ createdAt: c.createdAt,
129
+ })),
130
+ };
131
+ }
132
+ /**
133
+ * Build a Linear GraphQL client bound to one API key. Each method issues a
134
+ * single GraphQL request over injectable `fetch`, authenticating with the
135
+ * personal-API-key scheme (`Authorization: <key>`, no `Bearer`). Failures throw
136
+ * a {@link LinearApiError} classified as `auth`/`request`/`network`.
137
+ *
138
+ * Ref→id resolution beyond {@link viewIssue} (e.g. resolving a done-state id)
139
+ * is intentionally left to higher layers; these ops stay thin and 1:1 with the
140
+ * underlying GraphQL operations so they are trivial to mock and reason about.
141
+ */
142
+ export function createLinearClient(deps) {
143
+ const fetchImpl = deps.fetch ?? fetch;
144
+ const endpoint = deps.endpoint ?? LINEAR_ENDPOINT;
145
+ const token = deps.token;
146
+ async function request(query, variables) {
147
+ let res;
148
+ try {
149
+ res = await fetchImpl(endpoint, {
150
+ method: "POST",
151
+ headers: {
152
+ "content-type": "application/json",
153
+ authorization: token,
154
+ },
155
+ body: JSON.stringify({ query, variables }),
156
+ });
157
+ }
158
+ catch (e) {
159
+ throw new LinearApiError(`Linear request failed: ${e.message}`, "network");
160
+ }
161
+ let json;
162
+ try {
163
+ json = (await res.json());
164
+ }
165
+ catch {
166
+ json = undefined;
167
+ }
168
+ const errors = json?.errors ?? [];
169
+ if (!res.ok || errors.length > 0) {
170
+ const kind = isAuthError(res.status, errors) ? "auth" : "request";
171
+ const msg = errors[0]?.message ?? `HTTP ${res.status}`;
172
+ throw new LinearApiError(`Linear GraphQL error: ${msg}`, kind, res.status);
173
+ }
174
+ return json.data;
175
+ }
176
+ return {
177
+ async whoami() {
178
+ const data = await request(`query { viewer { id name email } }`, {});
179
+ return data.viewer;
180
+ },
181
+ async listIssues({ label, team, limit }) {
182
+ const filter = {
183
+ labels: { some: { name: { eq: label } } },
184
+ state: { type: { nin: ["completed", "canceled"] } },
185
+ };
186
+ if (team)
187
+ filter.team = { key: { eq: team } };
188
+ const data = await request(`query ListIssues($filter: IssueFilter!, $first: Int!) {
189
+ issues(filter: $filter, first: $first) {
190
+ nodes { id identifier title url state { name type } }
191
+ }
192
+ }`, { filter, first: limit });
193
+ return data.issues.nodes.map((n) => ({
194
+ id: n.id,
195
+ identifier: n.identifier,
196
+ title: n.title,
197
+ url: n.url,
198
+ state: n.state.name,
199
+ }));
200
+ },
201
+ async viewIssue(ref) {
202
+ if (ref.kind === "uuid") {
203
+ const data = await request(`query ViewIssue($id: String!) {
204
+ issue(id: $id) { ${ISSUE_FIELDS} ${COMMENT_FIELDS} }
205
+ }`, { id: ref.uuid });
206
+ if (!data.issue) {
207
+ throw new LinearApiError(`Linear issue not found: ${ref.uuid}`, "request");
208
+ }
209
+ return mapDetail(data.issue);
210
+ }
211
+ const [, team, num] = ref.identifier.match(/^([A-Za-z][A-Za-z0-9]*)-([1-9]\d*)$/);
212
+ const data = await request(`query FindIssue($team: String!, $number: Float!) {
213
+ issues(filter: { team: { key: { eq: $team } }, number: { eq: $number } }, first: 1) {
214
+ nodes { ${ISSUE_FIELDS} ${COMMENT_FIELDS} }
215
+ }
216
+ }`, { team, number: Number(num) });
217
+ const node = data.issues.nodes[0];
218
+ if (!node) {
219
+ throw new LinearApiError(`Linear issue not found: ${ref.identifier}`, "request");
220
+ }
221
+ return mapDetail(node);
222
+ },
223
+ async addComment(issueId, body) {
224
+ const data = await request(`mutation AddComment($issueId: String!, $body: String!) {
225
+ commentCreate(input: { issueId: $issueId, body: $body }) {
226
+ success comment { id }
227
+ }
228
+ }`, { issueId, body });
229
+ return { id: data.commentCreate.comment.id };
230
+ },
231
+ async listWorkflowStates(team) {
232
+ const data = await request(`query WorkflowStates($team: String!) {
233
+ workflowStates(filter: { team: { key: { eq: $team } } }, first: 100) {
234
+ nodes { id name type position }
235
+ }
236
+ }`, { team });
237
+ return data.workflowStates.nodes.map((n) => ({
238
+ id: n.id,
239
+ name: n.name,
240
+ type: n.type,
241
+ position: n.position,
242
+ }));
243
+ },
244
+ async moveToDone(issueId, stateId) {
245
+ const data = await request(`mutation MoveToDone($id: String!, $stateId: String!) {
246
+ issueUpdate(id: $id, input: { stateId: $stateId }) {
247
+ success issue { id state { name type } }
248
+ }
249
+ }`, { id: issueId, stateId });
250
+ return { id: data.issueUpdate.issue.id, state: data.issueUpdate.issue.state.name };
251
+ },
252
+ };
253
+ }
254
+ /**
255
+ * Resolve which workflow state a completed issue should move to, given a team's
256
+ * states and an optional preferred state name (`OTTO_LINEAR_DONE_STATE`):
257
+ *
258
+ * 1. If `preferredName` is set, the state whose name matches it
259
+ * (case-insensitively) wins; if none matches the result is `ambiguous` — we
260
+ * never silently pick a different state than the user named.
261
+ * 2. Otherwise the first `type: "completed"` state by ascending `position`.
262
+ * 3. If neither yields a state the result is `ambiguous`; callers should
263
+ * comment on the issue and leave a human to move it rather than guess.
264
+ */
265
+ export function resolveDoneState(states, preferredName) {
266
+ const wanted = preferredName?.trim();
267
+ if (wanted) {
268
+ const match = states.find((s) => s.name.toLowerCase() === wanted.toLowerCase());
269
+ if (match)
270
+ return { kind: "resolved", state: match };
271
+ const names = states.map((s) => s.name).join(", ") || "none";
272
+ return {
273
+ kind: "ambiguous",
274
+ reason: `no workflow state named "${wanted}" (have: ${names})`,
275
+ };
276
+ }
277
+ const completed = states
278
+ .filter((s) => s.type === "completed")
279
+ .sort((a, b) => a.position - b.position);
280
+ if (completed.length === 0) {
281
+ return {
282
+ kind: "ambiguous",
283
+ reason: 'no workflow state of type "completed"',
284
+ };
285
+ }
286
+ return { kind: "resolved", state: completed[0] };
287
+ }
288
+ //# sourceMappingURL=linear-api.js.map