@assemblyline-agents/mirror 2.0.0 → 3.0.0
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/LICENSE +1 -1
- package/README.md +46 -18
- package/dist/events.d.ts +3 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +156 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/pairing.d.ts +1 -1
- package/dist/pairing.js +3 -3
- package/dist/pairing.js.map +1 -1
- package/package.json +3 -4
- package/skills/mirror/SKILL.md +0 -40
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -32,34 +32,59 @@ assembly-line add mirror agent
|
|
|
32
32
|
|
|
33
33
|
For least-privilege setup, create an agent binding in Mirror's Agents UI,
|
|
34
34
|
choose the exact provider accounts it may reach, and paste the generated
|
|
35
|
-
binding packet into the agent's chat.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
binding packet into the agent's chat. The core `pair` tool is exposed by
|
|
36
|
+
default whenever the agent has a live connection, and Assembly Line also
|
|
37
|
+
advertises a host-side `mirror__pair` connection tool through discovery while
|
|
38
|
+
Mirror is unauthorized. Either tool sends the packet's one-time claim secret
|
|
39
|
+
only to the configured Mirror deployment, stores the returned access and
|
|
40
|
+
refresh tokens in the connection grant store, and keeps the durable
|
|
41
|
+
credentials out of the model and sandbox. If the Mirror definition cannot
|
|
42
|
+
resolve on the runtime host (for example a missing package or unset env),
|
|
43
|
+
`pair` reports that cause instead of disappearing.
|
|
40
44
|
|
|
41
45
|
The packet's API origin must match `MIRROR_OAUTH_ISSUER`, `MIRROR_MCP_URL`, or
|
|
42
46
|
the connection's configured URL. Credential exchange requires HTTPS, except
|
|
43
47
|
for loopback development. OAuth remains available as an alternative account
|
|
44
48
|
authorization path.
|
|
45
49
|
|
|
46
|
-
The generated connection exposes
|
|
47
|
-
|
|
48
|
-
|
|
50
|
+
The generated connection exposes every reviewed Mirror tool without requiring
|
|
51
|
+
an Assembly Line approval surface. Set `access: "approval-required"` if
|
|
52
|
+
approval creation, syncs, connection links, registration, and other mutations
|
|
53
|
+
should pause for Assembly Line approval:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
import { defineMirrorConnection } from "@assemblyline-agents/mirror";
|
|
57
|
+
|
|
58
|
+
export default defineMirrorConnection({ access: "approval-required" });
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Mirror still enforces its own account grants and exact-action approval system.
|
|
62
|
+
When configured, Assembly Line approval is an additional outer gate.
|
|
63
|
+
|
|
64
|
+
The connection includes Mirror's read-only `mirror.get_skill` discovery tool.
|
|
65
|
+
This returns Mirror's live, versioned action contract; it is not a local
|
|
66
|
+
Assembly Line skill. Before requesting a provider mutation, pass its returned
|
|
67
|
+
version and content hash to `mirror.request_action`. This keeps the agent's
|
|
68
|
+
request shape synchronized with Mirror's reviewed action contract.
|
|
69
|
+
|
|
70
|
+
## Connection events
|
|
71
|
+
|
|
72
|
+
Mirror event delivery uses the connection's existing binding grant. No separate
|
|
73
|
+
automation token or signing-secret environment variable is required. Assembly
|
|
74
|
+
Line registers and verifies the callback endpoint for its own Mirror binding:
|
|
49
75
|
|
|
50
76
|
```ts
|
|
51
77
|
import { defineMirrorConnection } from "@assemblyline-agents/mirror";
|
|
52
78
|
|
|
53
79
|
export default defineMirrorConnection({
|
|
54
|
-
|
|
55
|
-
read: true,
|
|
56
|
-
write: { approval: "always" }
|
|
57
|
-
}
|
|
80
|
+
events: {}
|
|
58
81
|
});
|
|
59
82
|
```
|
|
60
83
|
|
|
61
|
-
|
|
62
|
-
|
|
84
|
+
Connection-level event scope stays in Mirror. From the binding's Events section,
|
|
85
|
+
the user chooses exactly which granted, event-capable provider connections may
|
|
86
|
+
send source changes to the agent. The Assembly Line plugin never enables or
|
|
87
|
+
disables those subscriptions.
|
|
63
88
|
|
|
64
89
|
## Optional Mirror CLI
|
|
65
90
|
|
|
@@ -70,10 +95,13 @@ profile:
|
|
|
70
95
|
```ts
|
|
71
96
|
export default defineMirrorConnection({
|
|
72
97
|
materializeCli: true,
|
|
73
|
-
access:
|
|
98
|
+
access: "read-only"
|
|
74
99
|
});
|
|
75
100
|
```
|
|
76
101
|
|
|
77
|
-
Assembly Line writes
|
|
78
|
-
|
|
79
|
-
|
|
102
|
+
Assembly Line writes
|
|
103
|
+
`/workspace/.assembly-line/credentials/mirror/config.json` with mode `0600`.
|
|
104
|
+
Set `MIRROR_HOME=/workspace/.assembly-line/credentials/mirror` for Mirror CLI
|
|
105
|
+
commands. The reserved directory is excluded from workspace versions. Only the
|
|
106
|
+
current access token is projected; the rotating refresh token stays in the
|
|
107
|
+
host-side grant store.
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,4BAA4B,EAElC,MAAM,2BAA2B,CAAC;AAcnC,wBAAgB,kBAAkB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,4BAA4B,CAsG1F"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { ConnectionEventError, headerValue, parseConnectionEventJson, stringField, verifyHmacSha256 } from "@assemblyline-agents/core";
|
|
2
|
+
const DEFAULT_ORIGIN = "https://mirror.artificialillumination.co";
|
|
3
|
+
const SOURCE_EVENTS = new Set([
|
|
4
|
+
"mirror.source.created",
|
|
5
|
+
"mirror.source.updated",
|
|
6
|
+
"mirror.source.deleted"
|
|
7
|
+
]);
|
|
8
|
+
export function createMirrorEvents(configuredOrigin) {
|
|
9
|
+
return {
|
|
10
|
+
async reconcile(context) {
|
|
11
|
+
const grant = await context.getToken();
|
|
12
|
+
const identity = mirrorIdentity(grant.credential);
|
|
13
|
+
const baseUrl = mirrorOrigin(configuredOrigin, context.env);
|
|
14
|
+
const endpointUrl = bindingEventUrl(baseUrl, identity, "event-endpoint");
|
|
15
|
+
let state = currentEndpointState(context.state, context.callbackUrl, identity, baseUrl);
|
|
16
|
+
if (!state) {
|
|
17
|
+
const value = await request(context.fetch, endpointUrl, grant.token, {
|
|
18
|
+
method: "PUT",
|
|
19
|
+
body: JSON.stringify({ endpointUrl: context.callbackUrl })
|
|
20
|
+
});
|
|
21
|
+
const signingSecret = stringField(value, "signingSecret");
|
|
22
|
+
if (!signingSecret)
|
|
23
|
+
throw new Error("Mirror event endpoint response omitted signingSecret.");
|
|
24
|
+
state = {
|
|
25
|
+
...identity,
|
|
26
|
+
baseUrl,
|
|
27
|
+
callbackUrl: context.callbackUrl,
|
|
28
|
+
signingSecret,
|
|
29
|
+
verified: false
|
|
30
|
+
};
|
|
31
|
+
await context.checkpoint(state);
|
|
32
|
+
}
|
|
33
|
+
await request(context.fetch, `${endpointUrl}/verify`, grant.token, {
|
|
34
|
+
method: "POST",
|
|
35
|
+
body: "{}"
|
|
36
|
+
});
|
|
37
|
+
const activeState = { ...state, verified: true };
|
|
38
|
+
return {
|
|
39
|
+
status: "active",
|
|
40
|
+
externalId: identity.bindingId,
|
|
41
|
+
state: activeState,
|
|
42
|
+
detail: "Mirror event endpoint is verified. Connection-level event scope is managed in Mirror."
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
async remove(context) {
|
|
46
|
+
const grant = await context.getToken();
|
|
47
|
+
const identity = mirrorIdentity(grant.credential);
|
|
48
|
+
const baseUrl = stateOrigin(context.state) ?? mirrorOrigin(configuredOrigin, context.env);
|
|
49
|
+
await request(context.fetch, bindingEventUrl(baseUrl, identity, "event-endpoint"), grant.token, { method: "DELETE" }, [200, 204, 404]);
|
|
50
|
+
},
|
|
51
|
+
ingress(request, context) {
|
|
52
|
+
const timestamp = headerValue(request.headers, "x-mirror-timestamp");
|
|
53
|
+
const deliveryId = headerValue(request.headers, "x-mirror-delivery-id");
|
|
54
|
+
const signature = headerValue(request.headers, "x-mirror-signature");
|
|
55
|
+
const timestampSeconds = Number(timestamp);
|
|
56
|
+
if (!timestamp ||
|
|
57
|
+
!deliveryId ||
|
|
58
|
+
!Number.isFinite(timestampSeconds) ||
|
|
59
|
+
Math.abs(Date.now() / 1_000 - timestampSeconds) > 300) {
|
|
60
|
+
throw new ConnectionEventError("Mirror event timestamp is invalid.", 401);
|
|
61
|
+
}
|
|
62
|
+
const secret = stringField(context.state ?? {}, "signingSecret");
|
|
63
|
+
if (!secret || !verifyHmacSha256({
|
|
64
|
+
secret,
|
|
65
|
+
body: `${timestamp}.${deliveryId}.${request.body}`,
|
|
66
|
+
signature,
|
|
67
|
+
prefix: "v1="
|
|
68
|
+
})) {
|
|
69
|
+
throw new ConnectionEventError("Mirror event signature is invalid.", 401);
|
|
70
|
+
}
|
|
71
|
+
const payload = parseConnectionEventJson(request.body);
|
|
72
|
+
const mirrorEvent = stringField(payload, "type");
|
|
73
|
+
if (mirrorEvent === "mirror.event.verify") {
|
|
74
|
+
const challenge = stringField(payload, "challenge");
|
|
75
|
+
if (!challenge)
|
|
76
|
+
throw new ConnectionEventError("Mirror event challenge is missing.");
|
|
77
|
+
return {
|
|
78
|
+
events: [],
|
|
79
|
+
response: { status: 200, body: { challenge } },
|
|
80
|
+
audit: { challenge: true }
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (!mirrorEvent || !SOURCE_EVENTS.has(mirrorEvent)) {
|
|
84
|
+
throw new ConnectionEventError("Mirror event type is unsupported.");
|
|
85
|
+
}
|
|
86
|
+
const occurredAt = stringField(payload, "occurredAt");
|
|
87
|
+
return {
|
|
88
|
+
events: [{
|
|
89
|
+
event: "source.changed",
|
|
90
|
+
eventId: deliveryId,
|
|
91
|
+
payload: payload,
|
|
92
|
+
...(occurredAt ? { occurredAt } : {})
|
|
93
|
+
}],
|
|
94
|
+
response: { status: 200, body: { ok: true } },
|
|
95
|
+
audit: { event: "source.changed", mirrorEvent }
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
function mirrorIdentity(value) {
|
|
101
|
+
const userId = value && stringField(value, "mirror_user_id");
|
|
102
|
+
const bindingId = value && stringField(value, "mirror_binding_id");
|
|
103
|
+
if (!userId || !bindingId) {
|
|
104
|
+
throw new Error("Mirror event setup requires mirror_user_id and mirror_binding_id in the connection grant.");
|
|
105
|
+
}
|
|
106
|
+
return { userId, bindingId };
|
|
107
|
+
}
|
|
108
|
+
function mirrorOrigin(configuredOrigin, env) {
|
|
109
|
+
const value = configuredOrigin?.trim()
|
|
110
|
+
|| env.MIRROR_OAUTH_ISSUER?.trim()
|
|
111
|
+
|| env.MIRROR_MCP_URL?.trim()
|
|
112
|
+
|| DEFAULT_ORIGIN;
|
|
113
|
+
return new URL(value).origin;
|
|
114
|
+
}
|
|
115
|
+
function stateOrigin(state) {
|
|
116
|
+
const value = stringField(state ?? {}, "baseUrl");
|
|
117
|
+
return value ? new URL(value).origin : undefined;
|
|
118
|
+
}
|
|
119
|
+
function currentEndpointState(state, callbackUrl, identity, baseUrl) {
|
|
120
|
+
if (stringField(state ?? {}, "callbackUrl") !== callbackUrl ||
|
|
121
|
+
stringField(state ?? {}, "userId") !== identity.userId ||
|
|
122
|
+
stringField(state ?? {}, "bindingId") !== identity.bindingId ||
|
|
123
|
+
stateOrigin(state) !== baseUrl ||
|
|
124
|
+
!stringField(state ?? {}, "signingSecret")) {
|
|
125
|
+
return undefined;
|
|
126
|
+
}
|
|
127
|
+
return state;
|
|
128
|
+
}
|
|
129
|
+
function bindingEventUrl(baseUrl, identity, route) {
|
|
130
|
+
return `${baseUrl}/api/users/${encodeURIComponent(identity.userId)}/agent-bindings/${encodeURIComponent(identity.bindingId)}/${route}`;
|
|
131
|
+
}
|
|
132
|
+
async function request(fetchImpl, url, token, init, accepted = [200, 201, 202, 204]) {
|
|
133
|
+
const response = await fetchImpl(url, {
|
|
134
|
+
...init,
|
|
135
|
+
headers: {
|
|
136
|
+
accept: "application/json",
|
|
137
|
+
authorization: `Bearer ${token}`,
|
|
138
|
+
"content-type": "application/json"
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
const text = await response.text();
|
|
142
|
+
let value = {};
|
|
143
|
+
try {
|
|
144
|
+
value = text ? JSON.parse(text) : {};
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
value = {};
|
|
148
|
+
}
|
|
149
|
+
if (!accepted.includes(response.status)) {
|
|
150
|
+
throw new Error(`Mirror event API returned HTTP ${response.status}${text ? `: ${text}` : ""}.`);
|
|
151
|
+
}
|
|
152
|
+
return value && typeof value === "object" && !Array.isArray(value)
|
|
153
|
+
? value
|
|
154
|
+
: {};
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type ConnectionAuthDefinition, type McpPluginConnectionOptions } from "@assemblyline-agents/core";
|
|
2
2
|
export interface MirrorCliMaterializationOptions {
|
|
3
|
-
/** Sandbox path for the projected CLI profile.
|
|
3
|
+
/** Sandbox path for the projected CLI profile. Must stay under the reserved credential root. */
|
|
4
4
|
path?: string;
|
|
5
|
-
/** Mirror CLI profile name. Defaults to
|
|
5
|
+
/** Mirror CLI profile name. Defaults to assembly-line. */
|
|
6
6
|
profile?: string;
|
|
7
|
-
/** Runtime recorded in the projected profile. Defaults to
|
|
7
|
+
/** Runtime recorded in the projected profile. Defaults to assembly-line. */
|
|
8
8
|
runtime?: string;
|
|
9
9
|
/** Mirror API origin. Defaults to the configured MCP endpoint's origin. */
|
|
10
10
|
apiUrl?: string;
|
|
@@ -20,7 +20,7 @@ export interface MirrorConnectionOptions extends Omit<McpPluginConnectionOptions
|
|
|
20
20
|
/**
|
|
21
21
|
* Project the short-lived access token into a Mirror CLI profile.
|
|
22
22
|
* The sandbox image must already contain the `mirror` CLI. Refresh tokens
|
|
23
|
-
* always remain in
|
|
23
|
+
* always remain in Assembly Line's host-side grant store.
|
|
24
24
|
*/
|
|
25
25
|
materializeCli?: boolean | MirrorCliMaterializationOptions;
|
|
26
26
|
}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AAMnC,MAAM,WAAW,+BAA+B;IAC9C,gGAAgG;IAChG,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAwB,SAAQ,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC;IACvF,IAAI,CAAC,EAAE,wBAAwB,GAAG,KAAK,CAAC;IACxC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,+BAA+B,CAAC;CAC5D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,yEA8DtE;AAED,eAAO,MAAM,kBAAkB,kDAA0C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { connectionPluginMetadata, defineMcpPluginConnection, defineOAuthAuthorization, definePlugin } from "@assemblyline-agents/core";
|
|
1
|
+
import { connectionPluginMetadata, defineConnectionPluginEvents, defineMcpPluginConnection, defineOAuthAuthorization, definePlugin } from "@assemblyline-agents/core";
|
|
2
2
|
import { createMirrorPairingRedeemer } from "./pairing.js";
|
|
3
|
+
import { createMirrorEvents } from "./events.js";
|
|
3
4
|
const PLUGIN = connectionPluginMetadata("mirror");
|
|
4
5
|
export function defineMirrorConnection(options) {
|
|
5
6
|
const { auth, clientId, issuer, redirectUri, materializeCli, ...connection } = options;
|
|
@@ -14,6 +15,9 @@ export function defineMirrorConnection(options) {
|
|
|
14
15
|
...(connection.url ? { mcpUrl: connection.url } : {})
|
|
15
16
|
})
|
|
16
17
|
});
|
|
18
|
+
const events = defineConnectionPluginEvents(PLUGIN, options.events, createMirrorEvents(issuer ?? connection.url));
|
|
19
|
+
if (events)
|
|
20
|
+
definition.events = events;
|
|
17
21
|
definition.redeemPairingCode = createMirrorPairingRedeemer(({ env }) => normalizeIssuer(issuer
|
|
18
22
|
?? env.MIRROR_OAUTH_ISSUER
|
|
19
23
|
?? connection.url
|
|
@@ -21,12 +25,12 @@ export function defineMirrorConnection(options) {
|
|
|
21
25
|
?? definition.url));
|
|
22
26
|
if (materializeCli) {
|
|
23
27
|
const settings = materializeCli === true ? {} : materializeCli;
|
|
24
|
-
const profile = settings.profile?.trim() || "
|
|
25
|
-
const runtime = settings.runtime?.trim() || "
|
|
28
|
+
const profile = settings.profile?.trim() || "assembly-line";
|
|
29
|
+
const runtime = settings.runtime?.trim() || "assembly-line";
|
|
26
30
|
const apiUrl = normalizeIssuer(settings.apiUrl ?? issuer ?? definition.url);
|
|
27
31
|
definition.materialize = {
|
|
28
32
|
files: [{
|
|
29
|
-
path: settings.path?.trim() || "/
|
|
33
|
+
path: settings.path?.trim() || "/workspace/.assembly-line/credentials/mirror/config.json",
|
|
30
34
|
content: `${JSON.stringify({
|
|
31
35
|
version: 1,
|
|
32
36
|
currentProfile: profile,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,YAAY,EAGb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/pairing.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ type MirrorOriginResolver = (context: ConnectionResolverContext) => string;
|
|
|
10
10
|
/**
|
|
11
11
|
* Builds the host-side redeemer for a Mirror UI binding packet. The packet
|
|
12
12
|
* carries only a one-time claim secret. Mirror releases the durable access and
|
|
13
|
-
* refresh tokens directly to the
|
|
13
|
+
* refresh tokens directly to the Assembly Line host after the claim is consumed.
|
|
14
14
|
*/
|
|
15
15
|
export declare function createMirrorPairingRedeemer(resolveExpectedOrigin: MirrorOriginResolver): ConnectionPairingRedeemer;
|
|
16
16
|
export declare function parseMirrorBindingPacket(packet: string): MirrorBindingClaim;
|
package/dist/pairing.js
CHANGED
|
@@ -6,7 +6,7 @@ const POLL_INTERVAL_MS = 250;
|
|
|
6
6
|
/**
|
|
7
7
|
* Builds the host-side redeemer for a Mirror UI binding packet. The packet
|
|
8
8
|
* carries only a one-time claim secret. Mirror releases the durable access and
|
|
9
|
-
* refresh tokens directly to the
|
|
9
|
+
* refresh tokens directly to the Assembly Line host after the claim is consumed.
|
|
10
10
|
*/
|
|
11
11
|
export function createMirrorPairingRedeemer(resolveExpectedOrigin) {
|
|
12
12
|
return async ({ code }, context) => {
|
|
@@ -24,8 +24,8 @@ export function createMirrorPairingRedeemer(resolveExpectedOrigin) {
|
|
|
24
24
|
},
|
|
25
25
|
body: JSON.stringify({
|
|
26
26
|
bindingId: claim.bindingId,
|
|
27
|
-
runtime: claim.runtime ?? "
|
|
28
|
-
harness: "
|
|
27
|
+
runtime: claim.runtime ?? "assembly-line",
|
|
28
|
+
harness: "assembly-line",
|
|
29
29
|
claimToken: claim.claimToken
|
|
30
30
|
})
|
|
31
31
|
}, "Mirror rejected the binding packet");
|
package/dist/pairing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pairing.js","sourceRoot":"","sources":["../src/pairing.ts"],"names":[],"mappings":"AAOA,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAC;AACnC,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,CAAC;AACxC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAY7B;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,qBAA2C;IACrF,OAAO,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,sBAAsB,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,cAAc,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,EAC/E,GAAG,cAAc,GAAG,CACrB,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,
|
|
1
|
+
{"version":3,"file":"pairing.js","sourceRoot":"","sources":["../src/pairing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@assemblyline-agents/mirror",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -9,12 +9,11 @@
|
|
|
9
9
|
}
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@assemblyline-agents/core": "
|
|
12
|
+
"@assemblyline-agents/core": "3.0.0"
|
|
13
13
|
},
|
|
14
14
|
"description": "Official Assembly Line connection plugin for user-scoped Mirror accounts.",
|
|
15
15
|
"files": [
|
|
16
|
-
"dist"
|
|
17
|
-
"skills"
|
|
16
|
+
"dist"
|
|
18
17
|
],
|
|
19
18
|
"engines": {
|
|
20
19
|
"node": ">=22.19.0"
|
package/skills/mirror/SKILL.md
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mirror
|
|
3
|
-
description: Use a connected Mirror account to inspect the user's allowed connected providers, query mirrored records, perform bounded live reads, and stage approval-gated actions.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Mirror
|
|
7
|
-
|
|
8
|
-
Mirror is the user's connected-context layer. It holds downstream provider
|
|
9
|
-
credentials and exposes only the providers and accounts granted to this agent.
|
|
10
|
-
Never ask for, print, or store raw provider credentials.
|
|
11
|
-
|
|
12
|
-
If the user pastes a Mirror binding packet, use connection discovery to find
|
|
13
|
-
`mirror__pair` and pass the full packet through its `secret` field. Do not run
|
|
14
|
-
the packet's shell command inside the model sandbox and do not repeat its
|
|
15
|
-
one-time claim token. After pairing succeeds, call `mirror.whoami` to verify
|
|
16
|
-
the binding's resolved scope.
|
|
17
|
-
|
|
18
|
-
Start with `mirror.whoami`, then `mirror.connected_providers`. Inspect each
|
|
19
|
-
lane's access and mirror policy before choosing a tool:
|
|
20
|
-
|
|
21
|
-
- Use `mirror.query_records` for normal recall from a mirrored lane.
|
|
22
|
-
- Use `mirror.get_source` for one exact raw record.
|
|
23
|
-
- Use `mirror.live_read` only for current state or detail absent from the
|
|
24
|
-
mirror.
|
|
25
|
-
- Use `mirror.get_pending_approvals` to inspect unresolved action requests.
|
|
26
|
-
|
|
27
|
-
Keep reads bounded by provider, account, identifiers, dates, and explicit
|
|
28
|
-
limits. Check message authorship metadata rather than inferring who wrote a
|
|
29
|
-
message from its prose.
|
|
30
|
-
|
|
31
|
-
Write-like provider operations, syncs, setup links, agent registration,
|
|
32
|
-
approval creation/redemption, and credential export are classified as writes
|
|
33
|
-
by Assembly Line. Use them only when the connection exposes write authority and its
|
|
34
|
-
approval gate permits the call. Mirror may apply an additional exact-action
|
|
35
|
-
approval before executing a downstream mutation.
|
|
36
|
-
|
|
37
|
-
The MCP tools are the normal Assembly Line connection surface. If the deployment
|
|
38
|
-
owner installed the optional `mirror` CLI and enabled `materializeCli`, the CLI
|
|
39
|
-
may be used inside the sandbox; its profile contains only a short-lived access
|
|
40
|
-
token. Refresh credentials remain on the Assembly Line host.
|