mercury-agent 0.5.0 → 0.5.2
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/README.md +452 -451
- package/container/Dockerfile +127 -127
- package/container/Dockerfile.base +109 -109
- package/container/Dockerfile.power +17 -17
- package/container/agent-package.json +8 -8
- package/container/build.sh +54 -54
- package/docs/ROADMAP.md +3 -4
- package/docs/archive/summarization/2026-07-02-recent-dev-summary.md +71 -0
- package/docs/auth/dashboard.md +28 -28
- package/docs/auth/overview.md +109 -109
- package/docs/auth/whatsapp.md +173 -173
- package/docs/authoring-profiles.md +174 -174
- package/docs/configuration.md +54 -54
- package/docs/container-lifecycle.md +349 -349
- package/docs/{bugs/bwrap-privileged-linux-docker.md → debug/major/2026-07-02-bwrap-privileged-linux-docker.md} +21 -1
- package/docs/{bugs/e2big-prompt-delivery-fix.md → debug/major/2026-07-02-e2big-prompt-delivery-fix.md} +27 -1
- package/docs/{bugs/registry-pull-no-local-fallback.md → debug/major/2026-07-02-registry-pull-no-local-fallback.md} +27 -1
- package/docs/debug/summarization/2026-07-02-common-bug-patterns.md +72 -0
- package/docs/deployment.md +199 -199
- package/docs/extensions.md +375 -375
- package/docs/graceful-shutdown.md +62 -62
- package/docs/kb-distillation.md +77 -77
- package/docs/media/overview.md +140 -140
- package/docs/media/whatsapp.md +171 -171
- package/docs/memory.md +137 -137
- package/docs/permissions.md +217 -217
- package/docs/pipeline.md +228 -228
- package/docs/prd-chat-memory.md +76 -76
- package/docs/prd-config-load.md +82 -82
- package/docs/rate-limiting.md +229 -229
- package/docs/runbooks/publish-checklist.md +9 -1
- package/docs/scheduler.md +288 -288
- package/docs/setup-discord.md +100 -100
- package/docs/setup-slack.md +119 -119
- package/docs/setup-whatsapp.md +94 -94
- package/docs/subagents.md +166 -166
- package/docs/web-search.md +62 -62
- package/examples/extensions/README.md +12 -12
- package/examples/extensions/charts/index.ts +13 -13
- package/examples/extensions/charts/skill/SKILL.md +98 -98
- package/examples/extensions/gws/README.md +52 -52
- package/examples/extensions/gws/skill/SKILL.md +57 -57
- package/examples/extensions/gws/skill/references/calendar.md +101 -101
- package/examples/extensions/gws/skill/references/docs.md +65 -65
- package/examples/extensions/gws/skill/references/drive.md +79 -79
- package/examples/extensions/gws/skill/references/gmail.md +85 -85
- package/examples/extensions/gws/skill/references/sheets.md +60 -60
- package/examples/extensions/napkin/skill/SKILL.md +728 -728
- package/examples/extensions/pdf/skill/LICENSE.txt +30 -30
- package/examples/extensions/pdf/skill/SKILL.md +314 -314
- package/examples/extensions/pdf/skill/forms.md +294 -294
- package/examples/extensions/pdf/skill/reference.md +611 -611
- package/examples/extensions/pdf/skill/scripts/check_bounding_boxes.py +65 -65
- package/examples/extensions/pdf/skill/scripts/check_fillable_fields.py +11 -11
- package/examples/extensions/pdf/skill/scripts/convert_pdf_to_images.py +33 -33
- package/examples/extensions/pdf/skill/scripts/create_validation_image.py +37 -37
- package/examples/extensions/pdf/skill/scripts/extract_form_field_info.py +122 -122
- package/examples/extensions/pdf/skill/scripts/extract_form_structure.py +115 -115
- package/examples/extensions/pdf/skill/scripts/fill_fillable_fields.py +98 -98
- package/examples/extensions/pdf/skill/scripts/fill_pdf_form_with_annotations.py +107 -107
- package/examples/extensions/permission-guard/index.ts +65 -65
- package/examples/extensions/pinchtab/skill/SKILL.md +224 -224
- package/examples/extensions/pinchtab/skill/TRUST.md +69 -69
- package/examples/extensions/pinchtab/skill/references/api.md +297 -297
- package/examples/extensions/pinchtab/skill/references/env.md +45 -45
- package/examples/extensions/pinchtab/skill/references/profiles.md +107 -107
- package/examples/extensions/tradestation/host/refresh.ts +102 -102
- package/examples/extensions/tradestation/index.ts +153 -153
- package/examples/extensions/tradestation/skill/SKILL.md +67 -67
- package/examples/extensions/voice-synth/index.ts +94 -94
- package/examples/extensions/voice-synth/skill/SKILL.md +38 -38
- package/examples/extensions/voice-transcribe/requirements.txt +8 -8
- package/examples/extensions/voice-transcribe/scripts/transcribe.py +179 -179
- package/examples/extensions/voice-transcribe/skill/SKILL.md +53 -53
- package/examples/extensions/yahoo-mail/cli/package.json +13 -13
- package/examples/extensions/yahoo-mail/skill/SKILL.md +78 -78
- package/package.json +106 -106
- package/resources/agents/explore.md +50 -50
- package/resources/agents/worker.md +24 -24
- package/resources/connection-env-vars.json +25 -25
- package/resources/pi-extensions/subagent/agents.ts +126 -126
- package/resources/pi-extensions/subagent/index.ts +964 -964
- package/resources/profiles/coding/AGENTS.md +43 -43
- package/resources/profiles/coding/mercury-profile.yaml +15 -15
- package/resources/profiles/general/AGENTS.md +31 -31
- package/resources/profiles/general/mercury-profile.yaml +15 -15
- package/resources/profiles/research/AGENTS.md +40 -40
- package/resources/profiles/research/mercury-profile.yaml +15 -15
- package/resources/skills/config/SKILL.md +25 -25
- package/resources/skills/context/SKILL.md +33 -33
- package/resources/skills/conversation-recap/SKILL.md +19 -19
- package/resources/skills/mutes/SKILL.md +31 -31
- package/resources/skills/permissions/SKILL.md +19 -19
- package/resources/skills/preferences/SKILL.md +31 -31
- package/resources/skills/recall/SKILL.md +24 -24
- package/resources/skills/roles/SKILL.md +18 -18
- package/resources/skills/spaces/SKILL.md +18 -18
- package/resources/skills/tasks/SKILL.md +45 -45
- package/resources/templates/AGENTS.md +157 -157
- package/resources/templates/env.template +38 -38
- package/resources/templates/mercury.example.yaml +99 -99
- package/src/agent/container-entry.ts +1 -1
- package/src/agent/container-runner.ts +1345 -1346
- package/src/cli/mercury.ts +39 -7
- package/src/cli/mrctl.ts +636 -636
- package/src/config-file.ts +540 -540
- package/src/config.ts +339 -339
- package/src/core/api.ts +125 -125
- package/src/core/caller-token.ts +101 -101
- package/src/core/permissions.ts +228 -228
- package/src/core/profiles.ts +271 -271
- package/src/core/routes/capability.ts +70 -70
- package/src/core/routes/index.ts +15 -15
- package/src/core/runtime.ts +1530 -1530
- package/src/dashboard/index.html +729 -729
- package/src/extensions/api.ts +273 -273
- package/src/extensions/loader.ts +286 -286
- package/src/extensions/types.ts +517 -517
- package/src/main.ts +605 -605
- package/docs/pending-updates/applicative-profiles.md +0 -15
- package/docs/pending-updates/caller-bound-capability-token.md +0 -15
- package/docs/pending-updates/dm-auto-space.md +0 -15
- /package/docs/archive/{2026-07-01-applicative-profiles.md → applicative-profiles/2026-07-01-applicative-profiles.md} +0 -0
- /package/docs/archive/{2026-07-01-caller-bound-capability-token.md → applicative-profiles/2026-07-01-caller-bound-capability-token.md} +0 -0
- /package/docs/archive/{2026-07-01-dm-auto-space.md → applicative-profiles/2026-07-01-dm-auto-space.md} +0 -0
|
@@ -1,70 +1,70 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import { createMercuryExtensionContext } from "../../extensions/context.js";
|
|
3
|
-
import { logger } from "../../logger.js";
|
|
4
|
-
import { checkPerm, type Env, getApiCtx, getAuth } from "../api-types.js";
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Host-side capability broker. Profiles register capability handlers via
|
|
8
|
-
* `mercury.capability(name, handler)`; the agent invokes them from the
|
|
9
|
-
* container with `mrctl capability <name> <action> <json>`.
|
|
10
|
-
*
|
|
11
|
-
* The handler runs here, on the host, with credentials that never enter the
|
|
12
|
-
* agent container. Identity is the token-derived caller (see the auth
|
|
13
|
-
* middleware), so handlers can enforce per-caller ownership safely.
|
|
14
|
-
*/
|
|
15
|
-
export const capability = new Hono<Env>();
|
|
16
|
-
|
|
17
|
-
type BroadStatus =
|
|
18
|
-
| 200
|
|
19
|
-
| 201
|
|
20
|
-
| 400
|
|
21
|
-
| 401
|
|
22
|
-
| 403
|
|
23
|
-
| 404
|
|
24
|
-
| 409
|
|
25
|
-
| 410
|
|
26
|
-
| 422
|
|
27
|
-
| 429
|
|
28
|
-
| 500;
|
|
29
|
-
|
|
30
|
-
capability.post("/:name/:action", async (c) => {
|
|
31
|
-
const name = c.req.param("name");
|
|
32
|
-
const action = c.req.param("action");
|
|
33
|
-
const { callerId, spaceId } = getAuth(c);
|
|
34
|
-
const { db, config, registry } = getApiCtx(c);
|
|
35
|
-
|
|
36
|
-
// Authorization reuses the permission whose name equals the capability, so a
|
|
37
|
-
// single grant (e.g. "barber" in member_permissions) gates both the CLI and
|
|
38
|
-
// this route.
|
|
39
|
-
const denied = checkPerm(c, name);
|
|
40
|
-
if (denied) return denied;
|
|
41
|
-
|
|
42
|
-
const found = registry.getCapability(name);
|
|
43
|
-
if (!found) {
|
|
44
|
-
return c.json({ error: `Unknown capability: ${name}` }, 404);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
const body = await c.req.json().catch(() => null);
|
|
48
|
-
const ctx = createMercuryExtensionContext({ db, config, log: logger });
|
|
49
|
-
|
|
50
|
-
try {
|
|
51
|
-
const result = await found.handler(
|
|
52
|
-
{ name, action, callerId, spaceId, body },
|
|
53
|
-
ctx,
|
|
54
|
-
);
|
|
55
|
-
return c.json(
|
|
56
|
-
result.data as Record<string, unknown>,
|
|
57
|
-
(result.status ?? 200) as BroadStatus,
|
|
58
|
-
);
|
|
59
|
-
} catch (err) {
|
|
60
|
-
logger.error("Capability handler failed", {
|
|
61
|
-
capability: name,
|
|
62
|
-
action,
|
|
63
|
-
error: err instanceof Error ? err.message : String(err),
|
|
64
|
-
});
|
|
65
|
-
return c.json(
|
|
66
|
-
{ error: `Capability "${name}" failed to handle "${action}"` },
|
|
67
|
-
500,
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { createMercuryExtensionContext } from "../../extensions/context.js";
|
|
3
|
+
import { logger } from "../../logger.js";
|
|
4
|
+
import { checkPerm, type Env, getApiCtx, getAuth } from "../api-types.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Host-side capability broker. Profiles register capability handlers via
|
|
8
|
+
* `mercury.capability(name, handler)`; the agent invokes them from the
|
|
9
|
+
* container with `mrctl capability <name> <action> <json>`.
|
|
10
|
+
*
|
|
11
|
+
* The handler runs here, on the host, with credentials that never enter the
|
|
12
|
+
* agent container. Identity is the token-derived caller (see the auth
|
|
13
|
+
* middleware), so handlers can enforce per-caller ownership safely.
|
|
14
|
+
*/
|
|
15
|
+
export const capability = new Hono<Env>();
|
|
16
|
+
|
|
17
|
+
type BroadStatus =
|
|
18
|
+
| 200
|
|
19
|
+
| 201
|
|
20
|
+
| 400
|
|
21
|
+
| 401
|
|
22
|
+
| 403
|
|
23
|
+
| 404
|
|
24
|
+
| 409
|
|
25
|
+
| 410
|
|
26
|
+
| 422
|
|
27
|
+
| 429
|
|
28
|
+
| 500;
|
|
29
|
+
|
|
30
|
+
capability.post("/:name/:action", async (c) => {
|
|
31
|
+
const name = c.req.param("name");
|
|
32
|
+
const action = c.req.param("action");
|
|
33
|
+
const { callerId, spaceId } = getAuth(c);
|
|
34
|
+
const { db, config, registry } = getApiCtx(c);
|
|
35
|
+
|
|
36
|
+
// Authorization reuses the permission whose name equals the capability, so a
|
|
37
|
+
// single grant (e.g. "barber" in member_permissions) gates both the CLI and
|
|
38
|
+
// this route.
|
|
39
|
+
const denied = checkPerm(c, name);
|
|
40
|
+
if (denied) return denied;
|
|
41
|
+
|
|
42
|
+
const found = registry.getCapability(name);
|
|
43
|
+
if (!found) {
|
|
44
|
+
return c.json({ error: `Unknown capability: ${name}` }, 404);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const body = await c.req.json().catch(() => null);
|
|
48
|
+
const ctx = createMercuryExtensionContext({ db, config, log: logger });
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const result = await found.handler(
|
|
52
|
+
{ name, action, callerId, spaceId, body },
|
|
53
|
+
ctx,
|
|
54
|
+
);
|
|
55
|
+
return c.json(
|
|
56
|
+
result.data as Record<string, unknown>,
|
|
57
|
+
(result.status ?? 200) as BroadStatus,
|
|
58
|
+
);
|
|
59
|
+
} catch (err) {
|
|
60
|
+
logger.error("Capability handler failed", {
|
|
61
|
+
capability: name,
|
|
62
|
+
action,
|
|
63
|
+
error: err instanceof Error ? err.message : String(err),
|
|
64
|
+
});
|
|
65
|
+
return c.json(
|
|
66
|
+
{ error: `Capability "${name}" failed to handle "${action}"` },
|
|
67
|
+
500,
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
});
|
package/src/core/routes/index.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export { capability } from "./capability.js";
|
|
2
|
-
export { config } from "./config.js";
|
|
3
|
-
export { connections } from "./connections.js";
|
|
4
|
-
export { control } from "./control.js";
|
|
5
|
-
export { conversations } from "./conversations.js";
|
|
6
|
-
export { extensions } from "./extensions.js";
|
|
7
|
-
export { media } from "./media.js";
|
|
8
|
-
export { messages } from "./messages.js";
|
|
9
|
-
export { mutes } from "./mutes.js";
|
|
10
|
-
export { prefs } from "./prefs.js";
|
|
11
|
-
export { permissions, roles } from "./roles.js";
|
|
12
|
-
export { spaces } from "./spaces.js";
|
|
13
|
-
export { tasks } from "./tasks.js";
|
|
14
|
-
export { tradestation } from "./tradestation.js";
|
|
15
|
-
export { tts } from "./tts.js";
|
|
1
|
+
export { capability } from "./capability.js";
|
|
2
|
+
export { config } from "./config.js";
|
|
3
|
+
export { connections } from "./connections.js";
|
|
4
|
+
export { control } from "./control.js";
|
|
5
|
+
export { conversations } from "./conversations.js";
|
|
6
|
+
export { extensions } from "./extensions.js";
|
|
7
|
+
export { media } from "./media.js";
|
|
8
|
+
export { messages } from "./messages.js";
|
|
9
|
+
export { mutes } from "./mutes.js";
|
|
10
|
+
export { prefs } from "./prefs.js";
|
|
11
|
+
export { permissions, roles } from "./roles.js";
|
|
12
|
+
export { spaces } from "./spaces.js";
|
|
13
|
+
export { tasks } from "./tasks.js";
|
|
14
|
+
export { tradestation } from "./tradestation.js";
|
|
15
|
+
export { tts } from "./tts.js";
|