lorenz 0.1.6 → 0.1.8
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/RELEASE-MANIFEST.json +1 -1
- package/node_modules/@lorenz/cli/dist/daemon.d.ts.map +1 -1
- package/node_modules/@lorenz/cli/dist/daemon.js +2 -5
- package/node_modules/@lorenz/cli/dist/daemon.js.map +1 -1
- package/node_modules/@lorenz/cli/dist/trackerLoader.js +1 -1
- package/node_modules/@lorenz/cli/dist/trackerLoader.js.map +1 -1
- package/node_modules/@lorenz/domain/dist/index.d.ts +3 -4
- package/node_modules/@lorenz/domain/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/domain/dist/index.js.map +1 -1
- package/node_modules/@lorenz/jira-tracker/dist/index.d.ts +1 -0
- package/node_modules/@lorenz/jira-tracker/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/jira-tracker/dist/index.js +1 -0
- package/node_modules/@lorenz/jira-tracker/dist/index.js.map +1 -1
- package/node_modules/@lorenz/jira-tracker/dist/provider.d.ts.map +1 -1
- package/node_modules/@lorenz/jira-tracker/dist/provider.js +3 -36
- package/node_modules/@lorenz/jira-tracker/dist/provider.js.map +1 -1
- package/node_modules/@lorenz/jira-tracker/dist/register.d.ts +5 -3
- package/node_modules/@lorenz/jira-tracker/dist/register.d.ts.map +1 -1
- package/node_modules/@lorenz/jira-tracker/dist/register.js +9 -3
- package/node_modules/@lorenz/jira-tracker/dist/register.js.map +1 -1
- package/node_modules/@lorenz/jira-tracker/dist/tools.d.ts +18 -0
- package/node_modules/@lorenz/jira-tracker/dist/tools.d.ts.map +1 -0
- package/node_modules/@lorenz/{tracker-sdk/dist/toolPack.js → jira-tracker/dist/tools.js} +93 -95
- package/node_modules/@lorenz/jira-tracker/dist/tools.js.map +1 -0
- package/node_modules/@lorenz/jira-tracker/package.json +1 -0
- package/node_modules/@lorenz/linear-tracker/dist/provider.d.ts.map +1 -1
- package/node_modules/@lorenz/linear-tracker/dist/provider.js +0 -2
- package/node_modules/@lorenz/linear-tracker/dist/provider.js.map +1 -1
- package/node_modules/@lorenz/local-tracker/dist/provider.d.ts.map +1 -1
- package/node_modules/@lorenz/local-tracker/dist/provider.js +0 -2
- package/node_modules/@lorenz/local-tracker/dist/provider.js.map +1 -1
- package/node_modules/@lorenz/mcp/dist/tools.d.ts.map +1 -1
- package/node_modules/@lorenz/mcp/dist/tools.js +5 -8
- package/node_modules/@lorenz/mcp/dist/tools.js.map +1 -1
- package/node_modules/@lorenz/slack-tracker/dist/client.d.ts +0 -7
- package/node_modules/@lorenz/slack-tracker/dist/client.d.ts.map +1 -1
- package/node_modules/@lorenz/slack-tracker/dist/client.js +4 -5
- package/node_modules/@lorenz/slack-tracker/dist/client.js.map +1 -1
- package/node_modules/@lorenz/slack-tracker/dist/index.d.ts +0 -1
- package/node_modules/@lorenz/slack-tracker/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/slack-tracker/dist/index.js +0 -1
- package/node_modules/@lorenz/slack-tracker/dist/index.js.map +1 -1
- package/node_modules/@lorenz/slack-tracker/dist/provider.d.ts.map +1 -1
- package/node_modules/@lorenz/slack-tracker/dist/provider.js +0 -2
- package/node_modules/@lorenz/slack-tracker/dist/provider.js.map +1 -1
- package/node_modules/@lorenz/tool-sdk/dist/provider.d.ts +2 -3
- package/node_modules/@lorenz/tool-sdk/dist/provider.d.ts.map +1 -1
- package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts +1 -2
- package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@lorenz/tracker-sdk/dist/index.js +0 -1
- package/node_modules/@lorenz/tracker-sdk/dist/index.js.map +1 -1
- package/node_modules/@lorenz/tracker-sdk/dist/provider.d.ts +11 -55
- package/node_modules/@lorenz/tracker-sdk/dist/provider.d.ts.map +1 -1
- package/node_modules/@lorenz/tracker-sdk/package.json +1 -2
- package/package.json +1 -1
- package/node_modules/@lorenz/linear-tracker/dist/toolOps.d.ts +0 -8
- package/node_modules/@lorenz/linear-tracker/dist/toolOps.d.ts.map +0 -1
- package/node_modules/@lorenz/linear-tracker/dist/toolOps.js +0 -251
- package/node_modules/@lorenz/linear-tracker/dist/toolOps.js.map +0 -1
- package/node_modules/@lorenz/local-tracker/dist/toolOps.d.ts +0 -9
- package/node_modules/@lorenz/local-tracker/dist/toolOps.d.ts.map +0 -1
- package/node_modules/@lorenz/local-tracker/dist/toolOps.js +0 -86
- package/node_modules/@lorenz/local-tracker/dist/toolOps.js.map +0 -1
- package/node_modules/@lorenz/slack-tracker/dist/toolOps.d.ts +0 -13
- package/node_modules/@lorenz/slack-tracker/dist/toolOps.d.ts.map +0 -1
- package/node_modules/@lorenz/slack-tracker/dist/toolOps.js +0 -76
- package/node_modules/@lorenz/slack-tracker/dist/toolOps.js.map +0 -1
- package/node_modules/@lorenz/tracker-sdk/dist/toolPack.d.ts +0 -10
- package/node_modules/@lorenz/tracker-sdk/dist/toolPack.d.ts.map +0 -1
- package/node_modules/@lorenz/tracker-sdk/dist/toolPack.js.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
export type { TrackerContext, TrackerComment,
|
|
1
|
+
export type { TrackerContext, TrackerComment, TrackerProvider } from "./provider.js";
|
|
2
2
|
export { TrackerRegistry, defaultTrackerRegistry } from "./registry.js";
|
|
3
3
|
export { rejectUnknownOptions, resolveEnvReference, stringListOption, stringOption, } from "./options.js";
|
|
4
|
-
export { createTrackerToolProvider } from "./toolPack.js";
|
|
5
4
|
export { TRACKER_SDK_VERSION, assertTrackerProviderModule, defineTrackerProvider, type TrackerProviderModule, } from "./module.js";
|
|
6
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export { TrackerRegistry, defaultTrackerRegistry } from "./registry.js";
|
|
2
2
|
export { rejectUnknownOptions, resolveEnvReference, stringListOption, stringOption, } from "./options.js";
|
|
3
|
-
export { createTrackerToolProvider } from "./toolPack.js";
|
|
4
3
|
export { TRACKER_SDK_VERSION, assertTrackerProviderModule, defineTrackerProvider, } from "./module.js";
|
|
5
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,GAEtB,MAAM,aAAa,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { RuntimeTrackerClient, Settings } from "@lorenz/domain";
|
|
2
2
|
/** Ambient dependencies handed to provider hooks that must not touch process globals directly. */
|
|
3
3
|
export interface TrackerContext {
|
|
4
4
|
env: NodeJS.ProcessEnv;
|
|
@@ -8,25 +8,7 @@ export interface TrackerContext {
|
|
|
8
8
|
*/
|
|
9
9
|
resolveSecret?: (value: string | undefined, fallbackEnvVar?: string) => string | undefined;
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
12
|
-
export interface TrackerOpsContext {
|
|
13
|
-
fetchImpl: typeof fetch;
|
|
14
|
-
}
|
|
15
|
-
/** Input accepted by {@link TrackerToolOps.createIssue}. */
|
|
16
|
-
export interface TrackerCreateIssueInput {
|
|
17
|
-
title: string;
|
|
18
|
-
body?: string | undefined;
|
|
19
|
-
status?: string | undefined;
|
|
20
|
-
/** Tracker user identity to assign the created issue to when the backend supports assignment. */
|
|
21
|
-
assignee?: string | undefined;
|
|
22
|
-
}
|
|
23
|
-
/** Natively projected query payload returned by {@link TrackerToolOps.queryRows}. */
|
|
24
|
-
export interface TrackerQueryResult {
|
|
25
|
-
rows: Array<Record<string, unknown>>;
|
|
26
|
-
total: number;
|
|
27
|
-
skipped?: unknown[] | undefined;
|
|
28
|
-
}
|
|
29
|
-
/** Normalized tracker issue comment returned by the provider-neutral comment tools. */
|
|
11
|
+
/** Normalized tracker issue comment returned by tracker clients and their comment tools. */
|
|
30
12
|
export interface TrackerComment {
|
|
31
13
|
id: string;
|
|
32
14
|
body: string;
|
|
@@ -35,35 +17,13 @@ export interface TrackerComment {
|
|
|
35
17
|
updatedAt?: string | null | undefined;
|
|
36
18
|
url?: string | null | undefined;
|
|
37
19
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Normalized issue operations backing the provider-neutral `tracker_*` tool pack. Every
|
|
40
|
-
* member is optional: a missing member makes the corresponding tool report itself as
|
|
41
|
-
* unsupported for this tracker instead of failing mid-call.
|
|
42
|
-
*
|
|
43
|
-
* Backends that filter and project natively (e.g. the local board's query DSL) implement
|
|
44
|
-
* {@link queryRows}; backends that return whole issues implement {@link queryIssues} and let
|
|
45
|
-
* the pack project rows with the shared select/filter helpers.
|
|
46
|
-
*/
|
|
47
|
-
export interface TrackerToolOps {
|
|
48
|
-
readIssue?(issueId: string): Promise<Issue>;
|
|
49
|
-
/** Issues matching generic query args (`issueIds`, `states`, provider-native queries such as `jql`). */
|
|
50
|
-
queryIssues?(args: Record<string, unknown>): Promise<Issue[]>;
|
|
51
|
-
/** Pre-projected rows for backends with a native query surface; takes precedence over {@link queryIssues}. */
|
|
52
|
-
queryRows?(args: Record<string, unknown>): Promise<TrackerQueryResult>;
|
|
53
|
-
updateStatus?(issueId: string, status: string): Promise<Issue>;
|
|
54
|
-
listComments?(issueId: string): Promise<TrackerComment[]>;
|
|
55
|
-
addComment?(issueId: string, body: string): Promise<TrackerComment | void>;
|
|
56
|
-
updateComment?(issueId: string, commentId: string, body: string): Promise<TrackerComment>;
|
|
57
|
-
createIssue?(input: TrackerCreateIssueInput): Promise<Issue>;
|
|
58
|
-
}
|
|
59
20
|
/**
|
|
60
21
|
* Everything Lorenz needs to know about one issue-tracker backend, bundled as a single
|
|
61
|
-
* extension point. A provider owns its slice of the selected tracker bundle
|
|
62
|
-
* client that feeds issues into dispatch
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
* packs explicitly through its `tools:` map.
|
|
22
|
+
* extension point. A provider owns its slice of the selected tracker bundle and the runtime
|
|
23
|
+
* client that feeds issues into dispatch. Agent-facing tool packs are a separate extension
|
|
24
|
+
* point (`ToolProvider` in `@lorenz/tool-sdk`): a tracker package may ship one and declare
|
|
25
|
+
* it through {@link defaultToolPacks} so it mounts when this tracker drives dispatch, and a
|
|
26
|
+
* workflow may still mount other registered packs explicitly through its `tools:` map.
|
|
67
27
|
*
|
|
68
28
|
* The core (config parsing, runtime, MCP server, CLI) is provider-agnostic and talks to
|
|
69
29
|
* providers exclusively through this contract via a {@link TrackerRegistry}. Adding a new
|
|
@@ -99,14 +59,10 @@ export interface TrackerProvider {
|
|
|
99
59
|
/** Build the runtime client that feeds candidate issues into the dispatch loop. */
|
|
100
60
|
createClient(settings: Settings, context: TrackerContext): RuntimeTrackerClient;
|
|
101
61
|
/**
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
/**
|
|
107
|
-
* Provider-specific tool packs mounted by default when this tracker drives dispatch.
|
|
108
|
-
* The core always mounts the neutral `tracker` pack separately; this hook declares any
|
|
109
|
-
* additional minimum packs owned by the tracker extension.
|
|
62
|
+
* Tool packs mounted by default when this tracker drives dispatch. This is how a tracker
|
|
63
|
+
* extension exposes its agent-facing tools (e.g. Jira's `jira_*` pack, Linear's
|
|
64
|
+
* `linear_graphql` pack); return the names of the registered {@link ToolProvider} packs the
|
|
65
|
+
* backend owns. Omit when the backend ships no agent tools.
|
|
110
66
|
*/
|
|
111
67
|
defaultToolPacks?(settings: Settings): readonly string[];
|
|
112
68
|
/** Operator-facing URL of the tracked project, shown in dashboards. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAErE,kGAAkG;AAClG,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC5F;AAED,4FAA4F;AAC5F,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,eAAe;IAC9B,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACtE;;;OAGG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACrE,+DAA+D;IAC/D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C;;;;OAIG;IACH,YAAY,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClG;;;OAGG;IACH,gBAAgB,CAAC,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5C,mFAAmF;IACnF,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,GAAG,oBAAoB,CAAC;IAChF;;;;;OAKG;IACH,gBAAgB,CAAC,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,CAAC;IACzD,uEAAuE;IACvE,UAAU,CAAC,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;CACrD"}
|
package/package.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type Settings } from "@lorenz/domain";
|
|
2
|
-
import type { TrackerOpsContext, TrackerToolOps } from "@lorenz/tracker-sdk";
|
|
3
|
-
/**
|
|
4
|
-
* Normalized issue operations behind the provider-neutral `tracker_*` pack, implemented over
|
|
5
|
-
* the same GraphQL transport as the `linear_graphql` tool (credentials, retries, logging).
|
|
6
|
-
*/
|
|
7
|
-
export declare function linearToolOps(settings: Settings, context: TrackerOpsContext): TrackerToolOps;
|
|
8
|
-
//# sourceMappingURL=toolOps.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolOps.d.ts","sourceRoot":"","sources":["../src/toolOps.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAGV,iBAAiB,EACjB,cAAc,EACf,MAAM,qBAAqB,CAAC;AA0B7B;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAa5F"}
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
import { normalizeIssue } from "@lorenz/issue";
|
|
2
|
-
import { isRecord } from "@lorenz/domain";
|
|
3
|
-
import { linearTrackerOptions } from "./options.js";
|
|
4
|
-
import { executeLinearTool } from "./tools.js";
|
|
5
|
-
const linearIssueFields = `
|
|
6
|
-
id
|
|
7
|
-
identifier
|
|
8
|
-
title
|
|
9
|
-
description
|
|
10
|
-
priority
|
|
11
|
-
state { id name type }
|
|
12
|
-
branchName
|
|
13
|
-
url
|
|
14
|
-
assignee { id }
|
|
15
|
-
labels(first: 50) { nodes { name } }
|
|
16
|
-
inverseRelations(first: 50) {
|
|
17
|
-
nodes {
|
|
18
|
-
type
|
|
19
|
-
issue { id identifier state { name type } }
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
createdAt
|
|
23
|
-
updatedAt
|
|
24
|
-
`;
|
|
25
|
-
/**
|
|
26
|
-
* Normalized issue operations behind the provider-neutral `tracker_*` pack, implemented over
|
|
27
|
-
* the same GraphQL transport as the `linear_graphql` tool (credentials, retries, logging).
|
|
28
|
-
*/
|
|
29
|
-
export function linearToolOps(settings, context) {
|
|
30
|
-
const { fetchImpl } = context;
|
|
31
|
-
return {
|
|
32
|
-
readIssue: async (issueId) => readLinearIssue(settings, issueId, fetchImpl),
|
|
33
|
-
queryIssues: async (args) => queryLinearIssues(settings, args, fetchImpl),
|
|
34
|
-
updateStatus: async (issueId, status) => updateLinearStatus(settings, issueId, status, fetchImpl),
|
|
35
|
-
listComments: async (issueId) => listLinearComments(settings, issueId, fetchImpl),
|
|
36
|
-
addComment: async (issueId, body) => createLinearComment(settings, issueId, body, fetchImpl),
|
|
37
|
-
updateComment: async (_issueId, commentId, body) => updateLinearComment(settings, commentId, body, fetchImpl),
|
|
38
|
-
createIssue: async (input) => createLinearIssue(settings, input, fetchImpl),
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
async function readLinearIssue(settings, issueId, fetchImpl) {
|
|
42
|
-
const data = await linearData(settings, `query LorenzTrackerReadIssue($id: String!) {
|
|
43
|
-
issue(id: $id) { ${linearIssueFields} }
|
|
44
|
-
}`, { id: issueId }, fetchImpl);
|
|
45
|
-
if (!data.issue)
|
|
46
|
-
throw new Error(`linear issue not found: ${issueId}`);
|
|
47
|
-
return normalizeLinearIssue(data.issue, settings.tracker.assignee);
|
|
48
|
-
}
|
|
49
|
-
async function queryLinearIssues(settings, args, fetchImpl) {
|
|
50
|
-
const issueIds = stringArray(args.issueIds);
|
|
51
|
-
if (issueIds) {
|
|
52
|
-
const data = await linearData(settings, `query LorenzTrackerIssuesById($ids: [ID!]!, $first: Int!) {
|
|
53
|
-
issues(filter: {id: {in: $ids}}, first: $first) { nodes { ${linearIssueFields} } }
|
|
54
|
-
}`, { ids: issueIds, first: issueIds.length }, fetchImpl);
|
|
55
|
-
return data.issues.nodes.map((issue) => normalizeLinearIssue(issue, settings.tracker.assignee));
|
|
56
|
-
}
|
|
57
|
-
const states = stringArray(args.states) ?? settings.tracker.activeStates;
|
|
58
|
-
const options = linearTrackerOptions(settings);
|
|
59
|
-
const projectSlugs = options.projectSlugs ?? (options.projectSlug ? [options.projectSlug] : []);
|
|
60
|
-
const data = await linearData(settings, `query LorenzTrackerQuery($projectSlugs: [String!]!, $stateNames: [String!]!, $first: Int!) {
|
|
61
|
-
issues(filter: {project: {slugId: {in: $projectSlugs}}, state: {name: {in: $stateNames}}}, first: $first) {
|
|
62
|
-
nodes { ${linearIssueFields} }
|
|
63
|
-
}
|
|
64
|
-
}`, { projectSlugs, stateNames: states, first: numberArg(args.limit, 50) }, fetchImpl);
|
|
65
|
-
return data.issues.nodes.map((issue) => normalizeLinearIssue(issue, settings.tracker.assignee));
|
|
66
|
-
}
|
|
67
|
-
async function updateLinearStatus(settings, issueId, status, fetchImpl) {
|
|
68
|
-
const lookup = await linearData(settings, `query LorenzTrackerLinearStates($id: String!) {
|
|
69
|
-
issue(id: $id) { team { states(first: 100) { nodes { id name } } } }
|
|
70
|
-
}`, { id: issueId }, fetchImpl);
|
|
71
|
-
const state = lookup.issue?.team?.states?.nodes?.find((candidate) => candidate.name.trim().toLowerCase() === status.trim().toLowerCase());
|
|
72
|
-
if (!state)
|
|
73
|
-
throw new Error(`linear state not found: ${status}`);
|
|
74
|
-
const data = await linearData(settings, `mutation LorenzTrackerLinearUpdate($id: String!, $input: IssueUpdateInput!) {
|
|
75
|
-
issueUpdate(id: $id, input: $input) { success issue { ${linearIssueFields} } }
|
|
76
|
-
}`, { id: issueId, input: { stateId: state.id } }, fetchImpl);
|
|
77
|
-
if (!data.issueUpdate.success || !data.issueUpdate.issue)
|
|
78
|
-
throw new Error("linear issueUpdate failed");
|
|
79
|
-
return normalizeLinearIssue(data.issueUpdate.issue, settings.tracker.assignee);
|
|
80
|
-
}
|
|
81
|
-
async function createLinearComment(settings, issueId, body, fetchImpl) {
|
|
82
|
-
const data = await linearData(settings, `mutation LorenzTrackerLinearComment($input: CommentCreateInput!) {
|
|
83
|
-
commentCreate(input: $input) {
|
|
84
|
-
success
|
|
85
|
-
comment {
|
|
86
|
-
id
|
|
87
|
-
body
|
|
88
|
-
createdAt
|
|
89
|
-
updatedAt
|
|
90
|
-
url
|
|
91
|
-
user { id name email }
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}`, { input: { issueId, body } }, fetchImpl);
|
|
95
|
-
if (!data.commentCreate.success || !data.commentCreate.comment) {
|
|
96
|
-
throw new Error("linear commentCreate failed");
|
|
97
|
-
}
|
|
98
|
-
return normalizeLinearComment(data.commentCreate.comment);
|
|
99
|
-
}
|
|
100
|
-
async function listLinearComments(settings, issueId, fetchImpl) {
|
|
101
|
-
const out = [];
|
|
102
|
-
let after = null;
|
|
103
|
-
for (;;) {
|
|
104
|
-
const data = await linearData(settings, `query LorenzTrackerLinearComments($id: String!, $after: String) {
|
|
105
|
-
issue(id: $id) {
|
|
106
|
-
comments(first: 100, after: $after) {
|
|
107
|
-
nodes {
|
|
108
|
-
id
|
|
109
|
-
body
|
|
110
|
-
createdAt
|
|
111
|
-
updatedAt
|
|
112
|
-
url
|
|
113
|
-
user { id name email }
|
|
114
|
-
}
|
|
115
|
-
pageInfo {
|
|
116
|
-
hasNextPage
|
|
117
|
-
endCursor
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}`, { id: issueId, after }, fetchImpl);
|
|
122
|
-
const issue = isRecord(data) && isRecord(data.issue) ? data.issue : null;
|
|
123
|
-
if (!issue)
|
|
124
|
-
throw new Error(`linear issue not found: ${issueId}`);
|
|
125
|
-
const comments = isRecord(issue.comments) ? issue.comments : {};
|
|
126
|
-
const nodes = Array.isArray(comments.nodes) ? comments.nodes : [];
|
|
127
|
-
for (const node of nodes) {
|
|
128
|
-
if (isRecord(node))
|
|
129
|
-
out.push(normalizeLinearComment(node));
|
|
130
|
-
}
|
|
131
|
-
const pageInfo = isRecord(comments.pageInfo) ? comments.pageInfo : {};
|
|
132
|
-
after = stringValue(pageInfo, "endCursor");
|
|
133
|
-
if (pageInfo.hasNextPage !== true || !after)
|
|
134
|
-
return out;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
async function updateLinearComment(settings, commentId, body, fetchImpl) {
|
|
138
|
-
const data = await linearData(settings, `mutation LorenzTrackerLinearCommentUpdate($id: String!, $input: CommentUpdateInput!) {
|
|
139
|
-
commentUpdate(id: $id, input: $input) {
|
|
140
|
-
success
|
|
141
|
-
comment {
|
|
142
|
-
id
|
|
143
|
-
body
|
|
144
|
-
createdAt
|
|
145
|
-
updatedAt
|
|
146
|
-
url
|
|
147
|
-
user { id name email }
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}`, { id: commentId, input: { body } }, fetchImpl);
|
|
151
|
-
if (!data.commentUpdate.success || !data.commentUpdate.comment) {
|
|
152
|
-
throw new Error("linear commentUpdate failed");
|
|
153
|
-
}
|
|
154
|
-
return normalizeLinearComment(data.commentUpdate.comment);
|
|
155
|
-
}
|
|
156
|
-
async function createLinearIssue(settings, input, fetchImpl) {
|
|
157
|
-
const options = linearTrackerOptions(settings);
|
|
158
|
-
const projectSlug = options.projectSlug ?? options.projectSlugs?.[0];
|
|
159
|
-
if (!projectSlug)
|
|
160
|
-
throw new Error("tracker.project_slug is required to create Linear issues");
|
|
161
|
-
const projectData = await linearData(settings, `query LorenzTrackerLinearProject($slug: String!) {
|
|
162
|
-
projects(filter: {slugId: {eq: $slug}}, first: 1) {
|
|
163
|
-
nodes { id teams(first: 1) { nodes { id states(first: 100) { nodes { id name type } } } } }
|
|
164
|
-
}
|
|
165
|
-
}`, { slug: projectSlug }, fetchImpl);
|
|
166
|
-
const project = projectData.projects.nodes[0];
|
|
167
|
-
const team = project?.teams.nodes[0];
|
|
168
|
-
if (!project || !team)
|
|
169
|
-
throw new Error(`linear project not found: ${projectSlug}`);
|
|
170
|
-
const state = team.states.nodes.find((candidate) => candidate.name === input.status) ??
|
|
171
|
-
team.states.nodes.find((candidate) => candidate.type === "unstarted") ??
|
|
172
|
-
team.states.nodes[0];
|
|
173
|
-
if (!state)
|
|
174
|
-
throw new Error("linear project has no workflow states");
|
|
175
|
-
const assignee = input.assignee?.trim() || settings.tracker.assignee?.trim();
|
|
176
|
-
const data = await linearData(settings, `mutation LorenzTrackerLinearCreate($input: IssueCreateInput!) {
|
|
177
|
-
issueCreate(input: $input) { success issue { ${linearIssueFields} } }
|
|
178
|
-
}`, {
|
|
179
|
-
input: {
|
|
180
|
-
teamId: team.id,
|
|
181
|
-
projectId: project.id,
|
|
182
|
-
stateId: state.id,
|
|
183
|
-
title: input.title,
|
|
184
|
-
description: input.body ?? "",
|
|
185
|
-
...(assignee ? { assigneeId: assignee } : {}),
|
|
186
|
-
},
|
|
187
|
-
}, fetchImpl);
|
|
188
|
-
if (!data.issueCreate.success || !data.issueCreate.issue)
|
|
189
|
-
throw new Error("linear issueCreate failed");
|
|
190
|
-
return normalizeLinearIssue(data.issueCreate.issue, settings.tracker.assignee);
|
|
191
|
-
}
|
|
192
|
-
async function linearData(settings, query, variables, fetchImpl) {
|
|
193
|
-
const result = await executeLinearTool("linear_graphql", { query, variables }, settings, fetchImpl);
|
|
194
|
-
if (!result.success)
|
|
195
|
-
throw new Error(result.error ?? "linear_graphql failed");
|
|
196
|
-
const body = result.result;
|
|
197
|
-
if (!isRecord(body) || !isRecord(body.data))
|
|
198
|
-
throw new Error("linear_graphql returned no data");
|
|
199
|
-
return body.data;
|
|
200
|
-
}
|
|
201
|
-
function normalizeLinearIssue(issue, assignee) {
|
|
202
|
-
return normalizeIssue({
|
|
203
|
-
...issue,
|
|
204
|
-
state: issue.state,
|
|
205
|
-
state_type: isRecord(issue.state) ? issue.state.type : null,
|
|
206
|
-
branch_name: issue.branchName,
|
|
207
|
-
assignee_id: isRecord(issue.assignee) ? issue.assignee.id : null,
|
|
208
|
-
labels: nodesFromConnection(issue.labels),
|
|
209
|
-
relations: nodesFromConnection(issue.inverseRelations),
|
|
210
|
-
created_at: issue.createdAt,
|
|
211
|
-
updated_at: issue.updatedAt,
|
|
212
|
-
}, assignee);
|
|
213
|
-
}
|
|
214
|
-
function normalizeLinearComment(comment) {
|
|
215
|
-
const user = isRecord(comment.user) ? comment.user : {};
|
|
216
|
-
return {
|
|
217
|
-
id: requireStr(comment, "id"),
|
|
218
|
-
body: typeof comment.body === "string" ? comment.body : "",
|
|
219
|
-
author: stringValue(user, "id") ?? stringValue(user, "name") ?? stringValue(user, "email"),
|
|
220
|
-
createdAt: stringValue(comment, "createdAt"),
|
|
221
|
-
updatedAt: stringValue(comment, "updatedAt"),
|
|
222
|
-
url: stringValue(comment, "url"),
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
function nodesFromConnection(value) {
|
|
226
|
-
if (!isRecord(value) || !Array.isArray(value.nodes))
|
|
227
|
-
return [];
|
|
228
|
-
return value.nodes;
|
|
229
|
-
}
|
|
230
|
-
function stringValue(record, key) {
|
|
231
|
-
const value = record[key];
|
|
232
|
-
return typeof value === "string" && value.trim() !== "" ? value : null;
|
|
233
|
-
}
|
|
234
|
-
function requireStr(record, key) {
|
|
235
|
-
const value = stringValue(record, key);
|
|
236
|
-
if (!value)
|
|
237
|
-
throw new Error(`'${key}' is required`);
|
|
238
|
-
return value;
|
|
239
|
-
}
|
|
240
|
-
function stringArray(value) {
|
|
241
|
-
if (value === undefined || value === null)
|
|
242
|
-
return null;
|
|
243
|
-
if (!Array.isArray(value) || !value.every((entry) => typeof entry === "string")) {
|
|
244
|
-
throw new Error("expected an array of strings");
|
|
245
|
-
}
|
|
246
|
-
return value;
|
|
247
|
-
}
|
|
248
|
-
function numberArg(value, fallback) {
|
|
249
|
-
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : fallback;
|
|
250
|
-
}
|
|
251
|
-
//# sourceMappingURL=toolOps.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolOps.js","sourceRoot":"","sources":["../src/toolOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type Settings } from "@lorenz/domain";
|
|
2
|
-
import type { TrackerToolOps } from "@lorenz/tracker-sdk";
|
|
3
|
-
/**
|
|
4
|
-
* Normalized issue operations behind the provider-neutral `tracker_*` pack, delegating to
|
|
5
|
-
* the `local_*` tools so both surfaces share one board implementation. The board's query
|
|
6
|
-
* tool filters and projects natively, so queries are exposed as pre-projected rows.
|
|
7
|
-
*/
|
|
8
|
-
export declare function localToolOps(settings: Settings): TrackerToolOps;
|
|
9
|
-
//# sourceMappingURL=toolOps.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolOps.d.ts","sourceRoot":"","sources":["../src/toolOps.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAsB,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI9E;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,cAAc,CAoC/D"}
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { normalizeIssue } from "@lorenz/issue";
|
|
2
|
-
import { isRecord } from "@lorenz/domain";
|
|
3
|
-
import { executeLocalTool } from "./tools.js";
|
|
4
|
-
/**
|
|
5
|
-
* Normalized issue operations behind the provider-neutral `tracker_*` pack, delegating to
|
|
6
|
-
* the `local_*` tools so both surfaces share one board implementation. The board's query
|
|
7
|
-
* tool filters and projects natively, so queries are exposed as pre-projected rows.
|
|
8
|
-
*/
|
|
9
|
-
export function localToolOps(settings) {
|
|
10
|
-
return {
|
|
11
|
-
readIssue: async (issueId) => {
|
|
12
|
-
const result = await executeLocalTool("local_read_issue", { issueId }, settings);
|
|
13
|
-
if (!result.success)
|
|
14
|
-
throw new Error(result.error ?? "local_read_issue failed");
|
|
15
|
-
return localReadResultToIssue(result.result);
|
|
16
|
-
},
|
|
17
|
-
queryRows: async (args) => {
|
|
18
|
-
const result = await executeLocalTool("local_query", args, settings);
|
|
19
|
-
if (!result.success)
|
|
20
|
-
throw new Error(result.error ?? "local_query failed");
|
|
21
|
-
const payload = isRecord(result.result) ? result.result : {};
|
|
22
|
-
return {
|
|
23
|
-
rows: Array.isArray(payload.rows) ? payload.rows : [],
|
|
24
|
-
total: typeof payload.total === "number" ? payload.total : 0,
|
|
25
|
-
skipped: Array.isArray(payload.skipped) ? payload.skipped : [],
|
|
26
|
-
};
|
|
27
|
-
},
|
|
28
|
-
updateStatus: async (issueId, status) => {
|
|
29
|
-
const result = await executeLocalTool("local_update_status", { issueId, status }, settings);
|
|
30
|
-
if (!result.success)
|
|
31
|
-
throw new Error(result.error ?? "local_update_status failed");
|
|
32
|
-
return issueResult(result.result);
|
|
33
|
-
},
|
|
34
|
-
addComment: async (issueId, body) => {
|
|
35
|
-
const result = await executeLocalTool("local_comment", { issueId, body }, settings);
|
|
36
|
-
if (!result.success)
|
|
37
|
-
throw new Error(result.error ?? "local_comment failed");
|
|
38
|
-
},
|
|
39
|
-
createIssue: async (input) => {
|
|
40
|
-
const result = await executeLocalTool("local_create_issue", { title: input.title, body: input.body, status: input.status }, settings);
|
|
41
|
-
if (!result.success)
|
|
42
|
-
throw new Error(result.error ?? "local_create_issue failed");
|
|
43
|
-
return issueResult(result.result);
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
function localReadResultToIssue(value) {
|
|
48
|
-
if (!isRecord(value) || !isRecord(value.issue))
|
|
49
|
-
throw new Error("local_read_issue returned no issue");
|
|
50
|
-
return normalizeIssue({
|
|
51
|
-
id: requireStr(value.issue, "id"),
|
|
52
|
-
identifier: requireStr(value.issue, "id"),
|
|
53
|
-
title: requireStr(value.issue, "title"),
|
|
54
|
-
description: typeof value.issue.description === "string" ? value.issue.description : null,
|
|
55
|
-
state: requireStr(value.issue, "status"),
|
|
56
|
-
state_type: stateTypeFromStatus(requireStr(value.issue, "status")),
|
|
57
|
-
labels: [],
|
|
58
|
-
blockers: [],
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
function issueResult(value) {
|
|
62
|
-
if (!isRecord(value) || !isRecord(value.issue))
|
|
63
|
-
throw new Error("tracker tool returned no issue");
|
|
64
|
-
return normalizeIssue(value.issue);
|
|
65
|
-
}
|
|
66
|
-
function stateTypeFromStatus(status) {
|
|
67
|
-
const normalized = status.trim().toLowerCase();
|
|
68
|
-
if (normalized.includes("done") || normalized.includes("closed"))
|
|
69
|
-
return "completed";
|
|
70
|
-
if (normalized.includes("cancel"))
|
|
71
|
-
return "canceled";
|
|
72
|
-
if (normalized.includes("backlog"))
|
|
73
|
-
return "backlog";
|
|
74
|
-
if (normalized.includes("triage"))
|
|
75
|
-
return "triage";
|
|
76
|
-
if (normalized.includes("progress"))
|
|
77
|
-
return "started";
|
|
78
|
-
return "unstarted";
|
|
79
|
-
}
|
|
80
|
-
function requireStr(args, key) {
|
|
81
|
-
const value = args[key];
|
|
82
|
-
if (typeof value !== "string" || value.trim() === "")
|
|
83
|
-
throw new Error(`'${key}' is required`);
|
|
84
|
-
return value;
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=toolOps.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolOps.js","sourceRoot":"","sources":["../src/toolOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Settings } from "@lorenz/domain";
|
|
2
|
-
import type { TrackerOpsContext, TrackerToolOps } from "@lorenz/tracker-sdk";
|
|
3
|
-
import type { SlackTransport } from "./transport.js";
|
|
4
|
-
/**
|
|
5
|
-
* Normalized issue operations behind the provider-neutral `tracker_*` pack, implemented over
|
|
6
|
-
* the same transport, trust boundary, and transactional status swap as the `slack_*` tools.
|
|
7
|
-
* `createIssue` is intentionally absent: Slack issues are created by humans @-mentioning the
|
|
8
|
-
* bot, never by an agent.
|
|
9
|
-
*/
|
|
10
|
-
export declare function slackToolOps(settings: Settings, context: TrackerOpsContext): TrackerToolOps;
|
|
11
|
-
/** Like {@link slackToolOps} with an injected transport (tests use the in-memory one). */
|
|
12
|
-
export declare function slackToolOpsWith(settings: Settings, transport: SlackTransport): TrackerToolOps;
|
|
13
|
-
//# sourceMappingURL=toolOps.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toolOps.d.ts","sourceRoot":"","sources":["../src/toolOps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAE3F;AAED,0FAA0F;AAC1F,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,GAAG,cAAc,CA6B9F"}
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import { slackMessageToIssue, SlackTrackerClient, splitIssueId } from "./client.js";
|
|
2
|
-
import { requireTrackedMessage, updateSlackStatus } from "./operations.js";
|
|
3
|
-
import { resolveThreadState } from "./threadState.js";
|
|
4
|
-
import { SlackWebTransport } from "./webTransport.js";
|
|
5
|
-
/**
|
|
6
|
-
* Normalized issue operations behind the provider-neutral `tracker_*` pack, implemented over
|
|
7
|
-
* the same transport, trust boundary, and transactional status swap as the `slack_*` tools.
|
|
8
|
-
* `createIssue` is intentionally absent: Slack issues are created by humans @-mentioning the
|
|
9
|
-
* bot, never by an agent.
|
|
10
|
-
*/
|
|
11
|
-
export function slackToolOps(settings, context) {
|
|
12
|
-
return slackToolOpsWith(settings, new SlackWebTransport(settings, context.fetchImpl));
|
|
13
|
-
}
|
|
14
|
-
/** Like {@link slackToolOps} with an injected transport (tests use the in-memory one). */
|
|
15
|
-
export function slackToolOpsWith(settings, transport) {
|
|
16
|
-
return {
|
|
17
|
-
readIssue: async (issueId) => {
|
|
18
|
-
const [channel, ts] = requireIssueIdParts(issueId);
|
|
19
|
-
const root = await requireTrackedMessage(settings, transport, channel, ts);
|
|
20
|
-
const thread = await resolveThreadState(settings, transport, root);
|
|
21
|
-
return slackMessageToIssue(root, settings, {
|
|
22
|
-
permalinkBase: await transport.teamUrl(),
|
|
23
|
-
state: thread.state,
|
|
24
|
-
request: thread.request,
|
|
25
|
-
});
|
|
26
|
-
},
|
|
27
|
-
queryIssues: async (args) => querySlackIssues(settings, transport, args),
|
|
28
|
-
updateStatus: async (issueId, status) => {
|
|
29
|
-
const [channel, ts] = requireIssueIdParts(issueId);
|
|
30
|
-
const outcome = await updateSlackStatus(settings, transport, channel, ts, status);
|
|
31
|
-
if (!outcome.ok)
|
|
32
|
-
throw new Error(outcome.message);
|
|
33
|
-
// The posted status reply IS the new authoritative state; no re-read needed.
|
|
34
|
-
return slackMessageToIssue(outcome.root, settings, {
|
|
35
|
-
permalinkBase: await transport.teamUrl(),
|
|
36
|
-
state: outcome.status,
|
|
37
|
-
});
|
|
38
|
-
},
|
|
39
|
-
addComment: async (issueId, body) => {
|
|
40
|
-
const [channel, ts] = requireIssueIdParts(issueId);
|
|
41
|
-
await requireTrackedMessage(settings, transport, channel, ts);
|
|
42
|
-
await transport.postReply(channel, ts, body);
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
async function querySlackIssues(settings, transport, args) {
|
|
47
|
-
if (typeof args.jql === "string" && args.jql.trim() !== "") {
|
|
48
|
-
// Reject rather than silently ignore: a "filtered" result that ignored the filter would
|
|
49
|
-
// hand the agent terminal/stale issues presented as matches.
|
|
50
|
-
throw new Error("'jql' is not supported by the slack tracker; filter with 'where' instead");
|
|
51
|
-
}
|
|
52
|
-
const client = new SlackTrackerClient(settings, transport);
|
|
53
|
-
const issueIds = stringArray(args.issueIds);
|
|
54
|
-
if (issueIds)
|
|
55
|
-
return client.fetchIssuesByIds(issueIds);
|
|
56
|
-
const states = stringArray(args.states);
|
|
57
|
-
if (states)
|
|
58
|
-
return client.fetchIssuesByStates(states);
|
|
59
|
-
// Match the other trackers' default scope: candidates, not the full mention history.
|
|
60
|
-
return client.fetchCandidateIssues();
|
|
61
|
-
}
|
|
62
|
-
function requireIssueIdParts(issueId) {
|
|
63
|
-
const parts = splitIssueId(issueId);
|
|
64
|
-
if (!parts)
|
|
65
|
-
throw new Error("issueId must be in '<channel>:<ts>' form");
|
|
66
|
-
return parts;
|
|
67
|
-
}
|
|
68
|
-
function stringArray(value) {
|
|
69
|
-
if (value === undefined || value === null)
|
|
70
|
-
return null;
|
|
71
|
-
if (!Array.isArray(value) || !value.every((entry) => typeof entry === "string")) {
|
|
72
|
-
throw new Error("expected an array of strings");
|
|
73
|
-
}
|
|
74
|
-
return value;
|
|
75
|
-
}
|
|
76
|
-
//# sourceMappingURL=toolOps.js.map
|