@rubytech/create-maxy-code 0.1.459 → 0.1.461
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/__tests__/cron-heartbeat-registration.test.js +57 -28
- package/dist/__tests__/launchd-plist.test.js +26 -0
- package/dist/cron-registration.js +30 -8
- package/dist/index.js +50 -9
- package/dist/launchd-plist.js +1 -1
- package/dist/uninstall.js +9 -3
- package/package.json +1 -1
- package/payload/platform/lib/storage-broker/dist/__tests__/cf-exec.test.js +116 -6
- package/payload/platform/lib/storage-broker/dist/__tests__/cf-exec.test.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/__tests__/object-limits.test.js +20 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/object-limits.test.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/__tests__/resource-limits.test.d.ts +2 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/resource-limits.test.d.ts.map +1 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/resource-limits.test.js +41 -0
- package/payload/platform/lib/storage-broker/dist/__tests__/resource-limits.test.js.map +1 -0
- package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts +1 -0
- package/payload/platform/lib/storage-broker/dist/cf-exec.d.ts.map +1 -1
- package/payload/platform/lib/storage-broker/dist/cf-exec.js +116 -48
- package/payload/platform/lib/storage-broker/dist/cf-exec.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/index.d.ts +1 -0
- package/payload/platform/lib/storage-broker/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/storage-broker/dist/index.js +1 -0
- package/payload/platform/lib/storage-broker/dist/index.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/object-limits.d.ts +27 -0
- package/payload/platform/lib/storage-broker/dist/object-limits.d.ts.map +1 -1
- package/payload/platform/lib/storage-broker/dist/object-limits.js +27 -7
- package/payload/platform/lib/storage-broker/dist/object-limits.js.map +1 -1
- package/payload/platform/lib/storage-broker/dist/resource-limits.d.ts +102 -0
- package/payload/platform/lib/storage-broker/dist/resource-limits.d.ts.map +1 -0
- package/payload/platform/lib/storage-broker/dist/resource-limits.js +105 -0
- package/payload/platform/lib/storage-broker/dist/resource-limits.js.map +1 -0
- package/payload/platform/lib/storage-broker/src/__tests__/cf-exec.test.ts +130 -7
- package/payload/platform/lib/storage-broker/src/__tests__/object-limits.test.ts +30 -0
- package/payload/platform/lib/storage-broker/src/__tests__/resource-limits.test.ts +49 -0
- package/payload/platform/lib/storage-broker/src/cf-exec.ts +129 -56
- package/payload/platform/lib/storage-broker/src/index.ts +1 -0
- package/payload/platform/lib/storage-broker/src/object-limits.ts +26 -6
- package/payload/platform/lib/storage-broker/src/resource-limits.ts +105 -0
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +5 -4
- package/payload/platform/plugins/cloudflare/PLUGIN.md +3 -1
- package/payload/platform/plugins/cloudflare/bin/portal-enrol.mjs +96 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/auth-route.test.ts +220 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/authorize.test.ts +201 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/file-routes.test.ts +178 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/harness.test.ts +32 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/passcode.test.ts +204 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-enrol.test.ts +207 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/ratelimit.test.ts +77 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/skill-contract.test.ts +46 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/template-config.test.ts +55 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/upload-route.test.ts +255 -0
- package/payload/platform/plugins/cloudflare/mcp/package.json +5 -2
- package/payload/platform/plugins/cloudflare/references/r2-object-storage.md +46 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/SKILL.md +125 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/authorize.ts +32 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/log.ts +12 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/passcode.mjs +193 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/ratelimit.ts +55 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/session.ts +85 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/_lib/types.ts +44 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/auth.ts +119 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/delete.ts +89 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/download.ts +70 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/files.ts +41 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/upload.ts +151 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/public/index.html +42 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/public/portal.css +113 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/public/portal.js +155 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/schema.sql +73 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/wrangler.toml +21 -0
- package/payload/platform/plugins/cloudflare/skills/site-deploy/SKILL.md +8 -0
- package/payload/platform/plugins/docs/references/outlook-guide.md +3 -3
- package/payload/platform/plugins/docs/references/voice-mirror-guide.md +1 -0
- package/payload/platform/plugins/filesystem/PLUGIN.md +0 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts +14 -10
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.d.ts.map +1 -1
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js +14 -10
- package/payload/platform/plugins/filesystem/mcp/dist/lib/scope.js.map +1 -1
- package/payload/platform/plugins/outlook/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/outlook/PLUGIN.md +3 -5
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/detach.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/detach.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/detach.test.js +75 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/detach.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-removal.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-removal.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-removal.test.js +187 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit-removal.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.js +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-edit.test.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/index.js +3 -2
- package/payload/platform/plugins/outlook/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/attachment-list.d.ts +43 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/attachment-list.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/attachment-list.js +65 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/attachment-list.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/detach.d.ts +65 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/detach.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/detach.js +99 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/detach.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/outbound-attachments.d.ts +6 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/outbound-attachments.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/lib/outbound-attachments.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.d.ts +42 -22
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.js +59 -23
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-edit.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-attachment.d.ts +15 -16
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-attachment.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-attachment.js +8 -41
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-attachment.js.map +1 -1
- package/payload/platform/plugins/outlook/references/auth.md +1 -1
- package/payload/platform/plugins/outlook/references/graph-surfaces.md +7 -3
- package/payload/platform/plugins/outlook/skills/outlook/SKILL.md +1 -1
- package/payload/platform/plugins/storage-broker/PLUGIN.md +1 -1
- package/payload/platform/plugins/voice-mirror/PLUGIN.md +19 -7
- package/payload/platform/plugins/voice-mirror/mcp/dist/index.d.ts.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/index.js +35 -16
- package/payload/platform/plugins/voice-mirror/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/lib/admin-user.d.ts +31 -0
- package/payload/platform/plugins/voice-mirror/mcp/dist/lib/admin-user.d.ts.map +1 -0
- package/payload/platform/plugins/voice-mirror/mcp/dist/lib/admin-user.js +87 -0
- package/payload/platform/plugins/voice-mirror/mcp/dist/lib/admin-user.js.map +1 -0
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-distil-profile.d.ts.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-distil-profile.js +111 -12
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-distil-profile.js.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-ingest-session-text.d.ts.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-ingest-session-text.js +2 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-ingest-session-text.js.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-record-feedback.d.ts.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-record-feedback.js +2 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-record-feedback.js.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-retrieve-conditioning.d.ts.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-retrieve-conditioning.js +54 -21
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-retrieve-conditioning.js.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.d.ts +2 -2
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.d.ts.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.js +12 -3
- package/payload/platform/plugins/voice-mirror/mcp/dist/tools/voice-tag-content.js.map +1 -1
- package/payload/platform/plugins/voice-mirror/mcp/scripts/smoke.mjs +444 -0
- package/payload/platform/plugins/voice-mirror/skills/voice-mirror/SKILL.md +18 -2
- package/payload/platform/scripts/__tests__/logs-rotate.test.sh +256 -0
- package/payload/platform/scripts/__tests__/resume-tunnel.test.sh +79 -0
- package/payload/platform/scripts/logs-rotate.sh +204 -0
- package/payload/platform/scripts/resume-tunnel.sh +27 -0
- package/payload/platform/scripts/voice-author-key-audit.sh +155 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +41 -5
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.d.ts +1 -0
- package/payload/platform/services/claude-session-manager/dist/index.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +22 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/install-start-counter.d.ts +2 -0
- package/payload/platform/services/claude-session-manager/dist/install-start-counter.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/install-start-counter.js +12 -0
- package/payload/platform/services/claude-session-manager/dist/install-start-counter.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/mcp-descriptor-resolve.d.ts +17 -0
- package/payload/platform/services/claude-session-manager/dist/mcp-descriptor-resolve.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/mcp-descriptor-resolve.js +88 -0
- package/payload/platform/services/claude-session-manager/dist/mcp-descriptor-resolve.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/pty-census.d.ts +122 -9
- package/payload/platform/services/claude-session-manager/dist/pty-census.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-census.js +214 -29
- package/payload/platform/services/claude-session-manager/dist/pty-census.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +0 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +36 -24
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js +13 -1
- package/payload/platform/services/claude-session-manager/dist/rc-daemon.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-memory-cap.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-memory-cap.js +4 -2
- package/payload/platform/services/claude-session-manager/dist/session-memory-cap.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.d.ts +150 -0
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js +333 -0
- package/payload/platform/services/claude-session-manager/dist/slice-memory-policy.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/start-counter.d.ts +10 -0
- package/payload/platform/services/claude-session-manager/dist/start-counter.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/start-counter.js +55 -0
- package/payload/platform/services/claude-session-manager/dist/start-counter.js.map +1 -0
- package/payload/server/{chunk-Q6W4U6HL.js → chunk-JXWFVE5X.js} +83 -39
- package/payload/server/server.js +268 -73
- package/payload/server/{src-3I2RYZFB.js → src-4F37OHLK.js} +11 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.d.ts +0 -2
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js +0 -215
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/pkce-flow.test.js.map +0 -1
|
@@ -1,31 +1,44 @@
|
|
|
1
1
|
import { patchGraph } from "../lib/graph-client.js";
|
|
2
2
|
import { attachFilesToDraft, resolveAttachmentsOrRefuse } from "../lib/attach.js";
|
|
3
|
+
import { listMessageAttachments } from "../lib/attachment-list.js";
|
|
4
|
+
import { detachFromDraft, resolveRemovalsOrRefuse } from "../lib/detach.js";
|
|
3
5
|
import { log } from "../lib/log.js";
|
|
4
6
|
function recip(list) {
|
|
5
7
|
return list.map((address) => ({ emailAddress: { address } }));
|
|
6
8
|
}
|
|
7
9
|
/**
|
|
8
10
|
* Update an existing draft in place via PATCH /me/messages/{draftId}, and/or add
|
|
9
|
-
*
|
|
10
|
-
* the supplied fields are patched. Graph rejects a PATCH on a sent
|
|
11
|
-
* message — that error is surfaced to the caller unchanged.
|
|
11
|
+
* and remove its attachments. Graph drafts are mutable, so no delete-and-reappend.
|
|
12
|
+
* Only the supplied fields are patched. Graph rejects a PATCH on a sent
|
|
13
|
+
* (non-draft) message — that error is surfaced to the caller unchanged.
|
|
12
14
|
*
|
|
13
|
-
* Attachments
|
|
14
|
-
*
|
|
15
|
+
* Attachments edit in place like every other field: `attachments` adds files,
|
|
16
|
+
* `removeAttachments` takes them off by name or by attachment id, and the two
|
|
17
|
+
* together are a replace.
|
|
15
18
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* leaves the draft untouched rather than half-edited.
|
|
19
|
+
* ORDER (Task 1696). Local path validation, then the listing + removal
|
|
20
|
+
* resolution, then PATCH, then the DELETEs, then the attaches. Two properties
|
|
21
|
+
* fall out of resolving removals up front:
|
|
20
22
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
23
|
+
* - Removals resolve against the draft's PRE-CALL state, so "swap a.pdf for a
|
|
24
|
+
* newer a.pdf" pins the old file's id before the new one exists and cannot
|
|
25
|
+
* match the file it is meant to replace.
|
|
26
|
+
* - A removal naming a file the draft does not carry, or a name carried twice,
|
|
27
|
+
* refuses before the PATCH. Listing is a GET, so the draft is untouched.
|
|
28
|
+
*
|
|
29
|
+
* "At least one change" counts attachments and removals as well as patchable
|
|
30
|
+
* fields, so an attachment-only or removal-only call is valid; either issues no
|
|
31
|
+
* PATCH at all.
|
|
32
|
+
*
|
|
33
|
+
* A Graph-side failure is a different matter: the PATCH, the DELETEs and the
|
|
34
|
+
* attaches are separate calls and Graph has no transaction across them, so a
|
|
35
|
+
* DELETE or attach that fails AFTER a successful PATCH leaves the field edits
|
|
36
|
+
* applied while this function throws. The caller is told the edit failed; the
|
|
37
|
+
* subject/recipients it asked for are nonetheless changed. Re-running with the
|
|
38
|
+
* same arguments is safe for the fields (PATCH is idempotent) but WILL duplicate
|
|
39
|
+
* any attachment that already landed, because attaching is additive. A removal
|
|
40
|
+
* that already landed re-runs as a `not-on-draft` refusal, because the file it
|
|
41
|
+
* names is gone. Only path validation and removal resolution are all-or-nothing.
|
|
29
42
|
*
|
|
30
43
|
* The id in the PATCH response is authoritative for where the draft now lives,
|
|
31
44
|
* so it is returned rather than the caller's `draftId` — mirroring `runDraft`,
|
|
@@ -34,9 +47,14 @@ function recip(list) {
|
|
|
34
47
|
* reported id means the tool never asserts a handle it has not confirmed, and
|
|
35
48
|
* `rotated=true` in the log makes any divergence visible (Task 1688).
|
|
36
49
|
*
|
|
37
|
-
* That is also why the
|
|
38
|
-
* id rotated, the caller's handle no longer addresses the draft
|
|
39
|
-
* it would 404 or, worse, hit a stale item.
|
|
50
|
+
* That is also why the DELETEs and attaches target the REPORTED id, not the
|
|
51
|
+
* caller's: if the id rotated, the caller's handle no longer addresses the draft
|
|
52
|
+
* and writing to it would 404 or, worse, hit a stale item. The listing is
|
|
53
|
+
* necessarily read from the caller's id, since it must precede the PATCH that
|
|
54
|
+
* reports the authoritative one. Under a rotation — which IMMUTABLE_ID_PREFER
|
|
55
|
+
* makes effectively impossible — the resolved attachment ids would belong to the
|
|
56
|
+
* pre-rotation item and the DELETE would fail loudly rather than silently remove
|
|
57
|
+
* the wrong file. That is the accepted consequence, not a handled path.
|
|
40
58
|
*/
|
|
41
59
|
export async function runDraftEdit(config, args) {
|
|
42
60
|
const patch = {};
|
|
@@ -52,11 +70,20 @@ export async function runDraftEdit(config, args) {
|
|
|
52
70
|
if (args.bcc !== undefined)
|
|
53
71
|
patch.bccRecipients = recip(args.bcc);
|
|
54
72
|
const hasAttachments = (args.attachments?.length ?? 0) > 0;
|
|
55
|
-
|
|
56
|
-
|
|
73
|
+
const hasRemovals = (args.removeAttachments?.length ?? 0) > 0;
|
|
74
|
+
if (Object.keys(patch).length === 0 && !hasAttachments && !hasRemovals) {
|
|
75
|
+
throw new Error("outlook-draft-edit: pass at least one field to change (to, cc, bcc, subject, body, attachments, or removeAttachments).");
|
|
57
76
|
}
|
|
58
77
|
// Before any Graph write: a bad path must leave the draft untouched.
|
|
59
78
|
const files = resolveAttachmentsOrRefuse(config.accountId, args.attachments, "draft-edit");
|
|
79
|
+
// Also before any Graph write: resolve removals against the draft's pre-call
|
|
80
|
+
// state. The listing is a GET, so an unresolvable removal still refuses with
|
|
81
|
+
// the draft untouched.
|
|
82
|
+
let removals = [];
|
|
83
|
+
if (hasRemovals) {
|
|
84
|
+
const { items } = await listMessageAttachments(config, args.draftId, "draft-edit");
|
|
85
|
+
removals = resolveRemovalsOrRefuse(items, args.removeAttachments ?? [], "draft-edit");
|
|
86
|
+
}
|
|
60
87
|
let draftId = args.draftId;
|
|
61
88
|
let rotated = false;
|
|
62
89
|
if (Object.keys(patch).length > 0) {
|
|
@@ -69,6 +96,9 @@ export async function runDraftEdit(config, args) {
|
|
|
69
96
|
rotated = reported !== args.draftId;
|
|
70
97
|
draftId = reported;
|
|
71
98
|
}
|
|
99
|
+
// Remove before adding, so a replace reads as one in the log as well as in the
|
|
100
|
+
// call.
|
|
101
|
+
await detachFromDraft(config, draftId, removals, "draft-edit");
|
|
72
102
|
await attachFilesToDraft(config, draftId, files, "draft-edit");
|
|
73
103
|
log({
|
|
74
104
|
event: "draft-edit",
|
|
@@ -79,7 +109,13 @@ export async function runDraftEdit(config, args) {
|
|
|
79
109
|
rotated,
|
|
80
110
|
fields: Object.keys(patch).join(","),
|
|
81
111
|
attachments: files.length,
|
|
112
|
+
removed: removals.length,
|
|
82
113
|
});
|
|
83
|
-
return {
|
|
114
|
+
return {
|
|
115
|
+
draftId,
|
|
116
|
+
updated: true,
|
|
117
|
+
attachments: files.map((f) => f.name),
|
|
118
|
+
removed: removals.map((r) => r.name),
|
|
119
|
+
};
|
|
84
120
|
}
|
|
85
121
|
//# sourceMappingURL=draft-edit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"draft-edit.js","sourceRoot":"","sources":["../../src/tools/draft-edit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAClF,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"draft-edit.js","sourceRoot":"","sources":["../../src/tools/draft-edit.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import type { GraphClientConfig } from "../lib/graph-client.js";
|
|
2
|
+
import type { AttachmentListItem } from "../lib/attachment-list.js";
|
|
2
3
|
/**
|
|
3
|
-
*
|
|
4
|
+
* Attachment retrieval for Outlook mailboxes.
|
|
4
5
|
*
|
|
5
6
|
* `runMailAttachmentList` enumerates a message's attachments (metadata only, no
|
|
6
|
-
* bytes).
|
|
7
|
+
* bytes). It is not inbound-only: a draft is a message in the same collection,
|
|
8
|
+
* so passing a draftId lists what that draft carries, and the id/name it returns
|
|
9
|
+
* is the handle outlook-draft-edit's `removeAttachments` resolves against.
|
|
10
|
+
* Downloading bytes is inbound in practice, since a draft's own attachments came
|
|
11
|
+
* from the account directory to begin with.
|
|
12
|
+
*
|
|
13
|
+
* `runMailAttachmentDownload` fetches one file attachment's bytes and
|
|
7
14
|
* writes them to the account's uploads directory so the agent can Read the
|
|
8
15
|
* file, forward it, or attach it to a reply.
|
|
9
16
|
*
|
|
@@ -12,24 +19,16 @@ import type { GraphClientConfig } from "../lib/graph-client.js";
|
|
|
12
19
|
* listed with their kind but refused for download, so a caller never writes a
|
|
13
20
|
* zero-byte or malformed file.
|
|
14
21
|
*/
|
|
15
|
-
/** Graph attachment @odata.type → a short kind the agent reads. */
|
|
16
|
-
export type AttachmentKind = "file" | "item" | "reference" | "unknown";
|
|
17
|
-
export interface AttachmentListItem {
|
|
18
|
-
id: string;
|
|
19
|
-
name: string | null;
|
|
20
|
-
contentType: string | null;
|
|
21
|
-
size: number;
|
|
22
|
-
isInline: boolean;
|
|
23
|
-
kind: AttachmentKind;
|
|
24
|
-
}
|
|
25
22
|
export interface AttachmentListResult {
|
|
26
23
|
items: AttachmentListItem[];
|
|
27
24
|
}
|
|
28
|
-
export declare function attachmentKind(odataType: string | undefined): AttachmentKind;
|
|
29
25
|
/**
|
|
30
|
-
* List a message's attachments by id. Metadata only —
|
|
31
|
-
*
|
|
32
|
-
*
|
|
26
|
+
* List a message's attachments by id. Metadata only — no file bytes are
|
|
27
|
+
* downloaded. Get `messageId` from outlook-mail-list / outlook-mail-search
|
|
28
|
+
* (both now report `hasAttachments`).
|
|
29
|
+
*
|
|
30
|
+
* The GET itself lives in lib/attachment-list.ts because outlook-draft-edit
|
|
31
|
+
* resolves attachment removals against the same call.
|
|
33
32
|
*/
|
|
34
33
|
export declare function runMailAttachmentList(config: GraphClientConfig, args: {
|
|
35
34
|
messageId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-attachment.d.ts","sourceRoot":"","sources":["../../src/tools/mail-attachment.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"mail-attachment.d.ts","sourceRoot":"","sources":["../../src/tools/mail-attachment.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EAAkB,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAKpF;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAa/B;AAED,MAAM,WAAW,wBAAwB;IACvC,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAkBD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChD,OAAO,CAAC,wBAAwB,CAAC,CA0EnC"}
|
|
@@ -2,52 +2,19 @@ import { createHash } from "node:crypto";
|
|
|
2
2
|
import { mkdirSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { basename, join } from "node:path";
|
|
4
4
|
import { callGraph } from "../lib/graph-client.js";
|
|
5
|
+
import { attachmentKind, listMessageAttachments } from "../lib/attachment-list.js";
|
|
5
6
|
import { resolveAccountDir, OUTLOOK_ATTACHMENT_MAX_BYTES } from "../lib/outbound-attachments.js";
|
|
6
7
|
import { log } from "../lib/log.js";
|
|
7
|
-
export function attachmentKind(odataType) {
|
|
8
|
-
switch (odataType) {
|
|
9
|
-
case "#microsoft.graph.fileAttachment":
|
|
10
|
-
return "file";
|
|
11
|
-
case "#microsoft.graph.itemAttachment":
|
|
12
|
-
return "item";
|
|
13
|
-
case "#microsoft.graph.referenceAttachment":
|
|
14
|
-
return "reference";
|
|
15
|
-
default:
|
|
16
|
-
return "unknown";
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
const LIST_SELECT = "id,name,contentType,size,isInline";
|
|
20
8
|
/**
|
|
21
|
-
* List a message's attachments by id. Metadata only —
|
|
22
|
-
*
|
|
23
|
-
*
|
|
9
|
+
* List a message's attachments by id. Metadata only — no file bytes are
|
|
10
|
+
* downloaded. Get `messageId` from outlook-mail-list / outlook-mail-search
|
|
11
|
+
* (both now report `hasAttachments`).
|
|
12
|
+
*
|
|
13
|
+
* The GET itself lives in lib/attachment-list.ts because outlook-draft-edit
|
|
14
|
+
* resolves attachment removals against the same call.
|
|
24
15
|
*/
|
|
25
16
|
export async function runMailAttachmentList(config, args) {
|
|
26
|
-
|
|
27
|
-
// than one Graph page is never silently truncated (matching mail-list /
|
|
28
|
-
// mail-search, which paginate). The first request builds the path + $select;
|
|
29
|
-
// each nextLink is a full URL that already encodes the select and skiptoken.
|
|
30
|
-
const raws = [];
|
|
31
|
-
let next;
|
|
32
|
-
let pages = 0;
|
|
33
|
-
do {
|
|
34
|
-
const firstPath = `/me/messages/${encodeURIComponent(args.messageId)}/attachments`;
|
|
35
|
-
const page = await callGraph(config, async (client) => {
|
|
36
|
-
const req = next ? client.api(next) : client.api(firstPath).select(LIST_SELECT);
|
|
37
|
-
return (await req.get());
|
|
38
|
-
}, { tool: "mail-attachment", target: next ?? firstPath });
|
|
39
|
-
raws.push(...(page.value ?? []));
|
|
40
|
-
next = page["@odata.nextLink"];
|
|
41
|
-
pages += 1;
|
|
42
|
-
} while (next);
|
|
43
|
-
const items = raws.map((a) => ({
|
|
44
|
-
id: a.id,
|
|
45
|
-
name: a.name ?? null,
|
|
46
|
-
contentType: a.contentType ?? null,
|
|
47
|
-
size: a.size ?? 0,
|
|
48
|
-
isInline: a.isInline ?? false,
|
|
49
|
-
kind: attachmentKind(a["@odata.type"]),
|
|
50
|
-
}));
|
|
17
|
+
const { items, pages } = await listMessageAttachments(config, args.messageId, "mail-attachment");
|
|
51
18
|
log({
|
|
52
19
|
event: "mail-attachment",
|
|
53
20
|
op: "list",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail-attachment.js","sourceRoot":"","sources":["../../src/tools/mail-attachment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"mail-attachment.js","sourceRoot":"","sources":["../../src/tools/mail-attachment.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ The **encrypted token store** (`token-store.ts`) is still adapted from [`nsakki5
|
|
|
14
14
|
|
|
15
15
|
End users never register an Azure app. The `OUTLOOK_CLIENT_ID` is a **public, non-secret** value (a PKCE public-client app has no client secret), and the app is **multi-tenant** (`/common`), so **one vendor-owned Entra app per brand** serves every install and every mailbox on that brand. End users only complete the OAuth consent screen; per-mailbox tokens stay per-account and encrypted, so a shared client ID does not weaken isolation.
|
|
16
16
|
|
|
17
|
-
The value ships as the brand default: `brands/<brand>/brand.json#outlookClientId`. The installer stamps it onto the `-claude-session-manager` unit env as `OUTLOOK_CLIENT_ID` (+ `OUTLOOK_TENANT_ID=common`), and the plugin
|
|
17
|
+
The value ships as the brand default: `brands/<brand>/brand.json#outlookClientId`. The installer stamps it onto the `-claude-session-manager` unit env as `OUTLOOK_CLIENT_ID` (+ `OUTLOOK_TENANT_ID=common`), and the plugin's MCP server reads it from `process.env` — it arrives by inheritance down the spawn chain (manager unit env → PTY → MCP child), not through any PLUGIN.md declaration. Outlook is `mcp-manifest: auto`, whose generator branch discards the declared `mcp.env` block entirely and emits only `MCP_SPAWN_TEE_NAME` (the manifest contract). The plugin's inert `OUTLOOK_CLIENT_ID: ${OUTLOOK_CLIENT_ID}` declaration has been deleted; it reached no path. A brand that ships the field empty has the plugin inert (register refuses) until its vendor app exists — no operator action makes it work.
|
|
18
18
|
|
|
19
19
|
**Per-install override (escape hatch, not required):** setting `OUTLOOK_CLIENT_ID` in the install's env overrides the brand default. This is only for a vendor testing a replacement app; normal installs need nothing.
|
|
20
20
|
|
|
@@ -134,13 +134,17 @@ Recoverable — moves to Deleted Items, never hard-deletes or expunges. An id al
|
|
|
134
134
|
|
|
135
135
|
**Endpoints (in order):**
|
|
136
136
|
1. `PATCH /me/messages/{draftId}` (`ResponseType.RAW`; success asserted on HTTP 200) with only the supplied fields (`subject`, `body` → `{ contentType, content }`, `toRecipients`, `ccRecipients`, `bccRecipients`). Graph drafts are mutable, so no delete-and-reappend. **Skipped entirely** when the call supplies attachments and no patchable field. A PATCH on a sent (non-draft) message returns a Graph error surfaced unchanged.
|
|
137
|
-
2. Per file, by size — identical to `outlook-mail-reply` step 3 (shared helper). Attachments
|
|
137
|
+
2. Per file, by size — identical to `outlook-mail-reply` step 3 (shared helper). Attachments edit in place: `attachments` adds files to what the draft already carries, `removeAttachments` takes files off via `DELETE /me/messages/{draftId}/attachments/{attachmentId}`, and the two together replace a file.
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
**Removal resolution.** Each `removeAttachments` entry is matched against `GET /me/messages/{draftId}/attachments` (the same paginated call `outlook-mail-attachment` uses — shared as `lib/attachment-list.ts`): an exact attachment-id match wins, otherwise an exact name match. Zero matches refuses `not-on-draft` and names what the draft carries; two or more name matches refuses `ambiguous-name` and names the ids that disambiguate. Both fire before the PATCH — the listing is a GET — so a bad removal leaves the draft untouched. Resolution completing before any write is what makes a same-name swap unambiguous: the old file's id is pinned before the new file exists. Two distinct targets addressing the same attachment (an id and a name for one file) are collapsed to one removal rather than refused, so each attachment is deleted at most once. The DELETEs and attaches target the id the PATCH reported, while the listing is necessarily read from the caller's id; see [Item id contract](#item-id-contract).
|
|
140
|
+
|
|
141
|
+
**Removal observability.** `op=resolve requested=<n> resolved=<m>` is emitted once every target has resolved (`m` below `n` means targets were deduped), then one `op=detach id=<name> attachmentId=<id>` per file **after** its DELETE returns. A detach count below `resolved` together with a terminal failure is the partial-removal signature: `draft-edit` is non-atomic across PATCH, DELETE and attach, so a DELETE failing on file 2 of 3 leaves the draft matching neither the before nor the requested after while the caller is told the edit failed.
|
|
142
|
+
|
|
143
|
+
At least one patchable field, **one attachment or one removal** is required. Attachment paths are validated, and removals resolved, before step 1 — so a bad path or an unresolvable removal leaves the draft untouched rather than half-edited.
|
|
140
144
|
|
|
141
145
|
Step 2 targets the id step 1 **reported**, not the caller's `draftId`. Ids are immutable plugin-wide so the two normally match, but a rotated id means the caller's handle no longer addresses the draft — see [Item id contract](#item-id-contract).
|
|
142
146
|
|
|
143
|
-
**Returned shape:** `{ draftId: string; updated: true; attachments: string[] }` — `draftId` is the id Graph reported for the updated draft, which is authoritative over the id passed in. The tool refuses rather than report `updated: true` for an id it has not read back. An attachments-only edit issues no PATCH, so it reports the caller's id.
|
|
147
|
+
**Returned shape:** `{ draftId: string; updated: true; attachments: string[]; removed: string[] }` — `attachments` names the files added, `removed` the files taken off. `draftId` is the id Graph reported for the updated draft, which is authoritative over the id passed in. The tool refuses rather than report `updated: true` for an id it has not read back. An attachments-only or removal-only edit issues no PATCH, so it reports the caller's id.
|
|
144
148
|
|
|
145
149
|
## outlook-mail-send
|
|
146
150
|
|
|
@@ -85,7 +85,7 @@ Every address is a **quoted string inside an array**, even when there is only on
|
|
|
85
85
|
`"to": rob@example.com` (unquoted) and `"to": "rob@example.com"` (quoted but not an array) are both rejected before the call reaches Outlook. A rejection here means the arguments were malformed; it is not evidence that sending is broken. Check `outlook-mailbox-info` before reporting a send fault.
|
|
86
86
|
|
|
87
87
|
- `outlook-draft` — create a draft in the Drafts folder (same fields, same array-of-quoted-strings shape as send, including `attachments`). Returns the draft's id, and the files are already on the draft, so it can be sent as-is.
|
|
88
|
-
- `outlook-draft-edit draftId=<id>` — update an existing draft in place (Graph drafts are mutable, so no delete-and-reappend). Pass the draftId plus only the fields to change: `to`, `cc`, `bcc`, `subject`, `body`, `isHtml`, `attachments` (recipients and attachments take the same array-of-quoted-strings shape as send).
|
|
88
|
+
- `outlook-draft-edit draftId=<id>` — update an existing draft in place (Graph drafts are mutable, so no delete-and-reappend). Pass the draftId plus only the fields to change: `to`, `cc`, `bcc`, `subject`, `body`, `isHtml`, `attachments`, `removeAttachments` (recipients and attachments take the same array-of-quoted-strings shape as send). `attachments` adds files to the draft. `removeAttachments` takes files off it, each entry either an attachment name or an attachment id. Pass both to replace a file in one call. To see what a draft carries, call `outlook-mail-attachment` with the draftId as its messageId. Removing a file the draft does not carry, or a name it carries twice, is refused and changes nothing. At least one field, attachment or removal is required; a sent message cannot be edited.
|
|
89
89
|
- `outlook-draft-send draftId=<id>` — send a draft created earlier. Graph consumes the draft on send.
|
|
90
90
|
|
|
91
91
|
If the mailbox was registered before send was available, the first send returns "re-register to grant send" — run `outlook-account-register` again and consent to the send scopes.
|
|
@@ -80,7 +80,7 @@ It is set independently of the email plugin's 25 MiB attachment cap. Both bound
|
|
|
80
80
|
Both directions are checked before anything is buffered, in two places that are not redundant:
|
|
81
81
|
|
|
82
82
|
- `put` is size-checked in this MCP process with `statSync` before the file is read. That is what produces the error naming the file and the limit.
|
|
83
|
-
- The house routes enforce independently, because they are plain loopback HTTP and every agent holds `Bash`: a cap enforced only here is bypassed by one `curl`, and the house process is the one holding the account-wide credential.
|
|
83
|
+
- The house routes enforce independently, because they are plain loopback HTTP and every agent holds `Bash`: a cap enforced only here is bypassed by one `curl`, and the house process is the one holding the account-wide credential. Every object route rejects an over-cap body at Hono's `bodyLimit`, before the body is buffered — `/r2/object/put` against a base64 object ceiling, and `list`, `get` and `delete` against a 64 KiB metadata envelope, since those three carry a bucket and a key or prefix and nothing else. `get` is additionally sized from `r2ObjectFind`'s recorded `size` before any bytes move, which stops at the page carrying the exact key rather than listing every object sharing it as a prefix.
|
|
84
84
|
|
|
85
85
|
A `get` whose key has no recorded size in the listing is refused, not attempted. No recorded size means no bound, and a stale or lagging listing would otherwise transfer an unbounded object. The cost is that a genuinely missing object reports "no recorded size" rather than Cloudflare's 404.
|
|
86
86
|
|
|
@@ -29,11 +29,7 @@ mcp:
|
|
|
29
29
|
LOG_DIR: ${LOG_DIR}
|
|
30
30
|
PLATFORM_ROOT: ${PLATFORM_ROOT}
|
|
31
31
|
ACCOUNT_ID: ${ACCOUNT_ID}
|
|
32
|
-
ADMIN_USER_ID: ${ADMIN_USER_ID}
|
|
33
32
|
SESSION_ID: ${SESSION_ID}
|
|
34
|
-
NEO4J_URI: ${NEO4J_URI}
|
|
35
|
-
NEO4J_USER: ${NEO4J_USER}
|
|
36
|
-
NEO4J_PASSWORD: ${NEO4J_PASSWORD}
|
|
37
33
|
---
|
|
38
34
|
|
|
39
35
|
# Voice Mirror
|
|
@@ -57,16 +53,32 @@ The operator is:
|
|
|
57
53
|
|
|
58
54
|
## Tools
|
|
59
55
|
|
|
60
|
-
Voice mirror introduces five deterministic plugin tools. They
|
|
56
|
+
Voice mirror introduces five deterministic plugin tools. They write to the graph directly over an account-scoped Cypher session, not through `memory-write`: an authorship stamp does not need the re-embedding and re-validation `memory-write` performs on every call. Account scoping is enforced per query, and identity per write (see [Identity](#identity)).
|
|
61
57
|
|
|
62
58
|
| Tool | Purpose |
|
|
63
59
|
|------|---------|
|
|
64
|
-
| `voice-tag-content` | Stamp `authorshipMode ∈ {human-only, human-led-agent-assisted, agent-led-human-reviewed, agent-only, unknown}`, `format ∈ {text, email, social-post, article, note, marketing-copy}`, and `voiceAuthor` on one or many `:KnowledgeDocument | :Message | :SocialPost` nodes (email threads live as `:KnowledgeDocument {source:'email'}`). Bulk-mode for backfill batches. `format` is required. `author` is optional — omit to attribute to the tagging operator. |
|
|
60
|
+
| `voice-tag-content` | Stamp `authorshipMode ∈ {human-only, human-led-agent-assisted, agent-led-human-reviewed, agent-only, unknown}`, `format ∈ {text, email, social-post, article, note, marketing-copy}`, and `voiceAuthor` on one or many `:KnowledgeDocument | :Message | :SocialPost` nodes (email threads live as `:KnowledgeDocument {source:'email'}`). Bulk-mode for backfill batches. `format` is required. `author` is optional — omit to attribute to the tagging operator. The resolved `voiceAuthor` must name an `:AdminUser` on the calling account or the tag is refused and nothing is written (see [Identity](#identity)). |
|
|
65
61
|
| `voice-distil-profile` | Three modes, scope-aware (`scope='personal'` default walks one author; `scope='org'` walks the whole account onto the business). `mode='sample'` (default) walks the `human-only` corpus for the given `format`/`scope` and returns exemplars + recent edit intents for the agent to compose a style card; cadence-guarded (≥20% growth or ≥30 days). `mode='amend'` reads only `nodeIds` plus the existing `:VoiceProfile.styleCard` so the agent can decide whether named documents move the profile — operator-initiated, no cadence guard. `mode='write'` persists the YAML card; supply `amendedFromNodeIds` to attribute the write to specific documents (bypasses cadence + corpus walk). Trashed nodes are excluded from every walk. Omit `format` on `'sample'` to enumerate all formats in that scope's corpus and distil each. |
|
|
66
|
-
| `voice-retrieve-conditioning` | Return `{styleCard, exemplars[], status}` for a drafting brief. Requires `brief.format` (one of the six corpus formats). `brief.scope` (default `personal`) picks personal vs org voice; a personal request with no personal profile falls back to the org profile (`status='fallback-org'`). K=5 short-form (`brief.length:'short'`), K=15 long-form (`brief.length:'long'`). Token-budget bounded. `status ∈ {ok, fallback-org, no-data, error}
|
|
62
|
+
| `voice-retrieve-conditioning` | Return `{styleCard, exemplars[], status}` for a drafting brief. Requires `brief.format` (one of the six corpus formats). `brief.scope` (default `personal`) picks personal vs org voice; a personal request with no personal profile falls back to the org profile (`status='fallback-org'`). K=5 short-form (`brief.length:'short'`), K=15 long-form (`brief.length:'long'`). Token-budget bounded. `brief.topic` is optional and **ranks** the exemplar walk — its terms order the corpus by how many they hit, recency breaks the tie, and a topic that matches nothing still returns the K most recent. `status ∈ {ok, fallback-org, no-data, error}`; `ok` means the query ran, not that exemplars came back — read `exemplars.length` for that. Identity is not gated here: retrieval writes nothing, and a personal request that resolves no personal voice falls back to the org voice by design. |
|
|
67
63
|
| `voice-record-feedback` | Capture an operator edit on an agent draft as a `:VoiceEdit {format, scope}` with a Haiku-summarised `intent`, linked back to the scoped per-format `:VoiceProfile` via `:FEEDBACK_FOR` (org edits → org profile; editor preserved via `:AUTHORED`). Requires `format`. |
|
|
68
64
|
| `voice-ingest-session-text` | Write operator turns from the current session as `:Message {format:'text', authorshipMode:'human-only'}` corpus nodes. The agent reads its own operator turns from context and passes them as `turns`. Deduplicates via SHA256 `contentHash`. Invoked on demand by the voice-mirror skill when the operator asks to capture this session's voice. |
|
|
69
65
|
|
|
66
|
+
## Identity
|
|
67
|
+
|
|
68
|
+
Every `userId` / `author` a tool accepts is an `:AdminUser` id that already exists on the calling account. It is never a person's name, nor a slug derived from one. A value naming no `:AdminUser` on the account is refused and nothing is written: a profile keyed on a non-existent admin is unreachable by any seat that resolves identity properly, and a `voiceAuthor` stamped with one attributes a corpus to an identity that does not exist.
|
|
69
|
+
|
|
70
|
+
The reserved org key `__org__` is exempt. It names no `:AdminUser` by design and anchors on `:LocalBusiness`. That is how the account-wide house voice works, including on a spawn that carries `ACCOUNT_ID` but no personal identity.
|
|
71
|
+
|
|
72
|
+
Each tool resolves its identity from `USER_ID` in the spawn env. A tool argument is only needed when attributing to someone other than the caller, on a multi-operator account.
|
|
73
|
+
|
|
74
|
+
A refusal names the rejected key and the account, and emits one line:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
[voice-identity] refuse tool=<tool> reason=unknown-admin-user userId=<key> accountId=<account>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`platform/scripts/voice-author-key-audit.sh` is the standing per-install check for keys already in the graph. It is read-only and reports two distinct findings: `:VoiceProfile` keys and `voiceAuthor` stamps matching no `:AdminUser` on their account. Disposition of anything it finds is an operator decision.
|
|
81
|
+
|
|
70
82
|
## References
|
|
71
83
|
|
|
72
84
|
No external references; the skill body defines the five tool contracts. Developer notes in `maxy-code/.docs/voice-mirror.md`.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAuC,gBAAgB,EAAuB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAuC,gBAAgB,EAAuB,MAAM,8BAA8B,CAAC;AAsd1H,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -19,7 +19,14 @@ const server = new McpServer({
|
|
|
19
19
|
// refusal preserves account isolation. Mirrors the memory plugin's
|
|
20
20
|
// pattern (Task 202).
|
|
21
21
|
const accountId = process.env.ACCOUNT_ID ?? null;
|
|
22
|
-
|
|
22
|
+
// Task 1699 — USER_ID is the identity the PTY spawn stamps; MCP children
|
|
23
|
+
// inherit it, which is how `memory` / `admin` / `scheduling` resolve the
|
|
24
|
+
// operator without declaring it in their env block. Empty is a legitimate
|
|
25
|
+
// state (silent-compaction / recorder / public spawns stamp empty), and it
|
|
26
|
+
// means "no identity" — normalise it to null so it can never reach a query
|
|
27
|
+
// as a profile key.
|
|
28
|
+
const userIdRaw = process.env.USER_ID ?? "";
|
|
29
|
+
const userIdEnv = userIdRaw.length > 0 ? userIdRaw : null;
|
|
23
30
|
process.stderr.write(`[voice-mirror] boot accountId=${accountId ?? "null"} userId=${userIdEnv ?? "null"}\n`);
|
|
24
31
|
function refuseNoAccount(toolName) {
|
|
25
32
|
process.stderr.write(`[voice-mirror] tool=${toolName} refuse reason=no-account-context\n`);
|
|
@@ -34,9 +41,9 @@ function refuseNoAccount(toolName) {
|
|
|
34
41
|
};
|
|
35
42
|
}
|
|
36
43
|
function resolveUserId() {
|
|
37
|
-
//
|
|
38
|
-
// When absent
|
|
39
|
-
//
|
|
44
|
+
// USER_ID is stamped on the claude PTY at spawn time and inherited by this
|
|
45
|
+
// MCP child. When absent or empty, the operator must pass userId as a tool
|
|
46
|
+
// argument or the tools refuse rather than orphan a profile.
|
|
40
47
|
return userIdEnv;
|
|
41
48
|
}
|
|
42
49
|
// Format enum schema — shared across tools that accept VoiceFormat.
|
|
@@ -61,11 +68,11 @@ lifelineTool(server, "voice-tag-content", "Stamp authorshipMode and format on on
|
|
|
61
68
|
userId: z
|
|
62
69
|
.string()
|
|
63
70
|
.optional()
|
|
64
|
-
.describe("Operator AdminUser id. Defaults to
|
|
71
|
+
.describe("Operator AdminUser id. Defaults to USER_ID env. Used as the default author when `author` is omitted. Must name an :AdminUser that already exists on this account."),
|
|
65
72
|
author: z
|
|
66
73
|
.string()
|
|
67
74
|
.optional()
|
|
68
|
-
.describe("voiceAuthor
|
|
75
|
+
.describe("voiceAuthor to stamp on the nodes — an existing :AdminUser id on this account, never a person's name or a slug derived from one. Omit to attribute to the tagging operator; single-operator accounts get personal attribution for free. Name an author only on a multi-operator account when tagging someone else's writing."),
|
|
69
76
|
}, async ({ nodeIds, mode, format, userId, author }) => {
|
|
70
77
|
if (!accountId)
|
|
71
78
|
return refuseNoAccount("voice-tag-content");
|
|
@@ -117,7 +124,7 @@ lifelineTool(server, "voice-distil-profile", "Three-mode tool. mode='sample' (de
|
|
|
117
124
|
userId: z
|
|
118
125
|
.string()
|
|
119
126
|
.optional()
|
|
120
|
-
.describe("Operator AdminUser identifier. Defaults to
|
|
127
|
+
.describe("Operator AdminUser identifier. Defaults to USER_ID env from spawn context."),
|
|
121
128
|
format: zFormat.optional().describe("Writing format to distil. Required for mode='amend' and mode='write'. When omitted on 'sample', enumerates corpus formats and distils each that fires the cadence guard."),
|
|
122
129
|
force: z
|
|
123
130
|
.boolean()
|
|
@@ -149,7 +156,7 @@ lifelineTool(server, "voice-distil-profile", "Three-mode tool. mode='sample' (de
|
|
|
149
156
|
content: [
|
|
150
157
|
{
|
|
151
158
|
type: "text",
|
|
152
|
-
text: "voice-distil-profile: userId required (no
|
|
159
|
+
text: "voice-distil-profile: userId required (no USER_ID in spawn env).",
|
|
153
160
|
},
|
|
154
161
|
],
|
|
155
162
|
isError: true,
|
|
@@ -207,7 +214,7 @@ lifelineTool(server, "voice-retrieve-conditioning", "Return the operator's per-f
|
|
|
207
214
|
userId: z
|
|
208
215
|
.string()
|
|
209
216
|
.optional()
|
|
210
|
-
.describe("Operator AdminUser identifier. Defaults to
|
|
217
|
+
.describe("Operator AdminUser identifier. Defaults to USER_ID env."),
|
|
211
218
|
format: zFormat.describe("Writing format for corpus and profile scoping."),
|
|
212
219
|
topic: z
|
|
213
220
|
.string()
|
|
@@ -225,12 +232,24 @@ lifelineTool(server, "voice-retrieve-conditioning", "Return the operator's per-f
|
|
|
225
232
|
return refuseNoAccount("voice-retrieve-conditioning");
|
|
226
233
|
const resolvedUserId = userId ?? resolveUserId();
|
|
227
234
|
// org scope is account-wide (keyed on ORG_USER_ID + accountId) and never
|
|
228
|
-
// reads a userId, so a
|
|
229
|
-
//
|
|
230
|
-
//
|
|
235
|
+
// reads a userId, so a spawn that carries ACCOUNT_ID but no USER_ID can
|
|
236
|
+
// still retrieve the house voice. Only personal scope requires a resolved
|
|
237
|
+
// userId (Task 975).
|
|
231
238
|
if ((scope ?? "personal") !== "org" && !resolvedUserId) {
|
|
232
239
|
// Soft (no isError) so drafting degrades, but status:error keeps this
|
|
233
240
|
// distinct from genuine no-data (Task 493).
|
|
241
|
+
//
|
|
242
|
+
// Task 1699 — this gate returns before voiceRetrieveConditioning, so the
|
|
243
|
+
// tool's own missing-identity line never fires and the payload's status
|
|
244
|
+
// lives only in the session JSONL. The shared lifeline reads isError,
|
|
245
|
+
// which a soft return never sets, so it logs outcome=ok. Without this
|
|
246
|
+
// line the failure is invisible in the logs: on the SiteDesk install,
|
|
247
|
+
// 93 voice-retrieve lifeline lines said outcome=ok and none carried the
|
|
248
|
+
// error while every retrieval on a client account was failing. Match the
|
|
249
|
+
// tool's own format so one grep for `[voice-retrieve] error:` finds both.
|
|
250
|
+
process.stderr.write(`[voice-retrieve] error: missing-identity scope=${scope ?? "personal"} ` +
|
|
251
|
+
`accountId=${Boolean(accountId)} userId=${Boolean(resolvedUserId)} ` +
|
|
252
|
+
`userId-source=${userId ? "arg" : "env"}\n`);
|
|
234
253
|
return {
|
|
235
254
|
content: [
|
|
236
255
|
{
|
|
@@ -239,7 +258,7 @@ lifelineTool(server, "voice-retrieve-conditioning", "Return the operator's per-f
|
|
|
239
258
|
styleCard: null,
|
|
240
259
|
exemplars: [],
|
|
241
260
|
status: "error",
|
|
242
|
-
error: "no userId (no
|
|
261
|
+
error: "no userId (no USER_ID in spawn env)",
|
|
243
262
|
}),
|
|
244
263
|
},
|
|
245
264
|
],
|
|
@@ -307,7 +326,7 @@ lifelineTool(server, "voice-record-feedback", "Capture an operator's edit on an
|
|
|
307
326
|
content: [
|
|
308
327
|
{
|
|
309
328
|
type: "text",
|
|
310
|
-
text: "voice-record-feedback: userId required (no
|
|
329
|
+
text: "voice-record-feedback: userId required (no USER_ID in spawn env).",
|
|
311
330
|
},
|
|
312
331
|
],
|
|
313
332
|
isError: true,
|
|
@@ -348,7 +367,7 @@ lifelineTool(server, "voice-record-feedback", "Capture an operator's edit on an
|
|
|
348
367
|
lifelineTool(server, "voice-ingest-session-text", "Write operator turns from the current session as :Message {format:'text', source:'admin-pty', authorshipMode:'human-only'} corpus nodes. The admin agent reads its own operator turns from the live conversation context and passes them as `turns`. Deduplication via SHA256 contentHash — re-running with the same turns is a no-op. Triggers voice-distil-profile {format:'text'} after ingest (cadence guard decides whether distillation runs). Invoked on demand by the voice-mirror skill when the operator asks to capture this session's voice.", {
|
|
349
368
|
turns: z.array(z.string()).describe("Operator turns the agent read from its own session context (one string per operator message). Slash commands, harness injections, and large paste blocks are filtered out by the tool."),
|
|
350
369
|
sessionId: z.string().optional().describe("Session ID for provenance."),
|
|
351
|
-
userId: z.string().optional().describe("Operator AdminUser identifier. Defaults to
|
|
370
|
+
userId: z.string().optional().describe("Operator AdminUser identifier. Defaults to USER_ID env."),
|
|
352
371
|
}, async ({ turns, sessionId, userId }) => {
|
|
353
372
|
if (!accountId)
|
|
354
373
|
return refuseNoAccount("voice-ingest-session-text");
|
|
@@ -358,7 +377,7 @@ lifelineTool(server, "voice-ingest-session-text", "Write operator turns from the
|
|
|
358
377
|
content: [
|
|
359
378
|
{
|
|
360
379
|
type: "text",
|
|
361
|
-
text: "voice-ingest-session-text: userId required (no
|
|
380
|
+
text: "voice-ingest-session-text: userId required (no USER_ID in spawn env).",
|
|
362
381
|
},
|
|
363
382
|
],
|
|
364
383
|
isError: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,aAAa,CAAC,cAAc,CAAC,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,gBAAgB,EAAuB,MAAM,8BAA8B,CAAC;AAE1H,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,mBAAmB;IACzB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,wEAAwE;AACxE,mEAAmE;AACnE,sBAAsB;AACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;AACjD,yEAAyE;AACzE,yEAAyE;AACzE,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,oBAAoB;AACpB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;AAC5C,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,iCAAiC,SAAS,IAAI,MAAM,WAAW,SAAS,IAAI,MAAM,IAAI,CACvF,CAAC;AAEF,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,uBAAuB,QAAQ,qCAAqC,CACrE,CAAC;IACF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,GAAG,QAAQ,4HAA4H;aAC9I;SACF;QACD,OAAO,EAAE,IAAa;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa;IACpB,2EAA2E;IAC3E,2EAA2E;IAC3E,6DAA6D;IAC7D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oEAAoE;AACpE,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,aAAa,CAA0B,CAAC,CAAC,QAAQ,CAC1E,kIAAkI,CACnI,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,GAAG,CAAC;KACb,IAAI,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACzB,QAAQ,EAAE;KACV,QAAQ,CACP,4QAA4Q,CAC7Q,CAAC;AAEJ,YAAY,CAAC,MAAM,EACjB,mBAAmB,EACnB,ucAAuc,EACvc;IACE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC3E,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC;QACJ,YAAY;QACZ,0BAA0B;QAC1B,0BAA0B;QAC1B,YAAY;QACZ,SAAS;KACV,CAAC;SACD,QAAQ,CAAC,0BAA0B,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC,QAAQ,CACtB,oFAAoF,CACrF;IACD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mKAAmK,CACpK;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8TAA8T,CAC/T;CACJ,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE;IAClD,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,mBAAmB,CAAC,CAAC;IAC5D,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,kBAAkB,CAAC,MAAM,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBACvD;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,OAAO;YACP,IAAI,EAAE,IAAsB;YAC5B,SAAS;YACT,MAAM,EAAE,MAAqB;YAC7B,WAAW;SACZ,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,mBAAmB,IAAI,WAAW,MAAM,WAAW,WAAW,YAAY,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,OAAO,EAAE;iBAC3H;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACtF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,YAAY,CAAC,MAAM,EACjB,sBAAsB,EACtB,+6BAA+6B,EAC/6B;IACE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,4EAA4E,CAC7E;IACH,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACjC,0KAA0K,CAC3K;IACD,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,gGAAgG,CAAC;IAC7G,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;SAClC,QAAQ,EAAE;SACV,QAAQ,CAAC,mOAAmO,CAAC;IAChP,aAAa,EAAE,CAAC;SACb,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6JAA6J,CAAC;IAC1K,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,oNAAoN,CACrN;IACH,kBAAkB,EAAE,CAAC;SAClB,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;SACjB,QAAQ,EAAE;SACV,QAAQ,CACP,6QAA6Q,CAC9Q;IACH,KAAK,EAAE,MAAM;CACd,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3F,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,sBAAsB,CAAC,CAAC;IAC/D,MAAM,cAAc,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;IACjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EACF,kEAAkE;iBACrE;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC;YACtC,SAAS;YACT,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,MAAiE;YACzE,KAAK,EAAE,KAAK,KAAK,IAAI;YACrB,IAAI;YACJ,aAAa;YACb,OAAO;YACP,kBAAkB;YAClB,KAAK,EAAE,KAA+D;SACvE,CAAC,CAAC;QAEH,kDAAkD;QAClD,MAAM,YAAY,GAAG,CAAC,CAAqE,EAAE,GAAY,EAAU,EAAE;YACnH,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7B,eAAe;gBACf,OAAO,qBAAqB,GAAG,cAAc,CAAC,CAAC,QAAQ,eAAe,CAAC,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,oBAAoB,CAAC,CAAC,SAAS,IAAI,MAAM,oBAAoB,CAAC,CAAC,eAAe,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,iBAAiB,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YACtX,CAAC;YACD,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC7B,OAAO,sBAAsB,GAAG,gBAAgB,CAAC,CAAC,UAAU,cAAc,CAAC,CAAC,SAAS,CAAC,MAAM,oBAAoB,CAAC,CAAC,eAAe,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;YAClO,CAAC;YACD,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,eAAe,GAAG,oBAAoB,CAAC,CAAC,UAAU,eAAe,CAAC,CAAC,UAAU,EAAE,CAAC;YACzF,CAAC;YACD,OAAO,eAAe,GAAG,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,UAAU,oBAAoB,CAAC,CAAC,eAAe,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC;QACxJ,CAAC,CAAC;QAEF,IAAI,OAAe,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBACzF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,YAAY,CAAC,MAAM,EACjB,6BAA6B,EAC7B,g4BAAg4B,EACh4B;IACE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;IACtE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC1E,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,6DAA6D,CAAC;IAC1E,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;SACvB,QAAQ,EAAE;SACV,QAAQ,CAAC,qHAAqH,CAAC;IAClI,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAClE,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CACpD,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;IACxE,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,6BAA6B,CAAC,CAAC;IACtE,MAAM,cAAc,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;IACjD,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E;IAC1E,qBAAqB;IACrB,IAAI,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;QACvD,sEAAsE;QACtE,4CAA4C;QAC5C,EAAE;QACF,yEAAyE;QACzE,wEAAwE;QACxE,sEAAsE;QACtE,sEAAsE;QACtE,sEAAsE;QACtE,wEAAwE;QACxE,yEAAyE;QACzE,0EAA0E;QAC1E,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kDAAkD,KAAK,IAAI,UAAU,GAAG;YACtE,aAAa,OAAO,CAAC,SAAS,CAAC,WAAW,OAAO,CAAC,cAAc,CAAC,GAAG;YACpE,iBAAiB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAC9C,CAAC;QACF,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,SAAS,EAAE,IAAI;wBACf,SAAS,EAAE,EAAE;wBACb,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,qCAAqC;qBAC7C,CAAC;iBACH;aACF;SACF,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAAC;YAC7C,SAAS;YACT,6DAA6D;YAC7D,MAAM,EAAE,cAAc,IAAI,EAAE;YAC5B,KAAK,EAAE;gBACL,MAAM,EAAE,MAAqD;gBAC7D,KAAK;gBACL,MAAM,EAAE,MAAsC;gBAC9C,QAAQ;gBACR,KAAK,EAAE,KAA+D;aACvE;YACD,WAAW;SACZ,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;aACxD;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,uEAAuE;QACvE,6CAA6C;QAC7C,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,IAAI,CAAC,CAAC;QAClE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,SAAS,EAAE,IAAI;wBACf,SAAS,EAAE,EAAE;wBACb,MAAM,EAAE,OAAO;wBACf,KAAK,EAAE,OAAO;qBACf,CAAC;iBACH;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,YAAY,CAAC,MAAM,EACjB,uBAAuB,EACvB,wbAAwb,EACxb;IACE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACrE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,qJAAqJ,CAAC;IAClK,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IAClF,KAAK,EAAE,MAAM;CACd,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE;IAClF,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,uBAAuB,CAAC,CAAC;IAChE,MAAM,cAAc,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;IACjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,mEAAmE;iBAC1E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;YACvC,SAAS;YACT,MAAM,EAAE,cAAc;YACtB,MAAM,EAAE,MAAqD;YAC7D,YAAY;YACZ,UAAU;YACV,MAAM;YACN,KAAK,EAAE,KAA+D;YACtE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;SAC1B,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,iCAAiC,MAAM,CAAC,MAAM,WAAW,MAAM,YAAY,MAAM,CAAC,MAAM,gBAAgB,MAAM,CAAC,UAAU,EAAE;iBAClI;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBAC1F;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,YAAY,CAAC,MAAM,EACjB,2BAA2B,EAC3B,0hBAA0hB,EAC1hB;IACE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,wLAAwL,CAAC;IAC7N,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;IACvE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;CAClG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE;IACrC,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,2BAA2B,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,MAAM,IAAI,aAAa,EAAE,CAAC;IACjD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,uEAAuE;iBAC9E;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,sBAAsB,CAAC;YAC1C,KAAK;YACL,SAAS;YACT,MAAM,EAAE,cAAc;YACtB,SAAS;SACV,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4CAA4C,MAAM,CAAC,aAAa,iBAAiB,MAAM,CAAC,YAAY,cAAc,MAAM,CAAC,SAAS,IAAI,SAAS,EAAE;iBACxJ;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,qCAAqC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;iBAC9F;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,WAAW,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,0DAA0D;AAC1D,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|