@websitelabs/n8n-nodes-software-teams 0.12.3

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 (176) hide show
  1. package/ARCHITECTURE.md +1232 -0
  2. package/CONTRACT.md +450 -0
  3. package/README.md +491 -0
  4. package/dist/agents/software-teams-architect.md +155 -0
  5. package/dist/agents/software-teams-backend.md +93 -0
  6. package/dist/agents/software-teams-codebase-mapper.md +67 -0
  7. package/dist/agents/software-teams-committer.md +90 -0
  8. package/dist/agents/software-teams-debugger.md +91 -0
  9. package/dist/agents/software-teams-dev-planner.md +175 -0
  10. package/dist/agents/software-teams-devops.md +92 -0
  11. package/dist/agents/software-teams-feedback-learner.md +118 -0
  12. package/dist/agents/software-teams-frontend.md +107 -0
  13. package/dist/agents/software-teams-game-ai-engineer.md +179 -0
  14. package/dist/agents/software-teams-game-art-pipeline.md +180 -0
  15. package/dist/agents/software-teams-game-designer.md +245 -0
  16. package/dist/agents/software-teams-game-devops.md +134 -0
  17. package/dist/agents/software-teams-game-engineer.md +146 -0
  18. package/dist/agents/software-teams-game-producer.md +288 -0
  19. package/dist/agents/software-teams-game-qa.md +297 -0
  20. package/dist/agents/software-teams-game-tech-artist.md +186 -0
  21. package/dist/agents/software-teams-head-engineering.md +37 -0
  22. package/dist/agents/software-teams-perf-analyst.md +124 -0
  23. package/dist/agents/software-teams-phase-researcher.md +75 -0
  24. package/dist/agents/software-teams-plan-checker.md +87 -0
  25. package/dist/agents/software-teams-planner.md +456 -0
  26. package/dist/agents/software-teams-pr-feedback.md +127 -0
  27. package/dist/agents/software-teams-pr-generator.md +107 -0
  28. package/dist/agents/software-teams-producer.md +203 -0
  29. package/dist/agents/software-teams-product-lead.md +51 -0
  30. package/dist/agents/software-teams-programmer.md +126 -0
  31. package/dist/agents/software-teams-qa-tester.md +165 -0
  32. package/dist/agents/software-teams-quality.md +153 -0
  33. package/dist/agents/software-teams-researcher.md +151 -0
  34. package/dist/agents/software-teams-security.md +126 -0
  35. package/dist/agents/software-teams-ux-designer.md +92 -0
  36. package/dist/agents/software-teams-verifier.md +87 -0
  37. package/dist/credentials/SoftwareTeamsApi.credentials.d.ts +18 -0
  38. package/dist/credentials/SoftwareTeamsApi.credentials.d.ts.map +1 -0
  39. package/dist/credentials/SoftwareTeamsApi.credentials.js +110 -0
  40. package/dist/credentials/SoftwareTeamsApi.credentials.js.map +1 -0
  41. package/dist/credentials/softwareTeamsApi.svg +14 -0
  42. package/dist/nodes/SoftwareTeamsAgent/SoftwareTeamsAgent.node.d.ts +23 -0
  43. package/dist/nodes/SoftwareTeamsAgent/SoftwareTeamsAgent.node.d.ts.map +1 -0
  44. package/dist/nodes/SoftwareTeamsAgent/SoftwareTeamsAgent.node.js +308 -0
  45. package/dist/nodes/SoftwareTeamsAgent/SoftwareTeamsAgent.node.js.map +1 -0
  46. package/dist/nodes/SoftwareTeamsAgent/softwareTeamsAgent.svg +18 -0
  47. package/dist/nodes/SoftwareTeamsCleanup/SoftwareTeamsCleanup.node.d.ts +24 -0
  48. package/dist/nodes/SoftwareTeamsCleanup/SoftwareTeamsCleanup.node.d.ts.map +1 -0
  49. package/dist/nodes/SoftwareTeamsCleanup/SoftwareTeamsCleanup.node.js +2635 -0
  50. package/dist/nodes/SoftwareTeamsCleanup/SoftwareTeamsCleanup.node.js.map +1 -0
  51. package/dist/nodes/SoftwareTeamsCleanup/SoftwareTeamsCleanup.svg +6 -0
  52. package/dist/nodes/SoftwareTeamsFinaliser/SoftwareTeamsFinaliser.node.d.ts +6 -0
  53. package/dist/nodes/SoftwareTeamsFinaliser/SoftwareTeamsFinaliser.node.d.ts.map +1 -0
  54. package/dist/nodes/SoftwareTeamsFinaliser/SoftwareTeamsFinaliser.node.js +231 -0
  55. package/dist/nodes/SoftwareTeamsFinaliser/SoftwareTeamsFinaliser.node.js.map +1 -0
  56. package/dist/nodes/SoftwareTeamsFinaliser/softwareTeamsFinaliser.svg +11 -0
  57. package/dist/nodes/SoftwareTeamsHitl/SoftwareTeamsHitl.node.d.ts +25 -0
  58. package/dist/nodes/SoftwareTeamsHitl/SoftwareTeamsHitl.node.d.ts.map +1 -0
  59. package/dist/nodes/SoftwareTeamsHitl/SoftwareTeamsHitl.node.js +366 -0
  60. package/dist/nodes/SoftwareTeamsHitl/SoftwareTeamsHitl.node.js.map +1 -0
  61. package/dist/nodes/SoftwareTeamsHitl/softwareTeamsHitl.svg +11 -0
  62. package/dist/nodes/SoftwareTeamsOrchestrator/SoftwareTeamsOrchestrator.node.d.ts +15 -0
  63. package/dist/nodes/SoftwareTeamsOrchestrator/SoftwareTeamsOrchestrator.node.d.ts.map +1 -0
  64. package/dist/nodes/SoftwareTeamsOrchestrator/SoftwareTeamsOrchestrator.node.js +373 -0
  65. package/dist/nodes/SoftwareTeamsOrchestrator/SoftwareTeamsOrchestrator.node.js.map +1 -0
  66. package/dist/nodes/SoftwareTeamsOrchestrator/softwareTeamsOrchestrator.svg +20 -0
  67. package/dist/nodes/SoftwareTeamsOutput/SoftwareTeamsOutput.node.d.ts +6 -0
  68. package/dist/nodes/SoftwareTeamsOutput/SoftwareTeamsOutput.node.d.ts.map +1 -0
  69. package/dist/nodes/SoftwareTeamsOutput/SoftwareTeamsOutput.node.js +2685 -0
  70. package/dist/nodes/SoftwareTeamsOutput/SoftwareTeamsOutput.node.js.map +1 -0
  71. package/dist/nodes/SoftwareTeamsOutput/SoftwareTeamsOutput.svg +6 -0
  72. package/dist/nodes/SoftwareTeamsPrFeedback/SoftwareTeamsPrFeedback.node.d.ts +22 -0
  73. package/dist/nodes/SoftwareTeamsPrFeedback/SoftwareTeamsPrFeedback.node.d.ts.map +1 -0
  74. package/dist/nodes/SoftwareTeamsPrFeedback/SoftwareTeamsPrFeedback.node.js +2655 -0
  75. package/dist/nodes/SoftwareTeamsPrFeedback/SoftwareTeamsPrFeedback.node.js.map +1 -0
  76. package/dist/nodes/SoftwareTeamsPrFeedback/softwareTeamsPrFeedback.svg +8 -0
  77. package/dist/nodes/SoftwareTeamsSlackHitl/SoftwareTeamsSlackHitl.node.d.ts +19 -0
  78. package/dist/nodes/SoftwareTeamsSlackHitl/SoftwareTeamsSlackHitl.node.d.ts.map +1 -0
  79. package/dist/nodes/SoftwareTeamsSlackHitl/SoftwareTeamsSlackHitl.node.js +198 -0
  80. package/dist/nodes/SoftwareTeamsSlackHitl/SoftwareTeamsSlackHitl.node.js.map +1 -0
  81. package/dist/nodes/SoftwareTeamsSlackHitl/softwareTeamsSlackHitl.svg +10 -0
  82. package/dist/nodes/SoftwareTeamsTrigger/SoftwareTeamsTrigger.node.d.ts +6 -0
  83. package/dist/nodes/SoftwareTeamsTrigger/SoftwareTeamsTrigger.node.d.ts.map +1 -0
  84. package/dist/nodes/SoftwareTeamsTrigger/SoftwareTeamsTrigger.node.js +2601 -0
  85. package/dist/nodes/SoftwareTeamsTrigger/SoftwareTeamsTrigger.node.js.map +1 -0
  86. package/dist/nodes/SoftwareTeamsTrigger/SoftwareTeamsTrigger.node.svg +6 -0
  87. package/dist/nodes/SoftwareTeamsWorkspace/SoftwareTeamsWorkspace.node.d.ts +20 -0
  88. package/dist/nodes/SoftwareTeamsWorkspace/SoftwareTeamsWorkspace.node.d.ts.map +1 -0
  89. package/dist/nodes/SoftwareTeamsWorkspace/SoftwareTeamsWorkspace.node.js +175 -0
  90. package/dist/nodes/SoftwareTeamsWorkspace/SoftwareTeamsWorkspace.node.js.map +1 -0
  91. package/dist/nodes/SoftwareTeamsWorkspace/softwareTeamsWorkspace.svg +13 -0
  92. package/dist/src/execution/single-turn.d.ts +6 -0
  93. package/dist/src/execution/single-turn.d.ts.map +1 -0
  94. package/dist/src/execution/single-turn.js +2662 -0
  95. package/dist/src/execution/single-turn.js.map +1 -0
  96. package/dist/src/hitl/channels.d.ts +48 -0
  97. package/dist/src/hitl/channels.d.ts.map +1 -0
  98. package/dist/src/hitl/channels.js +297 -0
  99. package/dist/src/hitl/channels.js.map +1 -0
  100. package/dist/src/hitl/conversation-state.d.ts +45 -0
  101. package/dist/src/hitl/conversation-state.d.ts.map +1 -0
  102. package/dist/src/hitl/conversation-state.js +69 -0
  103. package/dist/src/hitl/conversation-state.js.map +1 -0
  104. package/dist/src/hitl/slack.d.ts +32 -0
  105. package/dist/src/hitl/slack.d.ts.map +1 -0
  106. package/dist/src/hitl/slack.js +202 -0
  107. package/dist/src/hitl/slack.js.map +1 -0
  108. package/dist/src/ingestion/context.d.ts +38 -0
  109. package/dist/src/ingestion/context.d.ts.map +1 -0
  110. package/dist/src/ingestion/context.js +2501 -0
  111. package/dist/src/ingestion/context.js.map +1 -0
  112. package/dist/src/ingestion/pr-feedback.d.ts +48 -0
  113. package/dist/src/ingestion/pr-feedback.d.ts.map +1 -0
  114. package/dist/src/ingestion/pr-feedback.js +85 -0
  115. package/dist/src/ingestion/pr-feedback.js.map +1 -0
  116. package/dist/src/n8n-cast.d.ts +11 -0
  117. package/dist/src/n8n-cast.d.ts.map +1 -0
  118. package/dist/src/n8n-cast.js +17 -0
  119. package/dist/src/n8n-cast.js.map +1 -0
  120. package/dist/src/orchestration/run-state/global-store.d.ts +7 -0
  121. package/dist/src/orchestration/run-state/global-store.d.ts.map +1 -0
  122. package/dist/src/orchestration/run-state/global-store.js +27 -0
  123. package/dist/src/orchestration/run-state/global-store.js.map +1 -0
  124. package/dist/src/orchestration/run-state/ordering.d.ts +14 -0
  125. package/dist/src/orchestration/run-state/ordering.d.ts.map +1 -0
  126. package/dist/src/orchestration/run-state/ordering.js +59 -0
  127. package/dist/src/orchestration/run-state/ordering.js.map +1 -0
  128. package/dist/src/orchestration/run-state/persistence.d.ts +9 -0
  129. package/dist/src/orchestration/run-state/persistence.d.ts.map +1 -0
  130. package/dist/src/orchestration/run-state/persistence.js +29 -0
  131. package/dist/src/orchestration/run-state/persistence.js.map +1 -0
  132. package/dist/src/orchestration/run-state/planning.d.ts +17 -0
  133. package/dist/src/orchestration/run-state/planning.d.ts.map +1 -0
  134. package/dist/src/orchestration/run-state/planning.js +117 -0
  135. package/dist/src/orchestration/run-state/planning.js.map +1 -0
  136. package/dist/src/orchestration/run-state/readiness.d.ts +20 -0
  137. package/dist/src/orchestration/run-state/readiness.d.ts.map +1 -0
  138. package/dist/src/orchestration/run-state/readiness.js +105 -0
  139. package/dist/src/orchestration/run-state/readiness.js.map +1 -0
  140. package/dist/src/orchestration/run-state/shapes.d.ts +53 -0
  141. package/dist/src/orchestration/run-state/shapes.d.ts.map +1 -0
  142. package/dist/src/orchestration/run-state/shapes.js +3 -0
  143. package/dist/src/orchestration/run-state/shapes.js.map +1 -0
  144. package/dist/src/orchestration/run-state/transitions.d.ts +46 -0
  145. package/dist/src/orchestration/run-state/transitions.d.ts.map +1 -0
  146. package/dist/src/orchestration/run-state/transitions.js +133 -0
  147. package/dist/src/orchestration/run-state/transitions.js.map +1 -0
  148. package/dist/src/orchestration/run-state.d.ts +8 -0
  149. package/dist/src/orchestration/run-state.d.ts.map +1 -0
  150. package/dist/src/orchestration/run-state.js +35 -0
  151. package/dist/src/orchestration/run-state.js.map +1 -0
  152. package/dist/src/output/github.d.ts +39 -0
  153. package/dist/src/output/github.d.ts.map +1 -0
  154. package/dist/src/output/github.js +2492 -0
  155. package/dist/src/output/github.js.map +1 -0
  156. package/dist/src/repo/git.d.ts +71 -0
  157. package/dist/src/repo/git.d.ts.map +1 -0
  158. package/dist/src/repo/git.js +207 -0
  159. package/dist/src/repo/git.js.map +1 -0
  160. package/dist/src/repo/merge.d.ts +36 -0
  161. package/dist/src/repo/merge.d.ts.map +1 -0
  162. package/dist/src/repo/merge.js +133 -0
  163. package/dist/src/repo/merge.js.map +1 -0
  164. package/dist/src/repo/repo-context.d.ts +23 -0
  165. package/dist/src/repo/repo-context.d.ts.map +1 -0
  166. package/dist/src/repo/repo-context.js +10 -0
  167. package/dist/src/repo/repo-context.js.map +1 -0
  168. package/dist/src/repo/teardown.d.ts +38 -0
  169. package/dist/src/repo/teardown.d.ts.map +1 -0
  170. package/dist/src/repo/teardown.js +171 -0
  171. package/dist/src/repo/teardown.js.map +1 -0
  172. package/dist/src/repo/validate.d.ts +4 -0
  173. package/dist/src/repo/validate.d.ts.map +1 -0
  174. package/dist/src/repo/validate.js +42 -0
  175. package/dist/src/repo/validate.js.map +1 -0
  176. package/package.json +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"single-turn.js","sourceRoot":"","sources":["../../../src/execution/single-turn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Channel-agnostic HITL delivery adapters (T8 — AC3, AC4).
3
+ *
4
+ * Each adapter implements `postQuestion` (deliver the agent's question to the
5
+ * human) and `postAck` (acknowledge receipt of the human's reply). All
6
+ * secrets/tokens are passed in as function arguments — adapters NEVER read
7
+ * from `process.env` directly (R-02 / AC8).
8
+ */
9
+ /** Delivery coordinates returned by a channel adapter after posting a question. */
10
+ export interface DeliveryRef {
11
+ [key: string]: unknown;
12
+ }
13
+ /** Arguments passed to every channel adapter's `postQuestion`. */
14
+ export interface PostQuestionArgs {
15
+ /** The agent's question text. */
16
+ question: string;
17
+ /** The stable correlation id for this run/conversation. */
18
+ correlationId: string;
19
+ /** The n8n signed resume URL that the human (or their handler) should POST to. */
20
+ resumeUrl: string;
21
+ /** Channel-specific credential token (e.g. Slack bot token, Discord bot token, SMTP URL). */
22
+ token: string;
23
+ /** Channel-specific destination (e.g. Slack channel ID, Discord channel ID, email address). */
24
+ destination: string;
25
+ }
26
+ /** Arguments passed to every channel adapter's `postAck`. */
27
+ export interface PostAckArgs {
28
+ /** The human's reply text. */
29
+ answer: string;
30
+ /** The stable correlation id for this run/conversation. */
31
+ correlationId: string;
32
+ /** Channel-specific credential token. */
33
+ token: string;
34
+ /** Delivery coordinates from the original `postQuestion` call. */
35
+ delivery: DeliveryRef;
36
+ }
37
+ /** Channel adapter contract. */
38
+ export interface HitlChannelAdapter {
39
+ postQuestion(args: PostQuestionArgs): Promise<{
40
+ deliveryRef: DeliveryRef;
41
+ }>;
42
+ postAck(args: PostAckArgs): Promise<void>;
43
+ }
44
+ /** Supported HITL channel names. */
45
+ export type ChannelName = 'slack' | 'email' | 'notify' | 'discord';
46
+ /** Return the channel adapter for the given channel name. */
47
+ export declare function getChannel(name: ChannelName): HitlChannelAdapter;
48
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../../src/hitl/channels.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,kEAAkE;AAClE,MAAM,WAAW,gBAAgB;IAC/B,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,6FAA6F;IAC7F,KAAK,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,6DAA6D;AAC7D,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,QAAQ,EAAE,WAAW,CAAC;CACvB;AAED,gCAAgC;AAChC,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAED,oCAAoC;AACpC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAmVnE,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,kBAAkB,CAQhE"}
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ /**
3
+ * Channel-agnostic HITL delivery adapters (T8 — AC3, AC4).
4
+ *
5
+ * Each adapter implements `postQuestion` (deliver the agent's question to the
6
+ * human) and `postAck` (acknowledge receipt of the human's reply). All
7
+ * secrets/tokens are passed in as function arguments — adapters NEVER read
8
+ * from `process.env` directly (R-02 / AC8).
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.getChannel = getChannel;
45
+ const https = __importStar(require("node:https"));
46
+ const tls = __importStar(require("node:tls"));
47
+ const net = __importStar(require("node:net"));
48
+ // ── Slack adapter ──────────────────────────────────────────────────────────
49
+ /**
50
+ * Slack adapter — reuses the Block Kit post + thread reply pattern from
51
+ * `src/hitl/slack.ts`. Delegates to the existing helpers via require so the
52
+ * Slack-specific HTTP logic is not duplicated.
53
+ */
54
+ const slackAdapter = {
55
+ async postQuestion(args) {
56
+ const SLACK_MODULE = './slack';
57
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
58
+ const slackHelpers = require(SLACK_MODULE);
59
+ const result = await slackHelpers.postQuestion(args.token, args.destination, args.question, args.correlationId, args.resumeUrl);
60
+ return {
61
+ deliveryRef: {
62
+ slackChannel: result.channel,
63
+ slackThreadTs: result.ts,
64
+ },
65
+ };
66
+ },
67
+ async postAck(args) {
68
+ const SLACK_MODULE = './slack';
69
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
70
+ const slackHelpers = require(SLACK_MODULE);
71
+ const channel = args.delivery['slackChannel'];
72
+ const threadTs = args.delivery['slackThreadTs'];
73
+ if (!channel || !threadTs)
74
+ return;
75
+ await slackHelpers.postThreadReply(args.token, channel, threadTs, `Reply received: "${args.answer}" -- resuming agent...`);
76
+ },
77
+ };
78
+ // ── Discord adapter ────────────────────────────────────────────────────────
79
+ /**
80
+ * Discord adapter — posts the question to a Discord channel via the bot
81
+ * token using the Discord REST API v10. Records channel + message id in the
82
+ * delivery ref so we can thread follow-ups.
83
+ */
84
+ const discordAdapter = {
85
+ async postQuestion(args) {
86
+ const content = `**Agent question** (correlation: \`${args.correlationId}\`)\n\n` +
87
+ `${args.question}\n\n` +
88
+ `> Reply via the resume endpoint or use the correlation id to respond.`;
89
+ const result = await discordApiCall('POST', `/channels/${args.destination}/messages`, args.token, { content });
90
+ return {
91
+ deliveryRef: {
92
+ discordChannelId: args.destination,
93
+ discordMessageId: result['id'],
94
+ },
95
+ };
96
+ },
97
+ async postAck(args) {
98
+ const channelId = args.delivery['discordChannelId'];
99
+ const messageId = args.delivery['discordMessageId'];
100
+ if (!channelId || !messageId)
101
+ return;
102
+ const content = `Reply received: "${args.answer}" -- resuming agent... (correlation: \`${args.correlationId}\`)`;
103
+ await discordApiCall('POST', `/channels/${channelId}/messages`, args.token, {
104
+ content,
105
+ message_reference: { message_id: messageId },
106
+ });
107
+ },
108
+ };
109
+ /** Low-level Discord REST API call. */
110
+ async function discordApiCall(method, path, botToken, payload) {
111
+ const body = JSON.stringify(payload);
112
+ const contentLength = Buffer.byteLength(body, 'utf8');
113
+ return new Promise((resolve, reject) => {
114
+ const req = https.request({
115
+ hostname: 'discord.com',
116
+ path: `/api/v10${path}`,
117
+ method,
118
+ headers: {
119
+ 'Content-Type': 'application/json',
120
+ 'Content-Length': contentLength,
121
+ Authorization: `Bot ${botToken}`,
122
+ Accept: 'application/json',
123
+ },
124
+ }, (res) => {
125
+ const chunks = [];
126
+ res.on('data', (chunk) => chunks.push(chunk));
127
+ res.on('end', () => {
128
+ const raw = Buffer.concat(chunks).toString('utf8');
129
+ try {
130
+ const parsed = JSON.parse(raw);
131
+ if (res.statusCode && res.statusCode >= 400) {
132
+ reject(new Error(`Discord API ${method} ${path} returned ${res.statusCode}: ${raw.slice(0, 300)}`));
133
+ }
134
+ else {
135
+ resolve(parsed);
136
+ }
137
+ }
138
+ catch {
139
+ reject(new Error(`Discord API: failed to parse response: ${raw.slice(0, 200)}`));
140
+ }
141
+ });
142
+ res.on('error', reject);
143
+ });
144
+ req.on('error', reject);
145
+ req.write(body, 'utf8');
146
+ req.end();
147
+ });
148
+ }
149
+ // ── Email adapter ──────────────────────────────────────────────────────────
150
+ /**
151
+ * Email adapter — sends via SMTP using a single connection string `smtpUrl`
152
+ * (e.g. `smtp://user:pass@host:port`). Uses raw SMTP commands via Node
153
+ * `net`/`tls` to avoid external dependencies.
154
+ *
155
+ * The `destination` field is the recipient email address. The `token` field is
156
+ * the full `smtpUrl` connection string.
157
+ */
158
+ const emailAdapter = {
159
+ async postQuestion(args) {
160
+ const messageId = `<hitl-${args.correlationId}-${Date.now()}@software-teams>`;
161
+ await sendSmtpEmail({
162
+ smtpUrl: args.token,
163
+ to: args.destination,
164
+ subject: `[Software Teams] Agent question (${args.correlationId})`,
165
+ body: `Agent question:\n\n${args.question}\n\n` +
166
+ `Correlation ID: ${args.correlationId}\n` +
167
+ `Resume URL: ${args.resumeUrl}`,
168
+ messageId,
169
+ });
170
+ return {
171
+ deliveryRef: {
172
+ emailTo: args.destination,
173
+ emailMessageId: messageId,
174
+ },
175
+ };
176
+ },
177
+ async postAck(args) {
178
+ const originalMessageId = args.delivery['emailMessageId'];
179
+ const to = args.delivery['emailTo'];
180
+ if (!to)
181
+ return;
182
+ await sendSmtpEmail({
183
+ smtpUrl: args.token,
184
+ to,
185
+ subject: `Re: [Software Teams] Agent question (${args.correlationId})`,
186
+ body: `Reply received: "${args.answer}" -- resuming agent...\n\nCorrelation ID: ${args.correlationId}`,
187
+ messageId: `<hitl-ack-${args.correlationId}-${Date.now()}@software-teams>`,
188
+ inReplyTo: originalMessageId,
189
+ });
190
+ },
191
+ };
192
+ /** Parse an SMTP URL into connection components. */
193
+ function parseSmtpUrl(smtpUrl) {
194
+ const url = new URL(smtpUrl);
195
+ const secure = url.protocol === 'smtps:' || url.port === '465';
196
+ return {
197
+ host: url.hostname,
198
+ port: url.port ? parseInt(url.port, 10) : (secure ? 465 : 587),
199
+ user: decodeURIComponent(url.username),
200
+ pass: decodeURIComponent(url.password),
201
+ secure,
202
+ };
203
+ }
204
+ /** Send an email via raw SMTP. Minimal implementation for HITL notifications. */
205
+ async function sendSmtpEmail(opts) {
206
+ const conn = parseSmtpUrl(opts.smtpUrl);
207
+ const fromAddr = conn.user.includes('@') ? conn.user : `hitl@software-teams.local`;
208
+ const headers = [
209
+ `From: Software Teams HITL <${fromAddr}>`,
210
+ `To: ${opts.to}`,
211
+ `Subject: ${opts.subject}`,
212
+ `Message-ID: ${opts.messageId}`,
213
+ ...(opts.inReplyTo ? [`In-Reply-To: ${opts.inReplyTo}`, `References: ${opts.inReplyTo}`] : []),
214
+ `Date: ${new Date().toUTCString()}`,
215
+ `MIME-Version: 1.0`,
216
+ `Content-Type: text/plain; charset=utf-8`,
217
+ ];
218
+ const message = headers.join('\r\n') + '\r\n\r\n' + opts.body;
219
+ return new Promise((resolve, reject) => {
220
+ const onConnect = (socket) => {
221
+ // We just need a minimal SMTP exchange
222
+ let state = 0; // 0=greeting, 1=EHLO, 2=AUTH, 3=MAIL, 4=RCPT, 5=DATA, 6=body, 7=QUIT
223
+ const commands = [
224
+ `EHLO software-teams\r\n`,
225
+ `AUTH PLAIN ${Buffer.from(`\0${conn.user}\0${conn.pass}`).toString('base64')}\r\n`,
226
+ `MAIL FROM:<${fromAddr}>\r\n`,
227
+ `RCPT TO:<${opts.to}>\r\n`,
228
+ `DATA\r\n`,
229
+ `${message}\r\n.\r\n`,
230
+ `QUIT\r\n`,
231
+ ];
232
+ socket.on('data', (data) => {
233
+ const response = data.toString('utf8');
234
+ const code = parseInt(response.slice(0, 3), 10);
235
+ if (code >= 400 && state < 7) {
236
+ socket.destroy();
237
+ reject(new Error(`SMTP error at state ${state}: ${response.trim()}`));
238
+ return;
239
+ }
240
+ if (state < commands.length) {
241
+ socket.write(commands[state]);
242
+ state++;
243
+ }
244
+ else {
245
+ socket.destroy();
246
+ resolve();
247
+ }
248
+ });
249
+ socket.on('error', reject);
250
+ };
251
+ const socket = conn.secure
252
+ ? tls.connect({ host: conn.host, port: conn.port, rejectUnauthorized: true }, function () { onConnect(this); })
253
+ : net.connect({ host: conn.host, port: conn.port }, function () { onConnect(this); });
254
+ socket.on('error', reject);
255
+ });
256
+ }
257
+ // ── Notify adapter ─────────────────────────────────────────────────────────
258
+ /**
259
+ * n8n-notification adapter — emits a structured payload that downstream
260
+ * n8n nodes (e.g. an n8n Notification node, a Set node, or a webhook) can
261
+ * consume. No external API call is needed; the "delivery" is the payload
262
+ * itself, available in the node's output for downstream wiring.
263
+ */
264
+ const notifyAdapter = {
265
+ async postQuestion(args) {
266
+ return {
267
+ deliveryRef: {
268
+ type: 'n8n-notification',
269
+ correlationId: args.correlationId,
270
+ question: args.question,
271
+ resumeUrl: args.resumeUrl,
272
+ destination: args.destination,
273
+ timestamp: Date.now(),
274
+ },
275
+ };
276
+ },
277
+ async postAck(_args) {
278
+ // No external action needed for n8n-notification — downstream nodes
279
+ // handle acknowledgement via the workflow itself.
280
+ },
281
+ };
282
+ // ── Factory ────────────────────────────────────────────────────────────────
283
+ const adapters = {
284
+ slack: slackAdapter,
285
+ discord: discordAdapter,
286
+ email: emailAdapter,
287
+ notify: notifyAdapter,
288
+ };
289
+ /** Return the channel adapter for the given channel name. */
290
+ function getChannel(name) {
291
+ const adapter = adapters[name];
292
+ if (!adapter) {
293
+ throw new Error(`Unknown HITL channel "${name}". Supported channels: ${Object.keys(adapters).join(', ')}`);
294
+ }
295
+ return adapter;
296
+ }
297
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../../src/hitl/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import type { NodeEnvelope } from '@websitelabs/software-teams';
2
+ /** Supported HITL delivery channels. */
3
+ export type HitlChannel = 'slack' | 'email' | 'notify' | 'discord';
4
+ /** All the state the HITL node needs to resume a parked run. */
5
+ export interface ConversationState {
6
+ correlationId: string;
7
+ originalEnvelope: NodeEnvelope;
8
+ slackChannel: string;
9
+ slackThreadTs: string;
10
+ resumeUrl: string;
11
+ question: string;
12
+ createdAt: number;
13
+ /**
14
+ * Which delivery channel this conversation is using.
15
+ * Optional for back-compat — omitted states are implicitly Slack.
16
+ */
17
+ channel?: HitlChannel;
18
+ /**
19
+ * Current round number (1-based). Omitted states default to round 1.
20
+ * Callers increment via `nextRound()` and re-save to continue the loop.
21
+ */
22
+ round?: number;
23
+ /**
24
+ * Generic bag for non-Slack channel delivery coordinates (e.g. Discord
25
+ * channel/message id, email thread id). Avoids adding new top-level
26
+ * fields for every channel.
27
+ */
28
+ delivery?: Record<string, unknown>;
29
+ }
30
+ /** Resolve the path for the JSON state file. */
31
+ export declare function getStorePath(): string;
32
+ /** Persist a conversation state record keyed by `correlationId`. */
33
+ export declare function saveState(state: ConversationState): void;
34
+ /** Load the conversation state for `correlationId`. Returns `null` if not found. */
35
+ export declare function loadState(correlationId: string): ConversationState | null;
36
+ /** Remove the conversation state for `correlationId` after a successful resume. */
37
+ export declare function deleteState(correlationId: string): void;
38
+ /** Return all stored states (useful for auditing / expiry sweeps). */
39
+ export declare function allStates(): ConversationState[];
40
+ /**
41
+ * Return the next round number for a conversation state.
42
+ * States with no `round` field are treated as round 1, so the next is 2.
43
+ */
44
+ export declare function nextRound(state: ConversationState): number;
45
+ //# sourceMappingURL=conversation-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-state.d.ts","sourceRoot":"","sources":["../../../src/hitl/conversation-state.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAEhE,wCAAwC;AACxC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnE,gEAAgE;AAChE,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,YAAY,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC;IAEtB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAID,gDAAgD;AAChD,wBAAgB,YAAY,IAAI,MAAM,CAKrC;AAsBD,oEAAoE;AACpE,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAIxD;AAED,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAGzE;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAKvD;AAED,sEAAsE;AACtE,wBAAgB,SAAS,IAAI,iBAAiB,EAAE,CAE/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAE1D"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getStorePath = getStorePath;
4
+ exports.saveState = saveState;
5
+ exports.loadState = loadState;
6
+ exports.deleteState = deleteState;
7
+ exports.allStates = allStates;
8
+ exports.nextRound = nextRound;
9
+ const node_fs_1 = require("node:fs");
10
+ const node_path_1 = require("node:path");
11
+ const node_os_1 = require("node:os");
12
+ /** Resolve the path for the JSON state file. */
13
+ function getStorePath() {
14
+ var _a;
15
+ return ((_a = process.env['HITL_STATE_PATH']) !== null && _a !== void 0 ? _a : (0, node_path_1.join)((0, node_os_1.homedir)(), '.n8n', 'software-teams-hitl-state.json'));
16
+ }
17
+ function readStore() {
18
+ const path = getStorePath();
19
+ if (!(0, node_fs_1.existsSync)(path))
20
+ return {};
21
+ try {
22
+ const raw = (0, node_fs_1.readFileSync)(path, 'utf8');
23
+ return JSON.parse(raw);
24
+ }
25
+ catch {
26
+ return {};
27
+ }
28
+ }
29
+ function writeStore(store) {
30
+ const path = getStorePath();
31
+ const dir = (0, node_path_1.dirname)(path);
32
+ if (!(0, node_fs_1.existsSync)(dir)) {
33
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true });
34
+ }
35
+ (0, node_fs_1.writeFileSync)(path, JSON.stringify(store, null, 2), 'utf8');
36
+ }
37
+ /** Persist a conversation state record keyed by `correlationId`. */
38
+ function saveState(state) {
39
+ const store = readStore();
40
+ store[state.correlationId] = state;
41
+ writeStore(store);
42
+ }
43
+ /** Load the conversation state for `correlationId`. Returns `null` if not found. */
44
+ function loadState(correlationId) {
45
+ var _a;
46
+ const store = readStore();
47
+ return (_a = store[correlationId]) !== null && _a !== void 0 ? _a : null;
48
+ }
49
+ /** Remove the conversation state for `correlationId` after a successful resume. */
50
+ function deleteState(correlationId) {
51
+ const store = readStore();
52
+ if (!(correlationId in store))
53
+ return;
54
+ delete store[correlationId];
55
+ writeStore(store);
56
+ }
57
+ /** Return all stored states (useful for auditing / expiry sweeps). */
58
+ function allStates() {
59
+ return Object.values(readStore());
60
+ }
61
+ /**
62
+ * Return the next round number for a conversation state.
63
+ * States with no `round` field are treated as round 1, so the next is 2.
64
+ */
65
+ function nextRound(state) {
66
+ var _a;
67
+ return ((_a = state.round) !== null && _a !== void 0 ? _a : 1) + 1;
68
+ }
69
+ //# sourceMappingURL=conversation-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-state.js","sourceRoot":"","sources":["../../../src/hitl/conversation-state.ts"],"names":[],"mappings":";;AAyCA,oCAKC;AAuBD,8BAIC;AAGD,8BAGC;AAGD,kCAKC;AAGD,8BAEC;AAMD,8BAEC;AApGD,qCAA6E;AAC7E,yCAA0C;AAC1C,qCAAkC;AAsClC,gDAAgD;AAChD,SAAgB,YAAY;;IAC1B,OAAO,CACL,MAAA,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,mCAC9B,IAAA,gBAAI,EAAC,IAAA,iBAAO,GAAE,EAAE,MAAM,EAAE,gCAAgC,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAe,CAAC;IACvC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAiB;IACnC,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC,IAAA,oBAAU,EAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAA,mBAAS,EAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED,oEAAoE;AACpE,SAAgB,SAAS,CAAC,KAAwB;IAChD,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,oFAAoF;AACpF,SAAgB,SAAS,CAAC,aAAqB;;IAC7C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,OAAO,MAAA,KAAK,CAAC,aAAa,CAAC,mCAAI,IAAI,CAAC;AACtC,CAAC;AAED,mFAAmF;AACnF,SAAgB,WAAW,CAAC,aAAqB;IAC/C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC;QAAE,OAAO;IACtC,OAAO,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5B,UAAU,CAAC,KAAK,CAAC,CAAC;AACpB,CAAC;AAED,sEAAsE;AACtE,SAAgB,SAAS;IACvB,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;AACpC,CAAC;AAED;;;GAGG;AACH,SAAgB,SAAS,CAAC,KAAwB;;IAChD,OAAO,CAAC,MAAA,KAAK,CAAC,KAAK,mCAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Verify a Slack interactivity webhook request using the HMAC-SHA256 signature
3
+ * Slack attaches to every inbound HTTP request.
4
+ *
5
+ * Security (R-05 / auth hardening — T13): the n8n resume URL is the outer auth
6
+ * layer; this adds a second layer by confirming the body was signed by YOUR Slack
7
+ * app's signing secret, so an attacker who learns the URL cannot forge a valid
8
+ * `hitlAnswer` without knowing that secret.
9
+ */
10
+ export declare function verifySlackSignature(slackSignature: string | undefined, timestamp: string | undefined, rawBody: string, signingSecret: string | undefined, maxAgeSeconds?: number): boolean;
11
+ /** Result of a successful chat.postMessage call. */
12
+ export interface PostQuestionResult {
13
+ /** Slack message timestamp — use as `thread_ts` for threaded replies. */
14
+ ts: string;
15
+ /** Resolved channel ID (may differ from the channel param if given a name). */
16
+ channel: string;
17
+ }
18
+ /**
19
+ * Post an agent HITL question to Slack using Block Kit.
20
+ *
21
+ * Embeds correlationId (not the full resumeUrl) in the button value — Slack
22
+ * limits button values to 75 characters; the interactivity handler looks up
23
+ * the resumeUrl from the HITL state store keyed by correlationId.
24
+ */
25
+ export declare function postQuestion(token: string, channel: string, question: string, correlationId: string, _resumeUrl: string): Promise<PostQuestionResult>;
26
+ /**
27
+ * Post a threaded reply in an existing Slack conversation.
28
+ * Uses the Slack HTTP API directly to avoid the n8n built-in Slack tool's
29
+ * thread_ts bug (GitHub #21252).
30
+ */
31
+ export declare function postThreadReply(token: string, channel: string, threadTs: string, message: string): Promise<void>;
32
+ //# sourceMappingURL=slack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../../src/hitl/slack.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,aAAa,SAAM,GAClB,OAAO,CAmBT;AAED,oDAAoD;AACpD,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,EAAE,EAAE,MAAM,CAAC;IACX,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,CAsE7B;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAOf"}