hub-launch 1.30.0 → 1.32.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.
- package/CHANGELOG.md +22 -0
- package/README.md +52 -0
- package/dist/commands/errorWatcher.d.ts +2 -0
- package/dist/commands/errorWatcher.d.ts.map +1 -1
- package/dist/commands/errorWatcher.js +13 -0
- package/dist/commands/errorWatcher.js.map +1 -1
- package/dist/commands/init.d.ts +12 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +52 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/launch.d.ts +64 -0
- package/dist/commands/launch.d.ts.map +1 -1
- package/dist/commands/launch.js +317 -36
- package/dist/commands/launch.js.map +1 -1
- package/dist/commands/login.d.ts +14 -1
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +26 -4
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/schedule.d.ts.map +1 -1
- package/dist/commands/schedule.js +12 -0
- package/dist/commands/schedule.js.map +1 -1
- package/dist/commands/script.d.ts +1 -1
- package/dist/commands/script.d.ts.map +1 -1
- package/dist/commands/script.js +3 -0
- package/dist/commands/script.js.map +1 -1
- package/dist/commands/session-hook.d.ts +9 -0
- package/dist/commands/session-hook.d.ts.map +1 -1
- package/dist/commands/session-hook.js +60 -15
- package/dist/commands/session-hook.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/scripts/backlog-add.d.ts +2 -0
- package/dist/scripts/backlog-add.d.ts.map +1 -0
- package/dist/scripts/backlog-add.js +145 -0
- package/dist/scripts/backlog-add.js.map +1 -0
- package/dist/scripts/backlog-init.d.ts +2 -0
- package/dist/scripts/backlog-init.d.ts.map +1 -0
- package/dist/scripts/backlog-init.js +84 -0
- package/dist/scripts/backlog-init.js.map +1 -0
- package/dist/scripts/backlog-resync.d.ts +2 -0
- package/dist/scripts/backlog-resync.d.ts.map +1 -0
- package/dist/scripts/backlog-resync.js +156 -0
- package/dist/scripts/backlog-resync.js.map +1 -0
- package/dist/scripts/launch-run.d.ts +1 -0
- package/dist/scripts/launch-run.d.ts.map +1 -1
- package/dist/scripts/launch-run.js +47 -3
- package/dist/scripts/launch-run.js.map +1 -1
- package/dist/scripts/lib/backlog-sync.d.ts +27 -0
- package/dist/scripts/lib/backlog-sync.d.ts.map +1 -0
- package/dist/scripts/lib/backlog-sync.js +48 -0
- package/dist/scripts/lib/backlog-sync.js.map +1 -0
- package/dist/scripts/lib/read-config.d.ts +16 -0
- package/dist/scripts/lib/read-config.d.ts.map +1 -1
- package/dist/scripts/lib/read-config.js +34 -0
- package/dist/scripts/lib/read-config.js.map +1 -1
- package/dist/services/api/HulaApiClient.d.ts +39 -0
- package/dist/services/api/HulaApiClient.d.ts.map +1 -1
- package/dist/services/api/HulaApiClient.js +15 -0
- package/dist/services/api/HulaApiClient.js.map +1 -1
- package/dist/services/github/IssueService.d.ts +3 -1
- package/dist/services/github/IssueService.d.ts.map +1 -1
- package/dist/services/github/IssueService.js +5 -2
- package/dist/services/github/IssueService.js.map +1 -1
- package/dist/services/github/PRService.d.ts +3 -1
- package/dist/services/github/PRService.d.ts.map +1 -1
- package/dist/services/github/PRService.js +2 -2
- package/dist/services/github/PRService.js.map +1 -1
- package/dist/services/plan/GitHubSourcePlanService.d.ts +67 -0
- package/dist/services/plan/GitHubSourcePlanService.d.ts.map +1 -0
- package/dist/services/plan/GitHubSourcePlanService.js +164 -0
- package/dist/services/plan/GitHubSourcePlanService.js.map +1 -0
- package/dist/services/plan/PlanBranchService.d.ts +5 -1
- package/dist/services/plan/PlanBranchService.d.ts.map +1 -1
- package/dist/services/plan/PlanBranchService.js +21 -3
- package/dist/services/plan/PlanBranchService.js.map +1 -1
- package/dist/templates/proceed-instructions.md +2 -1
- package/dist/templates/skills/hula-approve/SKILL.md +31 -0
- package/dist/templates/skills/hula-fix/SKILL.md +10 -0
- package/dist/templates/skills/hula-launch/SKILL.md +40 -1
- package/dist/templates/skills/hula-plan/SKILL.md +39 -4
- package/dist/types/config.schema.d.ts +24 -0
- package/dist/types/config.schema.d.ts.map +1 -1
- package/dist/types/config.schema.js +11 -0
- package/dist/types/config.schema.js.map +1 -1
- package/dist/types/issue.schema.d.ts +6 -0
- package/dist/types/issue.schema.d.ts.map +1 -1
- package/dist/types/issue.schema.js +8 -0
- package/dist/types/issue.schema.js.map +1 -1
- package/dist/types/pr.schema.d.ts +38 -0
- package/dist/types/pr.schema.d.ts.map +1 -1
- package/dist/types/pr.schema.js +7 -0
- package/dist/types/pr.schema.js.map +1 -1
- package/dist/utils/client-session.d.ts +16 -0
- package/dist/utils/client-session.d.ts.map +1 -1
- package/dist/utils/client-session.js +29 -0
- package/dist/utils/client-session.js.map +1 -1
- package/dist/utils/github-cli.d.ts +2 -0
- package/dist/utils/github-cli.d.ts.map +1 -1
- package/dist/utils/github-cli.js +1 -1
- package/dist/utils/github-cli.js.map +1 -1
- package/dist/utils/sandbox-profile.d.ts +44 -0
- package/dist/utils/sandbox-profile.d.ts.map +1 -0
- package/dist/utils/sandbox-profile.js +78 -0
- package/dist/utils/sandbox-profile.js.map +1 -0
- package/package.json +1 -1
|
@@ -43,14 +43,14 @@ export class IssueService {
|
|
|
43
43
|
* Get a specific issue by number.
|
|
44
44
|
* When owner/repo are provided, queries that repo directly instead of the CWD repo.
|
|
45
45
|
*/
|
|
46
|
-
async get(issueNumber, owner, repo) {
|
|
46
|
+
async get(issueNumber, owner, repo, opts = {}) {
|
|
47
47
|
const cacheKey = IssueService.getCacheKey(issueNumber, owner, repo);
|
|
48
48
|
const cached = globalCache.get(cacheKey);
|
|
49
49
|
if (cached) {
|
|
50
50
|
return cached;
|
|
51
51
|
}
|
|
52
52
|
const repoInfo = (owner && repo) ? { owner, name: repo } : await getRepoInfo();
|
|
53
|
-
const response = await ghApi(`/repos/${repoInfo.owner}/${repoInfo.name}/issues/${issueNumber}
|
|
53
|
+
const response = await ghApi(`/repos/${repoInfo.owner}/${repoInfo.name}/issues/${issueNumber}`, { quiet: opts.quiet });
|
|
54
54
|
const validated = GitHubIssueSchema.parse(response);
|
|
55
55
|
const issue = this.transformToInternalIssue(validated);
|
|
56
56
|
// Cache for 5 minutes
|
|
@@ -225,6 +225,9 @@ export class IssueService {
|
|
|
225
225
|
createdAt: githubIssue.created_at,
|
|
226
226
|
updatedAt: githubIssue.updated_at,
|
|
227
227
|
assignees: githubIssue.assignees.map((a) => a.login),
|
|
228
|
+
...(githubIssue.pull_request !== undefined
|
|
229
|
+
? { isPullRequest: true }
|
|
230
|
+
: {}),
|
|
228
231
|
};
|
|
229
232
|
}
|
|
230
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IssueService.js","sourceRoot":"","sources":["../../../src/services/github/IssueService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAKL,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,WAAmB,EAAE,KAAc,EAAE,IAAa;QACnE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;YACpB,CAAC,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,WAAW,EAAE;YACzC,CAAC,CAAC,SAAS,WAAW,EAAE,CAAC;IAC7B,CAAC;IACD;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,MAAyB;QACpC,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;QAEjC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAE7D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,EAC1C;YACE,MAAM,EAAE,MAAM;YACd,MAAM,EAAE;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;gBACvB,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;oBACjD,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;oBACjC,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;oBAC3C,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAC3B,CAAC,CAAC,EAAE,CAAC;aACR;SACF,CACF,CAAC;QAEF,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"IssueService.js","sourceRoot":"","sources":["../../../src/services/github/IssueService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PRService.d.ts","sourceRoot":"","sources":["../../../src/services/github/PRService.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,qBAAa,SAAS;IACpB;;;OAGG;IACG,IAAI,CAAC,OAAO,GAAE,SAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8B3D;;OAEG;IACG,GAAG,
|
|
1
|
+
{"version":3,"file":"PRService.d.ts","sourceRoot":"","sources":["../../../src/services/github/PRService.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,YAAY,EAElB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,qBAAa,SAAS;IACpB;;;OAGG;IACG,IAAI,CAAC,OAAO,GAAE,SAAc,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA8B3D;;OAEG;IACG,GAAG,CACP,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAC7B,OAAO,CAAC,WAAW,CAAC;IAqBvB;;OAEG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,QAAQ,GAAE,OAAe,GACxB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAoC9B;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BnE;;OAEG;IACG,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAahD;;OAEG;IACG,eAAe,CACnB,WAAW,EAAE,MAAM,EACnB,cAAc,SAAM,GACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAsB9B;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrD;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAUvD;;OAEG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAU7D;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrD;;OAEG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKjD;;OAEG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrD;;OAEG;IACG,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAuBhE;;OAEG;IACG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D;;OAEG;IACG,+BAA+B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAClE,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,IAAI,CAAC;CAqDV"}
|
|
@@ -42,14 +42,14 @@ export class PRService {
|
|
|
42
42
|
/**
|
|
43
43
|
* Get a specific PR by number
|
|
44
44
|
*/
|
|
45
|
-
async get(prNumber) {
|
|
45
|
+
async get(prNumber, opts = {}) {
|
|
46
46
|
const cacheKey = `pr:${prNumber}`;
|
|
47
47
|
const cached = globalCache.get(cacheKey);
|
|
48
48
|
if (cached) {
|
|
49
49
|
return cached;
|
|
50
50
|
}
|
|
51
51
|
const repo = await getRepoInfo();
|
|
52
|
-
const response = await ghApi(`/repos/${repo.owner}/${repo.name}/pulls/${prNumber}
|
|
52
|
+
const response = await ghApi(`/repos/${repo.owner}/${repo.name}/pulls/${prNumber}`, { quiet: opts.quiet });
|
|
53
53
|
const pr = PullRequestSchema.parse(response);
|
|
54
54
|
// Cache for 2 minutes
|
|
55
55
|
globalCache.set(cacheKey, pr, 120);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PRService.js","sourceRoot":"","sources":["../../../src/services/github/PRService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAIL,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B;;;GAGG;AACH,MAAM,OAAO,SAAS;IACpB;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,UAAqB,EAAE;QAChC,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,CAAC;QAEjC,0DAA0D;QAC1D,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YAC5B,uCAAuC;YACvC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;gBACxC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;aAC3C,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC;QACpC,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,KAAK;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,IAAI;YAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAErE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,UAAU,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,SAAS,WAAW,EAAE,CACxD,CAAC;QAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"PRService.js","sourceRoot":"","sources":["../../../src/services/github/PRService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { Issue } from '../../types/index.js';
|
|
2
|
+
import type { PullRequest } from '../../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* GitHub-source plan generation for `hula launch --issue` / `--pr`.
|
|
5
|
+
*
|
|
6
|
+
* The CLI can start a launch from an existing GitHub issue or pull request
|
|
7
|
+
* instead of a local plan file. This module owns everything GitHub-specific:
|
|
8
|
+
* parsing the `--issue` / `--pr` reference, resolving and validating the issue
|
|
9
|
+
* or PR through the existing services, turning its text into a generated plan
|
|
10
|
+
* markdown, and writing that plan to the local plans directory (from where the
|
|
11
|
+
* normal launch flow publishes it to the feature branch and deletes it after a
|
|
12
|
+
* successful POST).
|
|
13
|
+
*/
|
|
14
|
+
/** A parsed `--issue` / `--pr` reference. owner/repo are present only for URLs. */
|
|
15
|
+
export interface GitHubRef {
|
|
16
|
+
number: number;
|
|
17
|
+
owner?: string;
|
|
18
|
+
repo?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse an `--issue` / `--pr` value: a number (`42`), a `#`-prefixed number
|
|
22
|
+
* (`#42`), or a full GitHub URL (`https://github.com/<owner>/<repo>/issues/<n>`
|
|
23
|
+
* for `issue`, `/pull/<n>` for `pr`), with an optional trailing `/`, `#...`, or
|
|
24
|
+
* `?...`.
|
|
25
|
+
*
|
|
26
|
+
* Throws a clear, flag-specific error on anything else (including an issue URL
|
|
27
|
+
* passed to `--pr` or vice versa — the path segment must match `kind`).
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseGitHubRef(input: string, kind: 'issue' | 'pr'): GitHubRef;
|
|
30
|
+
/**
|
|
31
|
+
* Find the first issue number linked from a PR body via a GitHub closing
|
|
32
|
+
* keyword (`Closes #5`, `fixes: #5`, `Resolved #5`, …). Returns `null` when
|
|
33
|
+
* there is no such reference.
|
|
34
|
+
*/
|
|
35
|
+
export declare function findLinkedIssueNumber(body: string | null): number | null;
|
|
36
|
+
/**
|
|
37
|
+
* Resolve an explicit `--issue <n>` into a validated open issue (not a PR).
|
|
38
|
+
*/
|
|
39
|
+
export declare function resolveIssueSource(n: number, repo: {
|
|
40
|
+
owner?: string;
|
|
41
|
+
name?: string;
|
|
42
|
+
}): Promise<Issue>;
|
|
43
|
+
/**
|
|
44
|
+
* Resolve `--pr <n>` into a validated open, same-repo pull request.
|
|
45
|
+
*/
|
|
46
|
+
export declare function resolvePrSource(n: number): Promise<PullRequest>;
|
|
47
|
+
/**
|
|
48
|
+
* Build the generated plan markdown from a resolved issue and/or PR. Sections
|
|
49
|
+
* are omitted when the source is absent; empty descriptions become a
|
|
50
|
+
* placeholder so the plan never has a blank body.
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildPlanMarkdown(input: {
|
|
53
|
+
issue?: Issue;
|
|
54
|
+
pr?: PullRequest;
|
|
55
|
+
repoFullName: string;
|
|
56
|
+
}): string;
|
|
57
|
+
/**
|
|
58
|
+
* Write a generated plan to `<planDir>/<YYYY-MM-DD-HH:MM>-<slug>.md`, creating
|
|
59
|
+
* the directory if needed, and return the path relative to the repo root
|
|
60
|
+
* (`planDir`'s parent chain). A relaunch in the same minute overwrites the file.
|
|
61
|
+
*
|
|
62
|
+
* `planDir` is the repo-relative plans directory (`config.planPath`). The
|
|
63
|
+
* returned path is repo-relative so the normal launch flow (publish + delete)
|
|
64
|
+
* treats it exactly like a hand-written plan.
|
|
65
|
+
*/
|
|
66
|
+
export declare function writeGeneratedPlan(planDir: string, slug: string, markdown: string, repoRoot?: string): string;
|
|
67
|
+
//# sourceMappingURL=GitHubSourcePlanService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitHubSourcePlanService.d.ts","sourceRoot":"","sources":["../../../src/services/plan/GitHubSourcePlanService.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD;;;;;;;;;;GAUG;AAEH,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,OAAO,GAAG,IAAI,GACnB,SAAS,CAgCX;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAMxE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,CAAC,EAAE,MAAM,EACT,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACtC,OAAO,CAAC,KAAK,CAAC,CAehB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAsCrE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,EAAE,CAAC,EAAE,WAAW,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,MAAM,CAsCT;AAcD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAAsB,GAC/B,MAAM,CAaR"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
2
|
+
import { isAbsolute, join, relative } from 'path';
|
|
3
|
+
import { IssueService } from '../github/IssueService.js';
|
|
4
|
+
import { PRService } from '../github/PRService.js';
|
|
5
|
+
/**
|
|
6
|
+
* Parse an `--issue` / `--pr` value: a number (`42`), a `#`-prefixed number
|
|
7
|
+
* (`#42`), or a full GitHub URL (`https://github.com/<owner>/<repo>/issues/<n>`
|
|
8
|
+
* for `issue`, `/pull/<n>` for `pr`), with an optional trailing `/`, `#...`, or
|
|
9
|
+
* `?...`.
|
|
10
|
+
*
|
|
11
|
+
* Throws a clear, flag-specific error on anything else (including an issue URL
|
|
12
|
+
* passed to `--pr` or vice versa — the path segment must match `kind`).
|
|
13
|
+
*/
|
|
14
|
+
export function parseGitHubRef(input, kind) {
|
|
15
|
+
const trimmed = input.trim();
|
|
16
|
+
const segment = kind === 'issue' ? 'issues' : 'pull';
|
|
17
|
+
const badValue = () => {
|
|
18
|
+
throw new Error(`Invalid --${kind} value "${input}". Use a number, #number, or https://github.com/<owner>/<repo>/${segment}/<n>`);
|
|
19
|
+
};
|
|
20
|
+
// Plain number or #number.
|
|
21
|
+
const numMatch = /^#?(\d+)$/.exec(trimmed);
|
|
22
|
+
if (numMatch) {
|
|
23
|
+
const number = Number(numMatch[1]);
|
|
24
|
+
if (!Number.isSafeInteger(number) || number <= 0)
|
|
25
|
+
badValue();
|
|
26
|
+
return { number };
|
|
27
|
+
}
|
|
28
|
+
// GitHub URL. The path segment (issues|pull) must match `kind` so an issue
|
|
29
|
+
// URL handed to --pr (or vice versa) is rejected rather than silently
|
|
30
|
+
// treated as the other kind.
|
|
31
|
+
const urlMatch = /^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/(issues|pull)\/(\d+)(?:[/#?].*)?$/i.exec(trimmed);
|
|
32
|
+
if (urlMatch && urlMatch[3]?.toLowerCase() === segment) {
|
|
33
|
+
const number = Number(urlMatch[4]);
|
|
34
|
+
if (!Number.isSafeInteger(number) || number <= 0)
|
|
35
|
+
badValue();
|
|
36
|
+
return { number, owner: urlMatch[1], repo: urlMatch[2] };
|
|
37
|
+
}
|
|
38
|
+
return badValue();
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Find the first issue number linked from a PR body via a GitHub closing
|
|
42
|
+
* keyword (`Closes #5`, `fixes: #5`, `Resolved #5`, …). Returns `null` when
|
|
43
|
+
* there is no such reference.
|
|
44
|
+
*/
|
|
45
|
+
export function findLinkedIssueNumber(body) {
|
|
46
|
+
if (!body)
|
|
47
|
+
return null;
|
|
48
|
+
const match = /\b(?:close[sd]?|fix(?:e[sd])?|resolve[sd]?)\s*:?\s+#(\d+)\b/i.exec(body);
|
|
49
|
+
return match ? Number(match[1]) : null;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Resolve an explicit `--issue <n>` into a validated open issue (not a PR).
|
|
53
|
+
*/
|
|
54
|
+
export async function resolveIssueSource(n, repo) {
|
|
55
|
+
const issue = await new IssueService().get(n, repo.owner, repo.name, {
|
|
56
|
+
quiet: true,
|
|
57
|
+
});
|
|
58
|
+
if (issue.isPullRequest) {
|
|
59
|
+
throw new Error(`#${n} is a pull request, not an issue. Use --pr ${n} instead.`);
|
|
60
|
+
}
|
|
61
|
+
if (issue.state !== 'open') {
|
|
62
|
+
throw new Error(`Issue #${n} is closed. Reopen it on GitHub before launching.`);
|
|
63
|
+
}
|
|
64
|
+
return issue;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve `--pr <n>` into a validated open, same-repo pull request.
|
|
68
|
+
*/
|
|
69
|
+
export async function resolvePrSource(n) {
|
|
70
|
+
let pr;
|
|
71
|
+
try {
|
|
72
|
+
pr = await new PRService().get(n, { quiet: true });
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
// `--pr` given an issue number: GitHub 404s the pulls endpoint. Say what
|
|
76
|
+
// it is instead of letting the caller report "not found".
|
|
77
|
+
const issue = await new IssueService()
|
|
78
|
+
.get(n, undefined, undefined, { quiet: true })
|
|
79
|
+
.catch(() => null);
|
|
80
|
+
if (issue && !issue.isPullRequest) {
|
|
81
|
+
throw new Error(`#${n} is an issue, not a pull request. Use --issue ${n} instead.`);
|
|
82
|
+
}
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
if (pr.merged_at) {
|
|
86
|
+
throw new Error(`PR #${n} is already merged. Nothing to continue.`);
|
|
87
|
+
}
|
|
88
|
+
if (pr.state !== 'open') {
|
|
89
|
+
throw new Error(`PR #${n} is closed. Reopen it on GitHub before launching.`);
|
|
90
|
+
}
|
|
91
|
+
const headFullName = pr.head.repo?.full_name ?? null;
|
|
92
|
+
const baseFullName = pr.base.repo?.full_name ?? null;
|
|
93
|
+
const isFork = headFullName === null ||
|
|
94
|
+
(baseFullName !== null &&
|
|
95
|
+
headFullName.toLowerCase() !== baseFullName.toLowerCase());
|
|
96
|
+
if (isFork) {
|
|
97
|
+
const source = headFullName ?? 'a deleted fork';
|
|
98
|
+
throw new Error(`PR #${n} comes from a fork (${source}). HubLaunch can only continue pull requests whose branch is in this repository.`);
|
|
99
|
+
}
|
|
100
|
+
return pr;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Build the generated plan markdown from a resolved issue and/or PR. Sections
|
|
104
|
+
* are omitted when the source is absent; empty descriptions become a
|
|
105
|
+
* placeholder so the plan never has a blank body.
|
|
106
|
+
*/
|
|
107
|
+
export function buildPlanMarkdown(input) {
|
|
108
|
+
const { issue, pr, repoFullName } = input;
|
|
109
|
+
const placeholder = '_No description provided._';
|
|
110
|
+
const title = pr ? pr.title : (issue?.title ?? 'Untitled');
|
|
111
|
+
const sourceLines = [];
|
|
112
|
+
if (pr) {
|
|
113
|
+
sourceLines.push(`- Pull request: #${pr.number} — ${pr.html_url} (branch \`${pr.head.ref}\` → \`${pr.base.ref}\`)`);
|
|
114
|
+
}
|
|
115
|
+
if (issue) {
|
|
116
|
+
sourceLines.push(`- Issue: #${issue.number} — https://github.com/${repoFullName}/issues/${issue.number}`);
|
|
117
|
+
}
|
|
118
|
+
const task = pr
|
|
119
|
+
? `Continue the existing pull request #${pr.number}. It already contains work: first read its current changes with \`git diff origin/${pr.base.ref}...HEAD\` and understand them, then finish what the pull request description (and the linked issue, if any) asks for. Do not revert or rewrite existing commits; add new commits on top. Add or update tests for anything you change.`
|
|
120
|
+
: `Implement what GitHub issue #${issue?.number} asks for. The issue text is below. Make the smallest complete change that resolves it, add or update tests, and keep existing behaviour unchanged elsewhere.`;
|
|
121
|
+
const sections = [];
|
|
122
|
+
sections.push(`# ${title}`);
|
|
123
|
+
sections.push(`## Source\n${sourceLines.join('\n')}`);
|
|
124
|
+
sections.push(`## Task\n${task}`);
|
|
125
|
+
if (pr) {
|
|
126
|
+
sections.push(`## Pull Request Description\n${pr.body?.trim() ? pr.body.trim() : placeholder}`);
|
|
127
|
+
}
|
|
128
|
+
if (issue) {
|
|
129
|
+
sections.push(`## Issue Description\n${issue.body?.trim() ? issue.body.trim() : placeholder}`);
|
|
130
|
+
}
|
|
131
|
+
return sections.join('\n\n') + '\n';
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Format the local date/time as `YYYY-MM-DD-HH:MM` (24-hour, local time) to
|
|
135
|
+
* match the existing plan-filename convention.
|
|
136
|
+
*/
|
|
137
|
+
function timestampSlug(now = new Date()) {
|
|
138
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
139
|
+
return (`${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())}` +
|
|
140
|
+
`-${pad(now.getHours())}:${pad(now.getMinutes())}`);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Write a generated plan to `<planDir>/<YYYY-MM-DD-HH:MM>-<slug>.md`, creating
|
|
144
|
+
* the directory if needed, and return the path relative to the repo root
|
|
145
|
+
* (`planDir`'s parent chain). A relaunch in the same minute overwrites the file.
|
|
146
|
+
*
|
|
147
|
+
* `planDir` is the repo-relative plans directory (`config.planPath`). The
|
|
148
|
+
* returned path is repo-relative so the normal launch flow (publish + delete)
|
|
149
|
+
* treats it exactly like a hand-written plan.
|
|
150
|
+
*/
|
|
151
|
+
export function writeGeneratedPlan(planDir, slug, markdown, repoRoot = process.cwd()) {
|
|
152
|
+
const absDir = isAbsolute(planDir) ? planDir : join(repoRoot, planDir);
|
|
153
|
+
if (!existsSync(absDir)) {
|
|
154
|
+
mkdirSync(absDir, { recursive: true });
|
|
155
|
+
}
|
|
156
|
+
const fileName = `${timestampSlug()}-${slug}.md`;
|
|
157
|
+
const absPath = join(absDir, fileName);
|
|
158
|
+
writeFileSync(absPath, markdown, 'utf-8');
|
|
159
|
+
// Return a repo-relative path (matching the positional-planPath convention)
|
|
160
|
+
// so the publish + post-POST cleanup treat it like any other plan file.
|
|
161
|
+
const rel = relative(repoRoot, absPath);
|
|
162
|
+
return rel;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=GitHubSourcePlanService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GitHubSourcePlanService.js","sourceRoot":"","sources":["../../../src/services/plan/GitHubSourcePlanService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAuBnD;;;;;;;;GAQG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,IAAoB;IAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAErD,MAAM,QAAQ,GAAG,GAAU,EAAE;QAC3B,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,WAAW,KAAK,kEAAkE,OAAO,MAAM,CACjH,CAAC;IACJ,CAAC,CAAC;IAEF,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,QAAQ,EAAE,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,CAAC;IACpB,CAAC;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,6BAA6B;IAC7B,MAAM,QAAQ,GACZ,+EAA+E,CAAC,IAAI,CAClF,OAAO,CACR,CAAC;IACJ,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC;YAAE,QAAQ,EAAE,CAAC;QAC7D,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,OAAO,QAAQ,EAAE,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAmB;IACvD,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,KAAK,GAAG,8DAA8D,CAAC,IAAI,CAC/E,IAAI,CACL,CAAC;IACF,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,CAAS,EACT,IAAuC;IAEvC,MAAM,KAAK,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;QACnE,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,8CAA8C,CAAC,WAAW,CAChE,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,UAAU,CAAC,mDAAmD,CAC/D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,CAAS;IAC7C,IAAI,EAAe,CAAC;IACpB,IAAI,CAAC;QACH,EAAE,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,0DAA0D;QAC1D,MAAM,KAAK,GAAG,MAAM,IAAI,YAAY,EAAE;aACnC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;aAC7C,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,IAAI,CAAC,iDAAiD,CAAC,WAAW,CACnE,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IACD,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,EAAE,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,mDAAmD,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;IACrD,MAAM,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI,CAAC;IACrD,MAAM,MAAM,GACV,YAAY,KAAK,IAAI;QACrB,CAAC,YAAY,KAAK,IAAI;YACpB,YAAY,CAAC,WAAW,EAAE,KAAK,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/D,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,YAAY,IAAI,gBAAgB,CAAC;QAChD,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,uBAAuB,MAAM,kFAAkF,CACxH,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAIjC;IACC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAC1C,MAAM,WAAW,GAAG,4BAA4B,CAAC;IAEjD,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,IAAI,UAAU,CAAC,CAAC;IAE3D,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,EAAE,EAAE,CAAC;QACP,WAAW,CAAC,IAAI,CACd,oBAAoB,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,QAAQ,cAAc,EAAE,CAAC,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAClG,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,WAAW,CAAC,IAAI,CACd,aAAa,KAAK,CAAC,MAAM,yBAAyB,YAAY,WAAW,KAAK,CAAC,MAAM,EAAE,CACxF,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,EAAE;QACb,CAAC,CAAC,uCAAuC,EAAE,CAAC,MAAM,qFAAqF,EAAE,CAAC,IAAI,CAAC,GAAG,uOAAuO;QACzX,CAAC,CAAC,gCAAgC,KAAK,EAAE,MAAM,+JAA+J,CAAC;IAEjN,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,cAAc,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;IAClC,IAAI,EAAE,EAAE,CAAC;QACP,QAAQ,CAAC,IAAI,CACX,gCAAgC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CACjF,CAAC;IACJ,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,QAAQ,CAAC,IAAI,CACX,yBAAyB,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;AACtC,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,MAAY,IAAI,IAAI,EAAE;IAC3C,MAAM,GAAG,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,CACL,GAAG,GAAG,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE;QACvE,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,CACnD,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAe,EACf,IAAY,EACZ,QAAgB,EAChB,WAAmB,OAAO,CAAC,GAAG,EAAE;IAEhC,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,aAAa,EAAE,IAAI,IAAI,KAAK,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACvC,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IAE1C,4EAA4E;IAC5E,wEAAwE;IACxE,MAAM,GAAG,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -34,5 +34,9 @@ export declare class PlanNotFoundError extends Error {
|
|
|
34
34
|
*
|
|
35
35
|
* @throws PlanNotFoundError when the plan content cannot be resolved anywhere.
|
|
36
36
|
*/
|
|
37
|
-
export declare function ensurePlanBranch(config: Config, planPath: string, issueName: string, repoRoot?: string
|
|
37
|
+
export declare function ensurePlanBranch(config: Config, planPath: string, issueName: string, repoRoot?: string, opts?: {
|
|
38
|
+
branch?: string;
|
|
39
|
+
baseBranch?: string;
|
|
40
|
+
requireExistingBranch?: boolean;
|
|
41
|
+
}): Promise<EnsurePlanBranchResult>;
|
|
38
42
|
//# sourceMappingURL=PlanBranchService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanBranchService.d.ts","sourceRoot":"","sources":["../../../src/services/plan/PlanBranchService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAMnD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,QAAQ,EAAE,MAAM;CAI7B;AAmCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"PlanBranchService.d.ts","sourceRoot":"","sources":["../../../src/services/plan/PlanBranchService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAMnD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,QAAQ,EAAE,MAAM;CAI7B;AAmCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,EAQjB,IAAI,CAAC,EAAE;IACL,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GACA,OAAO,CAAC,sBAAsB,CAAC,CAsEjC"}
|
|
@@ -54,16 +54,34 @@ async function resolvePlanContent(gitService, relativePath, planFsPath, branch,
|
|
|
54
54
|
*
|
|
55
55
|
* @throws PlanNotFoundError when the plan content cannot be resolved anywhere.
|
|
56
56
|
*/
|
|
57
|
-
export async function ensurePlanBranch(config, planPath, issueName, repoRoot
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
export async function ensurePlanBranch(config, planPath, issueName, repoRoot,
|
|
58
|
+
// Overrides for the launch-from-existing flow (FR 7):
|
|
59
|
+
// branch → publish to this exact branch (unsanitized, may
|
|
60
|
+
// contain `/`), e.g. a PR's head branch.
|
|
61
|
+
// baseBranch → cut the new branch from this ref instead of
|
|
62
|
+
// config.uploadBranch; verified to exist on origin.
|
|
63
|
+
// requireExistingBranch → the branch must already be on origin (a PR's
|
|
64
|
+
// head branch); never create it.
|
|
65
|
+
opts) {
|
|
66
|
+
const branch = opts?.branch ?? sanitizePlanName(issueName);
|
|
67
|
+
const baseBranch = opts?.baseBranch ?? config.uploadBranch ?? 'main';
|
|
60
68
|
const gitService = new GitService(repoRoot);
|
|
61
69
|
const planService = new PlanService(config.planPath);
|
|
62
70
|
const relativePath = planService.getRelativePath(planPath);
|
|
63
71
|
const planFsPath = isAbsolute(planPath) || !repoRoot ? planPath : join(repoRoot, planPath);
|
|
64
72
|
// One fetch up front so every origin/<ref> read below is current.
|
|
65
73
|
await gitService.fetch('origin');
|
|
74
|
+
// An explicit base branch (--base) must exist on origin before we try to
|
|
75
|
+
// cut a new branch from it.
|
|
76
|
+
if (opts?.baseBranch &&
|
|
77
|
+
!(await gitService.remoteBranchExists(opts.baseBranch))) {
|
|
78
|
+
throw new Error(`Base branch '${opts.baseBranch}' not found on origin`);
|
|
79
|
+
}
|
|
66
80
|
const branchOnOrigin = await gitService.remoteBranchExists(branch);
|
|
81
|
+
// A PR's head branch must already be on origin — never create it here.
|
|
82
|
+
if (opts?.requireExistingBranch && !branchOnOrigin) {
|
|
83
|
+
throw new Error(`Branch '${branch}' of the pull request was not found on origin`);
|
|
84
|
+
}
|
|
67
85
|
const content = await resolvePlanContent(gitService, relativePath, planFsPath, branch, branchOnOrigin, baseBranch);
|
|
68
86
|
if (content === null) {
|
|
69
87
|
throw new PlanNotFoundError(planPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlanBranchService.js","sourceRoot":"","sources":["../../../src/services/plan/PlanBranchService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAc/C;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,YAAY,QAAgB;QAC1B,KAAK,CAAC,6CAA6C,QAAQ,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,kBAAkB,CAC/B,UAAsB,EACtB,YAAoB,EACpB,UAAkB,EAClB,MAAc,EACd,cAAuB,EACvB,UAAkB;IAElB,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IACD,IACE,cAAc;QACd,CAAC,MAAM,UAAU,CAAC,eAAe,CAAC,UAAU,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC,EACpE,CAAC;QACD,OAAO,UAAU,CAAC,QAAQ,CAAC,UAAU,MAAM,EAAE,EAAE,YAAY,CAAC,CAAC;IAC/D,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,UAAU,EAAE,EAAE,UAAU,CAAC,EAAE,CAAC;QACvD,IAAI,MAAM,UAAU,CAAC,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,EAAE,CAAC;YACxD,OAAO,UAAU,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,QAAgB,EAChB,SAAiB,EACjB,QAAiB;
|
|
1
|
+
{"version":3,"file":"PlanBranchService.js","sourceRoot":"","sources":["../../../src/services/plan/PlanBranchService.ts"],"names":[],"mappings":"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"}
|
|
@@ -386,6 +386,7 @@ Determine `<issueName>` before asking the question:
|
|
|
386
386
|
- If the slug is **longer than 3 words**, shorten it to the 2–3 most distinctive words (e.g. `auto-launch-offer-after-plan` → `auto-launch`). Otherwise keep it as-is.
|
|
387
387
|
- Always **kebab-case** (lowercase words joined by hyphens), never camelCase — these become git branch names.
|
|
388
388
|
- Example: `.hublaunch/plans/skills/2026-07-09-14:28-auto-launch-offer-after-plan.md` → slug `auto-launch-offer-after-plan` → `<issueName>` = `auto-launch`.
|
|
389
|
+
- **Exception — existing issue or PR:** if `/hula-plan` emitted a `<!-- hula-source: --issue <n> -->` or `<!-- hula-source: --pr <n> -->` comment for this plan, the default is `issue-<n>` or `pr-<n>` instead of the slug.
|
|
389
390
|
|
|
390
391
|
### 2. Ask the launch question
|
|
391
392
|
|
|
@@ -416,7 +417,7 @@ Then **STOP and wait** for the user's reply. Do not launch until they answer.
|
|
|
416
417
|
|
|
417
418
|
### 4. Execute the launch
|
|
418
419
|
|
|
419
|
-
On a clear affirmative, read `.agents/skills/hula-launch/SKILL.md` and execute its workflow with the arguments `<issueName> <planPath>` (plus any `--handoff`/`--test` flags from the reply). Pass the plan path explicitly — it is known in this session — rather than relying on chat-history extraction.
|
|
420
|
+
On a clear affirmative, read `.agents/skills/hula-launch/SKILL.md` and execute its workflow with the arguments `<issueName> <planPath>` (plus any `--handoff`/`--test` flags from the reply, and the `--issue <n>` / `--pr <n>` flag from this plan's `hula-source` comment, if any). Pass the plan path explicitly — it is known in this session — rather than relying on chat-history extraction.
|
|
420
421
|
|
|
421
422
|
Execute that workflow **inline in this session**: read the SKILL.md file and follow its steps directly. Do **not** invoke `hula-launch` (or any other hula skill) through the Skill tool — the hula skills set `disable-model-invocation: true`, so a Skill-tool invocation is rejected with "blocked by disable-model-invocation". Only reading the file and executing its steps works.
|
|
422
423
|
|
|
@@ -296,6 +296,37 @@ No local worktree was involved — PR was merged directly on GitHub.
|
|
|
296
296
|
|
|
297
297
|
---
|
|
298
298
|
|
|
299
|
+
## Step C: Report the Chat's Backlog
|
|
300
|
+
|
|
301
|
+
After presenting the Success Summary (Path A Step A5 or Path B Step B3), check this chat's backlog before finishing.
|
|
302
|
+
|
|
303
|
+
1. **Find the backlog.** Scan this conversation's history for a `<!-- hula-backlog: <key> -->` comment. If none is found, skip this step entirely — say nothing about a backlog.
|
|
304
|
+
2. **Resync to the dashboard (best-effort).** Before reading the file, retry the remote push for any item that couldn't sync earlier (e.g. added during `/hula-plan`, before a tracked `Plan` existed server-side). Resolve `<owner>/<repo>` via `gh repo view --json nameWithOwner -q .nameWithOwner`, then run:
|
|
305
|
+
- Path A (fix session): `hula script backlog-resync -- <key> --project <owner>/<repo> --tracking-name <prBranch>` (use the `prBranch` from the `<!-- hula-fix-session -->` comment resolved in Step 1).
|
|
306
|
+
- Path B (remote-only): `hula script backlog-resync -- <key> --project <owner>/<repo> --issue <issueNumber>` (use the issue number resolved in Step 1).
|
|
307
|
+
|
|
308
|
+
Ignore the output beyond confirming the command ran — a resync failure or a repo not configured for remote (`hulaApiKey`/`hulaProjectUrl`) is expected and must never block the report below. If you can't resolve `<owner>/<repo>`, skip the resync and proceed directly to reading the file.
|
|
309
|
+
3. **Read it.** Read `.hublaunch/.backlogs/<key>.json` directly (no script needed — this is read-only). If the file doesn't exist, or `items` is empty, or every item has `status: "done"`, display:
|
|
310
|
+
```
|
|
311
|
+
📋 No open backlog items for this chat — safe to close or archive.
|
|
312
|
+
```
|
|
313
|
+
4. **If there are open items** (`status: "open"`), display each one with a suggested next action, using judgment to pick the category:
|
|
314
|
+
- Trivial/mechanical and clearly actionable right now in this working tree → suggest doing it now.
|
|
315
|
+
- Requires a decision, credential, or external action only the user can take → state exactly what the user needs to do.
|
|
316
|
+
- A substantial independent feature/change → suggest a new chat, and offer the exact prompt: `/hula-plan <2-3 sentence restatement of the item as a goal>`.
|
|
317
|
+
|
|
318
|
+
```
|
|
319
|
+
📋 This chat has N open backlog item(s):
|
|
320
|
+
|
|
321
|
+
1. <item text>
|
|
322
|
+
→ <suggested next action, phrased per the category above>
|
|
323
|
+
|
|
324
|
+
2. <item text>
|
|
325
|
+
→ <suggested next action>
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
---
|
|
329
|
+
|
|
299
330
|
## Error Handling
|
|
300
331
|
|
|
301
332
|
### Merge Conflicts
|
|
@@ -63,6 +63,16 @@ Example: /hula-fix YizYah/hub-launch#42 the button validation is broken
|
|
|
63
63
|
|
|
64
64
|
Stop execution here. Do not proceed.
|
|
65
65
|
|
|
66
|
+
### Step 1.5: Create the Chat Backlog (if not already created)
|
|
67
|
+
|
|
68
|
+
If you have not already created a backlog for this chat, create one now — the same mechanism `/hula-plan` uses.
|
|
69
|
+
|
|
70
|
+
1. Scan this conversation's history for a prior `<!-- hula-backlog: <key> -->` comment. If found, reuse it.
|
|
71
|
+
2. If none found: generate `<key>` (`bl-` + 8 lowercase base-36 characters), run `hula script backlog-init -- <key>`, and emit `<!-- hula-backlog: <key> -->` in this response's output. If the script reports an error, log a one-line warning and continue.
|
|
72
|
+
3. Whenever something surfaces during this fix that should be tracked but is not part of the fix itself, run `hula script backlog-add -- <key> "<one-line item text>" --project <owner>/<repo> --issue <issueNumber>` and continue silently.
|
|
73
|
+
- `<issueNumber>` is the issue detected in Step 1. `<owner>/<repo>` comes from `gh repo view --json nameWithOwner -q .nameWithOwner`. (The branch/tracking name isn't known yet at this point in a fix, so identify the plan by issue number.)
|
|
74
|
+
- The `--project`/`--issue` args let the item sync to the `hula-project` dashboard when the repo is configured for remote (`hulaApiKey` + `hulaProjectUrl`). They're optional: if you can't resolve `<owner>/<repo>`, omit them and just run `hula script backlog-add -- <key> "<one-line item text>"` — the local backlog still works, and any unsynced item is retried automatically at `/hula-approve` time.
|
|
75
|
+
|
|
66
76
|
### Step 2: Setup Worktree and Session (Script)
|
|
67
77
|
|
|
68
78
|
Run the setup script — it handles issue lookup, validation, worktree creation, and session file writing in one terminal approval:
|