@gh-symphony/cli 0.2.2 → 0.2.4
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/dist/{chunk-27UZ6KX2.js → chunk-7Z7WYGDL.js} +1 -1
- package/dist/{chunk-6PFFGP7S.js → chunk-DLZ2XHWY.js} +0 -3
- package/dist/{chunk-X4QSP3AX.js → chunk-NRABQNAX.js} +78 -21
- package/dist/{doctor-GDZSGJIT.js → doctor-MD4MD6SZ.js} +2 -2
- package/dist/index.js +15 -12
- package/dist/{repo-SWEUWY4H.js → repo-CK2IDMZF.js} +12 -5
- package/dist/{setup-XNOSJ3RX.js → setup-KZ3U53PY.js} +6 -19
- package/dist/{upgrade-ZWUAJLHK.js → upgrade-2WPPOUZL.js} +2 -2
- package/dist/{version-PLQK6X2P.js → version-Z2T42H5M.js} +1 -1
- package/dist/{workflow-2ERPNGRB.js → workflow-7Y6GTV2C.js} +2 -2
- package/package.json +5 -5
|
@@ -68,9 +68,6 @@ async function initRepoRuntime(flags) {
|
|
|
68
68
|
...trackerAdapter === "linear" ? { activeStates: workflow.tracker.activeStates.join("\n") } : {},
|
|
69
69
|
repository: `${repository.owner}/${repository.name}`
|
|
70
70
|
};
|
|
71
|
-
if (flags.assignedOnly) {
|
|
72
|
-
trackerSettings.assignedOnly = true;
|
|
73
|
-
}
|
|
74
71
|
if (workflow.tracker.priorityFieldName) {
|
|
75
72
|
trackerSettings.priorityFieldName = workflow.tracker.priorityFieldName;
|
|
76
73
|
}
|
|
@@ -1545,11 +1545,12 @@ function resolveGitHubTrackerConfig(project, dependencies = {}) {
|
|
|
1545
1545
|
);
|
|
1546
1546
|
}
|
|
1547
1547
|
const githubProjectId = requireTrackerSetting(project.tracker, "projectId");
|
|
1548
|
+
const assignedOnly = resolveAssignedOnly(project.tracker, dependencies);
|
|
1548
1549
|
return {
|
|
1549
1550
|
projectId: githubProjectId,
|
|
1550
1551
|
token,
|
|
1551
1552
|
apiUrl: project.tracker.apiUrl,
|
|
1552
|
-
assignedOnly
|
|
1553
|
+
assignedOnly,
|
|
1553
1554
|
priority: project.tracker.priority ?? null,
|
|
1554
1555
|
priorityFieldName: readOptionalStringTrackerSetting(
|
|
1555
1556
|
project.tracker,
|
|
@@ -1558,6 +1559,26 @@ function resolveGitHubTrackerConfig(project, dependencies = {}) {
|
|
|
1558
1559
|
timeoutMs: readNumberTrackerSetting(project.tracker, "timeoutMs")
|
|
1559
1560
|
};
|
|
1560
1561
|
}
|
|
1562
|
+
var warnedLegacyAssignedOnlyProjectIds = /* @__PURE__ */ new Set();
|
|
1563
|
+
function resolveAssignedOnly(tracker, dependencies) {
|
|
1564
|
+
if (dependencies.assignedOnly !== void 0) {
|
|
1565
|
+
return dependencies.assignedOnly;
|
|
1566
|
+
}
|
|
1567
|
+
const legacyAssignedOnly = readBooleanTrackerSetting(
|
|
1568
|
+
tracker,
|
|
1569
|
+
"assignedOnly"
|
|
1570
|
+
);
|
|
1571
|
+
if (legacyAssignedOnly) {
|
|
1572
|
+
const warningKey = `${tracker.adapter}:${tracker.bindingId}`;
|
|
1573
|
+
if (!warnedLegacyAssignedOnlyProjectIds.has(warningKey)) {
|
|
1574
|
+
warnedLegacyAssignedOnlyProjectIds.add(warningKey);
|
|
1575
|
+
console.warn(
|
|
1576
|
+
"[gh-symphony] Deprecated tracker.settings.assignedOnly detected. Use 'gh-symphony repo start --assigned-only' instead; persisted assignedOnly support will be removed in the next major release."
|
|
1577
|
+
);
|
|
1578
|
+
}
|
|
1579
|
+
}
|
|
1580
|
+
return legacyAssignedOnly;
|
|
1581
|
+
}
|
|
1561
1582
|
function buildProjectItemsCacheKey(config, _dependencies) {
|
|
1562
1583
|
return JSON.stringify({
|
|
1563
1584
|
adapter: "github-project",
|
|
@@ -1789,18 +1810,14 @@ var LINEAR_ISSUES_BY_STATES_QUERY = (
|
|
|
1789
1810
|
/* GraphQL */
|
|
1790
1811
|
`
|
|
1791
1812
|
query SymphonyLinearIssues(
|
|
1792
|
-
$
|
|
1793
|
-
$stateNames: [String!]!
|
|
1813
|
+
$filter: IssueFilter!
|
|
1794
1814
|
$first: Int!
|
|
1795
1815
|
$after: String
|
|
1796
1816
|
) {
|
|
1797
1817
|
issues(
|
|
1798
1818
|
first: $first
|
|
1799
1819
|
after: $after
|
|
1800
|
-
filter:
|
|
1801
|
-
project: { slugId: { eq: $projectSlug } }
|
|
1802
|
-
state: { name: { in: $stateNames } }
|
|
1803
|
-
}
|
|
1820
|
+
filter: $filter
|
|
1804
1821
|
) {
|
|
1805
1822
|
${LINEAR_ISSUE_FIELDS}
|
|
1806
1823
|
}
|
|
@@ -1811,18 +1828,14 @@ var LINEAR_ISSUES_BY_IDS_QUERY = (
|
|
|
1811
1828
|
/* GraphQL */
|
|
1812
1829
|
`
|
|
1813
1830
|
query SymphonyLinearIssueStates(
|
|
1814
|
-
$
|
|
1815
|
-
$issueIds: [ID!]!
|
|
1831
|
+
$filter: IssueFilter!
|
|
1816
1832
|
$first: Int!
|
|
1817
1833
|
$after: String
|
|
1818
1834
|
) {
|
|
1819
1835
|
issues(
|
|
1820
1836
|
first: $first
|
|
1821
1837
|
after: $after
|
|
1822
|
-
filter:
|
|
1823
|
-
project: { slugId: { eq: $projectSlug } }
|
|
1824
|
-
id: { in: $issueIds }
|
|
1825
|
-
}
|
|
1838
|
+
filter: $filter
|
|
1826
1839
|
) {
|
|
1827
1840
|
${LINEAR_ISSUE_FIELDS}
|
|
1828
1841
|
}
|
|
@@ -1833,18 +1846,14 @@ var LINEAR_ISSUES_BY_IDENTIFIERS_QUERY = (
|
|
|
1833
1846
|
/* GraphQL */
|
|
1834
1847
|
`
|
|
1835
1848
|
query SymphonyLinearIssueStatesByIdentifier(
|
|
1836
|
-
$
|
|
1837
|
-
$issueIdentifiers: [String!]!
|
|
1849
|
+
$filter: IssueFilter!
|
|
1838
1850
|
$first: Int!
|
|
1839
1851
|
$after: String
|
|
1840
1852
|
) {
|
|
1841
1853
|
issues(
|
|
1842
1854
|
first: $first
|
|
1843
1855
|
after: $after
|
|
1844
|
-
filter:
|
|
1845
|
-
project: { slugId: { eq: $projectSlug } }
|
|
1846
|
-
identifier: { in: $issueIdentifiers }
|
|
1847
|
-
}
|
|
1856
|
+
filter: $filter
|
|
1848
1857
|
) {
|
|
1849
1858
|
${LINEAR_ISSUE_FIELDS}
|
|
1850
1859
|
}
|
|
@@ -1919,6 +1928,7 @@ async function listLinearIssues(project, stateNamesInput, dependencies, issueIds
|
|
|
1919
1928
|
stateNames,
|
|
1920
1929
|
issueIds: issueIds && !issueIds.every(isLinearIdentifier) ? [...issueIds] : void 0,
|
|
1921
1930
|
issueIdentifiers: issueIds && issueIds.every(isLinearIdentifier) ? issueIds.map((identifier) => identifier.trim().toUpperCase()) : void 0,
|
|
1931
|
+
assignedOnly: config.assignedOnly,
|
|
1922
1932
|
pageSize: config.pageSize
|
|
1923
1933
|
});
|
|
1924
1934
|
const issues = result.nodes.map(
|
|
@@ -1930,6 +1940,12 @@ async function listLinearIssues(project, stateNamesInput, dependencies, issueIds
|
|
|
1930
1940
|
value: result.rateLimits,
|
|
1931
1941
|
writable: true
|
|
1932
1942
|
});
|
|
1943
|
+
if (config.assignedOnly) {
|
|
1944
|
+
emitAssignedOnlyFilterEvent2({
|
|
1945
|
+
projectSlug: config.projectSlug,
|
|
1946
|
+
includedCount: issues.length
|
|
1947
|
+
});
|
|
1948
|
+
}
|
|
1933
1949
|
return issues;
|
|
1934
1950
|
}
|
|
1935
1951
|
async function fetchPaginatedLinearIssues(client, input) {
|
|
@@ -1939,8 +1955,7 @@ async function fetchPaginatedLinearIssues(client, input) {
|
|
|
1939
1955
|
do {
|
|
1940
1956
|
const query = input.issueIdentifiers ? LINEAR_ISSUES_BY_IDENTIFIERS_QUERY : input.issueIds ? LINEAR_ISSUES_BY_IDS_QUERY : LINEAR_ISSUES_BY_STATES_QUERY;
|
|
1941
1957
|
const response = await client(query, {
|
|
1942
|
-
|
|
1943
|
-
...input.issueIdentifiers ? { issueIdentifiers: input.issueIdentifiers } : input.issueIds ? { issueIds: input.issueIds } : { stateNames: input.stateNames ?? [] },
|
|
1958
|
+
filter: buildLinearIssueFilter(input),
|
|
1944
1959
|
first: input.pageSize,
|
|
1945
1960
|
after
|
|
1946
1961
|
});
|
|
@@ -1954,6 +1969,13 @@ async function fetchPaginatedLinearIssues(client, input) {
|
|
|
1954
1969
|
rateLimits: latestRateLimits
|
|
1955
1970
|
};
|
|
1956
1971
|
}
|
|
1972
|
+
function buildLinearIssueFilter(input) {
|
|
1973
|
+
return {
|
|
1974
|
+
project: { slugId: { eq: input.projectSlug } },
|
|
1975
|
+
...input.issueIdentifiers ? { identifier: { in: input.issueIdentifiers } } : input.issueIds ? { id: { in: input.issueIds } } : { state: { name: { in: input.stateNames ?? [] } } },
|
|
1976
|
+
...input.assignedOnly ? { assignee: { isMe: { eq: true } } } : {}
|
|
1977
|
+
};
|
|
1978
|
+
}
|
|
1957
1979
|
function isLinearIdentifier(value) {
|
|
1958
1980
|
const trimmed = value.trim();
|
|
1959
1981
|
return trimmed === trimmed.toUpperCase() && LINEAR_IDENTIFIER_PATTERN.test(trimmed);
|
|
@@ -2076,11 +2098,29 @@ function resolveLinearTrackerConfig(project, dependencies) {
|
|
|
2076
2098
|
}
|
|
2077
2099
|
return {
|
|
2078
2100
|
endpoint: resolveLinearEndpoint(project.tracker),
|
|
2101
|
+
assignedOnly: resolveAssignedOnly2(project.tracker, dependencies),
|
|
2079
2102
|
pageSize: readPositiveIntegerSetting(project.tracker, "pageSize") ?? DEFAULT_PAGE_SIZE2,
|
|
2080
2103
|
projectSlug,
|
|
2081
2104
|
token
|
|
2082
2105
|
};
|
|
2083
2106
|
}
|
|
2107
|
+
var warnedLegacyAssignedOnlyProjectIds2 = /* @__PURE__ */ new Set();
|
|
2108
|
+
function resolveAssignedOnly2(tracker, dependencies) {
|
|
2109
|
+
if (dependencies.assignedOnly !== void 0) {
|
|
2110
|
+
return dependencies.assignedOnly;
|
|
2111
|
+
}
|
|
2112
|
+
const legacyAssignedOnly = readBooleanSetting(tracker, "assignedOnly");
|
|
2113
|
+
if (legacyAssignedOnly) {
|
|
2114
|
+
const warningKey = `${tracker.adapter}:${tracker.bindingId}`;
|
|
2115
|
+
if (!warnedLegacyAssignedOnlyProjectIds2.has(warningKey)) {
|
|
2116
|
+
warnedLegacyAssignedOnlyProjectIds2.add(warningKey);
|
|
2117
|
+
console.warn(
|
|
2118
|
+
"[gh-symphony] Deprecated tracker.settings.assignedOnly detected. Use 'gh-symphony repo start --assigned-only' instead; persisted assignedOnly support will be removed in the next major release."
|
|
2119
|
+
);
|
|
2120
|
+
}
|
|
2121
|
+
}
|
|
2122
|
+
return legacyAssignedOnly;
|
|
2123
|
+
}
|
|
2084
2124
|
function resolveLinearEndpoint(tracker) {
|
|
2085
2125
|
return tracker.apiUrl?.trim() || DEFAULT_LINEAR_GRAPHQL_URL2;
|
|
2086
2126
|
}
|
|
@@ -2111,6 +2151,10 @@ function readPositiveIntegerSetting(tracker, key) {
|
|
|
2111
2151
|
`Tracker adapter "${tracker.adapter}" requires the "${key}" setting to be a positive integer when provided.`
|
|
2112
2152
|
);
|
|
2113
2153
|
}
|
|
2154
|
+
function readBooleanSetting(tracker, key) {
|
|
2155
|
+
const value = tracker.settings?.[key];
|
|
2156
|
+
return value === true || value === "true";
|
|
2157
|
+
}
|
|
2114
2158
|
function readStringArray(value) {
|
|
2115
2159
|
if (value === void 0) {
|
|
2116
2160
|
return void 0;
|
|
@@ -2123,6 +2167,18 @@ function readStringArray(value) {
|
|
|
2123
2167
|
}
|
|
2124
2168
|
return value.filter((entry) => typeof entry === "string");
|
|
2125
2169
|
}
|
|
2170
|
+
function emitAssignedOnlyFilterEvent2(input) {
|
|
2171
|
+
console.info(
|
|
2172
|
+
JSON.stringify({
|
|
2173
|
+
event: "tracker-assigned-only-filtered",
|
|
2174
|
+
tracker: "linear",
|
|
2175
|
+
projectSlug: input.projectSlug,
|
|
2176
|
+
assigneeFilter: "isMe",
|
|
2177
|
+
includedCount: input.includedCount,
|
|
2178
|
+
excludedCount: null
|
|
2179
|
+
})
|
|
2180
|
+
);
|
|
2181
|
+
}
|
|
2126
2182
|
function requireString(value, label) {
|
|
2127
2183
|
if (typeof value !== "string" || value.length === 0) {
|
|
2128
2184
|
throw new Error(`${label} is required.`);
|
|
@@ -4053,6 +4109,7 @@ var OrchestratorService = class {
|
|
|
4053
4109
|
}
|
|
4054
4110
|
createTrackerDependencies() {
|
|
4055
4111
|
return {
|
|
4112
|
+
assignedOnly: this.dependencies.assignedOnly,
|
|
4056
4113
|
fetchImpl: this.dependencies.fetchImpl,
|
|
4057
4114
|
projectItemsCache: createProjectItemsCache()
|
|
4058
4115
|
};
|
|
@@ -5,13 +5,13 @@ import {
|
|
|
5
5
|
parseIssueReference,
|
|
6
6
|
readGitHubProjectBinding,
|
|
7
7
|
renderIssueWorkflowPreview
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-7Z7WYGDL.js";
|
|
9
9
|
import "./chunk-PLBG7TZA.js";
|
|
10
10
|
import {
|
|
11
11
|
fetchGithubProjectIssueByRepositoryAndNumber,
|
|
12
12
|
fetchGithubProjectIssues,
|
|
13
13
|
inspectManagedProjectSelection
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-NRABQNAX.js";
|
|
15
15
|
import "./chunk-FAU72YC2.js";
|
|
16
16
|
import {
|
|
17
17
|
resolveRuntimeRoot
|
package/dist/index.js
CHANGED
|
@@ -60,7 +60,6 @@ var COMMAND_OPTIONS = {
|
|
|
60
60
|
"workflow:preview": ["--file", "--sample", "--attempt", ...GLOBAL_OPTIONS],
|
|
61
61
|
setup: [
|
|
62
62
|
"--non-interactive",
|
|
63
|
-
"--assigned-only",
|
|
64
63
|
"--output",
|
|
65
64
|
"--skip-skills",
|
|
66
65
|
"--skip-context",
|
|
@@ -77,7 +76,7 @@ var COMMAND_OPTIONS = {
|
|
|
77
76
|
upgrade: [...GLOBAL_OPTIONS],
|
|
78
77
|
repo: ["init", "start", "status", "stop", "run", "recover", "logs", "explain"],
|
|
79
78
|
"repo:init": ["--repo-dir", "--workflow-file", ...GLOBAL_OPTIONS],
|
|
80
|
-
"repo:start": ["--daemon", "-d", "--once", "--http", "--web", "--log-level", ...GLOBAL_OPTIONS],
|
|
79
|
+
"repo:start": ["--daemon", "-d", "--once", "--assigned-only", "--http", "--web", "--log-level", ...GLOBAL_OPTIONS],
|
|
81
80
|
"repo:status": ["--watch", "-w", ...GLOBAL_OPTIONS],
|
|
82
81
|
"repo:stop": ["--force", ...GLOBAL_OPTIONS],
|
|
83
82
|
"repo:run": ["--watch", ...GLOBAL_OPTIONS],
|
|
@@ -234,7 +233,7 @@ ${bashFunction}complete -F _gh_symphony_completion gh-symphony
|
|
|
234
233
|
}
|
|
235
234
|
|
|
236
235
|
// src/commands/help.ts
|
|
237
|
-
var DESCRIPTION_COLUMN =
|
|
236
|
+
var DESCRIPTION_COLUMN = 30;
|
|
238
237
|
var COMMAND_COLUMN_WIDTH = DESCRIPTION_COLUMN - 2;
|
|
239
238
|
var HELP_SECTIONS = [
|
|
240
239
|
{
|
|
@@ -289,6 +288,10 @@ var HELP_SECTIONS = [
|
|
|
289
288
|
name: "repo start --daemon",
|
|
290
289
|
description: "Start the orchestrator in the background"
|
|
291
290
|
},
|
|
291
|
+
{
|
|
292
|
+
name: "repo start --assigned-only",
|
|
293
|
+
description: "Process only issues assigned to the authenticated user"
|
|
294
|
+
},
|
|
292
295
|
{
|
|
293
296
|
name: "repo stop",
|
|
294
297
|
description: "Stop the background orchestrator"
|
|
@@ -414,13 +417,13 @@ function createRemovedCommandHandler(message) {
|
|
|
414
417
|
|
|
415
418
|
// src/index.ts
|
|
416
419
|
var COMMANDS = {
|
|
417
|
-
workflow: () => import("./workflow-
|
|
418
|
-
setup: () => import("./setup-
|
|
419
|
-
doctor: () => import("./doctor-
|
|
420
|
-
upgrade: () => import("./upgrade-
|
|
421
|
-
repo: () => import("./repo-
|
|
420
|
+
workflow: () => import("./workflow-7Y6GTV2C.js"),
|
|
421
|
+
setup: () => import("./setup-KZ3U53PY.js"),
|
|
422
|
+
doctor: () => import("./doctor-MD4MD6SZ.js"),
|
|
423
|
+
upgrade: () => import("./upgrade-2WPPOUZL.js"),
|
|
424
|
+
repo: () => import("./repo-CK2IDMZF.js"),
|
|
422
425
|
config: () => import("./config-cmd-AOZVS6GU.js"),
|
|
423
|
-
version: () => import("./version-
|
|
426
|
+
version: () => import("./version-Z2T42H5M.js")
|
|
424
427
|
};
|
|
425
428
|
function addGlobalOptions(command) {
|
|
426
429
|
return command.option("--config <dir>", "Config directory").addOption(new Option("--config-dir <dir>").hideHelp()).option("-v, --verbose", "Enable verbose output").option("--json", "Output in JSON format").option("--no-color", "Disable color output");
|
|
@@ -562,13 +565,12 @@ function createProgram() {
|
|
|
562
565
|
await invokeHandler("workflow", args, values);
|
|
563
566
|
});
|
|
564
567
|
addGlobalOptions(
|
|
565
|
-
program.command("setup").description("Run the one-command first-run setup flow").option("--non-interactive", "Run without prompts").option("--
|
|
568
|
+
program.command("setup").description("Run the one-command first-run setup flow").option("--non-interactive", "Run without prompts").option("--output <path>", "Write WORKFLOW.md to a custom path").option("--skip-skills", "Skip runtime skill generation").option("--skip-context", "Skip .gh-symphony/context.yaml generation").allowExcessArguments(false)
|
|
566
569
|
).action(async function() {
|
|
567
570
|
markInvoked();
|
|
568
571
|
const values = this.optsWithGlobals();
|
|
569
572
|
const args = [];
|
|
570
573
|
pushOption(args, "--non-interactive", values.nonInteractive);
|
|
571
|
-
pushOption(args, "--assigned-only", values.assignedOnly);
|
|
572
574
|
pushOption(args, "--output", values.output);
|
|
573
575
|
pushOption(args, "--skip-skills", values.skipSkills);
|
|
574
576
|
pushOption(args, "--skip-context", values.skipContext);
|
|
@@ -700,7 +702,7 @@ function createProgram() {
|
|
|
700
702
|
await invokeHandler("repo", args, values);
|
|
701
703
|
});
|
|
702
704
|
addGlobalOptions(
|
|
703
|
-
repo.command("start").description("Start the orchestrator for the current repository").option("-d, --daemon", "Start in daemon mode").option("--once", "Run a single orchestration tick and exit").option(
|
|
705
|
+
repo.command("start").description("Start the orchestrator for the current repository").option("-d, --daemon", "Start in daemon mode").option("--once", "Run a single orchestration tick and exit").option("--assigned-only", "Limit this run to assigned issues").option(
|
|
704
706
|
"--http [port]",
|
|
705
707
|
"Expose dashboard and refresh endpoints over HTTP"
|
|
706
708
|
).option(
|
|
@@ -713,6 +715,7 @@ function createProgram() {
|
|
|
713
715
|
const args = ["start", ...this.args];
|
|
714
716
|
pushOption(args, "--daemon", values.daemon);
|
|
715
717
|
pushOption(args, "--once", values.once);
|
|
718
|
+
pushOption(args, "--assigned-only", values.assignedOnly);
|
|
716
719
|
pushOption(args, "--http", values.http);
|
|
717
720
|
pushOption(args, "--web", values.web);
|
|
718
721
|
pushOption(args, "--log-level", values.logLevel);
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
import {
|
|
18
18
|
initRepoRuntime,
|
|
19
19
|
parseRepoRuntimeFlags
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-DLZ2XHWY.js";
|
|
21
21
|
import {
|
|
22
22
|
OrchestratorService,
|
|
23
23
|
acquireProjectLock,
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
resolveOrchestratorLogLevel,
|
|
34
34
|
resolveTrackerAdapter,
|
|
35
35
|
runCli
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-NRABQNAX.js";
|
|
37
37
|
import "./chunk-FAU72YC2.js";
|
|
38
38
|
import {
|
|
39
39
|
resolveRepoRuntimeRoot,
|
|
@@ -1454,6 +1454,10 @@ function parseStartArgs(args) {
|
|
|
1454
1454
|
parsed.once = true;
|
|
1455
1455
|
continue;
|
|
1456
1456
|
}
|
|
1457
|
+
if (arg === "--assigned-only") {
|
|
1458
|
+
parsed.assignedOnly = true;
|
|
1459
|
+
continue;
|
|
1460
|
+
}
|
|
1457
1461
|
if (arg === "--http") {
|
|
1458
1462
|
const value = args[i + 1];
|
|
1459
1463
|
if (!value || value.startsWith("-")) {
|
|
@@ -1716,7 +1720,7 @@ var handler5 = async (args, options) => {
|
|
|
1716
1720
|
process.stderr.write(`${parsed.error}
|
|
1717
1721
|
`);
|
|
1718
1722
|
process.stderr.write(
|
|
1719
|
-
"Usage: gh-symphony repo start [--daemon] [--once] [--http [port]] [--web [port]]\n"
|
|
1723
|
+
"Usage: gh-symphony repo start [--daemon] [--once] [--assigned-only] [--http [port]] [--web [port]]\n"
|
|
1720
1724
|
);
|
|
1721
1725
|
process.exitCode = 2;
|
|
1722
1726
|
return;
|
|
@@ -1764,7 +1768,8 @@ var handler5 = async (args, options) => {
|
|
|
1764
1768
|
projectId,
|
|
1765
1769
|
parsed.logLevel,
|
|
1766
1770
|
parsed.httpPort,
|
|
1767
|
-
parsed.webPort
|
|
1771
|
+
parsed.webPort,
|
|
1772
|
+
parsed.assignedOnly === true
|
|
1768
1773
|
);
|
|
1769
1774
|
return;
|
|
1770
1775
|
}
|
|
@@ -1786,6 +1791,7 @@ var handler5 = async (args, options) => {
|
|
|
1786
1791
|
let isFirst = true;
|
|
1787
1792
|
const service = new OrchestratorService(store, projectConfig, {
|
|
1788
1793
|
logLevel,
|
|
1794
|
+
assignedOnly: parsed.assignedOnly,
|
|
1789
1795
|
onTick: async (snapshot) => {
|
|
1790
1796
|
try {
|
|
1791
1797
|
logTickResult(snapshot, prevSnapshot, isFirst);
|
|
@@ -2018,7 +2024,7 @@ async function tailWorkerLog(runtimeRoot, projectId, runId, issueIdentifier) {
|
|
|
2018
2024
|
}
|
|
2019
2025
|
}
|
|
2020
2026
|
var start_default = handler5;
|
|
2021
|
-
async function startDaemon(options, projectId, logLevel, httpPort, webPort) {
|
|
2027
|
+
async function startDaemon(options, projectId, logLevel, httpPort, webPort, assignedOnly = false) {
|
|
2022
2028
|
const logPath = orchestratorLogPath(options.configDir, projectId);
|
|
2023
2029
|
await mkdir(dirname2(logPath), { recursive: true });
|
|
2024
2030
|
const { openSync } = await import("fs");
|
|
@@ -2029,6 +2035,7 @@ async function startDaemon(options, projectId, logLevel, httpPort, webPort) {
|
|
|
2029
2035
|
process.argv[1],
|
|
2030
2036
|
"repo",
|
|
2031
2037
|
"start",
|
|
2038
|
+
...assignedOnly ? ["--assigned-only"] : [],
|
|
2032
2039
|
...httpPort !== void 0 ? ["--http", String(httpPort)] : [],
|
|
2033
2040
|
...webPort !== void 0 ? ["--web", String(webPort)] : [],
|
|
2034
2041
|
...logLevel ? ["--log-level", logLevel] : []
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
} from "./chunk-PLBG7TZA.js";
|
|
16
16
|
import {
|
|
17
17
|
initRepoRuntime
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-DLZ2XHWY.js";
|
|
19
19
|
import "./chunk-RZ3WO7OV.js";
|
|
20
20
|
import {
|
|
21
21
|
GhAuthError,
|
|
@@ -48,9 +48,6 @@ function parseSetupFlags(args) {
|
|
|
48
48
|
case "--non-interactive":
|
|
49
49
|
flags.nonInteractive = true;
|
|
50
50
|
break;
|
|
51
|
-
case "--assigned-only":
|
|
52
|
-
flags.assignedOnly = true;
|
|
53
|
-
break;
|
|
54
51
|
case "--output":
|
|
55
52
|
flags.output = next;
|
|
56
53
|
i += 1;
|
|
@@ -64,7 +61,7 @@ function parseSetupFlags(args) {
|
|
|
64
61
|
default:
|
|
65
62
|
if (arg?.startsWith("-")) {
|
|
66
63
|
throw new Error(
|
|
67
|
-
`Unknown option '${arg}'. Removed project/workspace flags are no longer supported; run 'gh-symphony setup' from inside the target repository. Supported flags: --non-interactive, --
|
|
64
|
+
`Unknown option '${arg}'. Removed project/workspace flags are no longer supported; run 'gh-symphony setup' from inside the target repository. Supported flags: --non-interactive, --output, --skip-skills, --skip-context.`
|
|
68
65
|
);
|
|
69
66
|
}
|
|
70
67
|
}
|
|
@@ -249,8 +246,7 @@ Run setup without --non-interactive for manual mapping.
|
|
|
249
246
|
});
|
|
250
247
|
const runtime = await initRepoRuntime({
|
|
251
248
|
repoDir: process.cwd(),
|
|
252
|
-
workflowFile: workflowPath
|
|
253
|
-
assignedOnly: flags.assignedOnly
|
|
249
|
+
workflowFile: workflowPath
|
|
254
250
|
});
|
|
255
251
|
if (options.json) {
|
|
256
252
|
process.stdout.write(
|
|
@@ -343,7 +339,7 @@ async function runInteractive(flags, _options) {
|
|
|
343
339
|
projectDetail.linkedRepositories
|
|
344
340
|
);
|
|
345
341
|
const mappings = await promptStateMappings(statusField, {
|
|
346
|
-
stepLabel: "Step 2/
|
|
342
|
+
stepLabel: "Step 2/3"
|
|
347
343
|
});
|
|
348
344
|
const workflowValidation = validateStateMapping(mappings);
|
|
349
345
|
if (!workflowValidation.valid) {
|
|
@@ -360,15 +356,8 @@ async function runInteractive(flags, _options) {
|
|
|
360
356
|
const { priority, priorityField } = await promptPriorityConfig({
|
|
361
357
|
priorityResolution,
|
|
362
358
|
labelNames: priorityLabelNames,
|
|
363
|
-
stepLabel: "Step 3/
|
|
359
|
+
stepLabel: "Step 3/3"
|
|
364
360
|
});
|
|
365
|
-
const promptAssignedOnly = await abortIfCancelled(
|
|
366
|
-
p.confirm({
|
|
367
|
-
message: `${"Step 4/4"} \u2014 Only process issues assigned to the authenticated GitHub user?`,
|
|
368
|
-
initialValue: flags.assignedOnly ?? false
|
|
369
|
-
})
|
|
370
|
-
);
|
|
371
|
-
const assignedOnly = flags.assignedOnly || promptAssignedOnly;
|
|
372
361
|
const workflowPath = resolve(flags.output ?? "WORKFLOW.md");
|
|
373
362
|
const { workflowPlan, ecosystemPlan } = await planWorkflowArtifacts({
|
|
374
363
|
cwd: process.cwd(),
|
|
@@ -388,7 +377,6 @@ async function runInteractive(flags, _options) {
|
|
|
388
377
|
`GitHub Project: ${projectDetail.title}`,
|
|
389
378
|
`Authenticated: ${login}`,
|
|
390
379
|
`Repository: current working directory`,
|
|
391
|
-
`Assigned: ${assignedOnly ? `Only issues assigned to ${login}` : "All project issues"}`,
|
|
392
380
|
"",
|
|
393
381
|
renderDryRunPreview(workflowPath, workflowPlan, ecosystemPlan).trimEnd()
|
|
394
382
|
].join("\n"),
|
|
@@ -419,8 +407,7 @@ async function runInteractive(flags, _options) {
|
|
|
419
407
|
});
|
|
420
408
|
const runtime = await initRepoRuntime({
|
|
421
409
|
repoDir: process.cwd(),
|
|
422
|
-
workflowFile: workflowPath
|
|
423
|
-
assignedOnly
|
|
410
|
+
workflowFile: workflowPath
|
|
424
411
|
});
|
|
425
412
|
writeSpinner.stop(`Setup saved for ${runtime.repository.owner}/${runtime.repository.name}.`);
|
|
426
413
|
} catch (error) {
|
|
@@ -16,8 +16,8 @@ function execFileAsync(file, args, execFileImpl = execFileCallback) {
|
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
function resolveCurrentCliVersion() {
|
|
19
|
-
if ("0.2.
|
|
20
|
-
return "0.2.
|
|
19
|
+
if ("0.2.4".length > 0) {
|
|
20
|
+
return "0.2.4";
|
|
21
21
|
}
|
|
22
22
|
const pkg = JSON.parse(
|
|
23
23
|
readFileSync(new URL("../../package.json", import.meta.url), "utf8")
|
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
resetWorkflowCommandDependenciesForTest,
|
|
7
7
|
setWorkflowCommandDependenciesForTest,
|
|
8
8
|
workflow_default
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-7Z7WYGDL.js";
|
|
10
10
|
import "./chunk-PLBG7TZA.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-NRABQNAX.js";
|
|
12
12
|
import "./chunk-FAU72YC2.js";
|
|
13
13
|
import "./chunk-BOM2BYZQ.js";
|
|
14
14
|
import "./chunk-3SKN5L3I.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gh-symphony/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "hojinzs",
|
|
6
6
|
"description": "Interactive CLI for GitHub Symphony orchestration",
|
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"tsup": "^8.5.1",
|
|
44
|
+
"@gh-symphony/control-plane": "0.0.15",
|
|
44
45
|
"@gh-symphony/core": "0.0.14",
|
|
45
46
|
"@gh-symphony/orchestrator": "0.0.14",
|
|
46
|
-
"@gh-symphony/control-plane": "0.0.15",
|
|
47
|
-
"@gh-symphony/runtime-claude": "0.0.14",
|
|
48
|
-
"@gh-symphony/tracker-github": "0.0.14",
|
|
49
47
|
"@gh-symphony/dashboard": "0.0.14",
|
|
50
|
-
"@gh-symphony/
|
|
48
|
+
"@gh-symphony/runtime-claude": "0.0.14",
|
|
49
|
+
"@gh-symphony/worker": "0.0.14",
|
|
50
|
+
"@gh-symphony/tracker-github": "0.0.14"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"build": "tsup",
|