@mastra/factory 0.9.0 → 0.10.0-alpha.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +179 -0
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/factory.d.ts +8 -0
- package/dist/factory.d.ts.map +1 -1
- package/dist/factory.js +24 -8
- package/dist/factory.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/integrations/github/integration.d.ts.map +1 -1
- package/dist/integrations/github/integration.js +1 -0
- package/dist/integrations/github/integration.js.map +1 -1
- package/dist/integrations/github/provenance.d.ts +7 -2
- package/dist/integrations/github/provenance.d.ts.map +1 -1
- package/dist/integrations/github/provenance.js +16 -2
- package/dist/integrations/github/provenance.js.map +1 -1
- package/dist/integrations/github/routes.d.ts +3 -0
- package/dist/integrations/github/routes.d.ts.map +1 -1
- package/dist/integrations/github/routes.js +165 -6
- package/dist/integrations/github/routes.js.map +1 -1
- package/dist/integrations/github/rules.d.ts.map +1 -1
- package/dist/integrations/github/rules.js +193 -127
- package/dist/integrations/github/rules.js.map +1 -1
- package/dist/integrations/linear/routes.d.ts.map +1 -1
- package/dist/integrations/linear/routes.js +50 -0
- package/dist/integrations/linear/routes.js.map +1 -1
- package/dist/integrations/platform/github/integration.d.ts.map +1 -1
- package/dist/integrations/platform/github/integration.js +1 -0
- package/dist/integrations/platform/github/integration.js.map +1 -1
- package/dist/routes/attention.d.ts +17 -0
- package/dist/routes/attention.d.ts.map +1 -0
- package/dist/routes/attention.js +305 -0
- package/dist/routes/attention.js.map +1 -0
- package/dist/routes/intake.d.ts.map +1 -1
- package/dist/routes/intake.js +11 -2
- package/dist/routes/intake.js.map +1 -1
- package/dist/routes/surface.d.ts +2 -3
- package/dist/routes/surface.d.ts.map +1 -1
- package/dist/routes/surface.js +61 -43
- package/dist/routes/surface.js.map +1 -1
- package/dist/routes/work-items.d.ts.map +1 -1
- package/dist/routes/work-items.js +35 -14
- package/dist/routes/work-items.js.map +1 -1
- package/dist/rules/defaults.js +5 -5
- package/dist/rules/defaults.js.map +1 -1
- package/dist/rules/dispatch-errors.d.ts +13 -0
- package/dist/rules/dispatch-errors.d.ts.map +1 -0
- package/dist/rules/dispatch-errors.js +77 -0
- package/dist/rules/dispatch-errors.js.map +1 -0
- package/dist/rules/dispatcher.d.ts +9 -0
- package/dist/rules/dispatcher.d.ts.map +1 -1
- package/dist/rules/dispatcher.js +118 -45
- package/dist/rules/dispatcher.js.map +1 -1
- package/dist/rules/processor.d.ts.map +1 -1
- package/dist/rules/processor.js +30 -14
- package/dist/rules/processor.js.map +1 -1
- package/dist/rules/terminal-cleanup.d.ts +1 -1
- package/dist/rules/terminal-cleanup.d.ts.map +1 -1
- package/dist/rules/terminal-cleanup.js +2 -2
- package/dist/rules/terminal-cleanup.js.map +1 -1
- package/dist/rules/transition-service.d.ts +2 -1
- package/dist/rules/transition-service.d.ts.map +1 -1
- package/dist/rules/transition-service.js +1 -1
- package/dist/rules/transition-service.js.map +1 -1
- package/dist/rules/types.d.ts +2 -0
- package/dist/rules/types.d.ts.map +1 -1
- package/dist/rules/types.js +9 -1
- package/dist/rules/types.js.map +1 -1
- package/dist/secret-encryption.d.ts +25 -0
- package/dist/secret-encryption.d.ts.map +1 -0
- package/dist/secret-encryption.js +96 -0
- package/dist/secret-encryption.js.map +1 -0
- package/dist/session/factory-session.d.ts +13 -3
- package/dist/session/factory-session.d.ts.map +1 -1
- package/dist/session/factory-session.js +15 -6
- package/dist/session/factory-session.js.map +1 -1
- package/dist/session/first-exec-capture.d.ts +16 -10
- package/dist/session/first-exec-capture.d.ts.map +1 -1
- package/dist/session/first-exec-capture.js +74 -14
- package/dist/session/first-exec-capture.js.map +1 -1
- package/dist/session/first-message-capture.d.ts +14 -10
- package/dist/session/first-message-capture.d.ts.map +1 -1
- package/dist/session/first-message-capture.js +17 -11
- package/dist/session/first-message-capture.js.map +1 -1
- package/dist/session/session-title.d.ts +7 -0
- package/dist/session/session-title.d.ts.map +1 -0
- package/dist/session/session-title.js +14 -0
- package/dist/session/session-title.js.map +1 -0
- package/dist/session/thread-title-mirror.d.ts +35 -0
- package/dist/session/thread-title-mirror.d.ts.map +1 -0
- package/dist/session/thread-title-mirror.js +51 -0
- package/dist/session/thread-title-mirror.js.map +1 -0
- package/dist/storage/domains/credentials/base.d.ts +3 -1
- package/dist/storage/domains/credentials/base.d.ts.map +1 -1
- package/dist/storage/domains/credentials/base.js +33 -15
- package/dist/storage/domains/credentials/base.js.map +1 -1
- package/dist/storage/domains/custom-providers/base.d.ts +3 -1
- package/dist/storage/domains/custom-providers/base.d.ts.map +1 -1
- package/dist/storage/domains/custom-providers/base.js +45 -25
- package/dist/storage/domains/custom-providers/base.js.map +1 -1
- package/dist/storage/domains/intake/base.d.ts +6 -5
- package/dist/storage/domains/intake/base.d.ts.map +1 -1
- package/dist/storage/domains/intake/base.js +21 -13
- package/dist/storage/domains/intake/base.js.map +1 -1
- package/dist/storage/domains/integrations/base.d.ts +3 -1
- package/dist/storage/domains/integrations/base.d.ts.map +1 -1
- package/dist/storage/domains/integrations/base.js +28 -12
- package/dist/storage/domains/integrations/base.js.map +1 -1
- package/dist/storage/domains/source-control/base.d.ts +8 -0
- package/dist/storage/domains/source-control/base.d.ts.map +1 -1
- package/dist/storage/domains/source-control/base.js +14 -2
- package/dist/storage/domains/source-control/base.js.map +1 -1
- package/dist/storage/domains/source-control/inmemory.d.ts +4 -0
- package/dist/storage/domains/source-control/inmemory.d.ts.map +1 -1
- package/dist/storage/domains/source-control/inmemory.js +7 -0
- package/dist/storage/domains/source-control/inmemory.js.map +1 -1
- package/dist/storage/domains/work-items/base.d.ts +115 -12
- package/dist/storage/domains/work-items/base.d.ts.map +1 -1
- package/dist/storage/domains/work-items/base.js +497 -43
- package/dist/storage/domains/work-items/base.js.map +1 -1
- package/dist/work-item-branch.d.ts +23 -0
- package/dist/work-item-branch.d.ts.map +1 -0
- package/dist/work-item-branch.js +39 -0
- package/dist/work-item-branch.js.map +1 -0
- package/factory-skills/factory-rereview/SKILL.md +2 -0
- package/factory-skills/factory-review/SKILL.md +2 -0
- package/package.json +7 -7
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ExternalWorkItemSource } from './storage/domains/work-items/base.js';
|
|
2
|
+
/**
|
|
3
|
+
* Where a card came from, in the vocabulary branch naming reads. Server rows
|
|
4
|
+
* map their `externalSource` into this with {@link workItemBranchSource}; the
|
|
5
|
+
* board's own `WorkItem['source']` is already this union.
|
|
6
|
+
*/
|
|
7
|
+
export type WorkItemBranchSource = 'github-issue' | 'github-pr' | 'linear-issue' | 'slack-thread' | 'manual';
|
|
8
|
+
export interface WorkItemBranchInput {
|
|
9
|
+
id: string;
|
|
10
|
+
source: WorkItemBranchSource;
|
|
11
|
+
metadata?: Record<string, unknown> | null;
|
|
12
|
+
}
|
|
13
|
+
/** Map a stored item's provenance onto the source vocabulary branch naming reads. */
|
|
14
|
+
export declare function workItemBranchSource(externalSource: ExternalWorkItemSource | null | undefined): WorkItemBranchSource;
|
|
15
|
+
/**
|
|
16
|
+
* The git branch an item's runs and sessions share, one grammar for both sides
|
|
17
|
+
* of the wire: the dispatcher names autonomous run branches with it and the
|
|
18
|
+
* board opens card sessions on it, so both converge on one checkout per item.
|
|
19
|
+
* Cards without a provider identity (manual, Slack) and cards whose metadata
|
|
20
|
+
* lost their identifier fall back to the id-derived branch.
|
|
21
|
+
*/
|
|
22
|
+
export declare function workItemBranch(item: WorkItemBranchInput): string;
|
|
23
|
+
//# sourceMappingURL=work-item-branch.d.ts.map
|
|
@@ -0,0 +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,GAAG,cAAc,GAAG,WAAW,GAAG,cAAc,GAAG,cAAc,GAAG,QAAQ,CAAC;AAE7G,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,CAOpH;AAOD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAehE"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//#region src/work-item-branch.ts
|
|
2
|
+
/** Map a stored item's provenance onto the source vocabulary branch naming reads. */
|
|
3
|
+
function workItemBranchSource(externalSource) {
|
|
4
|
+
if (!externalSource) return "manual";
|
|
5
|
+
if (externalSource.integrationId === "linear") return "linear-issue";
|
|
6
|
+
if (externalSource.integrationId !== "github") return "manual";
|
|
7
|
+
return externalSource.type === "pull-request" ? "github-pr" : "github-issue";
|
|
8
|
+
}
|
|
9
|
+
function branchNumber(metadata, key) {
|
|
10
|
+
const value = metadata[key] ?? metadata.number;
|
|
11
|
+
return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : void 0;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The git branch an item's runs and sessions share, one grammar for both sides
|
|
15
|
+
* of the wire: the dispatcher names autonomous run branches with it and the
|
|
16
|
+
* board opens card sessions on it, so both converge on one checkout per item.
|
|
17
|
+
* Cards without a provider identity (manual, Slack) and cards whose metadata
|
|
18
|
+
* lost their identifier fall back to the id-derived branch.
|
|
19
|
+
*/
|
|
20
|
+
function workItemBranch(item) {
|
|
21
|
+
const metadata = item.metadata ?? {};
|
|
22
|
+
if (item.source === "github-issue") {
|
|
23
|
+
const issueNumber = branchNumber(metadata, "githubIssueNumber");
|
|
24
|
+
if (issueNumber !== void 0) return `factory/issue-${issueNumber}`;
|
|
25
|
+
}
|
|
26
|
+
if (item.source === "github-pr") {
|
|
27
|
+
const pullRequestNumber = branchNumber(metadata, "githubPullRequestNumber");
|
|
28
|
+
if (pullRequestNumber !== void 0) return `factory/pr-${pullRequestNumber}`;
|
|
29
|
+
}
|
|
30
|
+
if (item.source === "linear-issue" && typeof metadata.identifier === "string") {
|
|
31
|
+
const identifier = metadata.identifier.trim();
|
|
32
|
+
if (identifier) return `factory/linear-${identifier.toLowerCase()}`;
|
|
33
|
+
}
|
|
34
|
+
return `factory/item-${item.id}`;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { workItemBranch, workItemBranchSource };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=work-item-branch.js.map
|
|
@@ -0,0 +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 = 'github-issue' | 'github-pr' | 'linear-issue' | 'slack-thread' | '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 // Only GitHub and Linear carry provider identities; anything else (a Slack\n // 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/**\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 if (item.source === 'github-issue') {\n const issueNumber = branchNumber(metadata, 'githubIssueNumber');\n if (issueNumber !== undefined) return `factory/issue-${issueNumber}`;\n }\n if (item.source === 'github-pr') {\n const pullRequestNumber = branchNumber(metadata, 'githubPullRequestNumber');\n if (pullRequestNumber !== undefined) return `factory/pr-${pullRequestNumber}`;\n }\n if (item.source === 'linear-issue' && typeof metadata.identifier === 'string') {\n const identifier = metadata.identifier.trim();\n if (identifier) return `factory/linear-${identifier.toLowerCase()}`;\n }\n return `factory/item-${item.id}`;\n}\n"],"mappings":";;AAgBA,SAAgB,qBAAqB,gBAAiF;CACpH,IAAI,CAAC,gBAAgB,OAAO;CAC5B,IAAI,eAAe,kBAAkB,UAAU,OAAO;CAGtD,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;;;;;;;;AASA,SAAgB,eAAe,MAAmC;CAChE,MAAM,WAAW,KAAK,YAAY,CAAC;CACnC,IAAI,KAAK,WAAW,gBAAgB;EAClC,MAAM,cAAc,aAAa,UAAU,mBAAmB;EAC9D,IAAI,gBAAgB,KAAA,GAAW,OAAO,iBAAiB;CACzD;CACA,IAAI,KAAK,WAAW,aAAa;EAC/B,MAAM,oBAAoB,aAAa,UAAU,yBAAyB;EAC1E,IAAI,sBAAsB,KAAA,GAAW,OAAO,cAAc;CAC5D;CACA,IAAI,KAAK,WAAW,kBAAkB,OAAO,SAAS,eAAe,UAAU;EAC7E,MAAM,aAAa,SAAS,WAAW,KAAK;EAC5C,IAAI,YAAY,OAAO,kBAAkB,WAAW,YAAY;CAClE;CACA,OAAO,gBAAgB,KAAK;AAC9B"}
|
|
@@ -129,6 +129,8 @@ First, compose the **re-review handoff** — don't send it to the conversation y
|
|
|
129
129
|
- **Assumptions** — every recorded judgment call from this run.
|
|
130
130
|
- **Open questions** — any decision that genuinely needs a human.
|
|
131
131
|
|
|
132
|
+
End the handoff with `Review runtime: <model>, reasoning setting: <reasoning>.`, copying both values verbatim from the current `factory-phase` signal.
|
|
133
|
+
|
|
132
134
|
Next, publish the re-review on the PR itself — this is part of every pass, not something to wait to be asked for. Write the handoff body to `.artifacts/factory-rereview/pr-<number>.md` and submit a PR review matching the verdict:
|
|
133
135
|
|
|
134
136
|
- approve → `gh pr review <number> --approve --body-file <file>`
|
|
@@ -123,6 +123,8 @@ First, compose the **review handoff** — don't send it to the conversation yet;
|
|
|
123
123
|
- **Assumptions** — every recorded judgment call from the run.
|
|
124
124
|
- **Open questions** — any decision that genuinely needs a human.
|
|
125
125
|
|
|
126
|
+
End the handoff with `Review runtime: <model>, reasoning setting: <reasoning>.`, copying both values verbatim from the current `factory-phase` signal.
|
|
127
|
+
|
|
126
128
|
Next, publish the review on the PR itself — this is part of every pass, not something to wait to be asked for. Write the handoff body to `.artifacts/factory-review/pr-<number>.md` and submit a PR review matching the verdict:
|
|
127
129
|
|
|
128
130
|
- approve → `gh pr review <number> --approve --body-file <file>`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/factory",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0-alpha.10",
|
|
4
4
|
"description": "Mastra Software Factory module: the server core behind the Mastra Software Factory — storage domains, integrations, and surfaces for agent-powered software delivery",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -52,10 +52,10 @@
|
|
|
52
52
|
"hono": "^4.12.8",
|
|
53
53
|
"zod": "^4.3.6",
|
|
54
54
|
"@mastra/auth-studio": "1.3.4",
|
|
55
|
-
"@mastra/code-sdk": "1.4.0",
|
|
56
55
|
"@mastra/auth-workos": "1.6.4",
|
|
57
|
-
"@mastra/
|
|
58
|
-
"@mastra/core": "1.
|
|
56
|
+
"@mastra/code-sdk": "1.5.0-alpha.10",
|
|
57
|
+
"@mastra/core": "1.62.0-alpha.10",
|
|
58
|
+
"@mastra/slack": "1.6.1"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/node": "22.20.1",
|
|
@@ -65,9 +65,9 @@
|
|
|
65
65
|
"typescript-eslint": "^8.57.0",
|
|
66
66
|
"vitest": "4.1.10",
|
|
67
67
|
"@internal/lint": "0.0.125",
|
|
68
|
-
"@mastra/libsql": "1.
|
|
69
|
-
"@
|
|
70
|
-
"@
|
|
68
|
+
"@mastra/libsql": "1.22.0-alpha.2",
|
|
69
|
+
"@internal/types-builder": "0.0.100",
|
|
70
|
+
"@mastra/pg": "1.22.0-alpha.4"
|
|
71
71
|
},
|
|
72
72
|
"engines": {
|
|
73
73
|
"node": ">=22.19.0"
|