@mastra/factory 0.24.0 → 0.25.0-alpha.0

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 (165) hide show
  1. package/README.md +36 -9
  2. package/dist/auth.d.ts.map +1 -1
  3. package/dist/auth.js +18 -4
  4. package/dist/auth.js.map +1 -1
  5. package/dist/boards/review.d.ts.map +1 -1
  6. package/dist/boards/review.js +3 -2
  7. package/dist/boards/review.js.map +1 -1
  8. package/dist/factory.d.ts +3 -0
  9. package/dist/factory.d.ts.map +1 -1
  10. package/dist/factory.js +61 -69
  11. package/dist/factory.js.map +1 -1
  12. package/dist/integrations/base.d.ts +14 -1
  13. package/dist/integrations/base.d.ts.map +1 -1
  14. package/dist/{session → integrations/slack}/channel-reply-processor.d.ts +4 -3
  15. package/dist/integrations/slack/channel-reply-processor.d.ts.map +1 -0
  16. package/dist/integrations/slack/channel-reply-processor.js +61 -0
  17. package/dist/integrations/slack/channel-reply-processor.js.map +1 -0
  18. package/dist/integrations/slack/channel-session-link-processor.d.ts.map +1 -0
  19. package/dist/{session → integrations/slack}/channel-session-link-processor.js +13 -4
  20. package/dist/integrations/slack/channel-session-link-processor.js.map +1 -0
  21. package/dist/integrations/slack/integration.d.ts +25 -1
  22. package/dist/integrations/slack/integration.d.ts.map +1 -1
  23. package/dist/integrations/slack/integration.js +55 -5
  24. package/dist/integrations/slack/integration.js.map +1 -1
  25. package/dist/integrations/slack/reply-reminder-processor.d.ts +23 -0
  26. package/dist/integrations/slack/reply-reminder-processor.d.ts.map +1 -0
  27. package/dist/integrations/slack/reply-reminder-processor.js +58 -0
  28. package/dist/integrations/slack/reply-reminder-processor.js.map +1 -0
  29. package/dist/integrations/slack/reply-tool.d.ts +31 -0
  30. package/dist/integrations/slack/reply-tool.d.ts.map +1 -0
  31. package/dist/integrations/slack/reply-tool.js +203 -0
  32. package/dist/integrations/slack/reply-tool.js.map +1 -0
  33. package/dist/integrations/slack/share-file-tool.d.ts +45 -0
  34. package/dist/integrations/slack/share-file-tool.d.ts.map +1 -0
  35. package/dist/integrations/slack/share-file-tool.js +106 -0
  36. package/dist/integrations/slack/share-file-tool.js.map +1 -0
  37. package/dist/integrations/slack/slack.d.ts.map +1 -1
  38. package/dist/integrations/slack/slack.js +54 -6
  39. package/dist/integrations/slack/slack.js.map +1 -1
  40. package/dist/mcp/events.d.ts +73 -0
  41. package/dist/mcp/events.d.ts.map +1 -0
  42. package/dist/mcp/events.js +158 -0
  43. package/dist/mcp/events.js.map +1 -0
  44. package/dist/mcp/routes.d.ts +0 -1
  45. package/dist/mcp/routes.d.ts.map +1 -1
  46. package/dist/mcp/routes.js +30 -3
  47. package/dist/mcp/routes.js.map +1 -1
  48. package/dist/packages/_internals/workspace/dist/index.js.map +1 -1
  49. package/dist/platform-auth-host.d.ts.map +1 -1
  50. package/dist/platform-auth-host.js +1 -1
  51. package/dist/platform-auth-host.js.map +1 -1
  52. package/dist/routes/config.d.ts +2 -0
  53. package/dist/routes/config.d.ts.map +1 -1
  54. package/dist/routes/config.js +50 -9
  55. package/dist/routes/config.js.map +1 -1
  56. package/dist/routes/contracts.d.ts +2 -0
  57. package/dist/routes/contracts.d.ts.map +1 -1
  58. package/dist/routes/contracts.js +1 -1
  59. package/dist/routes/contracts.js.map +1 -1
  60. package/dist/routes/session-access.d.ts +7 -2
  61. package/dist/routes/session-access.d.ts.map +1 -1
  62. package/dist/routes/session-access.js +41 -4
  63. package/dist/routes/session-access.js.map +1 -1
  64. package/dist/routes/skills.d.ts.map +1 -1
  65. package/dist/routes/skills.js +4 -3
  66. package/dist/routes/skills.js.map +1 -1
  67. package/dist/routes/source-control-sessions.d.ts +2 -0
  68. package/dist/routes/source-control-sessions.d.ts.map +1 -1
  69. package/dist/routes/source-control-sessions.js +161 -24
  70. package/dist/routes/source-control-sessions.js.map +1 -1
  71. package/dist/routes/surface.d.ts +2 -0
  72. package/dist/routes/surface.d.ts.map +1 -1
  73. package/dist/routes/surface.js +10 -4
  74. package/dist/routes/surface.js.map +1 -1
  75. package/dist/rules/dispatcher.d.ts.map +1 -1
  76. package/dist/rules/dispatcher.js +11 -3
  77. package/dist/rules/dispatcher.js.map +1 -1
  78. package/dist/rules/processor.d.ts +2 -2
  79. package/dist/rules/processor.d.ts.map +1 -1
  80. package/dist/rules/processor.js +3 -3
  81. package/dist/rules/processor.js.map +1 -1
  82. package/dist/sandbox/session-retirement.d.ts +11 -0
  83. package/dist/sandbox/session-retirement.d.ts.map +1 -1
  84. package/dist/sandbox/session-retirement.js +38 -1
  85. package/dist/sandbox/session-retirement.js.map +1 -1
  86. package/dist/sandbox/session-sandbox.d.ts +2 -0
  87. package/dist/sandbox/session-sandbox.d.ts.map +1 -1
  88. package/dist/sandbox/session-sandbox.js +5 -1
  89. package/dist/sandbox/session-sandbox.js.map +1 -1
  90. package/dist/session/credential-policy.d.ts +4 -2
  91. package/dist/session/credential-policy.d.ts.map +1 -1
  92. package/dist/session/credential-policy.js +11 -1
  93. package/dist/session/credential-policy.js.map +1 -1
  94. package/dist/session/factory-session.d.ts.map +1 -1
  95. package/dist/session/factory-session.js +14 -1
  96. package/dist/session/factory-session.js.map +1 -1
  97. package/dist/session/run-audit.d.ts +1 -0
  98. package/dist/session/run-audit.d.ts.map +1 -1
  99. package/dist/session/run-audit.js +7 -2
  100. package/dist/session/run-audit.js.map +1 -1
  101. package/dist/session/session-threads.d.ts +5 -0
  102. package/dist/session/session-threads.d.ts.map +1 -1
  103. package/dist/session/session-threads.js +8 -1
  104. package/dist/session/session-threads.js.map +1 -1
  105. package/dist/session/thinking-default.d.ts +6 -13
  106. package/dist/session/thinking-default.d.ts.map +1 -1
  107. package/dist/session/thinking-default.js +18 -22
  108. package/dist/session/thinking-default.js.map +1 -1
  109. package/dist/session-owner-signal.d.ts +2 -0
  110. package/dist/session-owner-signal.d.ts.map +1 -0
  111. package/dist/session-owner-signal.js +6 -0
  112. package/dist/session-owner-signal.js.map +1 -0
  113. package/dist/skills/service.d.ts +6 -7
  114. package/dist/skills/service.d.ts.map +1 -1
  115. package/dist/skills/service.js +9 -19
  116. package/dist/skills/service.js.map +1 -1
  117. package/dist/storage/domains/audit/actions.d.ts +1 -0
  118. package/dist/storage/domains/audit/actions.d.ts.map +1 -1
  119. package/dist/storage/domains/audit/actions.js +2 -1
  120. package/dist/storage/domains/audit/actions.js.map +1 -1
  121. package/dist/storage/domains/audit/base.d.ts +18 -2
  122. package/dist/storage/domains/audit/base.d.ts.map +1 -1
  123. package/dist/storage/domains/audit/base.js +22 -4
  124. package/dist/storage/domains/audit/base.js.map +1 -1
  125. package/dist/storage/domains/model-defaults/base.d.ts +8 -0
  126. package/dist/storage/domains/model-defaults/base.d.ts.map +1 -1
  127. package/dist/storage/domains/model-defaults/base.js +18 -0
  128. package/dist/storage/domains/model-defaults/base.js.map +1 -1
  129. package/dist/storage/domains/source-control/base.d.ts +26 -1
  130. package/dist/storage/domains/source-control/base.d.ts.map +1 -1
  131. package/dist/storage/domains/source-control/base.js +69 -5
  132. package/dist/storage/domains/source-control/base.js.map +1 -1
  133. package/dist/storage/domains/source-control/inmemory.d.ts +19 -1
  134. package/dist/storage/domains/source-control/inmemory.d.ts.map +1 -1
  135. package/dist/storage/domains/source-control/inmemory.js +30 -2
  136. package/dist/storage/domains/source-control/inmemory.js.map +1 -1
  137. package/dist/tools/permissions.d.ts.map +1 -1
  138. package/dist/tools/permissions.js +2 -1
  139. package/dist/tools/permissions.js.map +1 -1
  140. package/dist/tools/sandbox-tools.d.ts +12 -0
  141. package/dist/tools/sandbox-tools.d.ts.map +1 -0
  142. package/dist/tools/sandbox-tools.js +40 -0
  143. package/dist/tools/sandbox-tools.js.map +1 -0
  144. package/dist/tools/scope.d.ts.map +1 -1
  145. package/dist/tools/scope.js +2 -5
  146. package/dist/tools/scope.js.map +1 -1
  147. package/dist/tools/session-tools.d.ts.map +1 -1
  148. package/dist/tools/session-tools.js +6 -2
  149. package/dist/tools/session-tools.js.map +1 -1
  150. package/dist/work-item-branch.d.ts +11 -3
  151. package/dist/work-item-branch.d.ts.map +1 -1
  152. package/dist/work-item-branch.js +34 -9
  153. package/dist/work-item-branch.js.map +1 -1
  154. package/dist/workspace.d.ts +2 -1
  155. package/dist/workspace.d.ts.map +1 -1
  156. package/dist/workspace.js +4 -2
  157. package/dist/workspace.js.map +1 -1
  158. package/factory-skills/configure-factory-rules/SKILL.md +2 -2
  159. package/package.json +14 -13
  160. package/dist/session/channel-reply-processor.d.ts.map +0 -1
  161. package/dist/session/channel-reply-processor.js +0 -46
  162. package/dist/session/channel-reply-processor.js.map +0 -1
  163. package/dist/session/channel-session-link-processor.d.ts.map +0 -1
  164. package/dist/session/channel-session-link-processor.js.map +0 -1
  165. /package/dist/{session → integrations/slack}/channel-session-link-processor.d.ts +0 -0
@@ -22,11 +22,19 @@ export declare function workItemThreadTitle(item: Pick<WorkItemBranchInput, 'sou
22
22
  * The git branch an item's runs and sessions share, one grammar for both sides
23
23
  * of the wire: the dispatcher names autonomous run branches with it and the
24
24
  * board opens card sessions on it, so both converge on one checkout per item.
25
- * Cards without a provider identity (manual, Slack) and cards whose metadata
26
- * lost their identifier fall back to the id-derived branch.
25
+ * Provider numbers are only unique within a repository, so GitHub and GitLab
26
+ * branches carry the item suffix as well. Cards without a provider identity
27
+ * (manual, Slack) and cards whose metadata lost their identifier fall back to
28
+ * the id-derived branch.
27
29
  */
28
30
  export declare function workItemBranch(item: WorkItemBranchInput): string;
29
- /** The pull request a `factory/pr-<number>` branch was named after, the inverse of {@link workItemBranch}. */
31
+ /** The pre-suffix GitHub branch, for reusing sessions opened before card names were unique. */
32
+ export declare function legacyGithubWorkItemBranch(branch: string): string | undefined;
33
+ /**
34
+ * The pull request a `factory/pr-<number>-<item suffix>` branch was named after, the
35
+ * inverse of {@link workItemBranch}. Branches from before the suffix (`factory/pr-<number>`)
36
+ * still parse so existing checkouts can resolve their PR.
37
+ */
30
38
  export declare function pullRequestNumberFromBranch(branch: string): number | undefined;
31
39
  /** The GitLab MR IID encoded in Factory's collision-resistant review branch. */
32
40
  export declare function mergeRequestNumberFromBranch(branch: string): number | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"work-item-branch.d.ts","sourceRoot":"","sources":["../src/work-item-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEnF;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,WAAW,GACX,cAAc,GACd,WAAW,GACX,cAAc,GACd,YAAY,GACZ,sBAAsB,GACtB,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3C;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAYpH;AAOD,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,MAAM,GAAG,SAAS,CAOzG;AAED,yHAAyH;AACzH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACzE,MAAM,CAKR;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAmChE;AAED,8GAA8G;AAC9G,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9E;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/E"}
1
+ {"version":3,"file":"work-item-branch.d.ts","sourceRoot":"","sources":["../src/work-item-branch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAEnF;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAC5B,cAAc,GACd,WAAW,GACX,cAAc,GACd,WAAW,GACX,cAAc,GACd,YAAY,GACZ,sBAAsB,GACtB,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3C;AAED,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,sBAAsB,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAYpH;AAOD,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG,MAAM,GAAG,SAAS,CAOzG;AAED,yHAAyH;AACzH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,QAAQ,GAAG,UAAU,CAAC,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,GACzE,MAAM,CAKR;AAgBD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CA+BhE;AAED,+FAA+F;AAC/F,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG7E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI9E;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI/E"}
@@ -28,35 +28,60 @@ function workItemThreadTitle(item) {
28
28
  return `${item.source === "github-pr" ? "PR" : item.source === "gitlab-pr" ? "MR" : "Issue"} #${number}: ${item.title}`;
29
29
  }
30
30
  /**
31
+ * The last twelve alphanumerics of a work item id: the per-item suffix that keeps
32
+ * provider numbers from colliding across the repositories of one factory. Issue
33
+ * #13 exists in every repository, and a factory's sessions are unique per
34
+ * user and branch across all of its repositories, so a branch named by the
35
+ * number alone can only be held once per factory.
36
+ */
37
+ function itemSuffix(id) {
38
+ return id.toLowerCase().replace(/[^a-z0-9]+/g, "").slice(-12);
39
+ }
40
+ /**
31
41
  * The git branch an item's runs and sessions share, one grammar for both sides
32
42
  * of the wire: the dispatcher names autonomous run branches with it and the
33
43
  * board opens card sessions on it, so both converge on one checkout per item.
34
- * Cards without a provider identity (manual, Slack) and cards whose metadata
35
- * lost their identifier fall back to the id-derived branch.
44
+ * Provider numbers are only unique within a repository, so GitHub and GitLab
45
+ * branches carry the item suffix as well. Cards without a provider identity
46
+ * (manual, Slack) and cards whose metadata lost their identifier fall back to
47
+ * the id-derived branch.
36
48
  */
37
49
  function workItemBranch(item) {
38
50
  const metadata = item.metadata ?? {};
39
51
  const providerNumber = workItemNumber(item);
40
- if (providerNumber !== void 0 && (item.source === "github-issue" || item.source === "github-pr")) return item.source === "github-issue" ? `factory/issue-${providerNumber}` : `factory/pr-${providerNumber}`;
52
+ if (providerNumber !== void 0 && (item.source === "github-issue" || item.source === "github-pr")) {
53
+ const suffix = itemSuffix(item.id);
54
+ const kind = item.source === "github-issue" ? "issue" : "pr";
55
+ return suffix ? `factory/${kind}-${providerNumber}-${suffix}` : `factory/${kind}-${providerNumber}`;
56
+ }
41
57
  if ((item.source === "linear-issue" || item.source === "jira-issue" || item.source === "incidentio-follow-up") && typeof metadata.identifier === "string") {
42
58
  const identifier = metadata.identifier.trim();
43
59
  if (identifier) return `factory/${item.source === "linear-issue" ? "linear" : item.source === "jira-issue" ? "jira" : "incidentio"}-${identifier.toLowerCase()}`;
44
60
  }
45
61
  if (item.source === "gitlab-pr" && providerNumber !== void 0) {
46
- const uniqueSuffix = item.id.toLowerCase().replace(/[^a-z0-9]+/g, "").slice(-12);
62
+ const uniqueSuffix = itemSuffix(item.id);
47
63
  if (uniqueSuffix) return `factory/gitlab-mr-${providerNumber}-${uniqueSuffix}`;
48
64
  }
49
65
  if (item.source === "gitlab-issue" && typeof metadata.identifier === "string") {
50
66
  const identifier = metadata.identifier.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, "-");
51
- const uniqueSuffix = item.id.toLowerCase().replace(/[^a-z0-9]+/g, "").slice(-12);
67
+ const uniqueSuffix = itemSuffix(item.id);
52
68
  if (identifier && uniqueSuffix) return `factory/gitlab-${identifier.slice(0, 60)}-${uniqueSuffix}`;
53
69
  }
54
70
  return `factory/item-${item.id}`;
55
71
  }
56
- /** The pull request a `factory/pr-<number>` branch was named after, the inverse of {@link workItemBranch}. */
72
+ /** The pre-suffix GitHub branch, for reusing sessions opened before card names were unique. */
73
+ function legacyGithubWorkItemBranch(branch) {
74
+ return /^(factory\/(?:issue|pr)-[1-9]\d*)-[a-z0-9]{1,12}$/.exec(branch)?.[1];
75
+ }
76
+ /**
77
+ * The pull request a `factory/pr-<number>-<item suffix>` branch was named after, the
78
+ * inverse of {@link workItemBranch}. Branches from before the suffix (`factory/pr-<number>`)
79
+ * still parse so existing checkouts can resolve their PR.
80
+ */
57
81
  function pullRequestNumberFromBranch(branch) {
58
- const match = /^factory\/pr-([1-9]\d*)$/.exec(branch);
59
- return match ? Number(match[1]) : void 0;
82
+ const match = /^factory\/pr-([1-9]\d*)(?:-[a-z0-9]{1,12})?$/.exec(branch);
83
+ const number = match ? Number(match[1]) : void 0;
84
+ return number !== void 0 && Number.isSafeInteger(number) ? number : void 0;
60
85
  }
61
86
  /** The GitLab MR IID encoded in Factory's collision-resistant review branch. */
62
87
  function mergeRequestNumberFromBranch(branch) {
@@ -65,6 +90,6 @@ function mergeRequestNumberFromBranch(branch) {
65
90
  return number !== void 0 && Number.isSafeInteger(number) ? number : void 0;
66
91
  }
67
92
  //#endregion
68
- export { mergeRequestNumberFromBranch, pullRequestNumberFromBranch, workItemBranch, workItemBranchSource, workItemNumber, workItemThreadTitle };
93
+ export { legacyGithubWorkItemBranch, mergeRequestNumberFromBranch, pullRequestNumberFromBranch, workItemBranch, workItemBranchSource, workItemNumber, workItemThreadTitle };
69
94
 
70
95
  //# sourceMappingURL=work-item-branch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"work-item-branch.js","names":[],"sources":["../src/work-item-branch.ts"],"sourcesContent":["import type { ExternalWorkItemSource } from './storage/domains/work-items/base.js';\n\n/**\n * Where a card came from, in the vocabulary branch naming reads. Server rows\n * map their `externalSource` into this with {@link workItemBranchSource}; the\n * board's own `WorkItem['source']` is already this union.\n */\nexport type WorkItemBranchSource =\n | 'github-issue'\n | 'github-pr'\n | 'gitlab-issue'\n | 'gitlab-pr'\n | 'linear-issue'\n | 'jira-issue'\n | 'incidentio-follow-up'\n | 'slack-thread'\n | 'manual';\n\nexport interface WorkItemBranchInput {\n id: string;\n source: WorkItemBranchSource;\n metadata?: Record<string, unknown> | null;\n}\n\n/** Map a stored item's provenance onto the source vocabulary branch naming reads. */\nexport function workItemBranchSource(externalSource: ExternalWorkItemSource | null | undefined): WorkItemBranchSource {\n if (!externalSource) return 'manual';\n if (externalSource.integrationId === 'linear') return 'linear-issue';\n if (externalSource.integrationId === 'gitlab') {\n return externalSource.type === 'pull-request' ? 'gitlab-pr' : 'gitlab-issue';\n }\n if (externalSource.integrationId === 'jira') return 'jira-issue';\n if (externalSource.integrationId === 'incidentio') return 'incidentio-follow-up';\n // Only GitHub, GitLab, Linear, Jira, and incident.io carry provider identities; anything\n // else (a Slack thread, say) is a plain work item rather than a mislabeled GitHub issue.\n if (externalSource.integrationId !== 'github') return 'manual';\n return externalSource.type === 'pull-request' ? 'github-pr' : 'github-issue';\n}\n\nfunction branchNumber(metadata: Record<string, unknown>, key: string): number | undefined {\n const value = metadata[key] ?? metadata.number;\n return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;\n}\n\n/** The provider number a GitHub card carries — the `#12` its runs and thread titles name it by. */\nexport function workItemNumber(item: Pick<WorkItemBranchInput, 'source' | 'metadata'>): number | undefined {\n const metadata = item.metadata ?? {};\n if (item.source === 'github-issue') return branchNumber(metadata, 'githubIssueNumber');\n if (item.source === 'github-pr') return branchNumber(metadata, 'githubPullRequestNumber');\n if (item.source === 'gitlab-issue') return branchNumber(metadata, 'gitlabIssueIid');\n if (item.source === 'gitlab-pr') return branchNumber(metadata, 'gitlabMergeRequestIid');\n return;\n}\n\n/** How a card names its thread: a Linear title already opens with its identifier, a GitHub card gets its number here. */\nexport function workItemThreadTitle(\n item: Pick<WorkItemBranchInput, 'source' | 'metadata'> & { title: string },\n): string {\n const number = workItemNumber(item);\n if (number === undefined) return item.title;\n const kind = item.source === 'github-pr' ? 'PR' : item.source === 'gitlab-pr' ? 'MR' : 'Issue';\n return `${kind} #${number}: ${item.title}`;\n}\n\n/**\n * The git branch an item's runs and sessions share, one grammar for both sides\n * of the wire: the dispatcher names autonomous run branches with it and the\n * board opens card sessions on it, so both converge on one checkout per item.\n * Cards without a provider identity (manual, Slack) and cards whose metadata\n * lost their identifier fall back to the id-derived branch.\n */\nexport function workItemBranch(item: WorkItemBranchInput): string {\n const metadata = item.metadata ?? {};\n const providerNumber = workItemNumber(item);\n if (providerNumber !== undefined && (item.source === 'github-issue' || item.source === 'github-pr')) {\n return item.source === 'github-issue' ? `factory/issue-${providerNumber}` : `factory/pr-${providerNumber}`;\n }\n if (\n (item.source === 'linear-issue' || item.source === 'jira-issue' || item.source === 'incidentio-follow-up') &&\n typeof metadata.identifier === 'string'\n ) {\n const identifier = metadata.identifier.trim();\n if (identifier) {\n const provider = item.source === 'linear-issue' ? 'linear' : item.source === 'jira-issue' ? 'jira' : 'incidentio';\n return `factory/${provider}-${identifier.toLowerCase()}`;\n }\n }\n if (item.source === 'gitlab-pr' && providerNumber !== undefined) {\n const uniqueSuffix = item.id\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '')\n .slice(-12);\n if (uniqueSuffix) return `factory/gitlab-mr-${providerNumber}-${uniqueSuffix}`;\n }\n if (item.source === 'gitlab-issue' && typeof metadata.identifier === 'string') {\n const identifier = metadata.identifier\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-');\n const uniqueSuffix = item.id\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '')\n .slice(-12);\n if (identifier && uniqueSuffix) return `factory/gitlab-${identifier.slice(0, 60)}-${uniqueSuffix}`;\n }\n return `factory/item-${item.id}`;\n}\n\n/** The pull request a `factory/pr-<number>` branch was named after, the inverse of {@link workItemBranch}. */\nexport function pullRequestNumberFromBranch(branch: string): number | undefined {\n const match = /^factory\\/pr-([1-9]\\d*)$/.exec(branch);\n return match ? Number(match[1]) : undefined;\n}\n\n/** The GitLab MR IID encoded in Factory's collision-resistant review branch. */\nexport function mergeRequestNumberFromBranch(branch: string): number | undefined {\n const match = /^factory\\/gitlab-mr-([1-9]\\d*)-[a-z0-9]{1,12}$/.exec(branch);\n const number = match ? Number(match[1]) : undefined;\n return number !== undefined && Number.isSafeInteger(number) ? number : undefined;\n}\n"],"mappings":";;AAyBA,SAAgB,qBAAqB,gBAAiF;CACpH,IAAI,CAAC,gBAAgB,OAAO;CAC5B,IAAI,eAAe,kBAAkB,UAAU,OAAO;CACtD,IAAI,eAAe,kBAAkB,UACnC,OAAO,eAAe,SAAS,iBAAiB,cAAc;CAEhE,IAAI,eAAe,kBAAkB,QAAQ,OAAO;CACpD,IAAI,eAAe,kBAAkB,cAAc,OAAO;CAG1D,IAAI,eAAe,kBAAkB,UAAU,OAAO;CACtD,OAAO,eAAe,SAAS,iBAAiB,cAAc;AAChE;AAEA,SAAS,aAAa,UAAmC,KAAiC;CACxF,MAAM,QAAQ,SAAS,QAAQ,SAAS;CACxC,OAAO,OAAO,UAAU,YAAY,OAAO,UAAU,KAAK,KAAK,QAAQ,IAAI,QAAQ,KAAA;AACrF;;AAGA,SAAgB,eAAe,MAA4E;CACzG,MAAM,WAAW,KAAK,YAAY,CAAC;CACnC,IAAI,KAAK,WAAW,gBAAgB,OAAO,aAAa,UAAU,mBAAmB;CACrF,IAAI,KAAK,WAAW,aAAa,OAAO,aAAa,UAAU,yBAAyB;CACxF,IAAI,KAAK,WAAW,gBAAgB,OAAO,aAAa,UAAU,gBAAgB;CAClF,IAAI,KAAK,WAAW,aAAa,OAAO,aAAa,UAAU,uBAAuB;AAExF;;AAGA,SAAgB,oBACd,MACQ;CACR,MAAM,SAAS,eAAe,IAAI;CAClC,IAAI,WAAW,KAAA,GAAW,OAAO,KAAK;CAEtC,OAAO,GADM,KAAK,WAAW,cAAc,OAAO,KAAK,WAAW,cAAc,OAAO,QACxE,IAAI,OAAO,IAAI,KAAK;AACrC;;;;;;;;AASA,SAAgB,eAAe,MAAmC;CAChE,MAAM,WAAW,KAAK,YAAY,CAAC;CACnC,MAAM,iBAAiB,eAAe,IAAI;CAC1C,IAAI,mBAAmB,KAAA,MAAc,KAAK,WAAW,kBAAkB,KAAK,WAAW,cACrF,OAAO,KAAK,WAAW,iBAAiB,iBAAiB,mBAAmB,cAAc;CAE5F,KACG,KAAK,WAAW,kBAAkB,KAAK,WAAW,gBAAgB,KAAK,WAAW,2BACnF,OAAO,SAAS,eAAe,UAC/B;EACA,MAAM,aAAa,SAAS,WAAW,KAAK;EAC5C,IAAI,YAEF,OAAO,WADU,KAAK,WAAW,iBAAiB,WAAW,KAAK,WAAW,eAAe,SAAS,aAC1E,GAAG,WAAW,YAAY;CAEzD;CACA,IAAI,KAAK,WAAW,eAAe,mBAAmB,KAAA,GAAW;EAC/D,MAAM,eAAe,KAAK,GACvB,YAAY,CAAC,CACb,QAAQ,eAAe,EAAE,CAAC,CAC1B,MAAM,GAAG;EACZ,IAAI,cAAc,OAAO,qBAAqB,eAAe,GAAG;CAClE;CACA,IAAI,KAAK,WAAW,kBAAkB,OAAO,SAAS,eAAe,UAAU;EAC7E,MAAM,aAAa,SAAS,WACzB,KAAK,CAAC,CACN,YAAY,CAAC,CACb,QAAQ,kBAAkB,GAAG;EAChC,MAAM,eAAe,KAAK,GACvB,YAAY,CAAC,CACb,QAAQ,eAAe,EAAE,CAAC,CAC1B,MAAM,GAAG;EACZ,IAAI,cAAc,cAAc,OAAO,kBAAkB,WAAW,MAAM,GAAG,EAAE,EAAE,GAAG;CACtF;CACA,OAAO,gBAAgB,KAAK;AAC9B;;AAGA,SAAgB,4BAA4B,QAAoC;CAC9E,MAAM,QAAQ,2BAA2B,KAAK,MAAM;CACpD,OAAO,QAAQ,OAAO,MAAM,EAAE,IAAI,KAAA;AACpC;;AAGA,SAAgB,6BAA6B,QAAoC;CAC/E,MAAM,QAAQ,iDAAiD,KAAK,MAAM;CAC1E,MAAM,SAAS,QAAQ,OAAO,MAAM,EAAE,IAAI,KAAA;CAC1C,OAAO,WAAW,KAAA,KAAa,OAAO,cAAc,MAAM,IAAI,SAAS,KAAA;AACzE"}
1
+ {"version":3,"file":"work-item-branch.js","names":[],"sources":["../src/work-item-branch.ts"],"sourcesContent":["import type { ExternalWorkItemSource } from './storage/domains/work-items/base.js';\n\n/**\n * Where a card came from, in the vocabulary branch naming reads. Server rows\n * map their `externalSource` into this with {@link workItemBranchSource}; the\n * board's own `WorkItem['source']` is already this union.\n */\nexport type WorkItemBranchSource =\n | 'github-issue'\n | 'github-pr'\n | 'gitlab-issue'\n | 'gitlab-pr'\n | 'linear-issue'\n | 'jira-issue'\n | 'incidentio-follow-up'\n | 'slack-thread'\n | 'manual';\n\nexport interface WorkItemBranchInput {\n id: string;\n source: WorkItemBranchSource;\n metadata?: Record<string, unknown> | null;\n}\n\n/** Map a stored item's provenance onto the source vocabulary branch naming reads. */\nexport function workItemBranchSource(externalSource: ExternalWorkItemSource | null | undefined): WorkItemBranchSource {\n if (!externalSource) return 'manual';\n if (externalSource.integrationId === 'linear') return 'linear-issue';\n if (externalSource.integrationId === 'gitlab') {\n return externalSource.type === 'pull-request' ? 'gitlab-pr' : 'gitlab-issue';\n }\n if (externalSource.integrationId === 'jira') return 'jira-issue';\n if (externalSource.integrationId === 'incidentio') return 'incidentio-follow-up';\n // Only GitHub, GitLab, Linear, Jira, and incident.io carry provider identities; anything\n // else (a Slack thread, say) is a plain work item rather than a mislabeled GitHub issue.\n if (externalSource.integrationId !== 'github') return 'manual';\n return externalSource.type === 'pull-request' ? 'github-pr' : 'github-issue';\n}\n\nfunction branchNumber(metadata: Record<string, unknown>, key: string): number | undefined {\n const value = metadata[key] ?? metadata.number;\n return typeof value === 'number' && Number.isInteger(value) && value > 0 ? value : undefined;\n}\n\n/** The provider number a GitHub card carries — the `#12` its runs and thread titles name it by. */\nexport function workItemNumber(item: Pick<WorkItemBranchInput, 'source' | 'metadata'>): number | undefined {\n const metadata = item.metadata ?? {};\n if (item.source === 'github-issue') return branchNumber(metadata, 'githubIssueNumber');\n if (item.source === 'github-pr') return branchNumber(metadata, 'githubPullRequestNumber');\n if (item.source === 'gitlab-issue') return branchNumber(metadata, 'gitlabIssueIid');\n if (item.source === 'gitlab-pr') return branchNumber(metadata, 'gitlabMergeRequestIid');\n return;\n}\n\n/** How a card names its thread: a Linear title already opens with its identifier, a GitHub card gets its number here. */\nexport function workItemThreadTitle(\n item: Pick<WorkItemBranchInput, 'source' | 'metadata'> & { title: string },\n): string {\n const number = workItemNumber(item);\n if (number === undefined) return item.title;\n const kind = item.source === 'github-pr' ? 'PR' : item.source === 'gitlab-pr' ? 'MR' : 'Issue';\n return `${kind} #${number}: ${item.title}`;\n}\n\n/**\n * The last twelve alphanumerics of a work item id: the per-item suffix that keeps\n * provider numbers from colliding across the repositories of one factory. Issue\n * #13 exists in every repository, and a factory's sessions are unique per\n * user and branch across all of its repositories, so a branch named by the\n * number alone can only be held once per factory.\n */\nfunction itemSuffix(id: string): string {\n return id\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '')\n .slice(-12);\n}\n\n/**\n * The git branch an item's runs and sessions share, one grammar for both sides\n * of the wire: the dispatcher names autonomous run branches with it and the\n * board opens card sessions on it, so both converge on one checkout per item.\n * Provider numbers are only unique within a repository, so GitHub and GitLab\n * branches carry the item suffix as well. Cards without a provider identity\n * (manual, Slack) and cards whose metadata lost their identifier fall back to\n * the id-derived branch.\n */\nexport function workItemBranch(item: WorkItemBranchInput): string {\n const metadata = item.metadata ?? {};\n const providerNumber = workItemNumber(item);\n if (providerNumber !== undefined && (item.source === 'github-issue' || item.source === 'github-pr')) {\n const suffix = itemSuffix(item.id);\n const kind = item.source === 'github-issue' ? 'issue' : 'pr';\n return suffix ? `factory/${kind}-${providerNumber}-${suffix}` : `factory/${kind}-${providerNumber}`;\n }\n if (\n (item.source === 'linear-issue' || item.source === 'jira-issue' || item.source === 'incidentio-follow-up') &&\n typeof metadata.identifier === 'string'\n ) {\n const identifier = metadata.identifier.trim();\n if (identifier) {\n const provider = item.source === 'linear-issue' ? 'linear' : item.source === 'jira-issue' ? 'jira' : 'incidentio';\n return `factory/${provider}-${identifier.toLowerCase()}`;\n }\n }\n if (item.source === 'gitlab-pr' && providerNumber !== undefined) {\n const uniqueSuffix = itemSuffix(item.id);\n if (uniqueSuffix) return `factory/gitlab-mr-${providerNumber}-${uniqueSuffix}`;\n }\n if (item.source === 'gitlab-issue' && typeof metadata.identifier === 'string') {\n const identifier = metadata.identifier\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-');\n const uniqueSuffix = itemSuffix(item.id);\n if (identifier && uniqueSuffix) return `factory/gitlab-${identifier.slice(0, 60)}-${uniqueSuffix}`;\n }\n return `factory/item-${item.id}`;\n}\n\n/** The pre-suffix GitHub branch, for reusing sessions opened before card names were unique. */\nexport function legacyGithubWorkItemBranch(branch: string): string | undefined {\n const match = /^(factory\\/(?:issue|pr)-[1-9]\\d*)-[a-z0-9]{1,12}$/.exec(branch);\n return match?.[1];\n}\n\n/**\n * The pull request a `factory/pr-<number>-<item suffix>` branch was named after, the\n * inverse of {@link workItemBranch}. Branches from before the suffix (`factory/pr-<number>`)\n * still parse so existing checkouts can resolve their PR.\n */\nexport function pullRequestNumberFromBranch(branch: string): number | undefined {\n const match = /^factory\\/pr-([1-9]\\d*)(?:-[a-z0-9]{1,12})?$/.exec(branch);\n const number = match ? Number(match[1]) : undefined;\n return number !== undefined && Number.isSafeInteger(number) ? number : undefined;\n}\n\n/** The GitLab MR IID encoded in Factory's collision-resistant review branch. */\nexport function mergeRequestNumberFromBranch(branch: string): number | undefined {\n const match = /^factory\\/gitlab-mr-([1-9]\\d*)-[a-z0-9]{1,12}$/.exec(branch);\n const number = match ? Number(match[1]) : undefined;\n return number !== undefined && Number.isSafeInteger(number) ? number : undefined;\n}\n"],"mappings":"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"}
@@ -14,7 +14,8 @@ export declare const BUNDLED_FACTORY_SKILLS_PATH: string;
14
14
  * addition to the bundled skills so projects can add (or override) Factory
15
15
  * skills without patching the installed package. Candidates cover the cwd
16
16
  * variants the dev server runs with (`repo root`, `--dir src/mastra` which
17
- * runs with cwd `src/mastra/public`).
17
+ * runs with cwd `src/mastra/public`), then the platform build output when
18
+ * the server runs from its parent directory.
18
19
  */
19
20
  export declare function resolveLocalFactorySkillsPath(cwd?: string): string | undefined;
20
21
  export declare const FACTORY_SKILL_NAMES: Set<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
package/dist/workspace.js CHANGED
@@ -26,13 +26,15 @@ const BUNDLED_FACTORY_SKILLS_PATH = [bundledFactorySkillsPath, join(bundleDirect
26
26
  * addition to the bundled skills so projects can add (or override) Factory
27
27
  * skills without patching the installed package. Candidates cover the cwd
28
28
  * variants the dev server runs with (`repo root`, `--dir src/mastra` which
29
- * runs with cwd `src/mastra/public`).
29
+ * runs with cwd `src/mastra/public`), then the platform build output when
30
+ * the server runs from its parent directory.
30
31
  */
31
32
  function resolveLocalFactorySkillsPath(cwd = process.cwd()) {
32
33
  return [
33
34
  join(cwd, "src", "mastra", "public", "factory-skills"),
34
35
  join(cwd, "public", "factory-skills"),
35
- join(cwd, "factory-skills")
36
+ join(cwd, "factory-skills"),
37
+ join(cwd, "output", "factory-skills")
36
38
  ].find((candidate) => path.normalize(candidate) !== path.normalize(BUNDLED_FACTORY_SKILLS_PATH) && existsSync(candidate));
37
39
  }
38
40
  const FACTORY_SKILLS_MOUNT = path.resolve(path.parse(process.cwd()).root, "__mastracode_factory_skills__");