@rubytech/create-maxy-code 0.1.615 → 0.1.616
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/package.json +1 -1
- package/payload/platform/lib/aeo-llms-txt-writer/dist/__tests__/write-llms-txt.test.d.ts +2 -0
- package/payload/platform/lib/aeo-llms-txt-writer/dist/__tests__/write-llms-txt.test.d.ts.map +1 -0
- package/payload/platform/lib/aeo-llms-txt-writer/dist/__tests__/write-llms-txt.test.js +291 -0
- package/payload/platform/lib/aeo-llms-txt-writer/dist/__tests__/write-llms-txt.test.js.map +1 -0
- package/payload/platform/lib/aeo-llms-txt-writer/dist/index.d.ts +13 -1
- package/payload/platform/lib/aeo-llms-txt-writer/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/aeo-llms-txt-writer/dist/index.js +127 -18
- package/payload/platform/lib/aeo-llms-txt-writer/dist/index.js.map +1 -1
- package/payload/platform/lib/aeo-llms-txt-writer/src/__tests__/write-llms-txt.test.ts +391 -0
- package/payload/platform/lib/aeo-llms-txt-writer/src/index.ts +156 -19
- package/payload/platform/lib/aeo-llms-txt-writer/vitest.config.ts +10 -0
- package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts +15 -1
- package/payload/platform/lib/mcp-spawn-tee/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/mcp-spawn-tee/dist/index.js +129 -7
- package/payload/platform/lib/mcp-spawn-tee/dist/index.js.map +1 -1
- package/payload/platform/lib/mcp-spawn-tee/src/__tests__/spawn-tee.test.ts +227 -0
- package/payload/platform/lib/mcp-spawn-tee/src/index.ts +133 -6
- package/payload/platform/plugins/admin/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/admin/mcp/dist/index.js +11 -3
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/publish-site.d.ts +3 -0
- package/payload/platform/plugins/admin/mcp/dist/tools/publish-site.d.ts.map +1 -1
- package/payload/platform/plugins/admin/mcp/dist/tools/publish-site.js +38 -20
- package/payload/platform/plugins/admin/mcp/dist/tools/publish-site.js.map +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +6 -5
- package/payload/platform/plugins/admin/skills/publish-site/SKILL.md +3 -0
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +8 -0
- package/payload/platform/plugins/aeo/PLUGIN.md +1 -1
- package/payload/platform/plugins/aeo/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/aeo/mcp/dist/index.js +17 -10
- package/payload/platform/plugins/aeo/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/browser/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/connector/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/contacts/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/dispatch/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/docs/references/aeo.md +4 -3
- package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
- package/payload/platform/plugins/email/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/filesystem/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/google/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/graph-viewer/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/inventory/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/ledger/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/memory/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/outlook/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/quickbooks/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/replicate/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/scheduling/PLUGIN.md +3 -4
- package/payload/platform/plugins/scheduling/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/scheduling/mcp/dist/index.js +0 -6
- package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js +65 -20
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-audits.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-classification.test.js +20 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/__tests__/gate-classification.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts +12 -4
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/gate.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js +39 -6
- package/payload/platform/plugins/scheduling/mcp/dist/lib/schedule-audit.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js +21 -6
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/gate-dispatch-wiring.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +26 -5
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-waiver.test.js +17 -51
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-waiver.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js +6 -4
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/schedule-gate-write.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js +113 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts +8 -18
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +14 -27
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js +125 -56
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js.map +1 -1
- package/payload/platform/plugins/storage-broker/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/telegram/PLUGIN.md +2 -2
- package/payload/platform/plugins/telegram/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/webhook-register.test.js +12 -5
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/webhook-register.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/webhook-register.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/webhook-register.js +14 -6
- package/payload/platform/plugins/telegram/mcp/dist/tools/webhook-register.js.map +1 -1
- package/payload/platform/plugins/telegram/skills/configure/SKILL.md +1 -1
- package/payload/platform/plugins/url-get/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/voice-mirror/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/whatsapp/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/work/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/plugins/workflows/lib/mcp-spawn-tee/index.js +129 -7
- package/payload/platform/services/claude-session-manager/dist/index.js +17 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/mcp-helper-census.d.ts +80 -0
- package/payload/platform/services/claude-session-manager/dist/mcp-helper-census.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/mcp-helper-census.js +201 -0
- package/payload/platform/services/claude-session-manager/dist/mcp-helper-census.js.map +1 -0
- package/payload/server/public/operator.html +1 -1
- package/payload/server/server.js +10 -2
|
@@ -6,6 +6,7 @@ export interface PublishSiteInput {
|
|
|
6
6
|
source: string;
|
|
7
7
|
slug: string;
|
|
8
8
|
siteName?: string;
|
|
9
|
+
siteOrigin?: string;
|
|
9
10
|
siteDescription?: string;
|
|
10
11
|
}
|
|
11
12
|
export interface PublishSiteDeps {
|
|
@@ -21,6 +22,8 @@ export type PublishSiteResult = {
|
|
|
21
22
|
ok: true;
|
|
22
23
|
indexPath: string;
|
|
23
24
|
indexBytes: number;
|
|
25
|
+
fullPath: string | null;
|
|
26
|
+
fullRefusedReason: string | null;
|
|
24
27
|
} | {
|
|
25
28
|
ok: false;
|
|
26
29
|
reason: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-site.d.ts","sourceRoot":"","sources":["../../src/tools/publish-site.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"publish-site.d.ts","sourceRoot":"","sources":["../../src/tools/publish-site.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAiC5C,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,sBAAsB,GACtB,mBAAmB,GACnB,WAAW,GACX,gBAAgB,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EACC;QACE,EAAE,EAAE,IAAI,CAAC;QACT,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,GACD;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACnC,GACD;IACE,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,kBAAkB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAkEN,wBAAsB,WAAW,CAC/B,KAAK,EAAE,gBAAgB,EACvB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,iBAAiB,CAAC,CA4I5B"}
|
|
@@ -17,8 +17,11 @@ import { writeLlmsTxt } from "../../../../../lib/aeo-llms-txt-writer/dist/index.
|
|
|
17
17
|
* Post-move:
|
|
18
18
|
* - canonical path is `/sites/<slug>/` if index.html at top level,
|
|
19
19
|
* otherwise `/sites/<slug>/<the-one-html>.html`
|
|
20
|
-
* - llms.txt + llms-full.txt are refreshed via writeLlmsTxt
|
|
21
|
-
* (best-effort: failure does not unwind the
|
|
20
|
+
* - llms.txt + llms-full.txt are refreshed via writeLlmsTxt when
|
|
21
|
+
* siteOrigin is supplied (best-effort: failure does not unwind the
|
|
22
|
+
* mv); without it the refresh is skipped, because this account
|
|
23
|
+
* publishes many sites and the writer cannot tell them apart
|
|
24
|
+
* without an origin
|
|
22
25
|
*
|
|
23
26
|
* All operator-visible log lines preserved verbatim from the prior
|
|
24
27
|
* skill-prose contract so existing grep targets keep working.
|
|
@@ -143,26 +146,41 @@ export async function publishSite(input, deps) {
|
|
|
143
146
|
// Post-move hook: refresh llms.txt at the site root. Best-effort.
|
|
144
147
|
// Never unwinds the mv — a stale llms.txt is strictly less bad than
|
|
145
148
|
// a failed publish.
|
|
149
|
+
//
|
|
150
|
+
// Without siteOrigin there is no way to tell this site's pages from any
|
|
151
|
+
// other site's in the same account, so the refresh is skipped entirely
|
|
152
|
+
// rather than writing an account-wide file over a good one.
|
|
146
153
|
let aeo;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
siteName: slugCheck.segments[slugCheck.segments.length - 1],
|
|
151
|
-
siteDir: destination,
|
|
152
|
-
siteDescription: input.siteDescription,
|
|
153
|
-
}, { getSession: deps.getSession });
|
|
154
|
-
const indexPath = llms.writtenPaths?.index ?? "";
|
|
155
|
-
aeo = {
|
|
156
|
-
ok: true,
|
|
157
|
-
indexPath,
|
|
158
|
-
indexBytes: llms.sizeBytes.index,
|
|
159
|
-
};
|
|
160
|
-
process.stderr.write(`${TAG} aeo-llms-txt-ok wrote=${indexPath} indexBytes=${llms.sizeBytes.index}\n`);
|
|
154
|
+
if (!input.siteOrigin) {
|
|
155
|
+
aeo = { ok: false, reason: "no-site-origin" };
|
|
156
|
+
process.stderr.write(`${TAG} llms skipped reason=no-site-origin\n`);
|
|
161
157
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
else {
|
|
159
|
+
try {
|
|
160
|
+
const llms = await writeLlmsTxt({
|
|
161
|
+
accountId,
|
|
162
|
+
siteName: input.siteName ??
|
|
163
|
+
slugCheck.segments[slugCheck.segments.length - 1],
|
|
164
|
+
siteOrigin: input.siteOrigin,
|
|
165
|
+
siteDir: destination,
|
|
166
|
+
siteDescription: input.siteDescription,
|
|
167
|
+
}, { getSession: deps.getSession });
|
|
168
|
+
const indexPath = llms.writtenPaths?.index ?? "";
|
|
169
|
+
const fullPath = llms.writtenPaths?.full ?? null;
|
|
170
|
+
aeo = {
|
|
171
|
+
ok: true,
|
|
172
|
+
indexPath,
|
|
173
|
+
indexBytes: llms.sizeBytes.index,
|
|
174
|
+
fullPath,
|
|
175
|
+
fullRefusedReason: llms.fullRefusedReason,
|
|
176
|
+
};
|
|
177
|
+
process.stderr.write(`${TAG} aeo-llms-txt-ok wrote=${indexPath} indexBytes=${llms.sizeBytes.index} full=${fullPath ?? `refused:${llms.fullRefusedReason}`}\n`);
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
181
|
+
aeo = { ok: false, reason };
|
|
182
|
+
process.stderr.write(`${TAG} aeo-llms-txt-failed reason=${reason}\n`);
|
|
183
|
+
}
|
|
166
184
|
}
|
|
167
185
|
return {
|
|
168
186
|
ok: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-site.js","sourceRoot":"","sources":["../../src/tools/publish-site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,sDAAsD,CAAC;AAEpF
|
|
1
|
+
{"version":3,"file":"publish-site.js","sourceRoot":"","sources":["../../src/tools/publish-site.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: platform-architecture
|
|
3
3
|
description: Use when grounding any documented-surface claim about what Maxy ships — plugins, skills, specialists, install/deploy flows, internals. This is the install catalogue, not evidence of what is enabled on the current account. For install state on this account, call `capabilities-here`; for documented surface, cite the `Source:` URL inline.
|
|
4
|
-
content-hash: sha256:
|
|
4
|
+
content-hash: sha256:221f1bd4dab48f3d8432cdb0cae40b7446df45f16c7dc97f42612a0ae1773597
|
|
5
5
|
brand: maxy-code
|
|
6
6
|
product-name: Maxy
|
|
7
7
|
---
|
|
@@ -424,7 +424,7 @@ There is no per-account purchase record; the brand decides the shipping set.
|
|
|
424
424
|
| Plugin | Type | What it does | Public agent |
|
|
425
425
|
|--------|------|-------------|-------------|
|
|
426
426
|
| `teaching` | Skills | Interactive tutoring, lesson planning, and study pack generation from your knowledge base | Yes — all 3 skills serve students and parents |
|
|
427
|
-
| `real-agent` | Bundle (13 sub-plugins) | UK estate agency skills — sales, listings, vendor management, buyer management, lead generation, coaching, business operations, teaching, Loop CRM (five value pillars: auto-respond, viewing lifecycle, pipeline mining, listings prospecting, maintenance & preferences), PropertyData market analytics (valuation, sold prices, £/sqft baselines, £/sqft growth, demand-rent, area risk, planning precedent, UPRN matching, property-type distribution), gov.uk EPC floor-area lookup, property brochures, social-share image cards, A4 market reports, and single-address preval packs (full UK address → 4-page A4 PDF covering valuation, area, and demand). 3 specialist roles (negotiator, valuer, compliance) | 4 sub-plugins (estate-sales, buyers, estate-coaching, estate-teaching) |
|
|
427
|
+
| `real-agent` | Bundle (13 sub-plugins) | UK estate agency skills — sales, listings, vendor management, buyer management, lead generation, coaching, business operations, teaching, Loop CRM (five value pillars: auto-respond, viewing lifecycle, pipeline mining, listings prospecting, maintenance & preferences; every read states which Loop API version it reached and can return the raw field set received from Loop, so a figure of zero is never mistaken for one nobody entered), PropertyData market analytics (valuation, sold prices, £/sqft baselines, £/sqft growth, demand-rent, area risk, planning precedent, UPRN matching, property-type distribution), gov.uk EPC floor-area lookup, property brochures, social-share image cards, A4 market reports, and single-address preval packs (full UK address → 4-page A4 PDF covering valuation, area, and demand). 3 specialist roles (negotiator, valuer, compliance) | 4 sub-plugins (estate-sales, buyers, estate-coaching, estate-teaching) |
|
|
428
428
|
| `writer-craft` | Skills + Agent | Manuscript review and writing craft — story architecture, reader engagement, prose craft, editorial practice, and multi-level review | No — writing craft serves the author |
|
|
429
429
|
| `venture-studio` | Skills + Agent | Founding-a-business workflow — office-hours discovery, brand pack, zero-to-prototype validation, the full investor data room (business plan, prospectus, term sheet, deck blueprint, A4 print pipeline), and a `legal-essentials` skill that drafts an NDA and a UK-GDPR/PECR privacy policy. Carries citation-routed method references for market sizing (TAM/SAM/SOM), pricing, monetization, competitor analysis, battlecards, strategy frameworks (SWOT/PESTLE/Porter's/Ansoff), and a pre-fundraise strategy red-team. Pre-seeds a `Project` with one `Task` per artefact so nothing gets forgotten. | No — founder-facing only |
|
|
430
430
|
| `management-consulting` | Skills | 21 MBB-style strategy skills for client engagements — situation assessment, growth-barrier and assumption diagnosis, market mapping, competitive intel, segmentation, profit-pool analysis, strategic options, pricing, business cases, portfolio review, operating-model design, initiative prioritization, transformation roadmaps, war-gaming, risk registers, KPI design, value realization, stakeholder alignment, executive narrative, and decision memos. No MCP server. | No — consultant-facing only |
|
|
@@ -3925,7 +3925,7 @@ Returns the parsed JSON-LD object and a ready-to-inline script block string. Inl
|
|
|
3925
3925
|
|
|
3926
3926
|
### `aeo-write-llms-txt`
|
|
3927
3927
|
|
|
3928
|
-
Generates the `llms.txt` / `llms-full.txt` pair for
|
|
3928
|
+
Generates the `llms.txt` / `llms-full.txt` pair for one site. Pass `siteOrigin` (e.g. `https://maxy.institute`); source is every `KnowledgeDocument` for the account whose `url` starts with it. `llms-full.txt` carries each page's prose from its `:Section` chain, in reading order. Returns both files as strings, plus counts of pages skipped for having no URL, pages skipped as belonging to another site, and pages that carried no full text. If no page carried full text, `llms.txt` is written and `llms-full.txt` is refused rather than filled with the index's own summaries.
|
|
3929
3929
|
|
|
3930
3930
|
Wire the output to your site host. Convention: `/llms.txt` (index) and `/llms-full.txt` (concatenated content), served as `text/plain`. Format follows the current draft at `https://llmstxt.org/`.
|
|
3931
3931
|
|
|
@@ -3972,7 +3972,9 @@ Pass `persist: true` plus `targetKnowledgeDocumentId` to write the result as an
|
|
|
3972
3972
|
Every tool emits a single log line per invocation:
|
|
3973
3973
|
|
|
3974
3974
|
- `[aeo-emit-jsonld] entityId=… schemaType=… source=graph|inline`
|
|
3975
|
-
- `[aeo-llms-txt] site=… pages=… skippedNoUrl=… indexBytes=… fullBytes=…`
|
|
3975
|
+
- `[aeo-llms-txt] site=… origin=… pages=… skippedNoUrl=… skippedOtherSite=… pagesWithFullText=… pagesWithoutFullText=… sections=… indexBytes=… fullBytes=…`
|
|
3976
|
+
- `[aeo-llms-txt] WARN op=full-text-missing pages=… shown=… urls=[…]` — pages that reached the file with only a summary behind them.
|
|
3977
|
+
- `[aeo-llms-txt] refuse op=write-full reason=no-full-text-any-page site=…` — `llms-full.txt` was left untouched.
|
|
3976
3978
|
- `[aeo-audit] target=… score=… fails=… warns=…`
|
|
3977
3979
|
|
|
3978
3980
|
Diagnostic path: `grep -E '^\[aeo-' platform-logs/*.log | grep <urlOrEntityId>`.
|
|
@@ -3981,7 +3983,6 @@ Diagnostic path: `grep -E '^\[aeo-' platform-logs/*.log | grep <urlOrEntityId>`.
|
|
|
3981
3983
|
|
|
3982
3984
|
- **No citation monitor — out of scope.** Tracking whether your brand is cited by Claude / ChatGPT / Perplexity / Gemini would require multi-engine answer harvesting that doesn't fit maxy-code's no-API-key architecture. Archived without sprinting. Check citation manually when needed.
|
|
3983
3985
|
- **No auto-emission on page render.** `aeo-emit-jsonld` is callable on demand. Wiring it into the platform's page-generator render path is per-renderer work, filed as a follow-up.
|
|
3984
|
-
- **No publish-hook regeneration of `llms.txt`.** The tool runs on demand. Hooking it into the publish event is a follow-up.
|
|
3985
3986
|
|
|
3986
3987
|
## See also
|
|
3987
3988
|
|
|
@@ -25,9 +25,12 @@ mcp__plugin_admin_admin__publish-site
|
|
|
25
25
|
source: <absolute path to the extracted source directory>
|
|
26
26
|
slug: <operator-supplied or operator-confirmed path under sites/>
|
|
27
27
|
siteName?: <optional llms.txt header; defaults to the last slug segment>
|
|
28
|
+
siteOrigin?: <the public origin this site is served from, e.g. https://maxy.institute>
|
|
28
29
|
siteDescription?: <optional one-line blockquote under the llms.txt header>
|
|
29
30
|
```
|
|
30
31
|
|
|
32
|
+
`siteOrigin` is what lets the tool tell this site's pages from the other sites in the account. Supply it whenever the operator has named the domain; without it the publish still succeeds and the `aeo:` line reads `failed reason=no-site-origin`, meaning the llms.txt pair was left alone.
|
|
33
|
+
|
|
31
34
|
Confirm the slug with the operator before calling if it isn't already explicit in the conversation.
|
|
32
35
|
|
|
33
36
|
## Surface the result
|
|
@@ -9,6 +9,14 @@ Invoked by the admin agent directly.
|
|
|
9
9
|
|
|
10
10
|
This is the platform's release timeline, newest first. Each entry shows the date it shipped and the version it shipped in, so you can tell the operator how current their install is. To compare, read the installed version from `capabilities-here` and match it against the versions below. Keep answers high level and in plain English; this is a summary, not a full commit log.
|
|
11
11
|
|
|
12
|
+
## 2026-08-18 (0.1.616)
|
|
13
|
+
|
|
14
|
+
- One misbehaving plugin no longer takes the rest of its tools down for the whole conversation. A plugin that died took its entire tool surface with it until the session ended, with nothing recording why it went; a fatal on a live connection is now survived, every one is recorded with its stack, and a standing check names a plugin that has gone dark.
|
|
15
|
+
- A routine whose work-check cannot be read no longer wakes the assistant anyway. It now refuses the run, a check names every routine whose check is missing or unreadable, and a new recurring routine cannot be created without one.
|
|
16
|
+
- A Telegram bot that is not allowed to join groups can be registered again. Registration was refusing every such bot, including the roles that are forbidden from groups by design.
|
|
17
|
+
- The property-search reads now return every field the service sent, rather than a trimmed subset, and each one names the version of the service it read from. A zero charge is reported as zero rather than as nothing.
|
|
18
|
+
- The machine-readable site files no longer carry summaries in place of full text, or list pages belonging to a different site.
|
|
19
|
+
|
|
12
20
|
## 2026-08-17 (0.1.615)
|
|
13
21
|
|
|
14
22
|
- An install that shows the browser on a connected screen now runs the right browser, and brings it back when it stops. One setting is the authority for which mode is in use, and both modes are supervised.
|
|
@@ -42,7 +42,7 @@ This plugin makes the platform's content legible to answer engines — Claude, C
|
|
|
42
42
|
|
|
43
43
|
1. **JSON-LD** (`aeo-emit-jsonld`). Every typed graph entity that backs a page can be projected to a `<script type="application/ld+json">` block. The mapper covers `Organization`, `LocalBusiness`, `Person`, `Service`, `Product`, `Article`, `FAQPage`, `RealEstateListing`, `Event`. Other labels fall through to `schema:Thing` and are flagged as a doc gap.
|
|
44
44
|
|
|
45
|
-
2. **llms.txt** (`aeo-write-llms-txt`). The site emits `/llms.txt` (index of pages, one link per line) and `/llms-full.txt` (
|
|
45
|
+
2. **llms.txt** (`aeo-write-llms-txt`). The site emits `/llms.txt` (index of pages, one link per line) and `/llms-full.txt` (each page's prose in reading order). Format follows the current draft at `https://llmstxt.org/`. Source is `KnowledgeDocument` nodes whose `url` starts with the required `siteOrigin` — an account publishes several sites and only the URL tells them apart, so the origin is an input and is never inferred. A page's prose comes from its `(:KnowledgeDocument)-[:HAS_SECTION]->(:Section)` chain in `position` order; a page with no sections falls back to its own `body`, and a page with neither contributes title, source and summary only and is counted in `pagesWithoutFullText`. Pages without a `url` or `title` are skipped and counted in `skippedNoUrl`; pages belonging to another site are counted in `skippedOtherSite`. Called with `siteDir` (an absolute path to an existing site root), the tool writes both files to disk and the response carries `writtenPaths`; called without it, the tool returns the file bodies inline for on-demand callers. If no page in the run carries full text, `llms.txt` is written and `llms-full.txt` is refused, because replacing real prose with the index's own summaries is worse than leaving the file stale. The publish-site tool calls this with `siteDir` set to the freshly-published `<accountDir>/sites/<slug>/` whenever the caller supplied `siteOrigin`.
|
|
46
46
|
|
|
47
47
|
3. **Audit** (`aeo-audit-page`). Run the eight-heuristic scorecard against a URL or raw HTML. Each heuristic returns pass / warn / fail with one rewrite suggestion per fail. Score is `100 * (passes + 0.5 * warns) / 8`. Pass `persist: true` with a `targetKnowledgeDocumentId` to record an `:AEOAudit` node linked back to the document.
|
|
48
48
|
|
|
@@ -25,10 +25,13 @@
|
|
|
25
25
|
* - `server.log` via the loopback log-ingest route — best-effort mirror of
|
|
26
26
|
* the [mcp-helper] lifecycle lines.
|
|
27
27
|
*
|
|
28
|
-
* Lifecycle lines, correlation key `session=<id8> server=<name
|
|
28
|
+
* Lifecycle lines, correlation key `session=<id8> server=<name>`:
|
|
29
29
|
* [mcp-helper] op=spawn ... pid= entry=
|
|
30
30
|
* [mcp-helper] op=boot ... head=<first stderr bytes>
|
|
31
31
|
* [mcp-helper] op=exit ... code= signal= lifetimeMs= stderr-tail=
|
|
32
|
+
* [mcp-helper] op=fatal ... kind=uncaught|rejection deferred=yes|no
|
|
33
|
+
* disposition=survived|exit error=
|
|
34
|
+
* preceded by an `op=fatal-stack` block carrying the full stack (Task 2787).
|
|
32
35
|
*
|
|
33
36
|
* Process model (Task 989): the shim IS the server's process. op=exit fires
|
|
34
37
|
* from process.on("exit"), so it covers a normal exit, a non-zero exit, an
|
|
@@ -37,6 +40,17 @@
|
|
|
37
40
|
* and leaves no op=exit line — the per-session stderr tail already on disk and
|
|
38
41
|
* Claude Code's own transport-drop are the evidence for that death mode.
|
|
39
42
|
*
|
|
43
|
+
* op=exit records THAT a fatal killed the process; it never records WHICH one,
|
|
44
|
+
* because Node's fatal printer writes beneath the tee (Task 2787). The op=fatal
|
|
45
|
+
* pair is what names the error.
|
|
46
|
+
*
|
|
47
|
+
* Task 2788 — a fatal no longer always kills. `disposition=` says what the guard
|
|
48
|
+
* did: the shim exits 1 only when it is the sole listener for the event AND no
|
|
49
|
+
* stdio transport is connected. A fatal on a connected transport is recorded
|
|
50
|
+
* and survived, because Claude Code's policy after a helper dies is one
|
|
51
|
+
* reconnect then stop, so killing a live server removes its whole tool surface
|
|
52
|
+
* for the rest of the session.
|
|
53
|
+
*
|
|
40
54
|
* The shim never writes to fd 1 (stdout) — that is the JSON-RPC channel.
|
|
41
55
|
*/
|
|
42
56
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -114,14 +128,22 @@ function postToServerLog(suffix, level) {
|
|
|
114
128
|
// Claude Code visibility, never re-teed), and a best-effort server.log mirror.
|
|
115
129
|
// `suffix` is the line body after the tag and carries no newline (the
|
|
116
130
|
// log-ingest route rejects newlines).
|
|
117
|
-
|
|
131
|
+
//
|
|
132
|
+
// Task 2787 — `mirror` is false for op=exit and op=fatal. Both fire while the
|
|
133
|
+
// loop is stopping, so the async fetch cannot flush: server.log held 2 op=exit
|
|
134
|
+
// lines against 160 op=spawn and 135 op=boot. The sync raw sink is the
|
|
135
|
+
// authoritative carrier for those two; posting them was a near-total loss
|
|
136
|
+
// dressed as a mirror. op=spawn/op=boot/op=error keep it — they fire while the
|
|
137
|
+
// loop is live and land.
|
|
138
|
+
function emitLifecycle(suffix, level, mirror = true) {
|
|
118
139
|
const line = `[mcp-helper] ${suffix}\n`;
|
|
119
140
|
appendSafe(rawSinkPath, line);
|
|
120
141
|
try {
|
|
121
142
|
rawStderrWrite(line);
|
|
122
143
|
}
|
|
123
144
|
catch { /* stderr closed */ }
|
|
124
|
-
|
|
145
|
+
if (mirror)
|
|
146
|
+
postToServerLog(suffix, level);
|
|
125
147
|
}
|
|
126
148
|
if (!ENTRY) {
|
|
127
149
|
emitLifecycle(`op=error session=${SESSION_ID8} server=${SERVER_NAME} reason="no entry given (argv[2] missing)"`, "error");
|
|
@@ -165,6 +187,97 @@ function onSignal(sig, code) {
|
|
|
165
187
|
process.on("SIGTERM", onSignal("SIGTERM", 143));
|
|
166
188
|
process.on("SIGINT", onSignal("SIGINT", 130));
|
|
167
189
|
process.on("SIGHUP", onSignal("SIGHUP", 129));
|
|
190
|
+
// Task 2787 — the fatal guard. Three measured facts drove it here rather than
|
|
191
|
+
// into the 26 plugin entries: Node's default fatal printer writes to fd 2
|
|
192
|
+
// BENEATH the JS `process.stderr.write` the tee replaces, so on both 18 Aug
|
|
193
|
+
// deaths the stack reached neither the raw sink nor Claude Code's own
|
|
194
|
+
// `Server stderr:` capture; the shim is the single seam every entry already
|
|
195
|
+
// loads through; and 26 copies would have to stay in step for ever.
|
|
196
|
+
//
|
|
197
|
+
// The stack is written through appendSafe and rawStderrWrite directly, never
|
|
198
|
+
// through teeWrite — the tee is the thing that was blind to it.
|
|
199
|
+
/** The three fields a fatal contributes. A rejection reason need not be an
|
|
200
|
+
* Error, in which case there is no stack and the stringified reason stands in
|
|
201
|
+
* for all three. */
|
|
202
|
+
function describeFatal(err) {
|
|
203
|
+
if (err instanceof Error) {
|
|
204
|
+
return { name: err.name, message: err.message, stack: err.stack ?? `${err.name}: ${err.message}` };
|
|
205
|
+
}
|
|
206
|
+
const s = String(err);
|
|
207
|
+
return { name: typeof err, message: s, stack: s };
|
|
208
|
+
}
|
|
209
|
+
/** Write a fatal's full stack as its own block, before the lifecycle line that
|
|
210
|
+
* summarises it. Multi-line by nature, which is why it is not a field on that
|
|
211
|
+
* line. Goes through appendSafe and the RAW writer — never teeWrite, which is
|
|
212
|
+
* the thing Node's own fatal printer writes beneath. */
|
|
213
|
+
function writeFatalStack(kind, stack) {
|
|
214
|
+
const block = `[mcp-helper] op=fatal-stack session=${SESSION_ID8} server=${SERVER_NAME} kind=${kind}\n${stack}\n`;
|
|
215
|
+
appendSafe(rawSinkPath, block);
|
|
216
|
+
try {
|
|
217
|
+
rawStderrWrite(block);
|
|
218
|
+
}
|
|
219
|
+
catch { /* stderr closed */ }
|
|
220
|
+
}
|
|
221
|
+
/** Task 2788 — has a stdio transport connected in this process?
|
|
222
|
+
*
|
|
223
|
+
* `server.connect(transport)` calls `StdioServerTransport.start()`, whose body
|
|
224
|
+
* is `this._stdin.on("data", …)`. So a stdin `data` listener exists if and only
|
|
225
|
+
* if a stdio transport has started, and `close()` removes it again — a fatal
|
|
226
|
+
* after the transport closed correctly reads as not connected.
|
|
227
|
+
*
|
|
228
|
+
* Read at the moment of the fatal rather than latched at first connect, so a
|
|
229
|
+
* transport that has since closed is not remembered as live. Nothing is
|
|
230
|
+
* patched: all 26 plugin entries construct a StdioServerTransport and none
|
|
231
|
+
* reads stdin itself, so this listener has exactly one source. The three
|
|
232
|
+
* channel services carry no stdio transport, so every fatal in them still
|
|
233
|
+
* exits — unchanged from before this task. */
|
|
234
|
+
function transportConnected() {
|
|
235
|
+
return process.stdin.listenerCount("data") > 0;
|
|
236
|
+
}
|
|
237
|
+
// Task 2788 — the disposition. `disposition=` names what THIS guard did with
|
|
238
|
+
// the process: `exit` means it called process.exit(1); `survived` means it
|
|
239
|
+
// returned and left the process running.
|
|
240
|
+
//
|
|
241
|
+
// Claude Code owns the spawn (Task 706: no ChildProcess handle; Task 989: the
|
|
242
|
+
// shim IS the server process) and its post-failure policy is one reconnect then
|
|
243
|
+
// stop — measured on 18 Aug, when the retry died the same way 2.6s in and the
|
|
244
|
+
// CLI never spawned again, leaving that session with `No such tool available`
|
|
245
|
+
// for the rest of its life. Nothing in this tree can change that policy, so not
|
|
246
|
+
// dying is the only mechanism available.
|
|
247
|
+
//
|
|
248
|
+
// The boundary is the connect, not a time window, because that is the fact that
|
|
249
|
+
// separates "a live server hit a bad request" from "this server never came up".
|
|
250
|
+
// Masking the second as the first would replace a visible outage with a silent
|
|
251
|
+
// one.
|
|
252
|
+
//
|
|
253
|
+
// * another listener present -> record and STAND DOWN, exactly as before. The
|
|
254
|
+
// email plugin installs its own pair (plugins/email/mcp/src/lib/setup-probe.ts)
|
|
255
|
+
// and deliberately survives errors it attributes to imapflow/nodemailer.
|
|
256
|
+
// The guard does not exit, so disposition=survived; if that handler then
|
|
257
|
+
// exits, the op=exit line that follows is the death record, and the census
|
|
258
|
+
// reads it as dark on its own terms.
|
|
259
|
+
// * sole listener, transport connected -> record and keep serving.
|
|
260
|
+
// * sole listener, no transport -> exit 1, which is Node's own default for an
|
|
261
|
+
// uncaught throw and (Node >= 15) for an unhandled rejection.
|
|
262
|
+
//
|
|
263
|
+
// The stack is written either way: surviving must not cost the diagnosis, which
|
|
264
|
+
// is what Task 2787 exists to preserve.
|
|
265
|
+
function onFatal(event, kind) {
|
|
266
|
+
return (err) => {
|
|
267
|
+
const sole = process.listenerCount(event) === 1;
|
|
268
|
+
const exiting = sole && !transportConnected();
|
|
269
|
+
const d = describeFatal(err);
|
|
270
|
+
// The stack first, so it is on disk before anything else can fail.
|
|
271
|
+
writeFatalStack(kind, d.stack);
|
|
272
|
+
emitLifecycle(`op=fatal session=${SESSION_ID8} server=${SERVER_NAME} kind=${kind} ` +
|
|
273
|
+
`deferred=${sole ? "no" : "yes"} disposition=${exiting ? "exit" : "survived"} ` +
|
|
274
|
+
`error=${JSON.stringify(JSON.stringify({ name: d.name, message: d.message }))}`, "error", false);
|
|
275
|
+
if (exiting)
|
|
276
|
+
process.exit(1);
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
process.on("uncaughtException", onFatal("uncaughtException", "uncaught"));
|
|
280
|
+
process.on("unhandledRejection", onFatal("unhandledRejection", "rejection"));
|
|
168
281
|
// op=exit, emitted once from the process "exit" event. Sync-only — the loop is
|
|
169
282
|
// stopping. When a catchable signal caused the exit, report code=— signal=<sig>
|
|
170
283
|
// to match the prior wrapper's format; otherwise code=<exit code> signal=—.
|
|
@@ -177,7 +290,7 @@ process.on("exit", (code) => {
|
|
|
177
290
|
const codeField = exitSignal ? "—" : String(code);
|
|
178
291
|
const level = exitSignal || code !== 0 ? "error" : "info";
|
|
179
292
|
emitLifecycle(`op=exit session=${SESSION_ID8} server=${SERVER_NAME} pid=${process.pid} ` +
|
|
180
|
-
`code=${codeField} signal=${exitSignal ?? "—"} lifetimeMs=${lifetimeMs} stderr-tail=${JSON.stringify(tail)}`, level);
|
|
293
|
+
`code=${codeField} signal=${exitSignal ?? "—"} lifetimeMs=${lifetimeMs} stderr-tail=${JSON.stringify(tail)}`, level, false);
|
|
181
294
|
});
|
|
182
295
|
emitLifecycle(`op=spawn session=${SESSION_ID8} server=${SERVER_NAME} pid=${process.pid} entry=${ENTRY}`, "info");
|
|
183
296
|
// Task 2356 — present argv as a direct `node <entry>` invocation before the
|
|
@@ -194,11 +307,20 @@ process.argv = [process.argv[0], ENTRY, ...process.argv.slice(3)];
|
|
|
194
307
|
// Run the real MCP server in THIS process. Dynamic import() (not top-level
|
|
195
308
|
// await — this file compiles to CommonJS) loads the ESM entry; a load-time
|
|
196
309
|
// failure mirrors the old child spawn-error path (op=error, exit 127). The
|
|
197
|
-
// op=exit handler is suppressed on this path so op=error stays the sole
|
|
310
|
+
// op=exit handler is suppressed on this path so op=error stays the sole
|
|
311
|
+
// lifecycle record.
|
|
312
|
+
//
|
|
313
|
+
// Task 2787 — this .catch() settles the rejection, so a throw during the
|
|
314
|
+
// entry's module EVALUATION never reaches the uncaughtException guard above.
|
|
315
|
+
// The stack is written here explicitly; without it a boot-time death leaves
|
|
316
|
+
// its message on the op=error line and nothing else — no type, no frames. The
|
|
317
|
+
// op=error line itself is unchanged: `describeFatal().message` is the same
|
|
318
|
+
// value the old inline expression produced.
|
|
198
319
|
import((0, node_url_1.pathToFileURL)(ENTRY).href).catch((err) => {
|
|
199
|
-
const
|
|
320
|
+
const d = describeFatal(err);
|
|
200
321
|
exitEmitted = true;
|
|
201
|
-
|
|
322
|
+
writeFatalStack("import", d.stack);
|
|
323
|
+
emitLifecycle(`op=error session=${SESSION_ID8} server=${SERVER_NAME} reason=${JSON.stringify(`import error: ${d.message}`)}`, "error");
|
|
202
324
|
process.exit(127);
|
|
203
325
|
});
|
|
204
326
|
//# sourceMappingURL=index.js.map
|
|
@@ -75,8 +75,12 @@ eagerTool(server, "aeo-emit-jsonld", "Emit a schema.org JSON-LD block for a type
|
|
|
75
75
|
// ---------------------------------------------------------------------------
|
|
76
76
|
// aeo-write-llms-txt
|
|
77
77
|
// ---------------------------------------------------------------------------
|
|
78
|
-
eagerTool(server, "aeo-write-llms-txt", "Generate /llms.txt and /llms-full.txt for
|
|
78
|
+
eagerTool(server, "aeo-write-llms-txt", "Generate /llms.txt and /llms-full.txt for one site's published KnowledgeDocument pages, selected by siteOrigin. Index lists every page with title, url, summary. Full file concatenates each page's prose from its Section chain in reading order, demoting in-body H1s to H2 to keep one heading hierarchy; a page with no sections falls back to its document body, and pages with neither are reported in pagesWithoutFullText. Pass siteDir (absolute path to an existing site root) to also write the two files to disk; in that mode the response carries writtenPaths and omits the inline file bodies. If no page in the run carries full text, llms.txt is written and llms-full.txt is refused rather than filled with summaries. Used by the publish-site skill to refresh both files on every publish.", {
|
|
79
79
|
siteName: z.string().describe("Display name of the site (top H1 of llms.txt)"),
|
|
80
|
+
siteOrigin: z
|
|
81
|
+
.string()
|
|
82
|
+
.min(1)
|
|
83
|
+
.describe('Absolute http(s) origin of the site, e.g. "https://maxy.institute". Only KnowledgeDocuments whose url starts with this origin are included. Required — an account publishes many sites and an account-wide llms.txt is wrong for all of them.'),
|
|
80
84
|
siteDescription: z
|
|
81
85
|
.string()
|
|
82
86
|
.optional()
|
|
@@ -93,17 +97,20 @@ eagerTool(server, "aeo-write-llms-txt", "Generate /llms.txt and /llms-full.txt f
|
|
|
93
97
|
// When the caller asked us to write to disk, the inline file bodies
|
|
94
98
|
// are redundant (and can run to tens of KB). Omit them from the
|
|
95
99
|
// response so the MCP transport stays small for the publish hook.
|
|
100
|
+
const common = {
|
|
101
|
+
pageCount: result.pageCount,
|
|
102
|
+
skippedNoUrl: result.skippedNoUrl,
|
|
103
|
+
skippedOtherSite: result.skippedOtherSite,
|
|
104
|
+
pagesWithFullText: result.pagesWithFullText,
|
|
105
|
+
pagesWithoutFullText: result.pagesWithoutFullText,
|
|
106
|
+
sectionCount: result.sectionCount,
|
|
107
|
+
fullRefusedReason: result.fullRefusedReason,
|
|
108
|
+
sizeBytes: result.sizeBytes,
|
|
109
|
+
};
|
|
96
110
|
const payload = result.writtenPaths
|
|
97
|
-
? {
|
|
98
|
-
pageCount: result.pageCount,
|
|
99
|
-
skippedNoUrl: result.skippedNoUrl,
|
|
100
|
-
sizeBytes: result.sizeBytes,
|
|
101
|
-
writtenPaths: result.writtenPaths,
|
|
102
|
-
}
|
|
111
|
+
? { ...common, writtenPaths: result.writtenPaths }
|
|
103
112
|
: {
|
|
104
|
-
|
|
105
|
-
skippedNoUrl: result.skippedNoUrl,
|
|
106
|
-
sizeBytes: result.sizeBytes,
|
|
113
|
+
...common,
|
|
107
114
|
llmsTxt: result.llmsTxt,
|
|
108
115
|
llmsFullTxt: result.llmsFullTxt,
|
|
109
116
|
};
|
|
@@ -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":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,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,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,8DAA8D;AAC9D,MAAM,MAAM,GAAQ,IAAI,SAAS,CAAC;IAChC,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,sEAAsE;AACtE,qEAAqE;AACrE,wDAAwD;AACxD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC;AACjD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,SAAS,IAAI,MAAM,IAAI,CAAC,CAAC;AAEtE,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,cAAc,QAAQ,qCAAqC,CAC5D,CAAC;IACF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,GAAG,QAAQ,gKAAgK;aAClL;SACF;QACD,OAAO,EAAE,IAAa;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC;AACtD,yEAAyE;AACzE,wBAAwB;AACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wBAAwB,SAAS,IAAI,GAAG,cAAc,SAAS,IAAI,GAAG,cAAc,SAAS,IAAI,GAAG,IAAI,CACzG,CAAC;AAEF,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,SAAS,CACP,MAAM,EACN,iBAAiB,EACjB,gOAAgO,EAChO;IACE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,oEAAoE,CAAC;IACjF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,UAAU,EAAE,CAAC;SACV,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CAAC,gCAAgC,CAAC;CAC9C,EACD,KAAK,EAAE,IAIN,EAAE,EAAE;IACH,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,iBAAiB,CAAC,CAAC;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;iBACtC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,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,4BAA4B,OAAO,IAAI,CAAC,CAAC;QAC9D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YAC/D,OAAO,EAAE,IAAa;SACvB,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,SAAS,CACP,MAAM,EACN,oBAAoB,EACpB,oxBAAoxB,EACpxB;IACE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;IAC9E,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,+OAA+O,CAChP;IACH,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,qDAAqD,CAAC;IAClE,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,iMAAiM,CAClM;CACJ,EACD,KAAK,EAAE,IAKN,EAAE,EAAE;IACH,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;QAC1D,oEAAoE;QACpE,gEAAgE;QAChE,kEAAkE;QAClE,MAAM,MAAM,GAAG;YACb,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;YACjD,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;YAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,YAAY;YACjC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;YAClD,CAAC,CAAC;gBACE,GAAG,MAAM;gBACT,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC;QACN,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBACvC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,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,yBAAyB,OAAO,IAAI,CAAC,CAAC;QAC3D,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YAC/D,OAAO,EAAE,IAAa;SACvB,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E,SAAS,CACP,MAAM,EACN,gBAAgB,EAChB,kQAAkQ,EAClQ;IACE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACxE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAC9E,OAAO,EAAE,CAAC;SACP,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;IACtE,yBAAyB,EAAE,CAAC;SACzB,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,+DAA+D,CAAC;CAC7E,EACD,KAAK,EAAE,IAKN,EAAE,EAAE;IACH,IAAI,CAAC,SAAS;QAAE,OAAO,eAAe,CAAC,gBAAgB,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;YAC7B,SAAS;YACT,SAAS;YACT,SAAS;YACT,GAAG,IAAI;SACR,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;aACjE;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,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,sBAAsB,OAAO,IAAI,CAAC,CAAC;QACxD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;YAC/D,OAAO,EAAE,IAAa;SACvB,CAAC;IACJ,CAAC;AACH,CAAC,CACF,CAAC;AAEF,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,KAAK,UAAU,QAAQ;IACrB,IAAI,CAAC;QACH,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,KAAK,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,KAAK,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC,CAAC,CAAC;AAEH,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC"}
|