@akanjs/cli 3.0.0-alpha.69 → 3.0.0-alpha.70
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/.build-stamp
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
a28e1153bab4e1e1e981a92cbd3a49ffbf5137997da979da9cf3ad9f5d1f54ba
|
|
@@ -707,6 +707,9 @@ while guaranteeing that every endpoint added later is invisible to agents until
|
|
|
707
707
|
- Settings live in the app's `lib/option.ts` — `option.setMcp({ enabled, readOnly, path, version, instructions,
|
|
708
708
|
allowedOrigins, pageSize, language, auth })`, **not `main.ts`**. Every lib's option is read in mount order with
|
|
709
709
|
the app's last, and each field has an `AKAN_MCP_*` env spelling the option overrides.
|
|
710
|
+
- **RFC 9728 metadata is served only once an authorization server is named.** Advertising `bearer_methods_supported`
|
|
711
|
+
without one makes Cursor (and similar clients) force OAuth. Set `AKAN_MCP_AUTH_SERVERS` when the surface is an
|
|
712
|
+
OAuth resource; otherwise the well-known document is absent.
|
|
710
713
|
- **The refusals are fail-closed**: a declared `mcp: false`, an endpoint with no `guards`, a mutation with no real guard (`[Public]` is
|
|
711
714
|
having none), `pubsub` and `message`, an `Any` or `Upload` return, a file upload, a required `Any` argument, and
|
|
712
715
|
the generated `light<Model>` read — it is `<Model>` in a smaller shape, so one read never costs two entries of
|
|
@@ -151,11 +151,14 @@ export class TaskEndpoint extends endpoint(srv.task, ({ mutation, prompt }) => (
|
|
|
151
151
|
and are not configurable. Clients are told to distrust hints; they are never a gate.
|
|
152
152
|
- **`AKAN_MCP_READONLY=true` is the read-only-deployment valve, not the exposure switch.** It drops every mutation
|
|
153
153
|
whatever it declared, and reports each one in the boot log like any other refusal.
|
|
154
|
-
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
154
|
+
- **RFC 9728 metadata is published only once `AKAN_MCP_AUTH_SERVERS` names an issuer.** An unprotected resource
|
|
155
|
+
that still advertises `bearer_methods_supported` is treated by Cursor (and similar clients) as an OAuth
|
|
156
|
+
mandate, so the well-known document is absent until there is somewhere to obtain a token. When it is served,
|
|
157
|
+
it lives at `/.well-known/oauth-protected-resource` (and at that path plus the mount path, the spelling most
|
|
158
|
+
clients try first). `AKAN_MCP_SCOPES` and `AKAN_MCP_RESOURCE` configure the document when it exists;
|
|
159
|
+
`insufficient_scope` is enforced only once `AKAN_MCP_SCOPES` is set. A token carrying no `aud` at all is
|
|
160
|
+
refused once an issuer is named — that issuer mints tokens for its other resources too — and accepted while
|
|
161
|
+
none is named, because a first-party Akan token is bound by app and environment.
|
|
159
162
|
- **The boot log names every published entry with no dictionary `.desc()`.** An agent picks a tool by its
|
|
160
163
|
description, so a missing one is a broken tool. What the framework generates has no text of its own and borrows
|
|
161
164
|
the model's: the generated list reads the `.of()` label, and the base CRUD tools append the model's `.desc()` to
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@akanjs/cli",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.70",
|
|
4
4
|
"sourceType": "module",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"@langchain/openai": "^1.4.6",
|
|
35
35
|
"@tailwindcss/node": "^4.3.0",
|
|
36
36
|
"@trapezedev/project": "^7.1.4",
|
|
37
|
-
"akanjs": "3.0.0-alpha.
|
|
37
|
+
"akanjs": "3.0.0-alpha.70",
|
|
38
38
|
"chalk": "^5.6.2",
|
|
39
39
|
"commander": "^14.0.3",
|
|
40
40
|
"dayjs": "^1.11.20",
|