@contractspec/app.alpic-mcp 3.7.6 → 3.7.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/AGENTS.md +27 -20
- package/CHANGELOG.md +18 -0
- package/README.md +53 -9
- package/assets/app.js +24 -24
- package/assets/style.css +188 -188
- package/package.json +41 -41
package/AGENTS.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# AI Agent Guide —
|
|
1
|
+
# AI Agent Guide — `@contractspec/app.alpic-mcp`
|
|
2
2
|
|
|
3
3
|
Scope: `packages/apps/alpic-mcp/*`
|
|
4
4
|
|
|
@@ -6,33 +6,40 @@ MCP (Model Context Protocol) server for Alpic. Exposes ContractSpec documentatio
|
|
|
6
6
|
|
|
7
7
|
## Quick Context
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
9
|
+
- Layer: `app`.
|
|
10
|
+
- Package visibility: published package.
|
|
11
|
+
- Primary consumers are deployed users, operators, or external clients of this app surface.
|
|
12
|
+
- Related packages: `@contractspec/bundle.alpic`, `@contractspec/lib.logger`, `@contractspec/tool.tsdown`, `@contractspec/tool.typescript`.
|
|
11
13
|
|
|
12
14
|
## Architecture
|
|
13
15
|
|
|
14
|
-
- Uses `@contractspec/bundle.alpic` for Alpic business logic
|
|
15
|
-
- Uses `@contractspec/lib.logger` for structured logging
|
|
16
|
-
- Built with tsdown; runs as a Node.js server
|
|
16
|
+
- Uses `@contractspec/bundle.alpic` for Alpic business logic.
|
|
17
|
+
- Uses `@contractspec/lib.logger` for structured logging.
|
|
18
|
+
- Built with tsdown; runs as a Node.js server.
|
|
19
|
+
- `src/index.ts` is the root public barrel and package entrypoint.
|
|
20
|
+
- `src/server.ts` is the main server bootstrap entrypoint.
|
|
17
21
|
|
|
18
|
-
##
|
|
22
|
+
## Public Surface
|
|
19
23
|
|
|
20
|
-
-
|
|
21
|
-
- `
|
|
22
|
-
|
|
23
|
-
## Public Exports
|
|
24
|
-
|
|
25
|
-
- `.` → `dist/index.mjs`
|
|
26
|
-
- `./server` → `dist/server.mjs`
|
|
24
|
+
- Export `.` resolves through `./dist/index.mjs`.
|
|
25
|
+
- Export `./server` resolves through `./dist/server.mjs`.
|
|
26
|
+
- Export `./*` resolves through `./*`.
|
|
27
27
|
|
|
28
28
|
## Guardrails
|
|
29
29
|
|
|
30
|
-
- MCP protocol compliance is critical — do not break tool/resource schemas
|
|
31
|
-
- Keep server startup fast; defer heavy initialization
|
|
30
|
+
- MCP protocol compliance is critical — do not break tool/resource schemas.
|
|
31
|
+
- Keep server startup fast; defer heavy initialization.
|
|
32
|
+
- Changes here can affect downstream packages such as `@contractspec/bundle.alpic`, `@contractspec/lib.logger`, `@contractspec/tool.tsdown`, `@contractspec/tool.typescript`.
|
|
33
|
+
- Changes here can affect downstream packages such as `@contractspec/bundle.alpic`, `@contractspec/lib.logger`, `@contractspec/tool.tsdown`, `@contractspec/tool.typescript`.
|
|
32
34
|
|
|
33
35
|
## Local Commands
|
|
34
36
|
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
37
|
+
- `bun run dev` — tsdown --watch
|
|
38
|
+
- `bun run start` — node dist/server.js
|
|
39
|
+
- `bun run build` — tsdown && mkdir -p dist && cp -R assets dist/assets
|
|
40
|
+
- `bun run lint` — bun run lint:fix
|
|
41
|
+
- `bun run lint:check` — biome check .
|
|
42
|
+
- `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
|
|
43
|
+
- `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
|
|
44
|
+
- `bun run publish:pkg:canary` — bun publish:pkg --tag canary
|
|
45
|
+
- `bun run clean` — rm -rf dist
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,23 @@
|
|
|
1
1
|
# @contractspec/app.alpic-mcp
|
|
2
2
|
|
|
3
|
+
## 3.7.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 1a44cb6: feat: improve examples to increase coverage of Contracts type
|
|
8
|
+
- Updated dependencies [1a44cb6]
|
|
9
|
+
- @contractspec/bundle.alpic@3.7.10
|
|
10
|
+
- @contractspec/lib.logger@3.7.8
|
|
11
|
+
|
|
12
|
+
## 3.7.9
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- fix: release
|
|
17
|
+
- Updated dependencies
|
|
18
|
+
- @contractspec/bundle.alpic@3.7.9
|
|
19
|
+
- @contractspec/lib.logger@3.7.7
|
|
20
|
+
|
|
3
21
|
## 3.7.6
|
|
4
22
|
|
|
5
23
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -1,16 +1,60 @@
|
|
|
1
1
|
# @contractspec/app.alpic-mcp
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Website: https://contractspec.io
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**MCP (Model Context Protocol) server for Alpic. Exposes ContractSpec documentation and tooling to AI agents via the MCP standard.**
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
7
|
+
## What It Does
|
|
8
|
+
|
|
9
|
+
- Uses `@contractspec/bundle.alpic` for Alpic business logic.
|
|
10
|
+
- Uses `@contractspec/lib.logger` for structured logging.
|
|
11
|
+
- Built with tsdown; runs as a Node.js server.
|
|
12
|
+
- Related ContractSpec packages include `@contractspec/bundle.alpic`, `@contractspec/lib.logger`, `@contractspec/tool.tsdown`, `@contractspec/tool.typescript`.
|
|
13
|
+
|
|
14
|
+
## Running Locally
|
|
15
|
+
|
|
16
|
+
From `packages/apps/alpic-mcp`:
|
|
17
|
+
- `bun run dev`
|
|
18
|
+
- `bun run start`
|
|
19
|
+
- `bun run build`
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
bun run dev
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Architecture
|
|
28
|
+
|
|
29
|
+
- Uses `@contractspec/bundle.alpic` for Alpic business logic.
|
|
30
|
+
- Uses `@contractspec/lib.logger` for structured logging.
|
|
31
|
+
- Built with tsdown; runs as a Node.js server.
|
|
32
|
+
- `src/index.ts` is the root public barrel and package entrypoint.
|
|
33
|
+
- `src/server.ts` is the main server bootstrap entrypoint.
|
|
34
|
+
|
|
35
|
+
## Public Entry Points
|
|
36
|
+
|
|
37
|
+
- Export `.` resolves through `./dist/index.mjs`.
|
|
38
|
+
- Export `./server` resolves through `./dist/server.mjs`.
|
|
39
|
+
- Export `./*` resolves through `./*`.
|
|
40
|
+
|
|
41
|
+
## Local Commands
|
|
42
|
+
|
|
43
|
+
- `bun run dev` — tsdown --watch
|
|
44
|
+
- `bun run start` — node dist/server.js
|
|
45
|
+
- `bun run build` — tsdown && mkdir -p dist && cp -R assets dist/assets
|
|
46
|
+
- `bun run lint` — bun run lint:fix
|
|
47
|
+
- `bun run lint:check` — biome check .
|
|
48
|
+
- `bun run lint:fix` — biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .
|
|
49
|
+
- `bun run publish:pkg` — bun publish --tolerate-republish --ignore-scripts --verbose
|
|
50
|
+
- `bun run publish:pkg:canary` — bun publish:pkg --tag canary
|
|
51
|
+
- `bun run clean` — rm -rf dist
|
|
52
|
+
|
|
53
|
+
## Recent Updates
|
|
54
|
+
|
|
55
|
+
- Replace eslint+prettier by biomejs to optimize speed.
|
|
11
56
|
|
|
12
57
|
## Notes
|
|
13
58
|
|
|
14
|
-
-
|
|
15
|
-
-
|
|
16
|
-
- If assets are cached in ChatGPT, use the in-app refresh option.
|
|
59
|
+
- MCP protocol compliance is critical — do not break tool/resource schemas.
|
|
60
|
+
- Keep server startup fast; defer heavy initialization.
|
package/assets/app.js
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
const origin = window.location.origin;
|
|
2
2
|
|
|
3
3
|
const config = {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
mcpServers: {
|
|
5
|
+
'alpic-app': {
|
|
6
|
+
url: origin,
|
|
7
|
+
transport: 'http',
|
|
8
|
+
},
|
|
9
|
+
},
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
const originTargets = document.querySelectorAll('[data-origin]');
|
|
13
13
|
originTargets.forEach((node) => {
|
|
14
|
-
|
|
14
|
+
node.textContent = origin;
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
const configNode = document.getElementById('config-json');
|
|
18
18
|
if (configNode) {
|
|
19
|
-
|
|
19
|
+
configNode.textContent = JSON.stringify(config, null, 2);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
const copyButton = document.getElementById('copy-config');
|
|
23
23
|
if (copyButton) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
24
|
+
copyButton.addEventListener('click', async () => {
|
|
25
|
+
try {
|
|
26
|
+
await navigator.clipboard.writeText(JSON.stringify(config, null, 2));
|
|
27
|
+
copyButton.textContent = 'Copied';
|
|
28
|
+
copyButton.classList.add('is-copied');
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
copyButton.textContent = 'Copy MCP config';
|
|
31
|
+
copyButton.classList.remove('is-copied');
|
|
32
|
+
}, 1600);
|
|
33
|
+
} catch {
|
|
34
|
+
copyButton.textContent = 'Copy failed';
|
|
35
|
+
setTimeout(() => {
|
|
36
|
+
copyButton.textContent = 'Copy MCP config';
|
|
37
|
+
}, 1600);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
40
|
}
|
package/assets/style.css
CHANGED
|
@@ -1,315 +1,315 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
2
|
+
--bg: #f7f2ea;
|
|
3
|
+
--bg-alt: #e9f3f1;
|
|
4
|
+
--ink: #1f1b16;
|
|
5
|
+
--muted: #6b6258;
|
|
6
|
+
--card: #ffffff;
|
|
7
|
+
--accent: #1b7f6b;
|
|
8
|
+
--accent-strong: #156554;
|
|
9
|
+
--accent-warm: #d97941;
|
|
10
|
+
--border: rgba(31, 27, 22, 0.12);
|
|
11
|
+
--shadow: 0 18px 40px rgba(31, 27, 22, 0.12);
|
|
12
|
+
--radius: 24px;
|
|
13
|
+
--radius-small: 14px;
|
|
14
|
+
--space: 24px;
|
|
15
|
+
--mono: "Space Grotesk", "Avenir Next", sans-serif;
|
|
16
|
+
--serif: "Newsreader", "Georgia", serif;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
* {
|
|
20
|
-
|
|
20
|
+
box-sizing: border-box;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
body {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
margin: 0;
|
|
25
|
+
font-family: var(--mono);
|
|
26
|
+
color: var(--ink);
|
|
27
|
+
background:
|
|
28
|
+
radial-gradient(circle at top left, #fff4e6, transparent 55%),
|
|
29
|
+
linear-gradient(135deg, var(--bg), var(--bg-alt));
|
|
30
|
+
min-height: 100vh;
|
|
31
|
+
display: flex;
|
|
32
|
+
justify-content: center;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
body::before,
|
|
36
36
|
body::after {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
content: "";
|
|
38
|
+
position: fixed;
|
|
39
|
+
z-index: -1;
|
|
40
|
+
width: 340px;
|
|
41
|
+
height: 340px;
|
|
42
|
+
border-radius: 50%;
|
|
43
|
+
filter: blur(10px);
|
|
44
|
+
opacity: 0.35;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
body::before {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
top: -120px;
|
|
49
|
+
right: -80px;
|
|
50
|
+
background: radial-gradient(circle, #b6e2d3, transparent 70%);
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
body::after {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
bottom: -140px;
|
|
55
|
+
left: -120px;
|
|
56
|
+
background: radial-gradient(circle, #f2c4a0, transparent 70%);
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
.page {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
60
|
+
width: min(1100px, 92vw);
|
|
61
|
+
padding: 48px 0 64px;
|
|
62
|
+
display: flex;
|
|
63
|
+
flex-direction: column;
|
|
64
|
+
gap: 48px;
|
|
65
|
+
animation: fade-in 0.6s ease-out;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
@keyframes fade-in {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
69
|
+
from {
|
|
70
|
+
opacity: 0;
|
|
71
|
+
transform: translateY(14px);
|
|
72
|
+
}
|
|
73
|
+
to {
|
|
74
|
+
opacity: 1;
|
|
75
|
+
transform: translateY(0);
|
|
76
|
+
}
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
.hero {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
80
|
+
background: var(--card);
|
|
81
|
+
padding: clamp(28px, 4vw, 48px);
|
|
82
|
+
border-radius: var(--radius);
|
|
83
|
+
box-shadow: var(--shadow);
|
|
84
|
+
border: 1px solid var(--border);
|
|
85
|
+
display: flex;
|
|
86
|
+
flex-direction: column;
|
|
87
|
+
gap: 16px;
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
.hero__badge {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
91
|
+
align-self: flex-start;
|
|
92
|
+
padding: 8px 14px;
|
|
93
|
+
border-radius: 999px;
|
|
94
|
+
background: rgba(27, 127, 107, 0.12);
|
|
95
|
+
color: var(--accent-strong);
|
|
96
|
+
font-weight: 600;
|
|
97
|
+
letter-spacing: 0.03em;
|
|
98
|
+
text-transform: uppercase;
|
|
99
|
+
font-size: 12px;
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
.hero h1 {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
103
|
+
font-size: clamp(32px, 4vw, 48px);
|
|
104
|
+
margin: 0;
|
|
105
|
+
line-height: 1.05;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
.hero p {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
margin: 0;
|
|
110
|
+
font-size: 17px;
|
|
111
|
+
color: var(--muted);
|
|
112
|
+
font-family: var(--serif);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
.hero p span {
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
font-weight: 600;
|
|
117
|
+
color: var(--ink);
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
.hero__actions {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
display: flex;
|
|
122
|
+
flex-wrap: wrap;
|
|
123
|
+
gap: 14px;
|
|
124
124
|
}
|
|
125
125
|
|
|
126
126
|
.hero__actions .primary,
|
|
127
127
|
.hero__actions .ghost {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
border-radius: 999px;
|
|
129
|
+
padding: 12px 20px;
|
|
130
|
+
font-size: 15px;
|
|
131
|
+
border: none;
|
|
132
|
+
cursor: pointer;
|
|
133
|
+
text-decoration: none;
|
|
134
|
+
transition:
|
|
135
|
+
transform 0.2s ease,
|
|
136
|
+
box-shadow 0.2s ease;
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
.hero__actions .primary {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
140
|
+
background: var(--accent);
|
|
141
|
+
color: #fff;
|
|
142
|
+
box-shadow: 0 14px 24px rgba(27, 127, 107, 0.25);
|
|
143
143
|
}
|
|
144
144
|
|
|
145
145
|
.hero__actions .primary:hover {
|
|
146
|
-
|
|
147
|
-
|
|
146
|
+
transform: translateY(-1px);
|
|
147
|
+
box-shadow: 0 18px 28px rgba(27, 127, 107, 0.3);
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
.hero__actions .primary.is-copied {
|
|
151
|
-
|
|
151
|
+
background: var(--accent-strong);
|
|
152
152
|
}
|
|
153
153
|
|
|
154
154
|
.hero__actions .ghost {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
border: 1px solid var(--border);
|
|
156
|
+
color: var(--ink);
|
|
157
|
+
background: transparent;
|
|
158
158
|
}
|
|
159
159
|
|
|
160
160
|
.hero__meta {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
161
|
+
display: grid;
|
|
162
|
+
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
|
163
|
+
gap: 12px;
|
|
164
|
+
margin-top: 10px;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
.meta-card {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
168
|
+
border-radius: var(--radius-small);
|
|
169
|
+
padding: 14px 16px;
|
|
170
|
+
background: rgba(27, 127, 107, 0.08);
|
|
171
|
+
display: grid;
|
|
172
|
+
gap: 6px;
|
|
173
173
|
}
|
|
174
174
|
|
|
175
175
|
.meta-card span {
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
176
|
+
font-size: 12px;
|
|
177
|
+
text-transform: uppercase;
|
|
178
|
+
letter-spacing: 0.04em;
|
|
179
|
+
color: var(--muted);
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
.meta-card code {
|
|
183
|
-
|
|
184
|
-
|
|
183
|
+
font-family: var(--mono);
|
|
184
|
+
font-weight: 600;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
187
|
.grid {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
display: grid;
|
|
189
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
190
|
+
gap: 18px;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
.card {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
194
|
+
background: var(--card);
|
|
195
|
+
border: 1px solid var(--border);
|
|
196
|
+
border-radius: var(--radius-small);
|
|
197
|
+
padding: 20px;
|
|
198
|
+
display: flex;
|
|
199
|
+
flex-direction: column;
|
|
200
|
+
gap: 12px;
|
|
201
|
+
box-shadow: 0 14px 26px rgba(31, 27, 22, 0.08);
|
|
202
202
|
}
|
|
203
203
|
|
|
204
204
|
.card h2 {
|
|
205
|
-
|
|
206
|
-
|
|
205
|
+
margin: 0;
|
|
206
|
+
font-size: 20px;
|
|
207
207
|
}
|
|
208
208
|
|
|
209
209
|
.card p {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
margin: 0;
|
|
211
|
+
color: var(--muted);
|
|
212
|
+
font-family: var(--serif);
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
.card ul {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
216
|
+
margin: 0;
|
|
217
|
+
padding-left: 18px;
|
|
218
|
+
color: var(--muted);
|
|
219
219
|
}
|
|
220
220
|
|
|
221
221
|
.card strong {
|
|
222
|
-
|
|
222
|
+
color: var(--ink);
|
|
223
223
|
}
|
|
224
224
|
|
|
225
225
|
.code {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
226
|
+
background: #0f172a;
|
|
227
|
+
color: #dbeafe;
|
|
228
|
+
padding: 16px;
|
|
229
|
+
border-radius: 12px;
|
|
230
|
+
font-size: 12px;
|
|
231
|
+
line-height: 1.5;
|
|
232
|
+
overflow-x: auto;
|
|
233
233
|
}
|
|
234
234
|
|
|
235
235
|
.assets {
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
236
|
+
background: var(--card);
|
|
237
|
+
padding: 24px;
|
|
238
|
+
border-radius: var(--radius);
|
|
239
|
+
border: 1px solid var(--border);
|
|
240
|
+
display: grid;
|
|
241
|
+
gap: 20px;
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
.assets__header h2 {
|
|
245
|
-
|
|
245
|
+
margin: 0 0 6px;
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
.assets__header p {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
249
|
+
margin: 0;
|
|
250
|
+
color: var(--muted);
|
|
251
|
+
font-family: var(--serif);
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
.assets__list {
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
255
|
+
display: grid;
|
|
256
|
+
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
257
|
+
gap: 14px;
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
.asset-item {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
261
|
+
padding: 16px;
|
|
262
|
+
border-radius: 14px;
|
|
263
|
+
border: 1px solid var(--border);
|
|
264
|
+
background: rgba(217, 121, 65, 0.08);
|
|
265
|
+
display: grid;
|
|
266
|
+
gap: 6px;
|
|
267
267
|
}
|
|
268
268
|
|
|
269
269
|
.asset-item span {
|
|
270
|
-
|
|
270
|
+
font-weight: 600;
|
|
271
271
|
}
|
|
272
272
|
|
|
273
273
|
.asset-item small {
|
|
274
|
-
|
|
274
|
+
color: var(--muted);
|
|
275
275
|
}
|
|
276
276
|
|
|
277
277
|
.footer {
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
278
|
+
display: flex;
|
|
279
|
+
flex-wrap: wrap;
|
|
280
|
+
justify-content: space-between;
|
|
281
|
+
gap: 12px;
|
|
282
|
+
color: var(--muted);
|
|
283
|
+
font-size: 14px;
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
.footer__links {
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
display: flex;
|
|
288
|
+
gap: 16px;
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
.footer a {
|
|
292
|
-
|
|
293
|
-
|
|
292
|
+
color: var(--accent-strong);
|
|
293
|
+
text-decoration: none;
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
.footer a:hover {
|
|
297
|
-
|
|
297
|
+
text-decoration: underline;
|
|
298
298
|
}
|
|
299
299
|
|
|
300
300
|
@media (max-width: 720px) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
301
|
+
.page {
|
|
302
|
+
padding-top: 32px;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
.hero__actions {
|
|
306
|
+
flex-direction: column;
|
|
307
|
+
align-items: stretch;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
.hero__actions .primary,
|
|
311
|
+
.hero__actions .ghost {
|
|
312
|
+
width: 100%;
|
|
313
|
+
text-align: center;
|
|
314
|
+
}
|
|
315
315
|
}
|
package/package.json
CHANGED
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
2
|
+
"name": "@contractspec/app.alpic-mcp",
|
|
3
|
+
"version": "3.7.10",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"publish:pkg": "bun publish --tolerate-republish --ignore-scripts --verbose",
|
|
7
|
+
"publish:pkg:canary": "bun publish:pkg --tag canary",
|
|
8
|
+
"clean": "rm -rf dist",
|
|
9
|
+
"lint": "bun run lint:fix",
|
|
10
|
+
"lint:fix": "biome check --write --unsafe --only=nursery/useSortedClasses . && biome check --write .",
|
|
11
|
+
"lint:check": "biome check .",
|
|
12
|
+
"build": "tsdown && mkdir -p dist && cp -R assets dist/assets",
|
|
13
|
+
"dev": "tsdown --watch",
|
|
14
|
+
"start": "node dist/server.js"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@contractspec/bundle.alpic": "3.7.10",
|
|
18
|
+
"@contractspec/lib.logger": "3.7.8"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@contractspec/tool.tsdown": "3.7.8",
|
|
22
|
+
"@contractspec/tool.typescript": "3.7.8",
|
|
23
|
+
"@types/node": "^25.3.5",
|
|
24
|
+
"tsdown": "^0.21.4",
|
|
25
|
+
"typescript": "^5.9.3"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "https://github.com/lssm-tech/contractspec.git",
|
|
31
|
+
"directory": "packages/apps/alpic-mcp"
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"registry": "https://registry.npmjs.org/",
|
|
35
|
+
"access": "public"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://contractspec.io",
|
|
38
|
+
"exports": {
|
|
39
|
+
".": "./dist/index.mjs",
|
|
40
|
+
"./server": "./dist/server.mjs",
|
|
41
|
+
"./*": "./*"
|
|
42
|
+
}
|
|
43
43
|
}
|