@selfagency/beans-mcp 0.1.3 → 0.1.4
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/{dist/beans-mcp-server.cjs → beans-mcp-server.cjs} +2 -1
- package/{dist/index.cjs → index.cjs} +2 -1
- package/{dist/index.js → index.js} +2 -1
- package/package.json +28 -64
- package/.beans.yml +0 -6
- package/.claude/settings.local.json +0 -18
- package/.editorconfig +0 -13
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/release.yml +0 -235
- package/.github/workflows/test.yml +0 -84
- package/.husky/pre-commit +0 -1
- package/.nvmrc +0 -1
- package/.oxfmtrc.json +0 -11
- package/.oxlintrc.json +0 -37
- package/.vscode/settings.json +0 -3
- package/CHANGELOG.md +0 -160
- package/CONTRIBUTING.md +0 -139
- package/LICENSE.txt +0 -21
- package/codeql/codeql-custom-queries-actions/README.md +0 -14
- package/codeql/codeql-custom-queries-actions/codeql-pack.lock.yml +0 -32
- package/codeql/codeql-custom-queries-actions/codeql-pack.yml +0 -7
- package/codeql/codeql-custom-queries-actions/qlpack.yml +0 -6
- package/codeql/codeql-custom-queries-actions/queries/github-script-without-tojson.ql +0 -18
- package/codeql/codeql-custom-queries-actions/queries/strict-external-action-pinning.ql +0 -18
- package/codeql/codeql-custom-queries-javascript/README.md +0 -14
- package/codeql/codeql-custom-queries-javascript/codeql-pack.lock.yml +0 -30
- package/codeql/codeql-custom-queries-javascript/codeql-pack.yml +0 -7
- package/codeql/codeql-custom-queries-javascript/qlpack.yml +0 -6
- package/codeql/codeql-custom-queries-javascript/queries/child-process-shell-apis.ql +0 -26
- package/codeql/codeql-custom-queries-javascript/queries/innerhtml-assignment.ql +0 -24
- package/dist/README.md +0 -307
- package/dist/beans-mcp-server.cjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/package.json +0 -43
- package/pnpm-workspace.yaml +0 -2
- package/scripts/release.js +0 -433
- package/scripts/write-dist-package.js +0 -53
- package/src/cli.ts +0 -14
- package/src/index.ts +0 -21
- package/src/internal/graphql.ts +0 -33
- package/src/internal/queryHelpers.ts +0 -157
- package/src/server/BeansMcpServer.ts +0 -623
- package/src/server/backend.ts +0 -364
- package/src/test/BeansMcpServer.test.ts +0 -514
- package/src/test/handlers.unit.test.ts +0 -201
- package/src/test/parseCliArgs.test.ts +0 -69
- package/src/test/protocol.e2e.test.ts +0 -884
- package/src/test/queryHelpers.test.ts +0 -524
- package/src/test/startBeansMcpServer.test.ts +0 -146
- package/src/test/tools-integration.test.ts +0 -912
- package/src/test/utils.test.ts +0 -81
- package/src/types.ts +0 -46
- package/src/utils.ts +0 -20
- package/tsconfig.json +0 -24
- package/tsup.config.ts +0 -42
- package/vitest.config.ts +0 -18
- /package/{dist/index.d.ts → index.d.ts} +0 -0
|
@@ -31203,7 +31203,7 @@ init_utils();
|
|
|
31203
31203
|
// package.json
|
|
31204
31204
|
var package_default = {
|
|
31205
31205
|
name: "@selfagency/beans-mcp",
|
|
31206
|
-
version: "0.1.
|
|
31206
|
+
version: "0.1.4",
|
|
31207
31207
|
private: false,
|
|
31208
31208
|
description: "MCP (Model Context Protocol) server for Beans issue tracker",
|
|
31209
31209
|
author: {
|
|
@@ -31219,6 +31219,7 @@ var package_default = {
|
|
|
31219
31219
|
type: "git",
|
|
31220
31220
|
url: "git+https://github.com/selfagency/beans-mcp.git"
|
|
31221
31221
|
},
|
|
31222
|
+
mcpName: "io.github.selfagency/beans-mcp",
|
|
31222
31223
|
keywords: [
|
|
31223
31224
|
"beans",
|
|
31224
31225
|
"mcp",
|
|
@@ -31220,7 +31220,7 @@ init_utils();
|
|
|
31220
31220
|
// package.json
|
|
31221
31221
|
var package_default = {
|
|
31222
31222
|
name: "@selfagency/beans-mcp",
|
|
31223
|
-
version: "0.1.
|
|
31223
|
+
version: "0.1.4",
|
|
31224
31224
|
private: false,
|
|
31225
31225
|
description: "MCP (Model Context Protocol) server for Beans issue tracker",
|
|
31226
31226
|
author: {
|
|
@@ -31236,6 +31236,7 @@ var package_default = {
|
|
|
31236
31236
|
type: "git",
|
|
31237
31237
|
url: "git+https://github.com/selfagency/beans-mcp.git"
|
|
31238
31238
|
},
|
|
31239
|
+
mcpName: "io.github.selfagency/beans-mcp",
|
|
31239
31240
|
keywords: [
|
|
31240
31241
|
"beans",
|
|
31241
31242
|
"mcp",
|
|
@@ -31200,7 +31200,7 @@ init_utils();
|
|
|
31200
31200
|
// package.json
|
|
31201
31201
|
var package_default = {
|
|
31202
31202
|
name: "@selfagency/beans-mcp",
|
|
31203
|
-
version: "0.1.
|
|
31203
|
+
version: "0.1.4",
|
|
31204
31204
|
private: false,
|
|
31205
31205
|
description: "MCP (Model Context Protocol) server for Beans issue tracker",
|
|
31206
31206
|
author: {
|
|
@@ -31216,6 +31216,7 @@ var package_default = {
|
|
|
31216
31216
|
type: "git",
|
|
31217
31217
|
url: "git+https://github.com/selfagency/beans-mcp.git"
|
|
31218
31218
|
},
|
|
31219
|
+
mcpName: "io.github.selfagency/beans-mcp",
|
|
31219
31220
|
keywords: [
|
|
31220
31221
|
"beans",
|
|
31221
31222
|
"mcp",
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@selfagency/beans-mcp",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"private": false,
|
|
3
|
+
"version": "0.1.4",
|
|
5
4
|
"description": "MCP (Model Context Protocol) server for Beans issue tracker",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
|
|
5
|
+
"keywords": [
|
|
6
|
+
"beans",
|
|
7
|
+
"mcp",
|
|
8
|
+
"model-context-protocol",
|
|
9
|
+
"issue-tracker",
|
|
10
|
+
"ai"
|
|
11
|
+
],
|
|
11
12
|
"homepage": "https://github.com/hmans/beans",
|
|
12
13
|
"bugs": {
|
|
13
14
|
"url": "https://github.com/selfagency/beans-mcp/issues"
|
|
@@ -16,65 +17,28 @@
|
|
|
16
17
|
"type": "git",
|
|
17
18
|
"url": "git+https://github.com/selfagency/beans-mcp.git"
|
|
18
19
|
},
|
|
19
|
-
"keywords": [
|
|
20
|
-
"beans",
|
|
21
|
-
"mcp",
|
|
22
|
-
"model-context-protocol",
|
|
23
|
-
"issue-tracker",
|
|
24
|
-
"ai"
|
|
25
|
-
],
|
|
26
20
|
"license": "MIT",
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
31
|
-
"import": "./dist/index.js",
|
|
32
|
-
"require": "./dist/index.cjs"
|
|
33
|
-
}
|
|
21
|
+
"author": {
|
|
22
|
+
"name": "Daniel Sieradski",
|
|
23
|
+
"email": "daniel@self.agency",
|
|
24
|
+
"url": "https://self.agency"
|
|
34
25
|
},
|
|
35
|
-
"main": "./
|
|
36
|
-
"module": "./
|
|
37
|
-
"types": "./
|
|
26
|
+
"main": "./index.cjs",
|
|
27
|
+
"module": "./index.js",
|
|
28
|
+
"types": "./index.d.ts",
|
|
29
|
+
"files": [
|
|
30
|
+
"./index.cjs",
|
|
31
|
+
"./index.js",
|
|
32
|
+
"./index.d.ts"
|
|
33
|
+
],
|
|
38
34
|
"bin": {
|
|
39
|
-
"beans-mcp": "
|
|
40
|
-
},
|
|
41
|
-
"devDependencies": {
|
|
42
|
-
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
43
|
-
"@octokit/rest": "^22.0.1",
|
|
44
|
-
"@types/node": "^20.19.0",
|
|
45
|
-
"@vitest/coverage-v8": "^4.0.18",
|
|
46
|
-
"@vitest/ui": "4.0.18",
|
|
47
|
-
"husky": "^9.1.7",
|
|
48
|
-
"lint-staged": "^16.2.7",
|
|
49
|
-
"ora": "^9.3.0",
|
|
50
|
-
"oxfmt": "^0.35.0",
|
|
51
|
-
"oxlint": "^1.50.0",
|
|
52
|
-
"oxlint-tsgolint": "^0.15.0",
|
|
53
|
-
"tsup": "8.5.1",
|
|
54
|
-
"typescript": "^5.9.3",
|
|
55
|
-
"vitest": "4.0.18",
|
|
56
|
-
"zod": "4.3.6",
|
|
57
|
-
"zx": "^8.8.5"
|
|
35
|
+
"beans-mcp": "./beans-mcp-server.cjs"
|
|
58
36
|
},
|
|
59
|
-
"
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
"pnpm run lint:fix",
|
|
65
|
-
"pnpm run format"
|
|
66
|
-
]
|
|
37
|
+
"exports": {
|
|
38
|
+
".": {
|
|
39
|
+
"import": "./index.js",
|
|
40
|
+
"require": "./index.cjs"
|
|
41
|
+
}
|
|
67
42
|
},
|
|
68
|
-
"
|
|
69
|
-
|
|
70
|
-
"format": "oxfmt",
|
|
71
|
-
"lint:fix": "oxlint --fix",
|
|
72
|
-
"lint": "oxlint",
|
|
73
|
-
"postbuild": "node ./scripts/write-dist-package.js",
|
|
74
|
-
"release": "zx ./scripts/release.js",
|
|
75
|
-
"test:coverage": "vitest run --coverage",
|
|
76
|
-
"test:watch": "vitest",
|
|
77
|
-
"test": "vitest run",
|
|
78
|
-
"type-check": "tsc --noEmit"
|
|
79
|
-
}
|
|
80
|
-
}
|
|
43
|
+
"mcpName": "io.github.selfagency/beans-mcp"
|
|
44
|
+
}
|
package/.beans.yml
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(node /Users/daniel/Developer/beans-mcp-server/dist/index.cjs)",
|
|
5
|
-
"Bash(echo \"Exit: $?\")",
|
|
6
|
-
"Bash(pnpm run build)",
|
|
7
|
-
"Bash(node /Users/daniel/Developer/beans-mcp-server/dist/beans-mcp-server.cjs --help)",
|
|
8
|
-
"Bash(pnpm test)",
|
|
9
|
-
"Bash(pnpm test src/test/protocol.e2e.test.ts)",
|
|
10
|
-
"Bash(python3 -c \"import sys,json; p=json.load\\(sys.stdin\\); print\\(p.get\\(''version''\\)\\); print\\(list\\(p.get\\(''exports'',{}\\).keys\\(\\)\\)[:15]\\)\")",
|
|
11
|
-
"Bash(node -e \"const {z} = require\\(''./node_modules/zod''\\); const s = z.string\\(\\); console.log\\(''v4 internal marker:'', !!s._zod\\); console.log\\(''v3 internal marker:'', !!s._def\\);\")",
|
|
12
|
-
"Bash(pnpm run type-check)",
|
|
13
|
-
"Bash(pnpm build)",
|
|
14
|
-
"Bash(pnpm test --coverage)",
|
|
15
|
-
"Bash(git add README.md package.json scripts/write-dist-package.js src/cli.ts src/internal/queryHelpers.ts src/server/BeansMcpServer.ts src/server/backend.ts src/test/BeansMcpServer.test.ts src/test/handlers.unit.test.ts src/test/parseCliArgs.test.ts src/test/queryHelpers.test.ts tsup.config.ts src/test/protocol.e2e.test.ts src/test/startBeansMcpServer.test.ts CHANGELOG.md)"
|
|
16
|
-
]
|
|
17
|
-
}
|
|
18
|
-
}
|
package/.editorconfig
DELETED
package/.github/dependabot.yml
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
# To get started with Dependabot version updates, you'll need to specify which
|
|
2
|
-
# package ecosystems to update and where the package manifests are located.
|
|
3
|
-
# Please see the documentation for all configuration options:
|
|
4
|
-
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
|
5
|
-
|
|
6
|
-
version: 2
|
|
7
|
-
updates:
|
|
8
|
-
- package-ecosystem: "" # See documentation for possible values
|
|
9
|
-
directory: "/" # Location of package manifests
|
|
10
|
-
schedule:
|
|
11
|
-
interval: "weekly"
|
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
name: Release
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
tags: ["v*"]
|
|
6
|
-
workflow_dispatch:
|
|
7
|
-
inputs:
|
|
8
|
-
version:
|
|
9
|
-
description: "Version to release (e.g. 1.2.3)"
|
|
10
|
-
required: true
|
|
11
|
-
type: string
|
|
12
|
-
|
|
13
|
-
permissions:
|
|
14
|
-
contents: read
|
|
15
|
-
actions: read
|
|
16
|
-
|
|
17
|
-
concurrency:
|
|
18
|
-
group: release-${{ github.ref }}
|
|
19
|
-
cancel-in-progress: true
|
|
20
|
-
|
|
21
|
-
jobs:
|
|
22
|
-
detect-tag:
|
|
23
|
-
name: Detect release tag and readiness
|
|
24
|
-
runs-on: ubuntu-latest
|
|
25
|
-
timeout-minutes: 5
|
|
26
|
-
permissions:
|
|
27
|
-
contents: write
|
|
28
|
-
actions: read
|
|
29
|
-
|
|
30
|
-
outputs:
|
|
31
|
-
release_tag: ${{ steps.tag.outputs.release_tag }}
|
|
32
|
-
ready: ${{ steps.tag.outputs.ready }}
|
|
33
|
-
|
|
34
|
-
steps:
|
|
35
|
-
- name: Resolve tag and verify CI readiness
|
|
36
|
-
id: tag
|
|
37
|
-
uses: actions/github-script@v8
|
|
38
|
-
with:
|
|
39
|
-
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
40
|
-
script: |
|
|
41
|
-
const owner = context.repo.owner;
|
|
42
|
-
const repo = context.repo.repo;
|
|
43
|
-
|
|
44
|
-
let tagName;
|
|
45
|
-
|
|
46
|
-
if (context.eventName === 'workflow_dispatch') {
|
|
47
|
-
const versionInput = '${{ inputs.version }}'.trim();
|
|
48
|
-
if (!versionInput) {
|
|
49
|
-
core.setFailed('version input is required for workflow_dispatch.');
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
tagName = versionInput.startsWith('v') ? versionInput : `v${versionInput}`;
|
|
53
|
-
|
|
54
|
-
// Resolve HEAD of main
|
|
55
|
-
const main = await github.rest.repos.getBranch({ owner, repo, branch: 'main' });
|
|
56
|
-
const mainSha = main.data.commit.sha;
|
|
57
|
-
|
|
58
|
-
// Create the tag via API
|
|
59
|
-
core.info(`Creating tag ${tagName} at ${mainSha}...`);
|
|
60
|
-
await github.rest.git.createRef({
|
|
61
|
-
owner,
|
|
62
|
-
repo,
|
|
63
|
-
ref: `refs/tags/${tagName}`,
|
|
64
|
-
sha: mainSha,
|
|
65
|
-
});
|
|
66
|
-
core.info(`Tag ${tagName} created.`);
|
|
67
|
-
} else {
|
|
68
|
-
tagName = context.ref.replace('refs/tags/', '');
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
if (!tagName || !tagName.startsWith('v')) {
|
|
72
|
-
core.info(`Ref '${context.ref}' is not a release tag; skipping.`);
|
|
73
|
-
core.setOutput('release_tag', '');
|
|
74
|
-
core.setOutput('ready', 'false');
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const refData = await github.rest.git.getRef({
|
|
79
|
-
owner,
|
|
80
|
-
repo,
|
|
81
|
-
ref: `tags/${tagName}`,
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
const refObj = refData.data.object;
|
|
85
|
-
const taggedSha =
|
|
86
|
-
refObj.type === 'tag'
|
|
87
|
-
? (await github.rest.git.getTag({ owner, repo, tag_sha: refObj.sha })).data.object.sha
|
|
88
|
-
: refObj.sha;
|
|
89
|
-
const main = await github.rest.repos.getBranch({ owner, repo, branch: 'main' });
|
|
90
|
-
const mainSha = main.data.commit.sha;
|
|
91
|
-
|
|
92
|
-
if (taggedSha !== mainSha) {
|
|
93
|
-
core.setFailed(
|
|
94
|
-
`Release blocked: tag ${tagName} points to ${taggedSha}, but latest main is ${mainSha}.`
|
|
95
|
-
);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Verify the full test suite passed on this commit.
|
|
100
|
-
const requiredWorkflows = ['Test & Build'];
|
|
101
|
-
|
|
102
|
-
for (const workflowName of requiredWorkflows) {
|
|
103
|
-
const workflowsResp = await github.rest.actions.listRepoWorkflows({
|
|
104
|
-
owner,
|
|
105
|
-
repo,
|
|
106
|
-
per_page: 100,
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
const workflow = workflowsResp.data.workflows.find(w => w.name === workflowName);
|
|
110
|
-
if (!workflow) {
|
|
111
|
-
core.setFailed(`Release blocked: required workflow '${workflowName}' not found in repository.`);
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
const runsResp = await github.rest.actions.listWorkflowRuns({
|
|
116
|
-
owner,
|
|
117
|
-
repo,
|
|
118
|
-
workflow_id: workflow.id,
|
|
119
|
-
branch: 'main',
|
|
120
|
-
head_sha: mainSha,
|
|
121
|
-
status: 'completed',
|
|
122
|
-
per_page: 10,
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
const run = runsResp.data.workflow_runs[0];
|
|
126
|
-
if (!run) {
|
|
127
|
-
core.setFailed(
|
|
128
|
-
`Release blocked: required workflow '${workflowName}' has no completed run for ${mainSha}.`
|
|
129
|
-
);
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
if (run.conclusion !== 'success') {
|
|
133
|
-
core.setFailed(
|
|
134
|
-
`Release blocked: workflow '${workflowName}' concluded with '${run.conclusion}' on ${mainSha}.`
|
|
135
|
-
);
|
|
136
|
-
return;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
core.info(`Release tag detected: ${tagName} on latest main commit ${mainSha}; all checks passed.`);
|
|
141
|
-
core.setOutput('release_tag', tagName);
|
|
142
|
-
core.setOutput('ready', 'true');
|
|
143
|
-
|
|
144
|
-
release:
|
|
145
|
-
name: Build and Release
|
|
146
|
-
needs: detect-tag
|
|
147
|
-
if: needs.detect-tag.outputs.release_tag != '' && needs.detect-tag.outputs.ready == 'true'
|
|
148
|
-
runs-on: ubuntu-latest
|
|
149
|
-
timeout-minutes: 10
|
|
150
|
-
permissions:
|
|
151
|
-
contents: write
|
|
152
|
-
|
|
153
|
-
steps:
|
|
154
|
-
- name: Checkout repository
|
|
155
|
-
uses: actions/checkout@v4
|
|
156
|
-
with:
|
|
157
|
-
ref: ${{ needs.detect-tag.outputs.release_tag }}
|
|
158
|
-
fetch-depth: 0
|
|
159
|
-
|
|
160
|
-
- name: Generate release notes
|
|
161
|
-
id: changelog_notes
|
|
162
|
-
uses: actions/github-script@v8
|
|
163
|
-
with:
|
|
164
|
-
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
165
|
-
script: |
|
|
166
|
-
const owner = context.repo.owner;
|
|
167
|
-
const repo = context.repo.repo;
|
|
168
|
-
const currentTag = '${{ needs.detect-tag.outputs.release_tag }}';
|
|
169
|
-
|
|
170
|
-
const tagsResp = await github.rest.repos.listTags({
|
|
171
|
-
owner,
|
|
172
|
-
repo,
|
|
173
|
-
per_page: 100,
|
|
174
|
-
});
|
|
175
|
-
const tags = tagsResp.data;
|
|
176
|
-
|
|
177
|
-
const index = tags.findIndex(tag => tag.name === currentTag);
|
|
178
|
-
const previousTag =
|
|
179
|
-
index >= 0
|
|
180
|
-
? (tags.slice(index + 1).find(tag => tag.name.startsWith('v'))?.name ?? '')
|
|
181
|
-
: '';
|
|
182
|
-
|
|
183
|
-
const notesResponse = await github.rest.repos.generateReleaseNotes({
|
|
184
|
-
owner,
|
|
185
|
-
repo,
|
|
186
|
-
tag_name: currentTag,
|
|
187
|
-
...(previousTag ? { previous_tag_name: previousTag } : {}),
|
|
188
|
-
target_commitish: 'main',
|
|
189
|
-
});
|
|
190
|
-
|
|
191
|
-
core.info(
|
|
192
|
-
previousTag
|
|
193
|
-
? `Generated changelog notes from ${previousTag} to ${currentTag}.`
|
|
194
|
-
: `Generated changelog notes for ${currentTag} (no previous tag found).`
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
core.setOutput('previous_tag', previousTag);
|
|
198
|
-
core.setOutput('notes', notesResponse.data.body ?? '');
|
|
199
|
-
|
|
200
|
-
- name: Write release notes to file
|
|
201
|
-
run: printf '%s' "$RELEASE_NOTES" > release-notes.md
|
|
202
|
-
env:
|
|
203
|
-
RELEASE_NOTES: ${{ steps.changelog_notes.outputs.notes }}
|
|
204
|
-
|
|
205
|
-
- name: Setup pnpm
|
|
206
|
-
uses: pnpm/action-setup@v4
|
|
207
|
-
with:
|
|
208
|
-
version: 10
|
|
209
|
-
|
|
210
|
-
- name: Setup Node.js
|
|
211
|
-
uses: actions/setup-node@v4
|
|
212
|
-
with:
|
|
213
|
-
node-version: "20"
|
|
214
|
-
cache: "pnpm"
|
|
215
|
-
|
|
216
|
-
- name: Install dependencies
|
|
217
|
-
run: pnpm install --frozen-lockfile
|
|
218
|
-
|
|
219
|
-
- name: Build
|
|
220
|
-
run: pnpm build
|
|
221
|
-
|
|
222
|
-
- name: Pack npm tarball
|
|
223
|
-
run: npm pack ./dist --pack-destination .
|
|
224
|
-
|
|
225
|
-
- name: Create GitHub Release
|
|
226
|
-
uses: softprops/action-gh-release@v2
|
|
227
|
-
with:
|
|
228
|
-
tag_name: ${{ needs.detect-tag.outputs.release_tag }}
|
|
229
|
-
body_path: release-notes.md
|
|
230
|
-
files: "*.tgz"
|
|
231
|
-
draft: false
|
|
232
|
-
prerelease: ${{ contains(needs.detect-tag.outputs.release_tag, '-') }}
|
|
233
|
-
env:
|
|
234
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
235
|
-
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
name: Test & Build
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
pull_request:
|
|
8
|
-
branches:
|
|
9
|
-
- main
|
|
10
|
-
|
|
11
|
-
permissions:
|
|
12
|
-
contents: read
|
|
13
|
-
pull-requests: write
|
|
14
|
-
|
|
15
|
-
jobs:
|
|
16
|
-
test:
|
|
17
|
-
runs-on: ubuntu-latest
|
|
18
|
-
strategy:
|
|
19
|
-
matrix:
|
|
20
|
-
node-version: [20.x]
|
|
21
|
-
|
|
22
|
-
steps:
|
|
23
|
-
- name: Checkout
|
|
24
|
-
uses: actions/checkout@v4
|
|
25
|
-
|
|
26
|
-
- name: Setup Node.js ${{ matrix.node-version }}
|
|
27
|
-
uses: actions/setup-node@v4
|
|
28
|
-
with:
|
|
29
|
-
node-version: ${{ matrix.node-version }}
|
|
30
|
-
|
|
31
|
-
- name: Setup pnpm
|
|
32
|
-
uses: pnpm/action-setup@v4
|
|
33
|
-
with:
|
|
34
|
-
version: 10
|
|
35
|
-
|
|
36
|
-
- name: Get pnpm store directory
|
|
37
|
-
id: pnpm-store
|
|
38
|
-
shell: bash
|
|
39
|
-
run: |
|
|
40
|
-
# pnpm may return a non-zero code in some environments; fall back to a sane default
|
|
41
|
-
STORE_PATH="$(pnpm store path 2>/dev/null || echo "${HOME}/.pnpm-store")"
|
|
42
|
-
echo "store-path=$STORE_PATH" >> $GITHUB_OUTPUT
|
|
43
|
-
|
|
44
|
-
- name: Cache pnpm store
|
|
45
|
-
uses: actions/cache@v4
|
|
46
|
-
with:
|
|
47
|
-
path: ${{ steps.pnpm-store.outputs.store-path }}
|
|
48
|
-
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
|
|
49
|
-
restore-keys: ${{ runner.os }}-pnpm-store-
|
|
50
|
-
|
|
51
|
-
- name: Install dependencies
|
|
52
|
-
run: pnpm install --frozen-lockfile
|
|
53
|
-
|
|
54
|
-
- name: Type check
|
|
55
|
-
run: pnpm type-check
|
|
56
|
-
|
|
57
|
-
- name: Lint
|
|
58
|
-
run: pnpm lint
|
|
59
|
-
continue-on-error: true
|
|
60
|
-
|
|
61
|
-
- name: Build
|
|
62
|
-
run: pnpm build
|
|
63
|
-
|
|
64
|
-
- name: Verify build outputs
|
|
65
|
-
run: |
|
|
66
|
-
test -f dist/index.js || exit 1
|
|
67
|
-
test -f dist/index.cjs || exit 1
|
|
68
|
-
test -f dist/beans-mcp-server.cjs || exit 1
|
|
69
|
-
test -f dist/index.d.ts || exit 1
|
|
70
|
-
echo "✓ All build outputs verified"
|
|
71
|
-
|
|
72
|
-
- name: Test
|
|
73
|
-
run: pnpm test:coverage --reporter=junit --outputFile=test-report.junit.xml
|
|
74
|
-
|
|
75
|
-
- name: Upload test results to Codecov
|
|
76
|
-
if: ${{ !cancelled() }}
|
|
77
|
-
uses: codecov/test-results-action@v1
|
|
78
|
-
with:
|
|
79
|
-
token: ${{ secrets.CODECOV_TOKEN }}
|
|
80
|
-
|
|
81
|
-
- name: Upload coverage reports to Codecov
|
|
82
|
-
uses: codecov/codecov-action@v5
|
|
83
|
-
with:
|
|
84
|
-
token: ${{ secrets.CODECOV_TOKEN }}
|
package/.husky/pre-commit
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
npx lint-staged
|
package/.nvmrc
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
20
|
package/.oxfmtrc.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./node_modules/oxfmt/configuration_schema.json",
|
|
3
|
-
"ignorePatterns": ["node_modules", "dist"],
|
|
4
|
-
"arrowParens": "avoid",
|
|
5
|
-
"bracketSpacing": true,
|
|
6
|
-
"printWidth": 120,
|
|
7
|
-
"proseWrap": "preserve",
|
|
8
|
-
"semi": true,
|
|
9
|
-
"singleQuote": true,
|
|
10
|
-
"tabWidth": 2
|
|
11
|
-
}
|
package/.oxlintrc.json
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
|
3
|
-
"plugins": [
|
|
4
|
-
"unicorn",
|
|
5
|
-
"typescript",
|
|
6
|
-
"oxc",
|
|
7
|
-
"import",
|
|
8
|
-
"promise",
|
|
9
|
-
"node",
|
|
10
|
-
"vitest"
|
|
11
|
-
],
|
|
12
|
-
"categories": {},
|
|
13
|
-
"rules": {},
|
|
14
|
-
"settings": {
|
|
15
|
-
"jsdoc": {
|
|
16
|
-
"ignorePrivate": false,
|
|
17
|
-
"ignoreInternal": false,
|
|
18
|
-
"ignoreReplacesDocs": true,
|
|
19
|
-
"overrideReplacesDocs": true,
|
|
20
|
-
"augmentsExtendsReplacesDocs": false,
|
|
21
|
-
"implementsReplacesDocs": false,
|
|
22
|
-
"exemptDestructuredRootsFromChecks": false,
|
|
23
|
-
"tagNamePreference": {}
|
|
24
|
-
},
|
|
25
|
-
"vitest": {
|
|
26
|
-
"typecheck": false
|
|
27
|
-
}
|
|
28
|
-
},
|
|
29
|
-
"env": {
|
|
30
|
-
"builtin": true
|
|
31
|
-
},
|
|
32
|
-
"globals": {},
|
|
33
|
-
"ignorePatterns": [
|
|
34
|
-
"node_modules",
|
|
35
|
-
"dist"
|
|
36
|
-
]
|
|
37
|
-
}
|
package/.vscode/settings.json
DELETED