@happyvertical/smrt-cli 0.55.15 → 0.55.17
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/agents/app-commands.md +10 -0
- package/agents/kitchen.md +24 -4
- package/dist/{AuditLogCollection-WDHL-_AF-Cp5NKpKo.js → AuditLogCollection-WDHL-_AF-02D9mDot.js} +1 -1
- package/dist/{OidcIdentity-BUblgQLs-CqMp2Smf.js → OidcIdentity-BUblgQLs-hzB0lrxA.js} +2 -2
- package/dist/{OidcIdentityCollection-ClOyaHeF-l1ifhCWu.js → OidcIdentityCollection-ClOyaHeF-D7aAvcYW.js} +1 -1
- package/dist/{ProfileAssetCollection-CRMcjLJ--Bh5AcTQv.js → ProfileAssetCollection-CRMcjLJ--CRQsOHTZ.js} +3 -3
- package/dist/{ProfileCollection-C4INKh7Y-DH_e1QdB.js → ProfileCollection-C4INKh7Y-DUcvwlG4.js} +17 -17
- package/dist/{ProfileLinkCollection-DFfZRsgv-BGLiIASL.js → ProfileLinkCollection-DFfZRsgv-4ulMzaJO.js} +2 -2
- package/dist/{ProfileMetadataCollection-BIYKy4Y3-DSVsCaCz.js → ProfileMetadataCollection-BIYKy4Y3-BGVdmb-k.js} +1 -1
- package/dist/{ProfileMetafieldCollection-Buz7gzag-cxq_JG8K.js → ProfileMetafieldCollection-Buz7gzag-Cuuzb-Yt.js} +1 -1
- package/dist/{ProfileRelationshipCollection-C4g_QLI4-DCxIpptB.js → ProfileRelationshipCollection-C4g_QLI4-DHnLSOex.js} +1 -1
- package/dist/{ProfileTypeCollection-B7kwi1mU-BzT8PP3l.js → ProfileTypeCollection-B7kwi1mU-tffgStmE.js} +2 -2
- package/dist/app/cli.d.ts.map +1 -1
- package/dist/app/operations.d.ts.map +1 -1
- package/dist/app.js +2 -2
- package/dist/{cli-OZsH5cdL.js → cli-FDpY0gCt.js} +51 -5
- package/dist/commands/kitchen/mcp/bridge.d.ts +3 -0
- package/dist/commands/kitchen/mcp/bridge.d.ts.map +1 -0
- package/dist/commands/kitchen/mcp/preview.d.ts +8 -0
- package/dist/commands/kitchen/mcp/preview.d.ts.map +1 -0
- package/dist/commands/kitchen/mcp/server.d.ts.map +1 -1
- package/dist/commands/kitchen/mcp/tools.d.ts +21 -2
- package/dist/commands/kitchen/mcp/tools.d.ts.map +1 -1
- package/dist/commands/kitchen/mcp/ui.d.ts +40 -0
- package/dist/commands/kitchen/mcp/ui.d.ts.map +1 -0
- package/dist/commands/kitchen.d.ts.map +1 -1
- package/dist/{commands-Cut_g1l0.js → commands-Cve0qfxc.js} +30 -4
- package/dist/{dist-DoeiKxBG.js → dist-BQ5ZrH9U.js} +16 -16
- package/dist/{dist-CSWROA_j.js → dist-BQjejZ0-.js} +3 -3
- package/dist/{dist-Daxp0QSv.js → dist-BtlfVNPV.js} +4 -4
- package/dist/{dist-DuLsatO8.js → dist-C_pNF2sM.js} +2 -2
- package/dist/dist-DHRli5Sc.js +21 -0
- package/dist/index.js +12 -12
- package/dist/{oidcProvisioningPrimitives-DNP9EZlU-DNut7Q6q.js → oidcProvisioningPrimitives-DNP9EZlU-B5DmitVf.js} +3 -3
- package/dist/{portability-CES1YC2m.js → portability-BbltyqQ-.js} +1 -1
- package/dist/{resolveIdentity-CkyqvctR-BBpXD0_v.js → resolveIdentity-CkyqvctR-BDafA2yA.js} +14 -14
- package/dist/{server-Dp096tZj.js → server-C69K3w-t.js} +682 -39
- package/package.json +10 -10
- package/scripts/verify-package-types-exports.js +6 -1
- package/dist/dist-Du1UPfme.js +0 -21
package/agents/app-commands.md
CHANGED
|
@@ -75,6 +75,16 @@ config loading; `bin/smrt.js` imports `dist/` in-process so SIGTERM reaches
|
|
|
75
75
|
`/setup?token=` URL only to an interactive terminal (`io.operatorTerminal`,
|
|
76
76
|
stderr when both stdio are TTYs), never to stdout/stderr logs or pipes. The
|
|
77
77
|
web runtime deletes the files after a successful owner claim.
|
|
78
|
+
- **`open` port resolution** (#3857): `open` probes `/api/_runtime/health` from
|
|
79
|
+
the configured `PORT` (default 5173) through the next ten ports (Vite's
|
|
80
|
+
fallback range) and takes the first whose `application` equals this app's id,
|
|
81
|
+
so a busy port held by another app is skipped. The printed `url` and the
|
|
82
|
+
retained onboarding launch file follow that port. Output carries
|
|
83
|
+
`serverRunning`: `false` when nothing answered (the configured port is kept).
|
|
84
|
+
`setup`/`recover` run before a server exists, so their retained invitation
|
|
85
|
+
keeps the configured port until `open` rewrites it. `smrt app <op> --help`
|
|
86
|
+
prints usage for every operation except `dev`/`build`/`vite` (Vite's help)
|
|
87
|
+
and `token` (its own).
|
|
78
88
|
- **`token`** (`tokens.ts`, local only): parses every argument before touching
|
|
79
89
|
state, opens `openLocalMcpTokenStore` (validated custody, uncached
|
|
80
90
|
connection, no writer lease, so it runs beside `app:start`), and serializes
|
package/agents/kitchen.md
CHANGED
|
@@ -92,7 +92,7 @@ Set `SMRT_PLANNER_DIR=<packaged planner checkout>` to also run the suite against
|
|
|
92
92
|
## `smrt kitchen mcp` (#3752)
|
|
93
93
|
|
|
94
94
|
```
|
|
95
|
-
smrt kitchen mcp [--template <t>] [--manifests <p>]... [--no-registry] [--packages <name>]... [--library <dir>]...
|
|
95
|
+
smrt kitchen mcp [--template <t>] [--manifests <p>]... [--no-registry] [--packages <name>]... [--library <dir>]... [--plans-dir <dir>] [--preview-port <n> --preview-origin <local-origin>]
|
|
96
96
|
```
|
|
97
97
|
|
|
98
98
|
A stdio MCP server (`@modelcontextprotocol/server`, `serveStdio`) for the local
|
|
@@ -112,10 +112,18 @@ client), `__tests__/kitchen-plugin.test.ts` (plugin files against the Agent Plug
|
|
|
112
112
|
| `start_plan` | not read-only, not destructive | empty, or from a library cookbook; returns `planId` |
|
|
113
113
|
| `run_commands` | idempotent | one atomic `engine.batch` (`id`, `expectedRevision` pass through); a lone `undo` runs as a command |
|
|
114
114
|
| `get_plan`, `validate_plan`, `export_plan` | read-only | `validate_plan` = engine `validate` + `validateCookbookText` against the catalog's manifests |
|
|
115
|
+
| `open_preview` | read-only | URL for the same plan in the local development app shell when the preview bridge is enabled; binds the plan so the bridge will serve it |
|
|
115
116
|
| `apply_plan` | destructive, idempotent, open-world | `createCookbookApplier` (= `cookbook apply`); absolute `dir`; **writes only with `confirm: true` + the preview's `confirmCode`** (sha256 of dir, server template and exported plan, so a changed plan or dir needs a new preview), otherwise (or with `dryRun`) a preview + `confirmation_required`; template is the server's `--template` only; `install` defaults to false and its output goes to stderr; templates containing symlinks are refused |
|
|
116
117
|
|
|
117
|
-
- **Plans**
|
|
118
|
-
|
|
118
|
+
- **Plans** are stored in `--plans-dir` as private engine-state JSON files when set. This
|
|
119
|
+
retains the revision and idempotency journal across server restarts. Undo handles
|
|
120
|
+
remain available within the running process; a restart clears them. Writes to
|
|
121
|
+
a shared plans directory use a per-plan cross-process lock so stale revisions
|
|
122
|
+
cannot both succeed. Otherwise plans live
|
|
123
|
+
in server memory (20 kept, oldest dropped). `smrt.cookbook.json` in the project
|
|
124
|
+
(written by apply) is the applied copy.
|
|
125
|
+
- **Preview** binds to `127.0.0.1` and accepts only the configured loopback
|
|
126
|
+
browser origin. The app shell and MCP tools call the same `KitchenSession`.
|
|
119
127
|
- **Catalog** is built lazily on first use, once: manifests are resolved for the library's recipes
|
|
120
128
|
exactly like `cookbook validate` (`--manifests`, workspace, `node_modules`, registry unless
|
|
121
129
|
`--no-registry`; `--packages` adds more) and turned into `EngineCatalog` (`catalog.ts`: recipes from
|
|
@@ -124,5 +132,17 @@ client), `__tests__/kitchen-plugin.test.ts` (plugin files against the Agent Plug
|
|
|
124
132
|
(no recipe-id enums) so `tools/list` never waits on the network; `search_recipes` is the id source.
|
|
125
133
|
- **Output**: every tool returns compact text for the model plus `structuredContent` that matches its
|
|
126
134
|
`outputSchema` (`ok` always; `error {code,message,path?,details?}` when false, with `isError`).
|
|
127
|
-
-
|
|
135
|
+
- Optional UI: `--ui-smoke` registers a static capability resource and `kitchen_ui_smoke`;
|
|
136
|
+
`--planner-ui /absolute/path/app/mcp.html` registers a content-versioned Planner resource
|
|
137
|
+
and `render_plan`. The planning tools have no UI template and keep working if
|
|
138
|
+
the optional artifact is missing. The operator supplies self-contained HTML
|
|
139
|
+
built in smrt-planner. The separate preview is loopback HTTP only.
|
|
140
|
+
- `start_plan`, `get_plan`, and `run_commands` return `state: { snapshot, cookbook }`
|
|
141
|
+
atomically. Read this field for live UI state; replayed command receipts and their
|
|
142
|
+
original snapshots retain their previous meaning. The app bridge allows
|
|
143
|
+
get/run/export/validate plus its UI reload check. It sizes the app to the host frame, not its
|
|
144
|
+
content: `hostContext.containerDimensions.maxHeight`, else 720px; a host-fixed height or
|
|
145
|
+
fullscreen gets no size report.
|
|
146
|
+
- Not here: public or remote HTTP transport. See the plugin README for local build/install and
|
|
147
|
+
the explicit manual desktop capability check.
|
|
128
148
|
|
package/dist/{AuditLogCollection-WDHL-_AF-Cp5NKpKo.js → AuditLogCollection-WDHL-_AF-02D9mDot.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as tenantId, r as TenantScoped } from "./dist-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
4
|
import { SmrtCollection, SmrtObject, field, foreignKey, smrt } from "@happyvertical/smrt-core";
|
|
5
5
|
//#region ../profiles/dist/chunks/AuditLogCollection-WDHL-_AF.js
|
|
@@ -42,7 +42,7 @@ var OidcIdentity = class extends SmrtObject {
|
|
|
42
42
|
* Find identity by issuer and subject
|
|
43
43
|
*/
|
|
44
44
|
static async findBySubject(issuer, subject, options = {}) {
|
|
45
|
-
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-ClOyaHeF-
|
|
45
|
+
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-ClOyaHeF-D7aAvcYW.js").then((n) => n.r).then((n) => n.r);
|
|
46
46
|
return await (await OidcIdentityCollection.create(options)).findBySubject(issuer, subject);
|
|
47
47
|
}
|
|
48
48
|
/** Build the collision-free natural key for one OIDC issuer subject. */
|
|
@@ -65,7 +65,7 @@ var OidcIdentity = class extends SmrtObject {
|
|
|
65
65
|
static async findOrCreate(profile, oidcData, options = {}) {
|
|
66
66
|
const profileId = profile.id;
|
|
67
67
|
if (typeof profileId !== "string" || !profileId) throw new Error("OidcIdentity.findOrCreate() requires a saved Profile.");
|
|
68
|
-
const { reuseExistingOidcIdentityForProfile } = await import("./resolveIdentity-CkyqvctR-
|
|
68
|
+
const { reuseExistingOidcIdentityForProfile } = await import("./resolveIdentity-CkyqvctR-BDafA2yA.js").then((n) => n.i).then((n) => n.i);
|
|
69
69
|
const profileOptions = profile.options ?? {};
|
|
70
70
|
return (await reuseExistingOidcIdentityForProfile(profileId, {
|
|
71
71
|
email: oidcData.email,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
2
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
3
|
-
import { t as OidcIdentity } from "./OidcIdentity-BUblgQLs-
|
|
3
|
+
import { t as OidcIdentity } from "./OidcIdentity-BUblgQLs-hzB0lrxA.js";
|
|
4
4
|
import { SmrtCollection } from "@happyvertical/smrt-core";
|
|
5
5
|
//#region ../profiles/dist/chunks/OidcIdentityCollection-ClOyaHeF.js
|
|
6
6
|
var OidcIdentityCollection_ClOyaHeF_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as tenantId, r as TenantScoped } from "./dist-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
|
-
import { a as getOwnedAssetsFromCollection, o as removeOwnedAssetFromCollection, t as addOwnedAssetFromCollection } from "./dist-
|
|
4
|
+
import { a as getOwnedAssetsFromCollection, o as removeOwnedAssetFromCollection, t as addOwnedAssetFromCollection } from "./dist-BQjejZ0-.js";
|
|
5
5
|
import { SmrtJunction, SmrtObject, crossPackageRef, field, foreignKey, smrt } from "@happyvertical/smrt-core";
|
|
6
6
|
//#region ../profiles/dist/chunks/ProfileAssetCollection-CRMcjLJ-.js
|
|
7
7
|
var ProfileAssetCollection_CRMcjLJ__exports = /* @__PURE__ */ __exportAll({
|
|
@@ -84,7 +84,7 @@ var ProfileAssetCollection = class extends SmrtJunction {
|
|
|
84
84
|
profileCollectionPromise = null;
|
|
85
85
|
async getProfileCollection() {
|
|
86
86
|
if (!this.profileCollectionPromise) {
|
|
87
|
-
const { ProfileCollection } = await import("./ProfileCollection-C4INKh7Y-
|
|
87
|
+
const { ProfileCollection } = await import("./ProfileCollection-C4INKh7Y-DUcvwlG4.js").then((n) => n.o).then((n) => n.r);
|
|
88
88
|
this.profileCollectionPromise = ProfileCollection.create({ db: this.db });
|
|
89
89
|
}
|
|
90
90
|
return this.profileCollectionPromise;
|
package/dist/{ProfileCollection-C4INKh7Y-DH_e1QdB.js → ProfileCollection-C4INKh7Y-DUcvwlG4.js}
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { a as queryGlobal, c as getTenantId, i as tenantId, n as resolvePrompt, o as queryWithGlobals, r as TenantScoped, t as definePrompt, u as withSystemContext } from "./dist-
|
|
2
|
+
import { a as queryGlobal, c as getTenantId, i as tenantId, n as resolvePrompt, o as queryWithGlobals, r as TenantScoped, t as definePrompt, u as withSystemContext } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
|
-
import { a as getOwnedAssetsFromCollection, i as assertValidOwnedAssetSortOrder, n as assertAssetLinkable, o as removeOwnedAssetFromCollection, r as assertValidOwnedAssetRelationship, s as resolveOwnedAssetsById, t as addOwnedAssetFromCollection } from "./dist-
|
|
4
|
+
import { a as getOwnedAssetsFromCollection, i as assertValidOwnedAssetSortOrder, n as assertAssetLinkable, o as removeOwnedAssetFromCollection, r as assertValidOwnedAssetRelationship, s as resolveOwnedAssetsById, t as addOwnedAssetFromCollection } from "./dist-BQjejZ0-.js";
|
|
5
5
|
import { RuntimeError, SmrtCollection, SmrtObject, ValidationError, field, foreignKey, isAbortedTransactionError, oneToMany, smrt } from "@happyvertical/smrt-core";
|
|
6
6
|
import { BackfillTableUnavailableError, BackfillTracker } from "@happyvertical/smrt-core/migrations";
|
|
7
7
|
//#region ../profiles/dist/chunks/ProfileCollection-C4INKh7Y.js
|
|
@@ -435,7 +435,7 @@ var Profile = class extends SmrtObject {
|
|
|
435
435
|
async getTypeSlug() {
|
|
436
436
|
const tenantId2 = this.tenantId || getTenantId();
|
|
437
437
|
if (this.typeId && tenantId2) {
|
|
438
|
-
const { ProfileTypeCollection } = await import("./ProfileTypeCollection-B7kwi1mU-
|
|
438
|
+
const { ProfileTypeCollection } = await import("./ProfileTypeCollection-B7kwi1mU-tffgStmE.js").then((n) => n.n).then((n) => n.n);
|
|
439
439
|
return (await (await ProfileTypeCollection.create(this.options)).getAvailableById(this.typeId, tenantId2))?.slug ?? "";
|
|
440
440
|
}
|
|
441
441
|
return (await this.loadRelated("typeId"))?.slug || "";
|
|
@@ -458,8 +458,8 @@ var Profile = class extends SmrtObject {
|
|
|
458
458
|
* @param value - The value to set
|
|
459
459
|
*/
|
|
460
460
|
async addMetadata(metafieldSlug, value) {
|
|
461
|
-
const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-
|
|
462
|
-
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-
|
|
461
|
+
const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-Cuuzb-Yt.js").then((n) => n.r).then((n) => n.n);
|
|
462
|
+
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-BGVdmb-k.js").then((n) => n.r).then((n) => n.n);
|
|
463
463
|
const metafield = await this.resolveMetafield(await ProfileMetafieldCollection.create(this.options), metafieldSlug);
|
|
464
464
|
if (!metafield) throw new Error(`Metafield '${metafieldSlug}' not found`);
|
|
465
465
|
await metafield.validateValue(value);
|
|
@@ -492,7 +492,7 @@ var Profile = class extends SmrtObject {
|
|
|
492
492
|
* @returns Object with metafield slugs as keys
|
|
493
493
|
*/
|
|
494
494
|
async getMetadata() {
|
|
495
|
-
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-
|
|
495
|
+
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-BGVdmb-k.js").then((n) => n.r).then((n) => n.n);
|
|
496
496
|
return await (await ProfileMetadataCollection.create(this.options)).getMetadataObject(this.id);
|
|
497
497
|
}
|
|
498
498
|
/**
|
|
@@ -509,8 +509,8 @@ var Profile = class extends SmrtObject {
|
|
|
509
509
|
* @param metafieldSlug - The slug of the metafield to remove
|
|
510
510
|
*/
|
|
511
511
|
async removeMetadata(metafieldSlug) {
|
|
512
|
-
const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-
|
|
513
|
-
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-
|
|
512
|
+
const { ProfileMetafieldCollection } = await import("./ProfileMetafieldCollection-Buz7gzag-Cuuzb-Yt.js").then((n) => n.r).then((n) => n.n);
|
|
513
|
+
const { ProfileMetadataCollection } = await import("./ProfileMetadataCollection-BIYKy4Y3-BGVdmb-k.js").then((n) => n.r).then((n) => n.n);
|
|
514
514
|
const metafield = await this.resolveMetafield(await ProfileMetafieldCollection.create(this.options), metafieldSlug);
|
|
515
515
|
if (!metafield) throw new Error(`Metafield '${metafieldSlug}' not found`);
|
|
516
516
|
const existing = await (await ProfileMetadataCollection.create(this.options)).list({
|
|
@@ -535,7 +535,7 @@ var Profile = class extends SmrtObject {
|
|
|
535
535
|
return candidates.find((candidate) => ownerTenantId && candidate.tenantId === ownerTenantId) ?? candidates.find((candidate) => !candidate.tenantId) ?? null;
|
|
536
536
|
}
|
|
537
537
|
async getProfileLinkCollection() {
|
|
538
|
-
const { ProfileLinkCollection } = await import("./ProfileLinkCollection-DFfZRsgv-
|
|
538
|
+
const { ProfileLinkCollection } = await import("./ProfileLinkCollection-DFfZRsgv-4ulMzaJO.js").then((n) => n.i).then((n) => n.r);
|
|
539
539
|
return ProfileLinkCollection.create({ db: this.db });
|
|
540
540
|
}
|
|
541
541
|
/** This profile's web links in display order. */
|
|
@@ -552,7 +552,7 @@ var Profile = class extends SmrtObject {
|
|
|
552
552
|
return (await this.getProfileLinkCollection()).replaceForProfile(this.id, links);
|
|
553
553
|
}
|
|
554
554
|
async getProfileAssetCollection() {
|
|
555
|
-
const { ProfileAssetCollection } = await import("./ProfileAssetCollection-CRMcjLJ--
|
|
555
|
+
const { ProfileAssetCollection } = await import("./ProfileAssetCollection-CRMcjLJ--CRQsOHTZ.js").then((n) => n.r).then((n) => n.n);
|
|
556
556
|
return ProfileAssetCollection.create({ db: this.db });
|
|
557
557
|
}
|
|
558
558
|
async getAssets(relationship) {
|
|
@@ -584,7 +584,7 @@ var Profile = class extends SmrtObject {
|
|
|
584
584
|
*/
|
|
585
585
|
async addRelationship(toProfile, relationshipSlug, contextProfile) {
|
|
586
586
|
const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-_n22WqTb-DiZUWvev.js").then((n) => n.n).then((n) => n.n);
|
|
587
|
-
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-
|
|
587
|
+
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-DHnLSOex.js").then((n) => n.r).then((n) => n.n);
|
|
588
588
|
const { ProfileRelationshipType } = await import("./ProfileRelationshipType-U7IwF6Wf-DNavf24e.js").then((n) => n.n).then((n) => n.n);
|
|
589
589
|
const relationshipType = await (await ProfileRelationshipTypeCollection.create(this.options)).getBySlug(relationshipSlug);
|
|
590
590
|
if (!relationshipType) throw new Error(`Relationship type '${relationshipSlug}' not found`);
|
|
@@ -609,7 +609,7 @@ var Profile = class extends SmrtObject {
|
|
|
609
609
|
* @returns Array of ProfileRelationship instances
|
|
610
610
|
*/
|
|
611
611
|
async getRelationships(options) {
|
|
612
|
-
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-
|
|
612
|
+
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-DHnLSOex.js").then((n) => n.r).then((n) => n.n);
|
|
613
613
|
const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-_n22WqTb-DiZUWvev.js").then((n) => n.n).then((n) => n.n);
|
|
614
614
|
const relationshipCollection = await ProfileRelationshipCollection.create(this.options);
|
|
615
615
|
const direction = options?.direction || "all";
|
|
@@ -654,7 +654,7 @@ var Profile = class extends SmrtObject {
|
|
|
654
654
|
*/
|
|
655
655
|
async removeRelationship(toProfile, relationshipSlug) {
|
|
656
656
|
const { ProfileRelationshipTypeCollection } = await import("./ProfileRelationshipTypeCollection-_n22WqTb-DiZUWvev.js").then((n) => n.n).then((n) => n.n);
|
|
657
|
-
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-
|
|
657
|
+
const { ProfileRelationshipCollection } = await import("./ProfileRelationshipCollection-C4g_QLI4-DHnLSOex.js").then((n) => n.r).then((n) => n.n);
|
|
658
658
|
const relationshipType = await (await ProfileRelationshipTypeCollection.create(this.options)).getBySlug(relationshipSlug);
|
|
659
659
|
if (!relationshipType) throw new Error(`Relationship type '${relationshipSlug}' not found`);
|
|
660
660
|
const relationshipCollection = await ProfileRelationshipCollection.create(this.options);
|
|
@@ -778,7 +778,7 @@ var Profile = class extends SmrtObject {
|
|
|
778
778
|
* @returns Array of OIDC identity records
|
|
779
779
|
*/
|
|
780
780
|
async getOidcIdentities() {
|
|
781
|
-
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-ClOyaHeF-
|
|
781
|
+
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-ClOyaHeF-D7aAvcYW.js").then((n) => n.r).then((n) => n.r);
|
|
782
782
|
return await (await OidcIdentityCollection.create(this.options)).findByProfile(this.id);
|
|
783
783
|
}
|
|
784
784
|
/**
|
|
@@ -791,7 +791,7 @@ var Profile = class extends SmrtObject {
|
|
|
791
791
|
* type, but refuses to create or rebind authority.
|
|
792
792
|
*/
|
|
793
793
|
async linkOidcIdentity(oidcData) {
|
|
794
|
-
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-ClOyaHeF-
|
|
794
|
+
const { OidcIdentityCollection } = await import("./OidcIdentityCollection-ClOyaHeF-D7aAvcYW.js").then((n) => n.r).then((n) => n.r);
|
|
795
795
|
return await (await OidcIdentityCollection.create(this.options)).linkToProfile(this, oidcData);
|
|
796
796
|
}
|
|
797
797
|
/**
|
|
@@ -820,7 +820,7 @@ var Profile = class extends SmrtObject {
|
|
|
820
820
|
* @returns Array of audit log entries
|
|
821
821
|
*/
|
|
822
822
|
async getAuditLogs(limit = 50) {
|
|
823
|
-
const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-
|
|
823
|
+
const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-02D9mDot.js").then((n) => n.r).then((n) => n.n);
|
|
824
824
|
return await (await AuditLogCollection.create(this.options)).getRecentActivity(this.id, limit);
|
|
825
825
|
}
|
|
826
826
|
/**
|
|
@@ -830,7 +830,7 @@ var Profile = class extends SmrtObject {
|
|
|
830
830
|
* @returns The created audit log entry
|
|
831
831
|
*/
|
|
832
832
|
async recordAction(options) {
|
|
833
|
-
const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-
|
|
833
|
+
const { AuditLogCollection } = await import("./AuditLogCollection-WDHL-_AF-02D9mDot.js").then((n) => n.r).then((n) => n.n);
|
|
834
834
|
return await (await AuditLogCollection.create(this.options)).record({
|
|
835
835
|
profile: this,
|
|
836
836
|
...options
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as tenantId, r as TenantScoped } from "./dist-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
4
|
import { SmrtCollection, SmrtObject, field, foreignKey, isEmbeddedDatabase, smrt, withEmbeddedWriteTransaction } from "@happyvertical/smrt-core";
|
|
5
5
|
//#region ../profiles/dist/chunks/ProfileLinkCollection-DFfZRsgv.js
|
|
@@ -203,7 +203,7 @@ var ProfileLinkCollection = class ProfileLinkCollection extends SmrtCollection {
|
|
|
203
203
|
/** The profile's tenant; throws when the profile is not visible here. */
|
|
204
204
|
async requireProfileTenant(profileId) {
|
|
205
205
|
if (!profileId) throw new Error("A profile link needs a profile");
|
|
206
|
-
const { ProfileCollection } = await import("./ProfileCollection-C4INKh7Y-
|
|
206
|
+
const { ProfileCollection } = await import("./ProfileCollection-C4INKh7Y-DUcvwlG4.js").then((n) => n.o).then((n) => n.r);
|
|
207
207
|
const profile = await (await ProfileCollection.create({ db: this.db })).get({ id: profileId });
|
|
208
208
|
if (!profile) throw new Error(`Profile '${profileId}' not found`);
|
|
209
209
|
return profile.tenantId ?? null;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as tenantId, r as TenantScoped } from "./dist-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
4
|
import { SmrtCollection, SmrtObject, field, foreignKey, smrt } from "@happyvertical/smrt-core";
|
|
5
5
|
//#region ../profiles/dist/chunks/ProfileMetadataCollection-BIYKy4Y3.js
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as tenantId, r as TenantScoped } from "./dist-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
4
|
import { SmrtCollection, SmrtObject, field, smrt } from "@happyvertical/smrt-core";
|
|
5
5
|
//#region ../profiles/dist/chunks/ProfileMetafieldCollection-Buz7gzag.js
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { i as tenantId, r as TenantScoped } from "./dist-
|
|
2
|
+
import { i as tenantId, r as TenantScoped } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
4
|
import { SmrtCollection, SmrtObject, foreignKey, oneToMany, smrt } from "@happyvertical/smrt-core";
|
|
5
5
|
//#region ../profiles/dist/chunks/ProfileRelationshipCollection-C4g_QLI4.js
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.js";
|
|
2
|
-
import { l as isSystemContext, s as withTenantGlobalRead } from "./dist-
|
|
2
|
+
import { l as isSystemContext, s as withTenantGlobalRead } from "./dist-C_pNF2sM.js";
|
|
3
3
|
import { n as __exportAll$1 } from "./NostrIdentity-AC8fAdxe-DKxKyu_a.js";
|
|
4
|
-
import { s as ProfileType } from "./ProfileCollection-C4INKh7Y-
|
|
4
|
+
import { s as ProfileType } from "./ProfileCollection-C4INKh7Y-DUcvwlG4.js";
|
|
5
5
|
import { SmrtCollection } from "@happyvertical/smrt-core";
|
|
6
6
|
//#region ../profiles/dist/chunks/ProfileTypeCollection-B7kwi1mU.js
|
|
7
7
|
var ProfileTypeCollection_B7kwi1mU_exports = /* @__PURE__ */ __exportAll({
|
package/dist/app/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/app/cli.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAKlB,MAAM,cAAc,CAAC;AAGtB,qDAAqD;AACrD,eAAO,MAAM,YAAY,8DACoC,CAAC;AAE9D,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxD,CAAC;AAEH,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,iDAAiD;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAChD;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,kBAAkB,CAAC;IACzB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,KAAK,CAAC;CAC7B;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CA+B9D;AAED,+BAA+B;AAC/B,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAWD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/app/cli.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAKlB,MAAM,cAAc,CAAC;AAGtB,qDAAqD;AACrD,eAAO,MAAM,YAAY,8DACoC,CAAC;AAE9D,8EAA8E;AAC9E,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAoBxD,CAAC;AAEH,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,EAAE,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3B,iDAAiD;IACjD,YAAY,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAChD;AAED,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,kBAAkB,CAAC;IACzB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,KAAK,CAAC;CAC7B;AAED,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CA+B9D;AAED,+BAA+B;AAC/B,wBAAgB,aAAa,IAAI,MAAM,CAMtC;AAWD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,MAAM,CAAC,CA0EjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/app/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6BH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAY7E,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,cAAc,CAAC;AAEtB,6CAA6C;AAC7C,eAAO,MAAM,cAAc,2GAWjB,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAuH3D,sDAAsD;AACtD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,0BAA0B,CAAC,CAQrC;AAyPD,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,QAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/app/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6BH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAY7E,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAO1B,OAAO,EACL,KAAK,UAAU,EAIhB,MAAM,cAAc,CAAC;AAEtB,6CAA6C;AAC7C,eAAO,MAAM,cAAc,2GAWjB,CAAC;AAEX,qCAAqC;AACrC,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAuH3D,sDAAsD;AACtD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,0BAA0B,CAAC,CAQrC;AAyPD,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAuchD,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACtE,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CACvE;AAkFD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,YAAY,EACvB,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,CAAC,CAkEjB"}
|
package/dist/app.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as assertExternalArtifactPath, C as prepareMigration, D as cliExecutablePath, E as validateMcpAppsIfPresent, F as AppCommandError, I as ApplicationStartError, M as resolveApplicationId, N as resolveApplicationStateRoot, O as runtimeEnvironment, P as runtimeConfigurationFingerprint, R as redactSecrets, S as launchVite, T as runWorker, _ as sendTerminationSignal, a as renderAppHelp, b as ViteLauncherError, c as parseTokenLifetime, d as START_OUTPUT_TAIL_BYTES, f as runApplicationOperation, g as readOwnedProcess, h as matchesApplicationProcess, i as errorEnvelope, j as prepareApplicationStateRoot, k as webLauncherPath, l as runTokenOperation, m as checkOwnedProcess, n as APP_RECOVERY, o as runAppCommand, p as WEB_LAUNCHER_NAME, s as TOKEN_USAGE, t as APP_COMMANDS, u as APP_OPERATIONS, v as verifyOwnedProcess, w as resolveViteEntry, x as devServerArguments, y as writeProcessRecord } from "./cli-
|
|
2
|
-
import { C as publishFilesystemAssets, D as stageFilesystemAssets, E as rollbackFilesystemAssets, O as verifyFilesystemAssets, S as markFilesystemAssetsCommitted, T as recoverFilesystemAssets, _ as bundleContentDigest, a as manifestTables, b as finishFilesystemAssets, c as serializeExportBundle, d as AssetPortabilityError, f as MAX_ASSET_BYTES, g as assertAssetRoot, h as MAX_TOTAL_ASSET_BYTES, i as importedRowsMatchBundle, k as verifyPublishedFilesystemAssets, l as validateImportBundle, m as MAX_BUNDLE_BYTES, n as exportApplication, o as planImportTables, p as MAX_ASSET_COUNT, r as importApplication, t as executeImportPlan, u as ASSET_MANIFEST_SCHEMA_VERSION, v as collectFilesystemAssets, w as readSensitiveBundle, x as hasCommittedImportJournal, y as digestBytes } from "./portability-
|
|
1
|
+
import { A as assertExternalArtifactPath, C as prepareMigration, D as cliExecutablePath, E as validateMcpAppsIfPresent, F as AppCommandError, I as ApplicationStartError, M as resolveApplicationId, N as resolveApplicationStateRoot, O as runtimeEnvironment, P as runtimeConfigurationFingerprint, R as redactSecrets, S as launchVite, T as runWorker, _ as sendTerminationSignal, a as renderAppHelp, b as ViteLauncherError, c as parseTokenLifetime, d as START_OUTPUT_TAIL_BYTES, f as runApplicationOperation, g as readOwnedProcess, h as matchesApplicationProcess, i as errorEnvelope, j as prepareApplicationStateRoot, k as webLauncherPath, l as runTokenOperation, m as checkOwnedProcess, n as APP_RECOVERY, o as runAppCommand, p as WEB_LAUNCHER_NAME, s as TOKEN_USAGE, t as APP_COMMANDS, u as APP_OPERATIONS, v as verifyOwnedProcess, w as resolveViteEntry, x as devServerArguments, y as writeProcessRecord } from "./cli-FDpY0gCt.js";
|
|
2
|
+
import { C as publishFilesystemAssets, D as stageFilesystemAssets, E as rollbackFilesystemAssets, O as verifyFilesystemAssets, S as markFilesystemAssetsCommitted, T as recoverFilesystemAssets, _ as bundleContentDigest, a as manifestTables, b as finishFilesystemAssets, c as serializeExportBundle, d as AssetPortabilityError, f as MAX_ASSET_BYTES, g as assertAssetRoot, h as MAX_TOTAL_ASSET_BYTES, i as importedRowsMatchBundle, k as verifyPublishedFilesystemAssets, l as validateImportBundle, m as MAX_BUNDLE_BYTES, n as exportApplication, o as planImportTables, p as MAX_ASSET_COUNT, r as importApplication, t as executeImportPlan, u as ASSET_MANIFEST_SCHEMA_VERSION, v as collectFilesystemAssets, w as readSensitiveBundle, x as hasCommittedImportJournal, y as digestBytes } from "./portability-BbltyqQ-.js";
|
|
3
3
|
import { PROVIDER_READINESS_SETTINGS, RECLAIM_MUTEX_FILE, acquireWriterLease, createProviderReadinessProbe, findInstalledPackage, isStaleOperationLock, lockOwnerPid, processExists, readActiveWriterLease, reclaimStaleRecord, resolveReadinessModule, withOperationLock } from "@happyvertical/smrt-app-runtime";
|
|
4
4
|
export { APP_COMMANDS, APP_OPERATIONS, APP_RECOVERY, ASSET_MANIFEST_SCHEMA_VERSION, AppCommandError, ApplicationStartError, AssetPortabilityError, MAX_ASSET_BYTES, MAX_ASSET_COUNT, MAX_BUNDLE_BYTES, MAX_TOTAL_ASSET_BYTES, PROVIDER_READINESS_SETTINGS, RECLAIM_MUTEX_FILE, START_OUTPUT_TAIL_BYTES, TOKEN_USAGE, ViteLauncherError, WEB_LAUNCHER_NAME, acquireWriterLease, assertAssetRoot, assertExternalArtifactPath, bundleContentDigest, checkOwnedProcess, cliExecutablePath, collectFilesystemAssets, createProviderReadinessProbe, devServerArguments, digestBytes, errorEnvelope, executeImportPlan, exportApplication, findInstalledPackage, finishFilesystemAssets, hasCommittedImportJournal, importApplication, importedRowsMatchBundle, isStaleOperationLock, launchVite, lockOwnerPid, manifestTables, markFilesystemAssetsCommitted, matchesApplicationProcess, parseTokenLifetime, planImportTables, prepareApplicationStateRoot, prepareMigration, processExists, publishFilesystemAssets, readActiveWriterLease, readOwnedProcess, readSensitiveBundle, reclaimStaleRecord, recoverFilesystemAssets, redactSecrets, renderAppHelp, resolveApplicationId, resolveApplicationStateRoot, resolveReadinessModule, resolveViteEntry, rollbackFilesystemAssets, runAppCommand, runApplicationOperation, runTokenOperation, runWorker, runtimeConfigurationFingerprint, runtimeEnvironment, sendTerminationSignal, serializeExportBundle, stageFilesystemAssets, validateImportBundle, validateMcpAppsIfPresent, verifyFilesystemAssets, verifyOwnedProcess, verifyPublishedFilesystemAssets, webLauncherPath, withOperationLock, writeProcessRecord };
|
|
@@ -1065,17 +1065,54 @@ async function stop(context) {
|
|
|
1065
1065
|
pid
|
|
1066
1066
|
});
|
|
1067
1067
|
}
|
|
1068
|
+
/** Ports above the configured one that Vite may fall back to when it is busy. */
|
|
1069
|
+
var DEV_PORT_FALLBACK_RANGE = 10;
|
|
1070
|
+
var LIVE_PROBE_TIMEOUT_MS = 1e3;
|
|
1071
|
+
/**
|
|
1072
|
+
* Find the port this application's server is actually listening on. Starts
|
|
1073
|
+
* at the configured port and walks the Vite fallback range, accepting only a
|
|
1074
|
+
* server whose runtime health answers with this application's id (so another
|
|
1075
|
+
* app that took the configured port is never mistaken for ours). Returns
|
|
1076
|
+
* `null` when no such server answers.
|
|
1077
|
+
*/
|
|
1078
|
+
async function resolveLivePort(context, host, configuredPort) {
|
|
1079
|
+
const first = Number.parseInt(configuredPort, 10);
|
|
1080
|
+
if (!Number.isInteger(first) || first < 1) return null;
|
|
1081
|
+
for (let offset = 0; offset <= DEV_PORT_FALLBACK_RANGE; offset += 1) {
|
|
1082
|
+
const port = first + offset;
|
|
1083
|
+
if (port > 65535) break;
|
|
1084
|
+
try {
|
|
1085
|
+
const response = await context.deps.fetch(new URL("/api/_runtime/health", `http://${host}:${port}/`), {
|
|
1086
|
+
redirect: "manual",
|
|
1087
|
+
signal: AbortSignal.timeout(LIVE_PROBE_TIMEOUT_MS)
|
|
1088
|
+
});
|
|
1089
|
+
if (response.status !== 200) continue;
|
|
1090
|
+
if ((await response.json())?.application === context.appId) return String(port);
|
|
1091
|
+
} catch {}
|
|
1092
|
+
}
|
|
1093
|
+
return null;
|
|
1094
|
+
}
|
|
1068
1095
|
async function open(context) {
|
|
1069
1096
|
const runtime = await context.deps.resolveRuntime(context.sourceRoot);
|
|
1070
|
-
const
|
|
1071
|
-
const
|
|
1072
|
-
|
|
1097
|
+
const host = runtime.profile === "local" ? "127.0.0.1" : process.env.HOST || "127.0.0.1";
|
|
1098
|
+
const configuredPort = process.env.PORT || "5173";
|
|
1099
|
+
const livePort = await resolveLivePort(context, host, configuredPort);
|
|
1100
|
+
const port = livePort ?? configuredPort;
|
|
1101
|
+
const url = `http://${host}:${port}/`;
|
|
1102
|
+
let onboardingUrl = runtime.profile === "local" ? readOnboardingUrl(context) : null;
|
|
1103
|
+
if (onboardingUrl) {
|
|
1104
|
+
const live = new URL(onboardingUrl);
|
|
1105
|
+
live.port = port;
|
|
1106
|
+
onboardingUrl = live.toString();
|
|
1107
|
+
saveOnboardingLaunch(context, onboardingUrl);
|
|
1108
|
+
}
|
|
1073
1109
|
const destination = onboardingUrl ? pathToFileURL(onboardingLaunchPath(context)).toString() : url;
|
|
1074
1110
|
context.deps.openBrowser(destination);
|
|
1075
1111
|
printJson$1(context, {
|
|
1076
1112
|
schemaVersion: 1,
|
|
1077
1113
|
status: "opened",
|
|
1078
|
-
url
|
|
1114
|
+
url,
|
|
1115
|
+
serverRunning: livePort !== null
|
|
1079
1116
|
});
|
|
1080
1117
|
}
|
|
1081
1118
|
async function doctor(context) {
|
|
@@ -1254,7 +1291,7 @@ async function backup(context, args) {
|
|
|
1254
1291
|
async function loadPortabilityAdapter(context) {
|
|
1255
1292
|
const override = join(context.sourceRoot, "scripts", "smrt-portability.mjs");
|
|
1256
1293
|
if (existsSync(override)) return await import(pathToFileURL(override).href);
|
|
1257
|
-
return import("./portability-
|
|
1294
|
+
return import("./portability-BbltyqQ-.js").then((n) => n.s);
|
|
1258
1295
|
}
|
|
1259
1296
|
async function portability(context, operation, args, operationLock) {
|
|
1260
1297
|
const adapter = await loadPortabilityAdapter(context);
|
|
@@ -1562,6 +1599,15 @@ async function runAppCommand(argv, options = {}) {
|
|
|
1562
1599
|
io.stdout(renderAppHelp());
|
|
1563
1600
|
return 0;
|
|
1564
1601
|
}
|
|
1602
|
+
if (![
|
|
1603
|
+
"dev",
|
|
1604
|
+
"build",
|
|
1605
|
+
"vite",
|
|
1606
|
+
"token"
|
|
1607
|
+
].includes(operation) && args.some((arg) => arg === "--help" || arg === "-h")) {
|
|
1608
|
+
io.stdout(renderAppHelp());
|
|
1609
|
+
return 0;
|
|
1610
|
+
}
|
|
1565
1611
|
try {
|
|
1566
1612
|
const sourceRoot = resolve(options.cwd ?? process.cwd());
|
|
1567
1613
|
if (ENV_FILE_OPERATIONS.has(operation)) loadSourceEnvironment(sourceRoot);
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Minimal MCP Apps bridge, injected before the self-contained Planner bundle. */
|
|
2
|
+
export declare const KITCHEN_BRIDGE = "<script>\n(() => {\n const pending = new Map();\n const listeners = new Set();\n let sequence = 0;\n let latest;\n let hostOrigin = '*';\n let initialized = false;\n function send(message) { window.parent.postMessage({ jsonrpc: '2.0', ...message }, hostOrigin); }\n function request(method, params) {\n return new Promise((resolve, reject) => {\n const id = 'kitchen-' + ++sequence;\n const timer = setTimeout(() => {\n pending.delete(id);\n reject(new Error('The host did not answer. Refresh the plan before retrying.'));\n }, 30000);\n pending.set(id, { resolve, reject, timer });\n send({ id, method, params });\n });\n }\n // The Planner is an app shell that scrolls inside itself, so it asks for a\n // stable frame instead of its content height: the host's fixed height wins,\n // else its maxHeight, else a default. Fullscreen belongs to the host.\n const DEFAULT_HEIGHT = 720;\n let dimensions = {};\n let displayMode = 'inline';\n let reported;\n function appHeight() {\n if (displayMode === 'fullscreen' || typeof dimensions.height === 'number') return undefined;\n const max = dimensions.maxHeight;\n return typeof max === 'number' && max > 0 ? Math.round(max) : DEFAULT_HEIGHT;\n }\n function reportSize() {\n const height = appHeight();\n if (height === undefined || height === reported) return;\n reported = height;\n send({ method: 'ui/notifications/size-changed', params: { height } });\n }\n function applyHostContext(context) {\n if (!context || typeof context !== 'object') return;\n const next = context.containerDimensions;\n if (next && typeof next === 'object') dimensions = next;\n if (typeof context.displayMode === 'string') displayMode = context.displayMode;\n }\n function publish(data) {\n if (!data || typeof data.planId !== 'string' || !data.state) return;\n latest = data;\n for (const listener of listeners) listener(data);\n }\n window.addEventListener('message', (event) => {\n if (event.source !== window.parent) return;\n if (hostOrigin !== '*' && event.origin !== hostOrigin) return;\n const message = event.data;\n if (!message || message.jsonrpc !== '2.0') return;\n if (message.id !== undefined && pending.has(message.id)) {\n if (event.origin && event.origin !== 'null') hostOrigin = event.origin;\n const item = pending.get(message.id);\n clearTimeout(item.timer);\n pending.delete(message.id);\n if (message.error) item.reject(new Error(message.error.message || 'Host request failed'));\n else item.resolve(message.result);\n } else if (message.method === 'ui/notifications/host-context-changed') {\n applyHostContext(message.params);\n if (initialized) reportSize();\n } else if (message.method === 'ui/notifications/tool-result') {\n publish(message.params?.structuredContent);\n } else if (message.method === 'ping' && message.id !== undefined) {\n send({ id: message.id, result: {} });\n }\n });\n const ready = request('ui/initialize', {\n appInfo: { name: 'smrt-kitchen-planner', version: '1.0.0' },\n appCapabilities: { availableDisplayModes: ['inline', 'fullscreen'] },\n protocolVersion: '2026-01-26',\n }).then((result) => {\n if (result?.protocolVersion !== '2026-01-26') throw new Error('Unsupported MCP Apps protocol');\n send({ method: 'ui/notifications/initialized', params: {} });\n applyHostContext(result.hostContext);\n initialized = true;\n reportSize();\n return result;\n });\n ready.catch(() => {});\n window.smrtKitchen = {\n async callTool(name, args) {\n if (!['get_plan', 'run_commands', 'export_plan', 'validate_plan', 'planner_ui_update'].includes(name)) {\n throw new Error('This tool is not available from the Planner UI');\n }\n await ready;\n const result = await request('tools/call', { name, arguments: args });\n if (!result?.structuredContent) throw new Error('The host returned no structured data');\n return result.structuredContent;\n },\n subscribe(listener) {\n listeners.add(listener);\n if (latest) listener(latest);\n return () => listeners.delete(listener);\n },\n };\n ready.then(async () => {\n const resumePlanId = window.__smrtKitchenReloadPlanId;\n if (resumePlanId) {\n try {\n const result = await request('tools/call', {\n name: 'get_plan', arguments: { planId: resumePlanId },\n });\n publish(result?.structuredContent);\n } catch { /* A later render result can still supply the plan. */ }\n }\n let version = window.__smrtKitchenUiVersion;\n if (!version) return;\n let checking = false;\n let stopped = false;\n let reloadNotice;\n function showReloadNotice() {\n if (reloadNotice) return;\n reloadNotice = document.createElement('p');\n reloadNotice.setAttribute('role', 'alert');\n reloadNotice.textContent = 'The new Planner UI could not reload. Reopen this app tab to use it.';\n document.body.prepend(reloadNotice);\n }\n const check = async () => {\n if (checking || stopped || document.visibilityState === 'hidden') return;\n checking = true;\n let attemptedVersion = false;\n try {\n const result = await request('tools/call', {\n name: 'planner_ui_update',\n arguments: { version, planId: latest?.planId || resumePlanId || '' },\n });\n const update = result?.structuredContent;\n if (update?.changed && typeof update.html === 'string' && typeof update.version === 'string') {\n // A rejected artifact must not be resent every poll. A later build\n // has a different digest and can still replace it.\n version = update.version;\n attemptedVersion = true;\n const next = new DOMParser().parseFromString(update.html, 'text/html');\n const nextStyle = next.getElementById('smrt-planner-styles');\n const nextEntry = next.getElementById('smrt-planner-entry');\n const currentStyle = document.getElementById('smrt-planner-styles');\n const currentEntry = document.getElementById('smrt-planner-entry');\n if (!nextStyle || !nextEntry || !currentStyle || !currentEntry || !window.smrtKitchenUnmount) {\n throw new Error('The Planner bundle cannot be reloaded in this tab');\n }\n await window.smrtKitchenUnmount();\n const style = document.createElement('style');\n style.id = 'smrt-planner-styles';\n style.textContent = nextStyle.textContent;\n currentStyle.replaceWith(style);\n const entry = document.createElement('script');\n entry.id = 'smrt-planner-entry';\n entry.textContent = nextEntry.textContent;\n currentEntry.replaceWith(entry);\n reloadNotice?.remove();\n reloadNotice = undefined;\n }\n } catch {\n if (attemptedVersion) showReloadNotice();\n // A build may be in progress; check again for a newer digest.\n }\n checking = false;\n };\n const timer = setInterval(check, 1500);\n window.addEventListener('pagehide', () => {\n stopped = true;\n clearInterval(timer);\n }, { once: true });\n }).catch(() => {});\n})();\n</script>";
|
|
3
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../../../src/commands/kitchen/mcp/bridge.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,eAAO,MAAM,cAAc,6sOAyKjB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Loopback-only bridge for the live SvelteKit preview during local development. */
|
|
2
|
+
import { type Server as HttpServer } from 'node:http';
|
|
3
|
+
import type { KitchenSession } from './tools.js';
|
|
4
|
+
export declare function startKitchenPreview(session: KitchenSession, port: number, origin: string): Promise<{
|
|
5
|
+
server: HttpServer;
|
|
6
|
+
url: string;
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=preview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../src/commands/kitchen/mcp/preview.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAAgB,KAAK,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,YAAY,CAAC;AAEpE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAqG9C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/commands/kitchen/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../src/commands/kitchen/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAItD,OAAO,EAEL,cAAc,EACd,KAAK,mBAAmB,EACzB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,WAAW,iBAAiB,CAAC;AAQ1C,oFAAoF;AACpF,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG;IACpE,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,cAAc,CAAC;CACzB,CAuLA;AAED,wFAAwF;AACxF,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
|
@@ -5,14 +5,24 @@
|
|
|
5
5
|
* with `cookbook apply`. The host reasons; nothing here calls a model or
|
|
6
6
|
* holds a credential.
|
|
7
7
|
*
|
|
8
|
-
* Plans
|
|
9
|
-
* remotely; `apply_plan` writes `smrt.cookbook.json` into the project.
|
|
8
|
+
* Plans may be stored on local disk, one engine state per plan id. Nothing is
|
|
9
|
+
* stored remotely; `apply_plan` writes `smrt.cookbook.json` into the project.
|
|
10
10
|
*/
|
|
11
11
|
import { type JsonSchema, type PlanSnapshot } from '@happyvertical/smrt-core/cookbook/engine';
|
|
12
12
|
import { type CatalogOptions, type LoadedCatalog } from './catalog.js';
|
|
13
13
|
/** The most plans one server process holds; the oldest is dropped past it. */
|
|
14
14
|
export declare const MAX_PLANS = 20;
|
|
15
15
|
export interface KitchenToolsOptions extends CatalogOptions {
|
|
16
|
+
/** Opt-in static MCP Apps capability probe; does not enable Planner editing. */
|
|
17
|
+
uiSmoke?: boolean;
|
|
18
|
+
/** Self-contained Planner MCP App HTML, built by smrt-planner. */
|
|
19
|
+
plannerUi?: string;
|
|
20
|
+
/** Private local directory for plans that must survive a server restart. */
|
|
21
|
+
plansDir?: string;
|
|
22
|
+
/** Optional loopback port for the live browser preview; 0 chooses a free port. */
|
|
23
|
+
previewPort?: number;
|
|
24
|
+
/** Exact local Vite origin permitted to use the preview bridge. */
|
|
25
|
+
previewOrigin?: string;
|
|
16
26
|
/** Default project template for `apply_plan` (default: smrt-start). */
|
|
17
27
|
template?: string;
|
|
18
28
|
/** Replaces the catalog loader (tests). */
|
|
@@ -49,9 +59,17 @@ export declare class KitchenSession {
|
|
|
49
59
|
private readonly options;
|
|
50
60
|
private loaded?;
|
|
51
61
|
private readonly plans;
|
|
62
|
+
private readonly updates;
|
|
63
|
+
previewUrl?: string;
|
|
64
|
+
/** Plans `open_preview` handed to the browser; the preview bridge serves only these. */
|
|
65
|
+
readonly previewPlans: Set<string>;
|
|
52
66
|
constructor(options: KitchenToolsOptions);
|
|
53
67
|
/** Load the catalog once; a failed load is retried on the next call. */
|
|
54
68
|
catalog(): Promise<LoadedCatalog>;
|
|
69
|
+
private planPath;
|
|
70
|
+
private savePlan;
|
|
71
|
+
/** Serialize the read/check/write transaction across Kitchen processes. */
|
|
72
|
+
private lockPlan;
|
|
55
73
|
private plan;
|
|
56
74
|
/** Validate arguments against a tool's published schema. */
|
|
57
75
|
private static check;
|
|
@@ -61,6 +79,7 @@ export declare class KitchenSession {
|
|
|
61
79
|
private searchRecipes;
|
|
62
80
|
private startPlan;
|
|
63
81
|
private runCommands;
|
|
82
|
+
private runCommandsUnlocked;
|
|
64
83
|
private validatePlan;
|
|
65
84
|
private exportPlan;
|
|
66
85
|
private applyPlan;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../src/commands/kitchen/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../../src/commands/kitchen/mcp/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,OAAO,EAQL,KAAK,UAAU,EACf,KAAK,YAAY,EAElB,MAAM,0CAA0C,CAAC;AAGlD,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,aAAa,EAEnB,MAAM,cAAc,CAAC;AAEtB,8EAA8E;AAC9E,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,MAAM,WAAW,mBAAoB,SAAQ,cAAc;IACzD,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;CAC9C;AAED,4CAA4C;AAC5C,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,UAAU,CAAC;IACxB,YAAY,EAAE,UAAU,CAAC;IACzB,WAAW,EAAE,sBAAsB,CAAC;CACrC;AAED,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;CACd;AA6FD,eAAO,MAAM,aAAa,EAAE,SAAS,qBAAqB,EAgPzD,CAAC;AAiBF,oDAAoD;AACpD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,CAyB/D;AA0BD,mEAAmE;AACnE,qBAAa,cAAc;IAQb,OAAO,CAAC,QAAQ,CAAC,OAAO;IAPpC,OAAO,CAAC,MAAM,CAAC,CAAyB;IACxC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,QAAQ,CAAC,YAAY,cAAqB;gBAEb,OAAO,EAAE,mBAAmB;IAEzD,wEAAwE;IACxE,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAYjC,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,QAAQ;IAehB,2EAA2E;YAC7D,QAAQ;YAqDR,IAAI;IA4ClB,4DAA4D;IAC5D,OAAO,CAAC,MAAM,CAAC,KAAK;IAUd,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACjC,OAAO,CAAC,iBAAiB,CAAC;YAuBf,QAAQ;YAuDR,aAAa;YAkBb,aAAa;YA8Bb,SAAS;YAmDT,WAAW;YA0BX,mBAAmB;YA6GnB,YAAY;YAiCZ,UAAU;YAuBV,SAAS;CAgGxB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/** Opt-in desktop capability probe. This is not the Planner UI. */
|
|
2
|
+
export declare const KITCHEN_UI_URI = "ui://smrt-kitchen/capability-v1.html";
|
|
3
|
+
export declare const KITCHEN_UI_MIME = "text/html;profile=mcp-app";
|
|
4
|
+
export declare const KITCHEN_UI_RESOURCE: {
|
|
5
|
+
uri: string;
|
|
6
|
+
name: string;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
};
|
|
9
|
+
export declare const KITCHEN_UI_CONTENT: {
|
|
10
|
+
text: string;
|
|
11
|
+
_meta: {
|
|
12
|
+
ui: {
|
|
13
|
+
prefersBorder: boolean;
|
|
14
|
+
csp: {
|
|
15
|
+
connectDomains: never[];
|
|
16
|
+
resourceDomains: never[];
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
uri: string;
|
|
21
|
+
name: string;
|
|
22
|
+
mimeType: string;
|
|
23
|
+
};
|
|
24
|
+
/** Load only an operator-selected local artifact; tool arguments never choose files. */
|
|
25
|
+
export declare function loadPlannerUi(file: string, resumePlanId?: string): {
|
|
26
|
+
uri: string;
|
|
27
|
+
name: string;
|
|
28
|
+
text: string;
|
|
29
|
+
_meta: {
|
|
30
|
+
ui: {
|
|
31
|
+
prefersBorder: boolean;
|
|
32
|
+
csp: {
|
|
33
|
+
connectDomains: never[];
|
|
34
|
+
resourceDomains: never[];
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
mimeType: string;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../../../src/commands/kitchen/mcp/ui.ts"],"names":[],"mappings":"AAIA,mEAAmE;AACnE,eAAO,MAAM,cAAc,yCAAyC,CAAC;AACrE,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAE3D,eAAO,MAAM,mBAAmB;;;;CAI/B,CAAC;AAEF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;CAgB9B,CAAC;AAEF,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;;;;;;;;;;;;;;EAmBhE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kitchen.d.ts","sourceRoot":"","sources":["../../src/commands/kitchen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"kitchen.d.ts","sourceRoot":"","sources":["../../src/commands/kitchen.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAyDtD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA4KtD,CAAC"}
|