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.
Files changed (70) hide show
  1. package/RELEASE-MANIFEST.json +1 -1
  2. package/node_modules/@lorenz/cli/dist/daemon.d.ts.map +1 -1
  3. package/node_modules/@lorenz/cli/dist/daemon.js +2 -5
  4. package/node_modules/@lorenz/cli/dist/daemon.js.map +1 -1
  5. package/node_modules/@lorenz/cli/dist/trackerLoader.js +1 -1
  6. package/node_modules/@lorenz/cli/dist/trackerLoader.js.map +1 -1
  7. package/node_modules/@lorenz/domain/dist/index.d.ts +3 -4
  8. package/node_modules/@lorenz/domain/dist/index.d.ts.map +1 -1
  9. package/node_modules/@lorenz/domain/dist/index.js.map +1 -1
  10. package/node_modules/@lorenz/jira-tracker/dist/index.d.ts +1 -0
  11. package/node_modules/@lorenz/jira-tracker/dist/index.d.ts.map +1 -1
  12. package/node_modules/@lorenz/jira-tracker/dist/index.js +1 -0
  13. package/node_modules/@lorenz/jira-tracker/dist/index.js.map +1 -1
  14. package/node_modules/@lorenz/jira-tracker/dist/provider.d.ts.map +1 -1
  15. package/node_modules/@lorenz/jira-tracker/dist/provider.js +3 -36
  16. package/node_modules/@lorenz/jira-tracker/dist/provider.js.map +1 -1
  17. package/node_modules/@lorenz/jira-tracker/dist/register.d.ts +5 -3
  18. package/node_modules/@lorenz/jira-tracker/dist/register.d.ts.map +1 -1
  19. package/node_modules/@lorenz/jira-tracker/dist/register.js +9 -3
  20. package/node_modules/@lorenz/jira-tracker/dist/register.js.map +1 -1
  21. package/node_modules/@lorenz/jira-tracker/dist/tools.d.ts +18 -0
  22. package/node_modules/@lorenz/jira-tracker/dist/tools.d.ts.map +1 -0
  23. package/node_modules/@lorenz/{tracker-sdk/dist/toolPack.js → jira-tracker/dist/tools.js} +93 -95
  24. package/node_modules/@lorenz/jira-tracker/dist/tools.js.map +1 -0
  25. package/node_modules/@lorenz/jira-tracker/package.json +1 -0
  26. package/node_modules/@lorenz/linear-tracker/dist/provider.d.ts.map +1 -1
  27. package/node_modules/@lorenz/linear-tracker/dist/provider.js +0 -2
  28. package/node_modules/@lorenz/linear-tracker/dist/provider.js.map +1 -1
  29. package/node_modules/@lorenz/local-tracker/dist/provider.d.ts.map +1 -1
  30. package/node_modules/@lorenz/local-tracker/dist/provider.js +0 -2
  31. package/node_modules/@lorenz/local-tracker/dist/provider.js.map +1 -1
  32. package/node_modules/@lorenz/mcp/dist/tools.d.ts.map +1 -1
  33. package/node_modules/@lorenz/mcp/dist/tools.js +5 -8
  34. package/node_modules/@lorenz/mcp/dist/tools.js.map +1 -1
  35. package/node_modules/@lorenz/slack-tracker/dist/client.d.ts +0 -7
  36. package/node_modules/@lorenz/slack-tracker/dist/client.d.ts.map +1 -1
  37. package/node_modules/@lorenz/slack-tracker/dist/client.js +4 -5
  38. package/node_modules/@lorenz/slack-tracker/dist/client.js.map +1 -1
  39. package/node_modules/@lorenz/slack-tracker/dist/index.d.ts +0 -1
  40. package/node_modules/@lorenz/slack-tracker/dist/index.d.ts.map +1 -1
  41. package/node_modules/@lorenz/slack-tracker/dist/index.js +0 -1
  42. package/node_modules/@lorenz/slack-tracker/dist/index.js.map +1 -1
  43. package/node_modules/@lorenz/slack-tracker/dist/provider.d.ts.map +1 -1
  44. package/node_modules/@lorenz/slack-tracker/dist/provider.js +0 -2
  45. package/node_modules/@lorenz/slack-tracker/dist/provider.js.map +1 -1
  46. package/node_modules/@lorenz/tool-sdk/dist/provider.d.ts +2 -3
  47. package/node_modules/@lorenz/tool-sdk/dist/provider.d.ts.map +1 -1
  48. package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts +1 -2
  49. package/node_modules/@lorenz/tracker-sdk/dist/index.d.ts.map +1 -1
  50. package/node_modules/@lorenz/tracker-sdk/dist/index.js +0 -1
  51. package/node_modules/@lorenz/tracker-sdk/dist/index.js.map +1 -1
  52. package/node_modules/@lorenz/tracker-sdk/dist/provider.d.ts +11 -55
  53. package/node_modules/@lorenz/tracker-sdk/dist/provider.d.ts.map +1 -1
  54. package/node_modules/@lorenz/tracker-sdk/package.json +1 -2
  55. package/package.json +1 -1
  56. package/node_modules/@lorenz/linear-tracker/dist/toolOps.d.ts +0 -8
  57. package/node_modules/@lorenz/linear-tracker/dist/toolOps.d.ts.map +0 -1
  58. package/node_modules/@lorenz/linear-tracker/dist/toolOps.js +0 -251
  59. package/node_modules/@lorenz/linear-tracker/dist/toolOps.js.map +0 -1
  60. package/node_modules/@lorenz/local-tracker/dist/toolOps.d.ts +0 -9
  61. package/node_modules/@lorenz/local-tracker/dist/toolOps.d.ts.map +0 -1
  62. package/node_modules/@lorenz/local-tracker/dist/toolOps.js +0 -86
  63. package/node_modules/@lorenz/local-tracker/dist/toolOps.js.map +0 -1
  64. package/node_modules/@lorenz/slack-tracker/dist/toolOps.d.ts +0 -13
  65. package/node_modules/@lorenz/slack-tracker/dist/toolOps.d.ts.map +0 -1
  66. package/node_modules/@lorenz/slack-tracker/dist/toolOps.js +0 -76
  67. package/node_modules/@lorenz/slack-tracker/dist/toolOps.js.map +0 -1
  68. package/node_modules/@lorenz/tracker-sdk/dist/toolPack.d.ts +0 -10
  69. package/node_modules/@lorenz/tracker-sdk/dist/toolPack.d.ts.map +0 -1
  70. package/node_modules/@lorenz/tracker-sdk/dist/toolPack.js.map +0 -1
@@ -1,6 +1,5 @@
1
- export type { TrackerContext, TrackerComment, TrackerCreateIssueInput, TrackerOpsContext, TrackerProvider, TrackerQueryResult, TrackerToolOps, } from "./provider.js";
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,EACV,cAAc,EACd,cAAc,EACd,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,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,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,EACrB,KAAK,qBAAqB,GAC3B,MAAM,aAAa,CAAC"}
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":"AASA,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,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,qBAAqB,GAEtB,MAAM,aAAa,CAAC"}
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 { Issue, RuntimeTrackerClient, Settings } from "@lorenz/domain";
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
- /** Dependencies for building the normalized tool operations of one tracker. */
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, the runtime
62
- * client that feeds issues into dispatch, and the normalized operations behind the
63
- * provider-neutral `tracker_*` tools. Agent-facing tool packs are a separate extension
64
- * point (`ToolProvider` in `@lorenz/tool-sdk`): a tracker package may ship one, declare
65
- * it as a default pack for this tracker, and a workflow may still mount other registered
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
- * Normalized operations backing the neutral `tracker_*` pack for this backend; return
103
- * `undefined` (or omit the member) when the backend exposes no agent-facing operations.
104
- */
105
- createToolOps?(settings: Settings, context: TrackerOpsContext): TrackerToolOps | undefined;
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":"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"}
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"}
@@ -9,7 +9,6 @@
9
9
  ".": "./dist/index.js"
10
10
  },
11
11
  "dependencies": {
12
- "@lorenz/domain": "0.1.1",
13
- "@lorenz/tool-sdk": "0.1.1"
12
+ "@lorenz/domain": "0.1.1"
14
13
  }
15
14
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lorenz",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -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