@codyswann/lisa 2.294.0 → 2.295.1

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 (133) hide show
  1. package/dist/cli/gate-commands.d.ts +1 -3
  2. package/dist/cli/gate-commands.d.ts.map +1 -1
  3. package/dist/cli/gate-commands.js +0 -26
  4. package/dist/cli/gate-commands.js.map +1 -1
  5. package/dist/cli/index.d.ts +7 -2
  6. package/dist/cli/index.d.ts.map +1 -1
  7. package/dist/cli/index.js +43 -4
  8. package/dist/cli/index.js.map +1 -1
  9. package/dist/cli/update-check.d.ts +0 -8
  10. package/dist/cli/update-check.d.ts.map +1 -1
  11. package/dist/cli/update-check.js +2 -4
  12. package/dist/cli/update-check.js.map +1 -1
  13. package/dist/core/project-config.d.ts +0 -3
  14. package/dist/core/project-config.d.ts.map +1 -1
  15. package/dist/core/project-config.js +40 -4
  16. package/dist/core/project-config.js.map +1 -1
  17. package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
  18. package/dist/core/upstream-evidence-manifest.js +2 -28
  19. package/dist/core/upstream-evidence-manifest.js.map +1 -1
  20. package/dist/sync/registry.d.ts.map +1 -1
  21. package/dist/sync/registry.js +6 -3
  22. package/dist/sync/registry.js.map +1 -1
  23. package/package.json +1 -1
  24. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  26. package/plugins/lisa/rules/eager/config-resolution.md +0 -9
  27. package/plugins/lisa/rules/reference/config-resolution.md +0 -59
  28. package/plugins/lisa-agy/plugin.json +1 -1
  29. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  31. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  32. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  34. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  35. package/plugins/lisa-copilot/rules/eager/config-resolution.md +0 -9
  36. package/plugins/lisa-copilot/rules/reference/config-resolution.md +0 -59
  37. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  38. package/plugins/lisa-cursor/rules/config-resolution-reference.mdc +0 -59
  39. package/plugins/lisa-cursor/rules/config-resolution.mdc +0 -9
  40. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  41. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  42. package/plugins/lisa-expo-agy/plugin.json +1 -1
  43. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  45. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  46. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  47. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  48. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  50. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  51. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  52. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  53. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  55. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  57. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  58. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  60. package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
  62. package/plugins/lisa-phaser-agy/plugin.json +1 -1
  63. package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
  65. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  66. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  67. package/plugins/lisa-rails-agy/plugin.json +1 -1
  68. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  69. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  71. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  72. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  73. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  74. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  75. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  76. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  77. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  78. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  79. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  80. package/plugins/src/base/rules/eager/config-resolution.md +0 -9
  81. package/plugins/src/base/rules/reference/config-resolution.md +0 -59
  82. package/dist/cli/deploy-status-adapter-github.d.ts +0 -20
  83. package/dist/cli/deploy-status-adapter-github.d.ts.map +0 -1
  84. package/dist/cli/deploy-status-adapter-github.js +0 -167
  85. package/dist/cli/deploy-status-adapter-github.js.map +0 -1
  86. package/dist/cli/deploy-status-adapter-jira.d.ts +0 -18
  87. package/dist/cli/deploy-status-adapter-jira.d.ts.map +0 -1
  88. package/dist/cli/deploy-status-adapter-jira.js +0 -215
  89. package/dist/cli/deploy-status-adapter-jira.js.map +0 -1
  90. package/dist/cli/deploy-status-adapter-linear.d.ts +0 -16
  91. package/dist/cli/deploy-status-adapter-linear.d.ts.map +0 -1
  92. package/dist/cli/deploy-status-adapter-linear.js +0 -204
  93. package/dist/cli/deploy-status-adapter-linear.js.map +0 -1
  94. package/dist/cli/deploy-status-adapter-shared.d.ts +0 -57
  95. package/dist/cli/deploy-status-adapter-shared.d.ts.map +0 -1
  96. package/dist/cli/deploy-status-adapter-shared.js +0 -62
  97. package/dist/cli/deploy-status-adapter-shared.js.map +0 -1
  98. package/dist/cli/deploy-status-adapter.d.ts +0 -49
  99. package/dist/cli/deploy-status-adapter.d.ts.map +0 -1
  100. package/dist/cli/deploy-status-adapter.js +0 -87
  101. package/dist/cli/deploy-status-adapter.js.map +0 -1
  102. package/dist/cli/deploy-status-refs.d.ts +0 -70
  103. package/dist/cli/deploy-status-refs.d.ts.map +0 -1
  104. package/dist/cli/deploy-status-refs.js +0 -195
  105. package/dist/cli/deploy-status-refs.js.map +0 -1
  106. package/dist/cli/deploy-status-sync-cmd.d.ts +0 -23
  107. package/dist/cli/deploy-status-sync-cmd.d.ts.map +0 -1
  108. package/dist/cli/deploy-status-sync-cmd.js +0 -75
  109. package/dist/cli/deploy-status-sync-cmd.js.map +0 -1
  110. package/dist/cli/deploy-status-sync-engine.d.ts +0 -49
  111. package/dist/cli/deploy-status-sync-engine.d.ts.map +0 -1
  112. package/dist/cli/deploy-status-sync-engine.js +0 -214
  113. package/dist/cli/deploy-status-sync-engine.js.map +0 -1
  114. package/dist/cli/deploy-status-sync-exec.d.ts +0 -73
  115. package/dist/cli/deploy-status-sync-exec.d.ts.map +0 -1
  116. package/dist/cli/deploy-status-sync-exec.js +0 -95
  117. package/dist/cli/deploy-status-sync-exec.js.map +0 -1
  118. package/dist/cli/kane-commands.d.ts +0 -21
  119. package/dist/cli/kane-commands.d.ts.map +0 -1
  120. package/dist/cli/kane-commands.js +0 -44
  121. package/dist/cli/kane-commands.js.map +0 -1
  122. package/dist/core/config-field-validation.d.ts +0 -19
  123. package/dist/core/config-field-validation.d.ts.map +0 -1
  124. package/dist/core/config-field-validation.js +0 -69
  125. package/dist/core/config-field-validation.js.map +0 -1
  126. package/dist/core/deploy-status-sync.d.ts +0 -103
  127. package/dist/core/deploy-status-sync.d.ts.map +0 -1
  128. package/dist/core/deploy-status-sync.js +0 -339
  129. package/dist/core/deploy-status-sync.js.map +0 -1
  130. package/dist/core/deploy-status-transition.d.ts +0 -97
  131. package/dist/core/deploy-status-transition.d.ts.map +0 -1
  132. package/dist/core/deploy-status-transition.js +0 -134
  133. package/dist/core/deploy-status-transition.js.map +0 -1
@@ -1,87 +0,0 @@
1
- import { getAtPath } from "../sync/json-path.js";
2
- import { createGithubAdapter } from "./deploy-status-adapter-github.js";
3
- import { createJiraAdapter } from "./deploy-status-adapter-jira.js";
4
- import { createLinearAdapter } from "./deploy-status-adapter-linear.js";
5
- import { createExecGh, } from "./deploy-status-adapter-shared.js";
6
- // Shared adapter surface lives in the leaf contract module (cycle-free:
7
- // the vendor adapters import it directly); re-exported here so downstream
8
- // importers (engine, cmd, refs, tests) keep a single import site.
9
- export { createExec, createExecGh, deriveLabelState, } from "./deploy-status-adapter-shared.js";
10
- /**
11
- * Read a required string from config, failing decision-readably.
12
- * @param config - Parsed config
13
- * @param dotPath - Dot path of the key
14
- * @returns The configured string
15
- */
16
- function requireConfigString(config, dotPath) {
17
- const value = getAtPath(config, dotPath);
18
- if (typeof value !== "string" || value.length === 0) {
19
- throw new Error(`Missing ${dotPath} in .lisa.config.json — required to reach the configured tracker`);
20
- }
21
- return value;
22
- }
23
- /**
24
- * Read an optional string from config.
25
- * @param config - Parsed config
26
- * @param dotPath - Dot path of the key
27
- * @returns The configured string, or undefined
28
- */
29
- function optionalConfigString(config, dotPath) {
30
- const value = getAtPath(config, dotPath);
31
- return typeof value === "string" && value.length > 0 ? value : undefined;
32
- }
33
- /**
34
- * Create the vendor adapter for the configured tracker.
35
- * @param options - Tracker, parsed config, done vocabulary, cwd
36
- * @param deps - Injectable transports (tests inject recorders)
37
- * @returns The vendor adapter
38
- */
39
- export function createTrackerAdapter(options, deps = {}) {
40
- const { tracker, config, doneStatuses, cwd } = options;
41
- if (tracker === "github") {
42
- const org = requireConfigString(config, "github.org");
43
- const repo = requireConfigString(config, "github.repo");
44
- return createGithubAdapter({ repository: `${org}/${repo}`, doneStatuses }, { execGh: deps.execGh ?? createExecGh(cwd) });
45
- }
46
- if (tracker === "linear") {
47
- return createLinearAdapter({
48
- workspace: requireConfigString(config, "linear.workspace"),
49
- doneStatuses,
50
- }, deps);
51
- }
52
- const cloudId = optionalConfigString(config, "atlassian.cloudId");
53
- const site = optionalConfigString(config, "atlassian.site");
54
- const email = optionalConfigString(config, "atlassian.email");
55
- return createJiraAdapter({
56
- ...(cloudId === undefined ? {} : { cloudId }),
57
- ...(site === undefined ? {} : { site }),
58
- ...(email === undefined ? {} : { email }),
59
- }, deps);
60
- }
61
- /**
62
- * Wrap an adapter so reads pass through and writes are reported to the
63
- * caller but never executed. The caller owns accumulation (the CLI prints
64
- * planned writes as they occur; tests collect them), keeping this wrapper
65
- * stateless. Used for `--dry-run` and as the unit-test write recorder.
66
- * @param inner - Real adapter (only its reads are used)
67
- * @param onWrite - Sink invoked once per suppressed write, in call order
68
- * @returns Wrapped adapter with all writes suppressed
69
- */
70
- export function withDryRun(inner, onWrite) {
71
- return {
72
- fetchItemState: ref => inner.fetchItemState(ref),
73
- transitionToDone: (ref, doneStatus) => {
74
- onWrite({ method: "transitionToDone", ref, detail: doneStatus });
75
- return Promise.resolve();
76
- },
77
- upsertManagedComment: (ref, body) => {
78
- onWrite({ method: "upsertManagedComment", ref, detail: body });
79
- return Promise.resolve("created");
80
- },
81
- closeNatively: ref => {
82
- onWrite({ method: "closeNatively", ref });
83
- return Promise.resolve();
84
- },
85
- };
86
- }
87
- //# sourceMappingURL=deploy-status-adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-status-adapter.js","sourceRoot":"","sources":["../../src/cli/deploy-status-adapter.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- /**
2
- * Work-item ref extraction for deploy-status-sync (DSS-2, AC 1).
3
- *
4
- * Given a `base..head` commit range: union the `Work-Item:` trailer values
5
- * of every commit (parsed by git's own trailer engine via the
6
- * `%(trailers:key=Work-Item,valueonly)` pretty format) with the `Refs` /
7
- * `Closes` lines of every merged PR associated with those commits (GitHub
8
- * associated-PRs endpoint — no search-index lag), canonicalize each token
9
- * against the configured tracker, and dedupe on the canonical form.
10
- * Out-of-scope tokens are skipped with a reason, never an error.
11
- * @module cli/deploy-status-refs
12
- */
13
- import type { Tracker } from "../core/deploy-status-sync.js";
14
- /** Injectable git/gh executors used by the extractor. */
15
- export interface RefExtractionDeps {
16
- /** Run git with fixed argv and return stdout */
17
- readonly execGit: (args: readonly string[]) => Promise<string>;
18
- /** Run gh with fixed argv and return stdout */
19
- readonly execGh: (args: readonly string[]) => Promise<string>;
20
- }
21
- /** Extraction options. */
22
- export interface ExtractRefsOptions {
23
- /** Commit range in `base..head` form */
24
- readonly range: string;
25
- /** Tracker vendor the tokens canonicalize against */
26
- readonly tracker: Tracker;
27
- /** Configured `owner/repo` (binds bare `#N`; enables PR-body lookups) */
28
- readonly repository?: string;
29
- /** Jira project key / Linear team key for `KEY-N` canonicalization */
30
- readonly projectKey?: string;
31
- /** Repository working directory */
32
- readonly cwd: string;
33
- }
34
- /** One out-of-scope token, reported instead of raised. */
35
- export interface SkippedRef {
36
- readonly token: string;
37
- readonly reason: string;
38
- }
39
- /** Extraction result. */
40
- export interface ExtractedRefs {
41
- /** Canonical refs, deduped, in first-appearance order */
42
- readonly refs: readonly string[];
43
- /** Out-of-scope tokens with reasons */
44
- readonly skipped: readonly SkippedRef[];
45
- /** Resolved head SHA of the range */
46
- readonly headSha: string;
47
- }
48
- /**
49
- * Split items into consecutive chunks of at most `size` elements. Used to
50
- * bound gh fan-out: chunks run sequentially, items within a chunk run
51
- * concurrently.
52
- * @param items - Items to split
53
- * @param size - Maximum chunk size (must be positive)
54
- * @returns Consecutive chunks in input order
55
- */
56
- export declare function chunk<T>(items: readonly T[], size: number): readonly (readonly T[])[];
57
- /**
58
- * Build production deps over the shared fixed-argv executor factory.
59
- * @param cwd - Repository working directory
60
- * @returns Real git/gh executors
61
- */
62
- export declare function defaultRefExtractionDeps(cwd: string): RefExtractionDeps;
63
- /**
64
- * Extract the deduped union of work-item refs for a commit range.
65
- * @param options - Range, tracker scope, and working directory
66
- * @param deps - Injectable executors (defaults to real git/gh)
67
- * @returns Canonical refs, skipped tokens, and the resolved head SHA
68
- */
69
- export declare function extractWorkItemRefs(options: ExtractRefsOptions, deps?: RefExtractionDeps): Promise<ExtractedRefs>;
70
- //# sourceMappingURL=deploy-status-refs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-status-refs.d.ts","sourceRoot":"","sources":["../../src/cli/deploy-status-refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAG7D,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC/D;AAED,0BAA0B;AAC1B,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,mCAAmC;IACnC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB;AAED,0DAA0D;AAC1D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,yBAAyB;AACzB,MAAM,WAAW,aAAa;IAC5B,yDAAyD;IACzD,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,qCAAqC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AASD;;;;;;;GAOG;AACH,wBAAgB,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,IAAI,EAAE,MAAM,GACX,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAI3B;AAWD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAKvE;AA6ID;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,GAAE,iBAAyD,GAC9D,OAAO,CAAC,aAAa,CAAC,CA6ExB"}
@@ -1,195 +0,0 @@
1
- import { createExec } from "./deploy-status-adapter.js";
2
- const GITHUB_TOKEN_PATTERN = /^([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)?#([1-9]\d*)$/;
3
- /** Git revision charset: branch names, SHAs, HEAD^/~ suffixes — nothing that
4
- * could smuggle shell metacharacters or option-like payloads into argv. */
5
- const REVISION_PATTERN = /^[\w./^~@-]+$/;
6
- /** Maximum concurrent gh lookups during PR-token collection. */
7
- const GH_CONCURRENCY = 8;
8
- /**
9
- * Split items into consecutive chunks of at most `size` elements. Used to
10
- * bound gh fan-out: chunks run sequentially, items within a chunk run
11
- * concurrently.
12
- * @param items - Items to split
13
- * @param size - Maximum chunk size (must be positive)
14
- * @returns Consecutive chunks in input order
15
- */
16
- export function chunk(items, size) {
17
- return Array.from({ length: Math.ceil(items.length / size) }, (_, index) => items.slice(index * size, (index + 1) * size));
18
- }
19
- const KEY_TOKEN_PATTERN = /^([A-Za-z][A-Za-z0-9]{1,9})-([1-9]\d*)$/;
20
- const REF_LINE_PATTERN = /^(?:refs|closes)\b(.*)$/i;
21
- /**
22
- * Build production deps over the shared fixed-argv executor factory.
23
- * @param cwd - Repository working directory
24
- * @returns Real git/gh executors
25
- */
26
- export function defaultRefExtractionDeps(cwd) {
27
- return {
28
- execGit: createExec("git", cwd),
29
- execGh: createExec("gh", cwd),
30
- };
31
- }
32
- /**
33
- * Canonicalize one token against the configured tracker scope.
34
- * @param token - Raw token from a trailer or PR body
35
- * @param options - Extraction options (tracker, repository, project key)
36
- * @returns Canonical ref or a skip reason
37
- */
38
- function canonicalizeToken(token, options) {
39
- if (options.tracker === "github") {
40
- const match = GITHUB_TOKEN_PATTERN.exec(token);
41
- if (match === null) {
42
- return { token, reason: "not a GitHub work-item ref" };
43
- }
44
- if (options.repository === undefined) {
45
- return { token, reason: "no github.org/github.repo configured" };
46
- }
47
- const repository = match[1];
48
- if (repository !== undefined &&
49
- repository.toLowerCase() !== options.repository.toLowerCase()) {
50
- return {
51
- token,
52
- reason: `outside configured repository ${options.repository}`,
53
- };
54
- }
55
- return { token, ref: `${options.repository}#${match[2] ?? ""}` };
56
- }
57
- const match = KEY_TOKEN_PATTERN.exec(token);
58
- if (match === null) {
59
- return { token, reason: `not a ${options.tracker} work-item ref` };
60
- }
61
- const key = (match[1] ?? "").toUpperCase();
62
- if (key !== (options.projectKey ?? "").toUpperCase()) {
63
- return {
64
- token,
65
- reason: `outside configured ${options.tracker} project ${options.projectKey ?? "(unset)"}`,
66
- };
67
- }
68
- return { token, ref: `${key}-${match[2] ?? ""}` };
69
- }
70
- /**
71
- * Collect Refs/Closes tokens from merged PRs associated with the commits.
72
- * @param shas - Commit SHAs of the range
73
- * @param repository - Configured `owner/repo`
74
- * @param deps - Injectable executors
75
- * @returns Raw tokens in appearance order
76
- */
77
- async function collectPrTokens(shas, repository, deps) {
78
- // Chunked fan-out: a large range must not open one gh process (and one
79
- // API request) per SHA simultaneously.
80
- const payloads = await chunk(shas, GH_CONCURRENCY).reduce(async (accumulated, group) => {
81
- const previous = await accumulated;
82
- const results = await Promise.all(group.map(sha => deps.execGh(["api", `repos/${repository}/commits/${sha}/pulls`])));
83
- return [...previous, ...results];
84
- }, Promise.resolve([]));
85
- const pulls = payloads.flatMap(raw => {
86
- const parsed = JSON.parse(raw.length > 0 ? raw : "[]");
87
- return Array.isArray(parsed)
88
- ? parsed
89
- : [];
90
- });
91
- const merged = pulls.filter(pull => pull.merged_at !== null && pull.merged_at !== undefined);
92
- const unique = [...new Map(merged.map(pull => [pull.number, pull])).values()];
93
- return unique.flatMap(pull => prBodyTokens(pull.body ?? ""));
94
- }
95
- /** Loose candidate shapes: contains a "#" or looks like KEY-N. A candidate
96
- * that later fails canonicalization is reported in `skipped`, never dropped
97
- * silently; plain prose words are not candidates. */
98
- const CANDIDATE_PATTERN = /#|^[A-Za-z][A-Za-z0-9]*-\d/;
99
- /** Punctuation stripped from the end of candidate tokens. */
100
- const TRAILING_PUNCTUATION = new Set([".", ",", ";", ":", ")"]);
101
- /**
102
- * Strip trailing punctuation from a word in linear time (a quantified
103
- * end-anchored regex would be flagged as super-linear).
104
- * @param word - Raw word
105
- * @returns The word without its trailing punctuation run
106
- */
107
- function stripTrailingPunctuation(word) {
108
- const characters = [...word];
109
- const cutoff = characters.reduce((keep, character, index) => TRAILING_PUNCTUATION.has(character) ? keep : index + 1, 0);
110
- return word.slice(0, cutoff);
111
- }
112
- /**
113
- * Collect candidate tokens from one PR body: Refs/Closes lines outside
114
- * fenced code regions (triple-backtick blocks), with trailing punctuation
115
- * stripped from each word so `Closes #102.` names #102.
116
- * @param body - Raw PR body markdown
117
- * @returns Candidate tokens in appearance order
118
- */
119
- function prBodyTokens(body) {
120
- const scanned = body.split("\n").reduce((state, rawLine) => {
121
- const line = rawLine.trim();
122
- if (line.startsWith("```")) {
123
- return { ...state, inFence: !state.inFence };
124
- }
125
- const match = state.inFence ? null : REF_LINE_PATTERN.exec(line);
126
- if (match === null)
127
- return state;
128
- const words = (match[1] ?? "")
129
- .replace(/^[\s:]+/, "")
130
- .split(/[\s,]+/)
131
- .map(stripTrailingPunctuation)
132
- .filter(word => CANDIDATE_PATTERN.test(word));
133
- return { ...state, tokens: [...state.tokens, ...words] };
134
- }, { inFence: false, tokens: [] });
135
- return scanned.tokens;
136
- }
137
- /**
138
- * Extract the deduped union of work-item refs for a commit range.
139
- * @param options - Range, tracker scope, and working directory
140
- * @param deps - Injectable executors (defaults to real git/gh)
141
- * @returns Canonical refs, skipped tokens, and the resolved head SHA
142
- */
143
- export async function extractWorkItemRefs(options, deps = defaultRefExtractionDeps(options.cwd)) {
144
- // Library-level guard (the cmd layer has its own): without it, the
145
- // dot-stripped head would give rev-parse two-dot semantics while rev-list
146
- // received the raw three-dot range — two git calls disagreeing silently.
147
- if (options.range.includes("...")) {
148
- throw new Error(`Invalid range "${options.range}": three-dot "..." selects the symmetric difference, which is never a deploy range. Pass the deployed range as <base>..<head> (two dots).`);
149
- }
150
- const separator = options.range.indexOf("..");
151
- if (separator === -1) {
152
- throw new Error(`Invalid range "${options.range}": expected <base>..<head>`);
153
- }
154
- const base = options.range.slice(0, separator);
155
- const head = options.range.slice(separator + 2);
156
- // Charset gate + --end-of-options below: a revision must never be able to
157
- // smuggle option-like or shell-meta payloads into the git argv.
158
- if (!REVISION_PATTERN.test(base) || !REVISION_PATTERN.test(head)) {
159
- throw new Error(`Invalid range "${options.range}": each revision side must be a plain git revision (letters, digits, ".", "_", "/", "^", "~", "@", "-").`);
160
- }
161
- // --verify puts rev-parse in single-revision mode, where --end-of-options
162
- // is honored (bare rev-parse would echo it back instead).
163
- const headSha = (await deps.execGit(["rev-parse", "--verify", "--end-of-options", head])).trim();
164
- const shas = (await deps.execGit([
165
- "rev-list",
166
- "--reverse",
167
- "--end-of-options",
168
- options.range,
169
- ]))
170
- .split("\n")
171
- .map(line => line.trim())
172
- .filter(line => line.length > 0);
173
- const trailerOutputs = await Promise.all(shas.map(sha => deps.execGit([
174
- "log",
175
- "-1",
176
- "--format=%(trailers:key=Work-Item,valueonly)",
177
- sha,
178
- ])));
179
- const trailerTokens = trailerOutputs.flatMap(output => output
180
- .split("\n")
181
- .map(line => line.trim())
182
- .filter(line => line.length > 0));
183
- const prTokens = options.repository === undefined
184
- ? []
185
- : await collectPrTokens(shas, options.repository, deps);
186
- const results = [...trailerTokens, ...prTokens].map(token => canonicalizeToken(token, options));
187
- const canonical = results.flatMap(result => result.ref === undefined ? [] : [result.ref]);
188
- const refs = [...new Set(canonical)];
189
- const allSkipped = results.flatMap(result => result.reason === undefined
190
- ? []
191
- : [{ token: result.token, reason: result.reason }]);
192
- const skipped = allSkipped.filter((entry, index) => allSkipped.findIndex(other => other.token === entry.token) === index);
193
- return { refs, skipped, headSha };
194
- }
195
- //# sourceMappingURL=deploy-status-refs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-status-refs.js","sourceRoot":"","sources":["../../src/cli/deploy-status-refs.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAwCxD,MAAM,oBAAoB,GAAG,kDAAkD,CAAC;AAChF;2EAC2E;AAC3E,MAAM,gBAAgB,GAAG,eAAe,CAAC;AACzC,gEAAgE;AAChE,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB;;;;;;;GAOG;AACH,MAAM,UAAU,KAAK,CACnB,KAAmB,EACnB,IAAY;IAEZ,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CACzE,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAC9C,CAAC;AACJ,CAAC;AACD,MAAM,iBAAiB,GAAG,yCAAyC,CAAC;AACpE,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AASpD;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,OAAO;QACL,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC;QAC/B,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;KAC9B,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,KAAa,EACb,OAA2B;IAE3B,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,EAAE,CAAC;QACzD,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC;QACnE,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,IACE,UAAU,KAAK,SAAS;YACxB,UAAU,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,EAC7D,CAAC;YACD,OAAO;gBACL,KAAK;gBACL,MAAM,EAAE,iCAAiC,OAAO,CAAC,UAAU,EAAE;aAC9D,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,OAAO,CAAC,OAAO,gBAAgB,EAAE,CAAC;IACrE,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3C,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;QACrD,OAAO;YACL,KAAK;YACL,MAAM,EAAE,sBAAsB,OAAO,CAAC,OAAO,YAAY,OAAO,CAAC,UAAU,IAAI,SAAS,EAAE;SAC3F,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,eAAe,CAC5B,IAAuB,EACvB,UAAkB,EAClB,IAAuB;IAEvB,uEAAuE;IACvE,uCAAuC;IACvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,MAAM,CACvD,KAAK,EAAE,WAAuC,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACd,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,UAAU,YAAY,GAAG,QAAQ,CAAC,CAAC,CACjE,CACF,CAAC;QACF,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;IACnC,CAAC,EACD,OAAO,CAAC,OAAO,CAAC,EAAuB,CAAC,CACzC,CAAC;IACF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAY,CAAC;QAClE,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1B,CAAC,CAAE,MAIG;YACN,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CACzB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAChE,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9E,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;qDAEqD;AACrD,MAAM,iBAAiB,GAAG,4BAA4B,CAAC;AAEvD,6DAA6D;AAC7D,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAEhE;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAC9B,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,CACzB,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EACxD,CAAC,CACF,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CACrC,CAAC,KAAsD,EAAE,OAAO,EAAE,EAAE;QAClE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjE,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QACjC,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAC3B,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC;aACtB,KAAK,CAAC,QAAQ,CAAC;aACf,GAAG,CAAC,wBAAwB,CAAC;aAC7B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,OAAO,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAC3D,CAAC,EACD,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAC/B,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAA2B,EAC3B,OAA0B,wBAAwB,CAAC,OAAO,CAAC,GAAG,CAAC;IAE/D,mEAAmE;IACnE,0EAA0E;IAC1E,yEAAyE;IACzE,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CACb,kBAAkB,OAAO,CAAC,KAAK,2IAA2I,CAC3K,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,kBAAkB,OAAO,CAAC,KAAK,4BAA4B,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAChD,0EAA0E;IAC1E,gEAAgE;IAChE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CACb,kBAAkB,OAAO,CAAC,KAAK,0GAA0G,CAC1I,CAAC;IACJ,CAAC;IACD,0EAA0E;IAC1E,0DAA0D;IAC1D,MAAM,OAAO,GAAG,CACd,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC,CACxE,CAAC,IAAI,EAAE,CAAC;IACT,MAAM,IAAI,GAAG,CACX,MAAM,IAAI,CAAC,OAAO,CAAC;QACjB,UAAU;QACV,WAAW;QACX,kBAAkB;QAClB,OAAO,CAAC,KAAK;KACd,CAAC,CACH;SACE,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CACb,IAAI,CAAC,OAAO,CAAC;QACX,KAAK;QACL,IAAI;QACJ,8CAA8C;QAC9C,GAAG;KACJ,CAAC,CACH,CACF,CAAC;IACF,MAAM,aAAa,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CACpD,MAAM;SACH,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CACnC,CAAC;IACF,MAAM,QAAQ,GACZ,OAAO,CAAC,UAAU,KAAK,SAAS;QAC9B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAC1D,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAClC,CAAC;IACF,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CACzC,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAC7C,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAC1C,MAAM,CAAC,MAAM,KAAK,SAAS;QACzB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CACrD,CAAC;IACF,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAC/B,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,CACvE,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC"}
@@ -1,23 +0,0 @@
1
- /**
2
- * `lisa deploy-status-sync` — the DSS-2 transition engine entry point.
3
- *
4
- * Given a deploy event (environment or branch + commit range), extract the
5
- * work-item refs the range shipped, plan transitions over the config-sourced
6
- * deploy ladder (pure planner), and execute them idempotently through the
7
- * tracker adapter. Exit code 0 covers success INCLUDING explanatory no-ops
8
- * and skips — a deploy job must not gate on tracker vocabulary; 1 is
9
- * reserved for genuine errors (config validation, git/gh/API failures,
10
- * unknown environment, or any per-item transition failure — remaining items
11
- * are still processed first).
12
- * @module cli/deploy-status-sync-cmd
13
- */
14
- import { type DeployStatusSyncDependencies, type DeployStatusSyncOptions } from "./deploy-status-sync-engine.js";
15
- export type { DeployStatusSyncDependencies, DeployStatusSyncOptions, } from "./deploy-status-sync-engine.js";
16
- /**
17
- * Run the deploy-status-sync engine for one deploy event.
18
- * @param options - CLI options
19
- * @param deps - Injectable collaborators for tests
20
- * @returns Intended process exit code
21
- */
22
- export declare function runDeployStatusSync(options: DeployStatusSyncOptions, deps?: DeployStatusSyncDependencies): Promise<number>;
23
- //# sourceMappingURL=deploy-status-sync-cmd.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-status-sync-cmd.d.ts","sourceRoot":"","sources":["../../src/cli/deploy-status-sync-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAGL,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,EAE7B,MAAM,gCAAgC,CAAC;AAExC,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AAmCxC;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,uBAAuB,EAChC,IAAI,GAAE,4BAAiC,GACtC,OAAO,CAAC,MAAM,CAAC,CAyBjB"}
@@ -1,75 +0,0 @@
1
- /**
2
- * `lisa deploy-status-sync` — the DSS-2 transition engine entry point.
3
- *
4
- * Given a deploy event (environment or branch + commit range), extract the
5
- * work-item refs the range shipped, plan transitions over the config-sourced
6
- * deploy ladder (pure planner), and execute them idempotently through the
7
- * tracker adapter. Exit code 0 covers success INCLUDING explanatory no-ops
8
- * and skips — a deploy job must not gate on tracker vocabulary; 1 is
9
- * reserved for genuine errors (config validation, git/gh/API failures,
10
- * unknown environment, or any per-item transition failure — remaining items
11
- * are still processed first).
12
- * @module cli/deploy-status-sync-cmd
13
- */
14
- import { resolveRunContext, runResolved, } from "./deploy-status-sync-engine.js";
15
- /**
16
- * Validate the mutually-exclusive event selector and range options.
17
- * @param options - CLI options
18
- * @returns The normalized range, or an error message
19
- */
20
- function normalizeInputs(options) {
21
- const hasEnvironment = options.environment !== undefined;
22
- const hasBranch = options.branch !== undefined;
23
- if (hasEnvironment === hasBranch) {
24
- return {
25
- problem: "Pass exactly one of --environment <env> or --branch <branch> to identify the deploy target.",
26
- };
27
- }
28
- if (options.range !== undefined) {
29
- if (options.range.includes("...")) {
30
- return {
31
- problem: `Invalid range "${options.range}": three-dot "..." selects the symmetric difference, which is never a deploy range. Pass the deployed range as <base>..<head> (two dots).`,
32
- };
33
- }
34
- return { range: options.range };
35
- }
36
- if (options.before !== undefined && options.after !== undefined) {
37
- return { range: `${options.before}..${options.after}` };
38
- }
39
- return {
40
- problem: "Pass the deployed commit range as --range <base>..<head> (or --before <sha> --after <sha>).",
41
- };
42
- }
43
- /**
44
- * Run the deploy-status-sync engine for one deploy event.
45
- * @param options - CLI options
46
- * @param deps - Injectable collaborators for tests
47
- * @returns Intended process exit code
48
- */
49
- export async function runDeployStatusSync(options, deps = {}) {
50
- const log = deps.log ?? ((message) => console.log(message));
51
- const error = deps.error ?? ((message) => console.error(message));
52
- // In --json mode the machine payload is the ONLY stdout content; human
53
- // narration would corrupt consumers that parse the output.
54
- const human = options.json === true ? () => undefined : log;
55
- const sinks = { log, error, human };
56
- const cwd = deps.cwd ?? process.cwd();
57
- const normalized = normalizeInputs(options);
58
- if ("problem" in normalized) {
59
- error(normalized.problem);
60
- return 1;
61
- }
62
- try {
63
- const context = await resolveRunContext(options, cwd);
64
- if ("problem" in context) {
65
- error(context.problem);
66
- return 1;
67
- }
68
- return await runResolved(context, normalized.range, options, deps, sinks);
69
- }
70
- catch (cause) {
71
- error(cause instanceof Error ? cause.message : String(cause));
72
- return 1;
73
- }
74
- }
75
- //# sourceMappingURL=deploy-status-sync-cmd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-status-sync-cmd.js","sourceRoot":"","sources":["../../src/cli/deploy-status-sync-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,iBAAiB,EACjB,WAAW,GAIZ,MAAM,gCAAgC,CAAC;AAOxC;;;;GAIG;AACH,SAAS,eAAe,CACtB,OAAgC;IAEhC,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC;IAC/C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO;YACL,OAAO,EACL,6FAA6F;SAChG,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO;gBACL,OAAO,EAAE,kBAAkB,OAAO,CAAC,KAAK,2IAA2I;aACpL,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChE,OAAO,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO;QACL,OAAO,EACL,6FAA6F;KAChG,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAgC,EAChC,OAAqC,EAAE;IAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAe,EAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GACT,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,OAAe,EAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACpE,uEAAuE;IACvE,2DAA2D;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAS,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IAClE,MAAM,KAAK,GAAU,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAC5C,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;QAC5B,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,IAAI,OAAO,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,MAAM,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC"}
@@ -1,49 +0,0 @@
1
- import { type DeployLadder, type Tracker } from "../core/deploy-status-sync.js";
2
- import { type JsonValue } from "../sync/json-path.js";
3
- import { type TrackerAdapter, type TrackerAdapterOptions } from "./deploy-status-adapter.js";
4
- import { type ExtractedRefs, type ExtractRefsOptions } from "./deploy-status-refs.js";
5
- import { type DeployStatusSyncOptions, type Sinks } from "./deploy-status-sync-exec.js";
6
- export type { DeployStatusSyncOptions, Sinks, } from "./deploy-status-sync-exec.js";
7
- /** Injectable collaborators for the engine. */
8
- export interface DeployStatusSyncDependencies {
9
- /** Working directory (defaults to the process cwd) */
10
- readonly cwd?: string;
11
- /** Output sink (defaults to stdout) */
12
- readonly log?: (message: string) => void;
13
- /** Error sink (defaults to stderr) */
14
- readonly error?: (message: string) => void;
15
- /** Ref extractor (defaults to the real git/gh extractor) */
16
- readonly extractRefs?: (options: ExtractRefsOptions) => Promise<ExtractedRefs>;
17
- /** Adapter factory (defaults to {@link createTrackerAdapter}) */
18
- readonly adapterFactory?: (options: TrackerAdapterOptions) => TrackerAdapter;
19
- }
20
- /** Resolved run context shared by the engine stages. */
21
- export interface RunContext {
22
- readonly config: JsonValue;
23
- readonly tracker: Tracker;
24
- readonly ladder: DeployLadder;
25
- readonly env: string;
26
- readonly branch: string;
27
- }
28
- /**
29
- * Read the config and resolve the tracker, ladder, and environment.
30
- * @param options - CLI options
31
- * @param cwd - Working directory
32
- * @returns Run context, or a decision-ready problem
33
- */
34
- export declare function resolveRunContext(options: DeployStatusSyncOptions, cwd: string): Promise<RunContext | {
35
- readonly problem: string;
36
- }>;
37
- /**
38
- * Run the engine over a resolved context: preflight the environment (an
39
- * unconfigured env is an explanatory no-op, exit 0), extract refs, then
40
- * fetch/plan/execute.
41
- * @param context - Resolved run context
42
- * @param range - Normalized commit range
43
- * @param options - CLI options
44
- * @param deps - Injectable collaborators
45
- * @param sinks - Output sinks
46
- * @returns Intended process exit code
47
- */
48
- export declare function runResolved(context: RunContext, range: string, options: DeployStatusSyncOptions, deps: DeployStatusSyncDependencies, sinks: Sinks): Promise<number>;
49
- //# sourceMappingURL=deploy-status-sync-engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deploy-status-sync-engine.d.ts","sourceRoot":"","sources":["../../src/cli/deploy-status-sync-engine.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,OAAO,EACb,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAA2B,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAIL,KAAK,uBAAuB,EAC5B,KAAK,KAAK,EACX,MAAM,8BAA8B,CAAC;AAEtC,YAAY,EACV,uBAAuB,EACvB,KAAK,GACN,MAAM,8BAA8B,CAAC;AAEtC,+CAA+C;AAC/C,MAAM,WAAW,4BAA4B;IAC3C,sDAAsD;IACtD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,sCAAsC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,4DAA4D;IAC5D,QAAQ,CAAC,WAAW,CAAC,EAAE,CACrB,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B,iEAAiE;IACjE,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,cAAc,CAAC;CAC9E;AAED,wDAAwD;AACxD,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AA+CD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,uBAAuB,EAChC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,UAAU,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAwBpD;AAiGD;;;;;;;;;;GAUG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,UAAU,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,uBAAuB,EAChC,IAAI,EAAE,4BAA4B,EAClC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,MAAM,CAAC,CAiDjB"}