@urateam/core 0.1.31 → 0.1.32

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 (101) hide show
  1. package/dist/__tests__/agent-stream.test.js +35 -1
  2. package/dist/__tests__/agent-stream.test.js.map +1 -1
  3. package/dist/__tests__/control-signals.test.d.ts +2 -0
  4. package/dist/__tests__/control-signals.test.d.ts.map +1 -0
  5. package/dist/__tests__/control-signals.test.js +77 -0
  6. package/dist/__tests__/control-signals.test.js.map +1 -0
  7. package/dist/__tests__/pm-slack-interface.test.js +45 -0
  8. package/dist/__tests__/pm-slack-interface.test.js.map +1 -1
  9. package/dist/__tests__/pm-triage.test.js +101 -0
  10. package/dist/__tests__/pm-triage.test.js.map +1 -1
  11. package/dist/__tests__/util-linear.test.d.ts +10 -0
  12. package/dist/__tests__/util-linear.test.d.ts.map +1 -0
  13. package/dist/__tests__/util-linear.test.js +244 -0
  14. package/dist/__tests__/util-linear.test.js.map +1 -0
  15. package/dist/audit/events.d.ts +24 -0
  16. package/dist/audit/events.d.ts.map +1 -1
  17. package/dist/audit/events.js +32 -0
  18. package/dist/audit/events.js.map +1 -1
  19. package/dist/executor/agent-stream.d.ts +16 -0
  20. package/dist/executor/agent-stream.d.ts.map +1 -1
  21. package/dist/executor/agent-stream.js +43 -1
  22. package/dist/executor/agent-stream.js.map +1 -1
  23. package/dist/executor/executor.d.ts.map +1 -1
  24. package/dist/executor/executor.js +24 -5
  25. package/dist/executor/executor.js.map +1 -1
  26. package/dist/index.d.ts +1 -0
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -0
  29. package/dist/index.js.map +1 -1
  30. package/dist/notifier/linear.d.ts +0 -1
  31. package/dist/notifier/linear.d.ts.map +1 -1
  32. package/dist/notifier/linear.js +2 -5
  33. package/dist/notifier/linear.js.map +1 -1
  34. package/dist/pipeline/control-signals.d.ts +49 -0
  35. package/dist/pipeline/control-signals.d.ts.map +1 -0
  36. package/dist/pipeline/control-signals.js +93 -0
  37. package/dist/pipeline/control-signals.js.map +1 -0
  38. package/dist/pipeline/feedback-pipeline.d.ts +140 -0
  39. package/dist/pipeline/feedback-pipeline.d.ts.map +1 -0
  40. package/dist/pipeline/feedback-pipeline.js +427 -0
  41. package/dist/pipeline/feedback-pipeline.js.map +1 -0
  42. package/dist/pipeline/index.d.ts +1 -0
  43. package/dist/pipeline/index.d.ts.map +1 -1
  44. package/dist/pipeline/index.js +1 -0
  45. package/dist/pipeline/index.js.map +1 -1
  46. package/dist/pipeline/runner.d.ts +49 -33
  47. package/dist/pipeline/runner.d.ts.map +1 -1
  48. package/dist/pipeline/runner.js +136 -349
  49. package/dist/pipeline/runner.js.map +1 -1
  50. package/dist/pm/actions/promote.d.ts.map +1 -1
  51. package/dist/pm/actions/promote.js +15 -11
  52. package/dist/pm/actions/promote.js.map +1 -1
  53. package/dist/pm/actions/recover-stuck.d.ts.map +1 -1
  54. package/dist/pm/actions/recover-stuck.js +9 -5
  55. package/dist/pm/actions/recover-stuck.js.map +1 -1
  56. package/dist/pm/actions/triage.d.ts.map +1 -1
  57. package/dist/pm/actions/triage.js +67 -1
  58. package/dist/pm/actions/triage.js.map +1 -1
  59. package/dist/pm/linear-helpers.d.ts +10 -0
  60. package/dist/pm/linear-helpers.d.ts.map +1 -1
  61. package/dist/pm/linear-helpers.js +13 -21
  62. package/dist/pm/linear-helpers.js.map +1 -1
  63. package/dist/pm/pause-state.d.ts +29 -0
  64. package/dist/pm/pause-state.d.ts.map +1 -0
  65. package/dist/pm/pause-state.js +34 -0
  66. package/dist/pm/pause-state.js.map +1 -0
  67. package/dist/pm/slack-bulk.d.ts +34 -0
  68. package/dist/pm/slack-bulk.d.ts.map +1 -0
  69. package/dist/pm/slack-bulk.js +110 -0
  70. package/dist/pm/slack-bulk.js.map +1 -0
  71. package/dist/pm/slack-commands.d.ts +101 -0
  72. package/dist/pm/slack-commands.d.ts.map +1 -0
  73. package/dist/pm/slack-commands.js +309 -0
  74. package/dist/pm/slack-commands.js.map +1 -0
  75. package/dist/pm/slack-helpers.d.ts +10 -0
  76. package/dist/pm/slack-helpers.d.ts.map +1 -1
  77. package/dist/pm/slack-helpers.js +32 -0
  78. package/dist/pm/slack-helpers.js.map +1 -1
  79. package/dist/pm/slack-interface.d.ts +32 -58
  80. package/dist/pm/slack-interface.d.ts.map +1 -1
  81. package/dist/pm/slack-interface.js +150 -320
  82. package/dist/pm/slack-interface.js.map +1 -1
  83. package/dist/rbac/matrix.d.ts +2 -0
  84. package/dist/rbac/matrix.d.ts.map +1 -1
  85. package/dist/rbac/matrix.js +2 -0
  86. package/dist/rbac/matrix.js.map +1 -1
  87. package/dist/server.d.ts.map +1 -1
  88. package/dist/server.js +7 -0
  89. package/dist/server.js.map +1 -1
  90. package/dist/sync/gh-linear-sync.d.ts.map +1 -1
  91. package/dist/sync/gh-linear-sync.js +2 -2
  92. package/dist/sync/gh-linear-sync.js.map +1 -1
  93. package/dist/types.d.ts +13 -4
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/types.js +6 -0
  96. package/dist/types.js.map +1 -1
  97. package/dist/util/linear.d.ts +70 -0
  98. package/dist/util/linear.d.ts.map +1 -0
  99. package/dist/util/linear.js +108 -0
  100. package/dist/util/linear.js.map +1 -0
  101. package/package.json +1 -1
@@ -1,10 +1,31 @@
1
1
  import { parseJsonObject } from "../../executor/agent-stream.js";
2
2
  import { resolveWorkflowStates } from "../linear-helpers.js";
3
+ import { resolveIssueRelations } from "../../util/linear.js";
3
4
  import { createLogger } from "../../logger.js";
4
5
  import { logAuditEventUnchecked, pmTriageClassifiedEvent } from "../../audit/index.js";
5
6
  const log = createLogger({ component: "PmAgent:triage" });
6
7
  const MAX_ISSUES_PER_TICK = 10;
7
8
  const DEFAULT_BATCH_SIZE = 3;
9
+ /**
10
+ * Marker embedded in the body of every GitHub issue filed by the urateam
11
+ * quality-observer. `gh-linear-sync` copies the GitHub body verbatim into the
12
+ * Linear ticket description, so the marker survives the sync and is the
13
+ * authoritative way to detect observer-origin tickets on the Linear side
14
+ * (labels are not propagated by gh-linear-sync).
15
+ *
16
+ * Source of truth: urateam-quality-observer/src/github-issue-writer.ts.
17
+ */
18
+ const OBSERVER_BODY_MARKER = "<!-- urateam-qo-observer:";
19
+ /**
20
+ * Pipeline label assigned to observer-origin tickets. `needs-design` includes
21
+ * an `await-approval` stage that blocks until a human approves, so these
22
+ * findings surface without burning implement-stage tokens on a non-actionable
23
+ * diagnostic. See CLAUDE.md "Quality Observer" for the rationale.
24
+ */
25
+ const OBSERVER_PIPELINE_LABEL = "needs-design";
26
+ function isObserverOriginIssue(description) {
27
+ return typeof description === "string" && description.includes(OBSERVER_BODY_MARKER);
28
+ }
8
29
  /**
9
30
  * Process an array of items in batches of `size`, awaiting each batch before
10
31
  * starting the next. Returns a flat array of results (preserving order).
@@ -38,6 +59,49 @@ export async function triageNewIssues(input) {
38
59
  }
39
60
  const results = (await runInBatches(issues.slice(0, MAX_ISSUES_PER_TICK), batchSize, async (issue) => {
40
61
  try {
62
+ if (isObserverOriginIssue(issue.description)) {
63
+ const team = await issue.team;
64
+ const teamId = team?.id;
65
+ const backlogStateId = teamId ? stateMap.get(`${teamId}:Backlog`) : undefined;
66
+ const issueLabels = [OBSERVER_PIPELINE_LABEL];
67
+ const labelIds = issueLabels
68
+ .map((l) => labelMap.get(l.toLowerCase()))
69
+ .filter(Boolean);
70
+ if (labelIds.length === 0) {
71
+ log.warn({ issueId: issue.identifier, label: OBSERVER_PIPELINE_LABEL }, "observer-origin gate: '" + OBSERVER_PIPELINE_LABEL +
72
+ "' label not found in Linear — issue will move to Backlog without pipeline label and won't be routed by promote");
73
+ }
74
+ const rationale = "Observer-origin finding (body marker detected) — routed to needs-design so the await-approval stage gates a human before any implement-stage work runs.";
75
+ const updatePayload = { priority: 3 };
76
+ if (labelIds.length > 0)
77
+ updatePayload.labelIds = labelIds;
78
+ if (backlogStateId)
79
+ updatePayload.stateId = backlogStateId;
80
+ await linearClient.updateIssue(issue.id, updatePayload);
81
+ await linearClient.createComment({
82
+ issueId: issue.id,
83
+ body: `🤖 **PM Agent — Triaged (Quality Observer finding)**\n\n` +
84
+ `**Pipeline:** ${OBSERVER_PIPELINE_LABEL}\n` +
85
+ `**Rationale:** ${rationale}`,
86
+ });
87
+ const result = {
88
+ issueId: issue.identifier,
89
+ priority: 3,
90
+ labels: issueLabels,
91
+ complexity: "medium",
92
+ rationale,
93
+ acceptanceCriteria: [],
94
+ };
95
+ if (input.db) {
96
+ void logAuditEventUnchecked(input.db, pmTriageClassifiedEvent({
97
+ issueId: issue.identifier,
98
+ label: OBSERVER_PIPELINE_LABEL,
99
+ rationale,
100
+ }));
101
+ }
102
+ log.info({ issueId: issue.identifier, pipelineLabel: OBSERVER_PIPELINE_LABEL }, "triaged observer-origin issue (skipped Claude classification)");
103
+ return result;
104
+ }
41
105
  const sanitizedDesc = sanitize(issue.description ?? "");
42
106
  const prompt = `Classify this software issue and generate acceptance criteria. Respond with ONLY a JSON object, no other text.\n\n` +
43
107
  `Issue: ${issue.identifier}\n` +
@@ -67,7 +131,9 @@ export async function triageNewIssues(input) {
67
131
  const labelIds = issueLabels
68
132
  .map((l) => labelMap.get(l.toLowerCase()))
69
133
  .filter(Boolean);
70
- const team = await issue.team;
134
+ // Resolve the issue's team relation (parallelised with state/labels via
135
+ // resolveIssueRelations for consistency; only team is needed here).
136
+ const { team } = await resolveIssueRelations(issue);
71
137
  const teamId = team?.id;
72
138
  const backlogStateId = teamId ? stateMap.get(`${teamId}:Backlog`) : undefined;
73
139
  const acceptanceCriteria = Array.isArray(parsed.acceptanceCriteria)
@@ -1 +1 @@
1
- {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"triage.js","sourceRoot":"","sources":["../../../src/pm/actions/triage.ts"],"names":[],"mappings":"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"}
@@ -8,9 +8,19 @@
8
8
  * const linear = await getClient(); // null if apiKey is undefined
9
9
  *
10
10
  * @param apiKey Linear API key. When undefined/empty, `getClient()` returns null.
11
+ *
12
+ * @deprecated Prefer `getLinearClient(apiKey)` from `util/linear.ts` directly.
13
+ * This wrapper is retained for backwards compatibility with existing callers.
11
14
  */
12
15
  export declare function createLazyLinearClient(apiKey: string | undefined): {
13
16
  getClient: () => Promise<any>;
14
17
  };
18
+ /**
19
+ * Fetches workflow states for the given teams and builds a
20
+ * `${teamId}:${stateName}` → stateId map.
21
+ *
22
+ * Delegates to `resolveWorkflowStatesByTeam` from `util/linear.ts`, which
23
+ * parallelizes all `state.team` relation fetches via Promise.all.
24
+ */
15
25
  export declare function resolveWorkflowStates(linearClient: any, teamIds: string[]): Promise<Map<string, string>>;
16
26
  //# sourceMappingURL=linear-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"linear-helpers.d.ts","sourceRoot":"","sources":["../../src/pm/linear-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG;IAClE,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;CAC/B,CAWA;AAED,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAa9B"}
1
+ {"version":3,"file":"linear-helpers.d.ts","sourceRoot":"","sources":["../../src/pm/linear-helpers.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG;IAClE,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;CAC/B,CAIA;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAE9B"}
@@ -1,3 +1,4 @@
1
+ import { getLinearClient, resolveWorkflowStatesByTeam } from "../util/linear.js";
1
2
  /**
2
3
  * Creates a lazy-initialized Linear client singleton.
3
4
  * The client is instantiated on the first call to `getClient()` and reused
@@ -8,32 +9,23 @@
8
9
  * const linear = await getClient(); // null if apiKey is undefined
9
10
  *
10
11
  * @param apiKey Linear API key. When undefined/empty, `getClient()` returns null.
12
+ *
13
+ * @deprecated Prefer `getLinearClient(apiKey)` from `util/linear.ts` directly.
14
+ * This wrapper is retained for backwards compatibility with existing callers.
11
15
  */
12
16
  export function createLazyLinearClient(apiKey) {
13
- let _client = null;
14
17
  return {
15
- async getClient() {
16
- if (!_client && apiKey) {
17
- const { LinearClient } = await import("@linear/sdk");
18
- _client = new LinearClient({ apiKey });
19
- }
20
- return _client;
21
- },
18
+ getClient: () => getLinearClient(apiKey),
22
19
  };
23
20
  }
21
+ /**
22
+ * Fetches workflow states for the given teams and builds a
23
+ * `${teamId}:${stateName}` → stateId map.
24
+ *
25
+ * Delegates to `resolveWorkflowStatesByTeam` from `util/linear.ts`, which
26
+ * parallelizes all `state.team` relation fetches via Promise.all.
27
+ */
24
28
  export async function resolveWorkflowStates(linearClient, teamIds) {
25
- const allStates = await linearClient.workflowStates({
26
- filter: { team: { id: { in: teamIds } } },
27
- first: 100,
28
- });
29
- const stateMap = new Map();
30
- for (const state of allStates.nodes ?? []) {
31
- // state.team is a lazy relation in the Linear SDK — must await to resolve
32
- const team = await state.team;
33
- const teamId = team?.id;
34
- if (teamId)
35
- stateMap.set(`${teamId}:${state.name}`, state.id);
36
- }
37
- return stateMap;
29
+ return resolveWorkflowStatesByTeam(linearClient, teamIds);
38
30
  }
39
31
  //# sourceMappingURL=linear-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"linear-helpers.js","sourceRoot":"","sources":["../../src/pm/linear-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA0B;IAG/D,IAAI,OAAO,GAAQ,IAAI,CAAC;IACxB,OAAO;QACL,KAAK,CAAC,SAAS;YACb,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;gBACrD,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAAiB,EACjB,OAAiB;IAEjB,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC;QAClD,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;QACzC,KAAK,EAAE,GAAG;KACX,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QAC1C,0EAA0E;QAC1E,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC9B,MAAM,MAAM,GAAG,IAAI,EAAE,EAAE,CAAC;QACxB,IAAI,MAAM;YAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"linear-helpers.js","sourceRoot":"","sources":["../../src/pm/linear-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAA0B;IAG/D,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;KACzC,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAAiB,EACjB,OAAiB;IAEjB,OAAO,2BAA2B,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * PM Agent pause state — single-process shared mutable state for the pause/resume
3
+ * Slack commands. Extracted to a micro-module so that `slack-commands.ts` can read
4
+ * and write the flag without importing from `slack-interface.ts`, which would create
5
+ * a circular dependency (slack-interface imports slack-commands; slack-commands must
6
+ * not import back from slack-interface).
7
+ *
8
+ * Note: single-process only. For multi-process deploys, replace with a Redis-backed
9
+ * implementation.
10
+ */
11
+ /**
12
+ * Returns `true` if the PM Agent is currently paused.
13
+ *
14
+ * Pause is active when EITHER of the following is true (OR logic):
15
+ * - `process.env.PM_AGENT_PAUSED === "true"` — env-var path for no-Slack incident
16
+ * response. Toggling requires a container restart (env vars are read at each
17
+ * tick invocation, not at module load time).
18
+ * - `setPmPaused(true)` has been called via the Slack `/pm pause` command.
19
+ *
20
+ * The env-var takes priority: setting `PM_AGENT_PAUSED=true` keeps the agent
21
+ * paused even if `setPmPaused(false)` is subsequently called via Slack.
22
+ */
23
+ export declare function isPmPaused(): boolean;
24
+ /**
25
+ * Sets the Slack-driven pause flag. Use `setPmPaused(true)` when the user
26
+ * sends `/pm pause` and `setPmPaused(false)` for `/pm resume`.
27
+ */
28
+ export declare function setPmPaused(value: boolean): void;
29
+ //# sourceMappingURL=pause-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause-state.d.ts","sourceRoot":"","sources":["../../src/pm/pause-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAEhD"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * PM Agent pause state — single-process shared mutable state for the pause/resume
3
+ * Slack commands. Extracted to a micro-module so that `slack-commands.ts` can read
4
+ * and write the flag without importing from `slack-interface.ts`, which would create
5
+ * a circular dependency (slack-interface imports slack-commands; slack-commands must
6
+ * not import back from slack-interface).
7
+ *
8
+ * Note: single-process only. For multi-process deploys, replace with a Redis-backed
9
+ * implementation.
10
+ */
11
+ let paused = false;
12
+ /**
13
+ * Returns `true` if the PM Agent is currently paused.
14
+ *
15
+ * Pause is active when EITHER of the following is true (OR logic):
16
+ * - `process.env.PM_AGENT_PAUSED === "true"` — env-var path for no-Slack incident
17
+ * response. Toggling requires a container restart (env vars are read at each
18
+ * tick invocation, not at module load time).
19
+ * - `setPmPaused(true)` has been called via the Slack `/pm pause` command.
20
+ *
21
+ * The env-var takes priority: setting `PM_AGENT_PAUSED=true` keeps the agent
22
+ * paused even if `setPmPaused(false)` is subsequently called via Slack.
23
+ */
24
+ export function isPmPaused() {
25
+ return process.env.PM_AGENT_PAUSED === "true" || paused;
26
+ }
27
+ /**
28
+ * Sets the Slack-driven pause flag. Use `setPmPaused(true)` when the user
29
+ * sends `/pm pause` and `setPmPaused(false)` for `/pm resume`.
30
+ */
31
+ export function setPmPaused(value) {
32
+ paused = value;
33
+ }
34
+ //# sourceMappingURL=pause-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause-state.js","sourceRoot":"","sources":["../../src/pm/pause-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,IAAI,MAAM,GAAG,KAAK,CAAC;AAEnB;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,MAAM,IAAI,MAAM,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * PM Agent — bulk issue creation via Claude analysis.
3
+ *
4
+ * Responsibility: given a free-text request from a Slack user, ask Claude Sonnet
5
+ * to produce a structured list of issue specifications that can be bulk-created
6
+ * in Linear.
7
+ *
8
+ * Extracted from `slack-interface.ts` (BEC-195) so that this single concern has
9
+ * its own file and can be unit-tested independently.
10
+ */
11
+ /**
12
+ * A single issue specification produced by `analyzeBulkCreateRequest`.
13
+ * Each field maps directly to a Linear issue field; `acceptanceCriteria` are
14
+ * appended to the issue description as a checklist.
15
+ */
16
+ export interface BulkIssueSpec {
17
+ title: string;
18
+ description: string;
19
+ priority: number;
20
+ acceptanceCriteria: string[];
21
+ }
22
+ /**
23
+ * Uses a capable Claude model (Sonnet) to analyze a bulk create request and
24
+ * produce a structured list of issue specifications ready for Linear creation.
25
+ *
26
+ * @param request - Free-text user request describing what issues to create
27
+ * (e.g. "find all gaps in error handling and create tickets for them").
28
+ * @param callClaudeSonnet - Callable that sends a prompt to Claude Sonnet and
29
+ * returns the raw text response.
30
+ * @returns Array of up to 10 `BulkIssueSpec` objects, or an empty array when
31
+ * the request cannot be analyzed or Claude returns malformed JSON.
32
+ */
33
+ export declare function analyzeBulkCreateRequest(request: string, callClaudeSonnet: (prompt: string) => Promise<string>): Promise<BulkIssueSpec[]>;
34
+ //# sourceMappingURL=slack-bulk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-bulk.d.ts","sourceRoot":"","sources":["../../src/pm/slack-bulk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiCH;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAMD;;;;;;;;;;GAUG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACpD,OAAO,CAAC,aAAa,EAAE,CAAC,CAkE1B"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * PM Agent — bulk issue creation via Claude analysis.
3
+ *
4
+ * Responsibility: given a free-text request from a Slack user, ask Claude Sonnet
5
+ * to produce a structured list of issue specifications that can be bulk-created
6
+ * in Linear.
7
+ *
8
+ * Extracted from `slack-interface.ts` (BEC-195) so that this single concern has
9
+ * its own file and can be unit-tested independently.
10
+ */
11
+ import { createLogger } from "../logger.js";
12
+ import { sanitize } from "../executor/prompt/sanitizer.js";
13
+ const log = createLogger({ component: "PmAgent:slack-bulk" });
14
+ // ---------------------------------------------------------------------------
15
+ // Constants
16
+ // ---------------------------------------------------------------------------
17
+ /** Valid numeric priority values accepted by Linear (1=Urgent … 4=Low). */
18
+ const VALID_PRIORITIES = [1, 2, 3, 4];
19
+ /** Default priority used when a generated issue omits or has an invalid value. */
20
+ const DEFAULT_PRIORITY = 3;
21
+ /** Maximum allowed character length for an issue title. */
22
+ const MAX_ISSUE_TITLE_LENGTH = 200;
23
+ /** Maximum allowed character length for an issue description. */
24
+ const MAX_ISSUE_DESCRIPTION_LENGTH = 5000;
25
+ /** Maximum number of acceptance criteria strings per issue. */
26
+ const MAX_ACCEPTANCE_CRITERIA_COUNT = 10;
27
+ /** Maximum number of issue specs returned by a single bulk create request. */
28
+ const MAX_BULK_ISSUE_SPECS = 10;
29
+ // ---------------------------------------------------------------------------
30
+ // Public API
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Uses a capable Claude model (Sonnet) to analyze a bulk create request and
34
+ * produce a structured list of issue specifications ready for Linear creation.
35
+ *
36
+ * @param request - Free-text user request describing what issues to create
37
+ * (e.g. "find all gaps in error handling and create tickets for them").
38
+ * @param callClaudeSonnet - Callable that sends a prompt to Claude Sonnet and
39
+ * returns the raw text response.
40
+ * @returns Array of up to 10 `BulkIssueSpec` objects, or an empty array when
41
+ * the request cannot be analyzed or Claude returns malformed JSON.
42
+ */
43
+ export async function analyzeBulkCreateRequest(request, callClaudeSonnet) {
44
+ const safe = sanitize(request);
45
+ const prompt = `You are a software PM Agent. A user asked: "${safe}"\n\n` +
46
+ `Analyze this request and generate a list of concrete, actionable software issues to create.\n` +
47
+ `Each issue must have a clear title, description, priority (1=urgent, 2=high, 3=medium, 4=low), and acceptance criteria.\n\n` +
48
+ `Respond ONLY with a JSON array (no other text), e.g.:\n` +
49
+ `[\n` +
50
+ ` {\n` +
51
+ ` "title": "Issue title",\n` +
52
+ ` "description": "Clear description of what needs to be done",\n` +
53
+ ` "priority": 2,\n` +
54
+ ` "acceptanceCriteria": ["Criterion 1", "Criterion 2"]\n` +
55
+ ` }\n` +
56
+ `]\n\n` +
57
+ `Rules:\n` +
58
+ `- Generate between 1 and 10 issues\n` +
59
+ `- Each issue must be specific and actionable\n` +
60
+ `- Priority must be 1, 2, 3, or 4\n` +
61
+ `- acceptanceCriteria must be a non-empty array of strings\n` +
62
+ `- Respond ONLY with the JSON array, no markdown fences or explanation`;
63
+ try {
64
+ const raw = await callClaudeSonnet(prompt);
65
+ // Parse the array — look for a JSON array in the response
66
+ const arrayMatch = raw.match(/\[[\s\S]*\]/);
67
+ if (!arrayMatch) {
68
+ log.warn({ responsePreview: raw.slice(0, 200) }, "bulk create: no JSON array in Claude response");
69
+ return [];
70
+ }
71
+ let parsed;
72
+ try {
73
+ parsed = JSON.parse(arrayMatch[0]);
74
+ }
75
+ catch {
76
+ log.warn({ responsePreview: raw.slice(0, 200) }, "bulk create: failed to parse JSON array");
77
+ return [];
78
+ }
79
+ if (!Array.isArray(parsed))
80
+ return [];
81
+ const specs = [];
82
+ for (const item of parsed) {
83
+ if (typeof item !== "object" || item === null)
84
+ continue;
85
+ const title = typeof item.title === "string" ? item.title.trim() : "";
86
+ const description = typeof item.description === "string" ? item.description.trim() : "";
87
+ const priority = typeof item.priority === "number" && VALID_PRIORITIES.includes(item.priority)
88
+ ? item.priority
89
+ : DEFAULT_PRIORITY;
90
+ const acceptanceCriteria = Array.isArray(item.acceptanceCriteria)
91
+ ? item.acceptanceCriteria.filter((c) => typeof c === "string" && c.trim().length > 0)
92
+ : [];
93
+ if (!title)
94
+ continue;
95
+ // Cap field lengths to prevent excessively large Linear issues.
96
+ specs.push({
97
+ title: title.slice(0, MAX_ISSUE_TITLE_LENGTH),
98
+ description: description.slice(0, MAX_ISSUE_DESCRIPTION_LENGTH),
99
+ priority,
100
+ acceptanceCriteria: acceptanceCriteria.slice(0, MAX_ACCEPTANCE_CRITERIA_COUNT),
101
+ });
102
+ }
103
+ return specs.slice(0, MAX_BULK_ISSUE_SPECS);
104
+ }
105
+ catch (err) {
106
+ log.warn({ err }, "bulk create: failed to analyze request");
107
+ return [];
108
+ }
109
+ }
110
+ //# sourceMappingURL=slack-bulk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-bulk.js","sourceRoot":"","sources":["../../src/pm/slack-bulk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * PM Agent — Slack command execution.
3
+ *
4
+ * Responsibility: execute a parsed `PmCommand` against the Linear API and return
5
+ * a human-readable response string suitable for posting back to Slack.
6
+ *
7
+ * Extracted from `slack-interface.ts` (BEC-195). The previous implementation
8
+ * accessed `isPmPaused` / `setPmPaused` as module-level closures within
9
+ * `slack-interface.ts`. After the split those functions live in `pause-state.ts`
10
+ * and are imported explicitly here, making the dependency transparent and
11
+ * avoiding a circular import (slack-interface → slack-commands → slack-interface).
12
+ */
13
+ /**
14
+ * Structured representation of a PM command parsed from Slack text.
15
+ * This type lives here (rather than in `slack-interface.ts`) so that
16
+ * `executePmCommand` owns the shape of the data it operates on, and
17
+ * `slack-interface.ts` can import it without creating a circular dependency.
18
+ */
19
+ export type PmCommand = {
20
+ type: "prioritize";
21
+ issueId: string;
22
+ } | {
23
+ type: "create";
24
+ title: string;
25
+ description: string;
26
+ } | {
27
+ type: "bulk_create";
28
+ request: string;
29
+ } | {
30
+ type: "status";
31
+ } | {
32
+ type: "pause";
33
+ } | {
34
+ type: "resume";
35
+ } | {
36
+ type: "assign";
37
+ issueId: string;
38
+ }
39
+ /** Operator-initiated stop. `runId` is a pipeline_runs row id (nanoid). */
40
+ | {
41
+ type: "cancel";
42
+ runId: string;
43
+ } | {
44
+ type: "stop";
45
+ runId: string;
46
+ } | {
47
+ type: "halt";
48
+ } | {
49
+ type: "unknown";
50
+ original: string;
51
+ };
52
+ /**
53
+ * External dependencies injected into `executePmCommand`.
54
+ * All fields are optional so callers can pass a partial object during testing.
55
+ */
56
+ export interface CommandExecutorDeps {
57
+ /** Linear API key (needed for create / prioritize / assign commands). */
58
+ linearApiKey?: string;
59
+ /** Team IDs for issue creation commands. */
60
+ teamIds?: string[];
61
+ /** Sonnet-model callable required for the `bulk_create` command. */
62
+ callClaudeSonnet?: (prompt: string) => Promise<string>;
63
+ /**
64
+ * Reference to the live pipeline runner. Required for `cancel`/`stop`/`halt`
65
+ * commands; if absent, those commands report a clear configuration error
66
+ * rather than silently succeeding.
67
+ */
68
+ runner?: {
69
+ requestStop?: (runId: string, mode: "cancel" | "graceful") => {
70
+ issueId: string | null;
71
+ mode: "cancel" | "graceful";
72
+ };
73
+ haltAll?: () => {
74
+ cancelledRunIds: string[];
75
+ };
76
+ };
77
+ /** DB handle for audit-event writes. */
78
+ db?: any;
79
+ /** Slack user id (e.g. "U123") for audit attribution. */
80
+ slackUserId?: string;
81
+ }
82
+ /**
83
+ * Executes a parsed `PmCommand` against Linear and returns a human-readable
84
+ * response string suitable for posting back to Slack.
85
+ *
86
+ * Design note — implicit state access: the `pause` / `resume` / `status`
87
+ * command cases call `isPmPaused()` and `setPmPaused()` from `pause-state.ts`.
88
+ * These functions are now explicit imports rather than closures over outer module
89
+ * state (as they were when this logic lived in `slack-interface.ts`). The
90
+ * dependency is intentional and transparent — the pause flag is process-scoped
91
+ * shared state that must be the same instance for both command execution and the
92
+ * scheduler's `isPmPaused()` check.
93
+ *
94
+ * @param cmd - A structured `PmCommand` (output of `parsePmCommand` or
95
+ * `interpretNaturalLanguage`).
96
+ * @param deps - External service dependencies (Linear API key, team IDs,
97
+ * optional Sonnet callable for bulk create).
98
+ * @returns A Slack-formatted response string (may contain mrkdwn markup).
99
+ */
100
+ export declare function executePmCommand(cmd: PmCommand, deps: CommandExecutorDeps): Promise<string>;
101
+ //# sourceMappingURL=slack-commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack-commands.d.ts","sourceRoot":"","sources":["../../src/pm/slack-commands.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwBH;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GACjB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACrC,2EAA2E;GACzE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAe1C;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD;;;;OAIG;IACH,MAAM,CAAC,EAAE;QACP,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,UAAU,KAAK;YAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;YAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;SAAE,CAAC;QACtH,OAAO,CAAC,EAAE,MAAM;YAAE,eAAe,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;KAC/C,CAAC;IACF,wCAAwC;IACxC,EAAE,CAAC,EAAE,GAAG,CAAC;IACT,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+BD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,MAAM,CAAC,CA2PjB"}