@graview/primitives 0.1.64 → 0.1.66

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.
Files changed (210) hide show
  1. package/README.md +1 -1
  2. package/dist/app-bar.d.ts +88 -15
  3. package/dist/app-bar.d.ts.map +1 -1
  4. package/dist/app-bar.js +177 -131
  5. package/dist/app-bar.js.map +1 -1
  6. package/dist/app-menu.d.ts +9 -0
  7. package/dist/app-menu.d.ts.map +1 -0
  8. package/dist/app-menu.js +60 -0
  9. package/dist/app-menu.js.map +1 -0
  10. package/dist/bar-activity.d.ts +5 -9
  11. package/dist/bar-activity.d.ts.map +1 -1
  12. package/dist/bar-activity.js +24 -7
  13. package/dist/bar-activity.js.map +1 -1
  14. package/dist/bar-panes.d.ts +5 -5
  15. package/dist/bar-panes.d.ts.map +1 -1
  16. package/dist/bar-panes.js +9 -5
  17. package/dist/bar-panes.js.map +1 -1
  18. package/dist/bar-suggested.d.ts +9 -1
  19. package/dist/bar-suggested.d.ts.map +1 -1
  20. package/dist/bar-suggested.js +11 -17
  21. package/dist/bar-suggested.js.map +1 -1
  22. package/dist/better-bar.d.ts +65 -0
  23. package/dist/better-bar.d.ts.map +1 -0
  24. package/dist/better-bar.js +252 -0
  25. package/dist/better-bar.js.map +1 -0
  26. package/dist/better-panel.d.ts +50 -0
  27. package/dist/better-panel.d.ts.map +1 -0
  28. package/dist/better-panel.js +151 -0
  29. package/dist/better-panel.js.map +1 -0
  30. package/dist/chat.js +1 -1
  31. package/dist/chat.js.map +1 -1
  32. package/dist/editable.d.ts +8 -1
  33. package/dist/editable.d.ts.map +1 -1
  34. package/dist/editable.js +140 -16
  35. package/dist/editable.js.map +1 -1
  36. package/dist/find.js +3 -3
  37. package/dist/find.js.map +1 -1
  38. package/dist/first-look-door.d.ts +2 -2
  39. package/dist/first-look-door.js +2 -2
  40. package/dist/first-look.d.ts.map +1 -1
  41. package/dist/first-look.js +10 -8
  42. package/dist/first-look.js.map +1 -1
  43. package/dist/frame.d.ts +2 -2
  44. package/dist/frame.d.ts.map +1 -1
  45. package/dist/frame.js +1 -1
  46. package/dist/frame.js.map +1 -1
  47. package/dist/here.d.ts +1 -1
  48. package/dist/here.js +2 -2
  49. package/dist/here.js.map +1 -1
  50. package/dist/inbox-pane.d.ts +31 -0
  51. package/dist/inbox-pane.d.ts.map +1 -0
  52. package/dist/inbox-pane.js +89 -0
  53. package/dist/inbox-pane.js.map +1 -0
  54. package/dist/inbox.d.ts +17 -0
  55. package/dist/inbox.d.ts.map +1 -0
  56. package/dist/inbox.js +84 -0
  57. package/dist/inbox.js.map +1 -0
  58. package/dist/index.d.ts +8 -3
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +7 -2
  61. package/dist/index.js.map +1 -1
  62. package/dist/inline-ai-menu.d.ts +4 -2
  63. package/dist/inline-ai-menu.d.ts.map +1 -1
  64. package/dist/inline-ai-menu.js +34 -8
  65. package/dist/inline-ai-menu.js.map +1 -1
  66. package/dist/kind-stop.d.ts.map +1 -1
  67. package/dist/kind-stop.js +204 -21
  68. package/dist/kind-stop.js.map +1 -1
  69. package/dist/lines-key.d.ts.map +1 -1
  70. package/dist/lines-key.js +22 -2
  71. package/dist/lines-key.js.map +1 -1
  72. package/dist/map-panel.js +98 -6
  73. package/dist/map-panel.js.map +1 -1
  74. package/dist/menu-rank.d.ts +25 -0
  75. package/dist/menu-rank.d.ts.map +1 -0
  76. package/dist/menu-rank.js +56 -0
  77. package/dist/menu-rank.js.map +1 -0
  78. package/dist/menu-suggested.d.ts +54 -0
  79. package/dist/menu-suggested.d.ts.map +1 -0
  80. package/dist/menu-suggested.js +140 -0
  81. package/dist/menu-suggested.js.map +1 -0
  82. package/dist/menu-told-door.d.ts +17 -0
  83. package/dist/menu-told-door.d.ts.map +1 -0
  84. package/dist/menu-told-door.js +49 -0
  85. package/dist/menu-told-door.js.map +1 -0
  86. package/dist/menu-told.d.ts +44 -0
  87. package/dist/menu-told.d.ts.map +1 -0
  88. package/dist/menu-told.js +90 -0
  89. package/dist/menu-told.js.map +1 -0
  90. package/dist/menu-words.d.ts +15 -0
  91. package/dist/menu-words.d.ts.map +1 -0
  92. package/dist/menu-words.js +28 -0
  93. package/dist/menu-words.js.map +1 -0
  94. package/dist/notify-sheet.js +2 -2
  95. package/dist/notify-sheet.js.map +1 -1
  96. package/dist/page-better.d.ts +13 -0
  97. package/dist/page-better.d.ts.map +1 -0
  98. package/dist/page-better.js +714 -0
  99. package/dist/page-better.js.map +1 -0
  100. package/dist/page-parts.d.ts +41 -0
  101. package/dist/page-parts.d.ts.map +1 -0
  102. package/dist/page-parts.js +100 -0
  103. package/dist/page-parts.js.map +1 -0
  104. package/dist/pages.d.ts +4 -3
  105. package/dist/pages.d.ts.map +1 -1
  106. package/dist/pages.js +4 -3
  107. package/dist/pages.js.map +1 -1
  108. package/dist/profile.d.ts +1 -10
  109. package/dist/profile.d.ts.map +1 -1
  110. package/dist/profile.js +2 -3
  111. package/dist/profile.js.map +1 -1
  112. package/dist/quick-ask-desk.d.ts +16 -0
  113. package/dist/quick-ask-desk.d.ts.map +1 -1
  114. package/dist/quick-ask-desk.js +20 -0
  115. package/dist/quick-ask-desk.js.map +1 -1
  116. package/dist/quick-ask-door.d.ts.map +1 -1
  117. package/dist/quick-ask-door.js +5 -0
  118. package/dist/quick-ask-door.js.map +1 -1
  119. package/dist/quick-ask-plan.d.ts +52 -0
  120. package/dist/quick-ask-plan.d.ts.map +1 -0
  121. package/dist/quick-ask-plan.js +112 -0
  122. package/dist/quick-ask-plan.js.map +1 -0
  123. package/dist/quick-ask.d.ts.map +1 -1
  124. package/dist/quick-ask.js +341 -19
  125. package/dist/quick-ask.js.map +1 -1
  126. package/dist/scene-bar.d.ts +1 -1
  127. package/dist/scene-bar.d.ts.map +1 -1
  128. package/dist/scene-bar.js +4 -7
  129. package/dist/scene-bar.js.map +1 -1
  130. package/dist/scene-css.d.ts.map +1 -1
  131. package/dist/scene-css.js +16 -6
  132. package/dist/scene-css.js.map +1 -1
  133. package/dist/scene-places.d.ts +3 -2
  134. package/dist/scene-places.d.ts.map +1 -1
  135. package/dist/scene-places.js +47 -8
  136. package/dist/scene-places.js.map +1 -1
  137. package/dist/scene.d.ts +2 -0
  138. package/dist/scene.d.ts.map +1 -1
  139. package/dist/scene.js +2 -0
  140. package/dist/scene.js.map +1 -1
  141. package/dist/section-better.d.ts +76 -0
  142. package/dist/section-better.d.ts.map +1 -0
  143. package/dist/section-better.js +529 -0
  144. package/dist/section-better.js.map +1 -0
  145. package/dist/section-door.d.ts +39 -0
  146. package/dist/section-door.d.ts.map +1 -0
  147. package/dist/section-door.js +66 -0
  148. package/dist/section-door.js.map +1 -0
  149. package/dist/section-menu.d.ts +32 -0
  150. package/dist/section-menu.d.ts.map +1 -0
  151. package/dist/section-menu.js +229 -0
  152. package/dist/section-menu.js.map +1 -0
  153. package/dist/section-outline.d.ts +8 -0
  154. package/dist/section-outline.d.ts.map +1 -0
  155. package/dist/section-outline.js +48 -0
  156. package/dist/section-outline.js.map +1 -0
  157. package/dist/section-words.d.ts +32 -0
  158. package/dist/section-words.d.ts.map +1 -0
  159. package/dist/section-words.js +116 -0
  160. package/dist/section-words.js.map +1 -0
  161. package/dist/shell.d.ts +5 -1
  162. package/dist/shell.d.ts.map +1 -1
  163. package/dist/shell.js +5 -2
  164. package/dist/shell.js.map +1 -1
  165. package/dist/subject.js +2 -2
  166. package/dist/subject.js.map +1 -1
  167. package/dist/suggested.d.ts +21 -10
  168. package/dist/suggested.d.ts.map +1 -1
  169. package/dist/suggested.js +43 -64
  170. package/dist/suggested.js.map +1 -1
  171. package/dist/told-card.d.ts +66 -0
  172. package/dist/told-card.d.ts.map +1 -0
  173. package/dist/told-card.js +197 -0
  174. package/dist/told-card.js.map +1 -0
  175. package/dist/told-listed.d.ts +14 -0
  176. package/dist/told-listed.d.ts.map +1 -0
  177. package/dist/told-listed.js +46 -0
  178. package/dist/told-listed.js.map +1 -0
  179. package/dist/told-panel-door.d.ts +17 -0
  180. package/dist/told-panel-door.d.ts.map +1 -0
  181. package/dist/told-panel-door.js +6 -0
  182. package/dist/told-panel-door.js.map +1 -0
  183. package/dist/told-panel.d.ts +19 -0
  184. package/dist/told-panel.d.ts.map +1 -0
  185. package/dist/told-panel.js +83 -0
  186. package/dist/told-panel.js.map +1 -0
  187. package/dist/told-ui.d.ts +5 -0
  188. package/dist/told-ui.d.ts.map +1 -0
  189. package/dist/told-ui.js +12 -0
  190. package/dist/told-ui.js.map +1 -0
  191. package/dist/when-words.d.ts +21 -0
  192. package/dist/when-words.d.ts.map +1 -0
  193. package/dist/when-words.js +43 -0
  194. package/dist/when-words.js.map +1 -0
  195. package/dist/workbench/activity.d.ts +44 -0
  196. package/dist/workbench/activity.d.ts.map +1 -1
  197. package/dist/workbench/activity.js +74 -59
  198. package/dist/workbench/activity.js.map +1 -1
  199. package/dist/workbench/ai-entries.d.ts.map +1 -1
  200. package/dist/workbench/ai-entries.js +23 -2
  201. package/dist/workbench/ai-entries.js.map +1 -1
  202. package/dist/workbench/back-out.js +1 -1
  203. package/dist/workbench/back-out.js.map +1 -1
  204. package/dist/workbench/inspector.d.ts.map +1 -1
  205. package/dist/workbench/inspector.js +366 -27
  206. package/dist/workbench/inspector.js.map +1 -1
  207. package/dist/workbench/standing.d.ts.map +1 -1
  208. package/dist/workbench/standing.js +1 -1
  209. package/dist/workbench/standing.js.map +1 -1
  210. package/package.json +6 -6
@@ -0,0 +1,52 @@
1
+ import { type PlannedEdits } from "@graview/core/catalog";
2
+ import type { AnswerMissing } from "@graview/tools/inline-ai";
3
+ import type { ComposeChangeHost, ReshapeProposal } from "@graview/tools/reshape";
4
+ import type { InlineEnv } from "./inline-ai-env.js";
5
+ /**
6
+ * A MISSING CAPABILITY, OFFERED AS ONE PLAN THAT FINISHES THE ASK (Roadmap
7
+ * f-menu-type-anything). Nick: "I'd say 'assign these to nick' and it'd say
8
+ * 'tasks have no assignment, but I can add that property, and add a People
9
+ * kind and add Nick to it and assign him to them all… should I?'"
10
+ *
11
+ * The model names the need (`AnswerMissing.need`: a link, or a field); code
12
+ * writes the least change that gives it (`planEdits`: the kind the link
13
+ * points to where the app has none, the link or the field, the one act that
14
+ * sets it — no rule, no new place), then the records that finish the ask
15
+ * (the person the words name, found or made; each record the list shows
16
+ * given to them). Every step is said from those edits and records, in plain
17
+ * words, numbered, each a thing that will happen. Where the host lends its
18
+ * composer (`composeChange`) the changed app is judged by the checker and a
19
+ * scratch store rehearses every record first; a plan that would fail is
20
+ * refused, never offered. Where the seat may not change the app — or the app
21
+ * is declared in code with no host to change it — the whole plan is still
22
+ * said, with who would add its first steps. Fetched with the first such
23
+ * answer; no page carries it up front.
24
+ */
25
+ /** One step of the plan, as the card numbers it. */
26
+ export interface PlanPart {
27
+ readonly part: "app" | "record";
28
+ readonly said: string;
29
+ }
30
+ /** The plan, as the card says it and the host is handed it. */
31
+ export interface AppPlan {
32
+ /** What the card says above the steps: what is missing, and "Should I?" where Yes is offered — or who would make the first steps. */
33
+ readonly question: string;
34
+ readonly parts: readonly PlanPart[];
35
+ /** What Yes hands the host — the change to the app as edits, and the records — where this seat may change the app. */
36
+ readonly proposal?: ReshapeProposal;
37
+ /** Who would make the change, where Yes is not offered. */
38
+ readonly whoMay?: string;
39
+ }
40
+ /** The plan for a missing capability, or a refusal in words when it could not be composed or would fail. */
41
+ export declare function planFor(env: InlineEnv, options: {
42
+ readonly said: string;
43
+ readonly missing: AnswerMissing;
44
+ readonly members: readonly string[];
45
+ readonly host: boolean;
46
+ readonly compose?: ComposeChangeHost;
47
+ readonly where?: string;
48
+ }): Promise<AppPlan | {
49
+ readonly refused: string;
50
+ }>;
51
+ export type { PlannedEdits };
52
+ //# sourceMappingURL=quick-ask-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-ask-plan.d.ts","sourceRoot":"","sources":["../src/quick-ask-plan.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,oDAAoD;AACpD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,+DAA+D;AAC/D,MAAM,WAAW,OAAO;IACtB,qIAAqI;IACrI,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,sHAAsH;IACtH,QAAQ,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC;IACpC,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAgCD,4GAA4G;AAC5G,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,OAAO,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA6E9R;AAED,YAAY,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { nounOf, pluralOf, Store } from "@graview/core";
2
+ import { planEdits } from "@graview/core/catalog";
3
+ const capital = (words) => words.charAt(0).toUpperCase() + words.slice(1);
4
+ const vowel = (word) => /^(?:[aeio]|u(?![sn]i|se|ser))/i.test(word);
5
+ const slug = (words) => words.toLowerCase().normalize("NFKD").replace(/[̀-ͯ]/g, "").replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "") || "one";
6
+ const range = (from, to) => (from === to ? `step ${from}` : `steps ${from}–${to}`);
7
+ /** The app's kinds as a document reads them, for an app declared in code with none remembered: their words, fields and links, no acts. */
8
+ function documentOfSchema(env) {
9
+ const schema = env.store.schema;
10
+ const kinds = Object.fromEntries(schema.definitions.map((definition) => [
11
+ definition.kind,
12
+ { noun: nounOf(definition, definition.kind), plural: pluralOf(schema, definition.kind), fields: Object.fromEntries(Object.keys(definition.fields.shape ?? {}).map((field) => [field, { type: "string" }])), edges: definition.edges ?? {} },
13
+ ]));
14
+ return { name: env.app.name ?? "app", kinds, acts: {} };
15
+ }
16
+ /** Who may change the app, in words: the roles every act is granted to ("an owner"), else whoever may. */
17
+ function whoMayChange(env) {
18
+ const owners = (env.store.policy?.grants ?? []).filter((grant) => grant.mutations === "*" && !grant.self && grant.roles !== "*").flatMap((grant) => grant.roles);
19
+ const named = [...new Set(owners)];
20
+ return named.length > 0 ? `${vowel(named[0]) ? "an" : "a"} ${named.join(" or ")}` : "whoever may change this app";
21
+ }
22
+ /** The place the list is, as the steps say it: "in This week", else "here". */
23
+ function whereOf(env) {
24
+ const place = env.place ? env.places.find((one) => one.as === env.place) : undefined;
25
+ return place ? `in ${place.title}` : "here";
26
+ }
27
+ /** The plan for a missing capability, or a refusal in words when it could not be composed or would fail. */
28
+ export async function planFor(env, options) {
29
+ const { missing } = options;
30
+ if (!missing.need)
31
+ return { refused: missing.said };
32
+ const reshape = await import("@graview/tools/reshape");
33
+ const remembered = reshape.documentOfApp(env.app);
34
+ const document = remembered ?? documentOfSchema(env);
35
+ const planned = planEdits(document, missing.need);
36
+ if ("refused" in planned)
37
+ return { refused: `${missing.said} ${planned.refused}` };
38
+ const steps = planned.steps.map((said) => ({ part: "app", said }));
39
+ const appSteps = steps.length;
40
+ /* THE RECORDS THE PLAN ACTS ON are of the kind it changes: a list given where its tasks were meant is retargeted by code to the records it holds, never refused in words. */
41
+ const ofKind = (ids) => ids.filter((id) => env.store.graph.getNode(id)?.kind === planned.on);
42
+ const heldOfKind = (id) => [...env.store.graph.in(id), ...env.store.graph.out(id)].filter((node) => node.kind === planned.on).map((node) => node.id);
43
+ const members = ofKind(options.members).length > 0 ? ofKind(options.members) : [...new Set(options.members.flatMap(heldOfKind))];
44
+ /* THE RECORDS THAT FINISH THE ASK, each said as it will happen. */
45
+ const records = [];
46
+ const count = members.length;
47
+ const kindDoc = (kind) => document.kinds[kind] ?? undefined;
48
+ const plural = (kind) => (kindDoc(kind)?.plural ?? `${kindDoc(kind)?.noun ?? kind}s`).toLowerCase();
49
+ const noun = (kind) => (kindDoc(kind)?.noun ?? kind).toLowerCase();
50
+ const where = options.where ? `in ${options.where}` : whereOf(env);
51
+ if (count === 0)
52
+ return { refused: `${missing.said} There is nothing here to do it to.` };
53
+ const these = count === 1 ? `the ${noun(planned.on)} ${where}` : `the ${count} ${plural(planned.on)} ${where}`;
54
+ const called = capital(planned.called);
55
+ if (planned.relation && planned.to) {
56
+ const who = missing.who;
57
+ if (!who)
58
+ return { refused: `${missing.said} Say whom to give them to.` };
59
+ const toPlural = planned.made ? capital(planned.edits[0].plural ?? "people") : capital(plural(planned.to));
60
+ const found = planned.made ? undefined : env.store.graph.allNodes().find((node) => node.kind === planned.to && Object.values(node).some((value) => typeof value === "string" && value.toLowerCase() === who.toLowerCase()));
61
+ let whom = found?.id;
62
+ if (!whom) {
63
+ whom = `${planned.to}-${slug(who)}`;
64
+ const makes = planned.makes ?? env.store.allMutations().find((mutation) => mutation.creates?.includes(planned.to))?.name;
65
+ if (!makes) {
66
+ const some = env.store.graph.allNodes().filter((node) => node.kind === planned.to).slice(0, 3).map((node) => String(node["label"] ?? node["name"] ?? "")).filter(Boolean);
67
+ return { refused: `${missing.said} There is nobody called ${who} among the ${toPlural.toLowerCase()} here${some.length > 0 ? ` (${some.join(", ")})` : ""}, and no way to add one from here.` };
68
+ }
69
+ records.push({ name: makes, args: { name: who }, mintedHint: whom });
70
+ steps.push({ part: "record", said: `Add ${who} to ${toPlural}.` });
71
+ }
72
+ for (const id of members)
73
+ records.push({ name: planned.act, args: { id, [planned.arg]: whom } });
74
+ // "assigned to" → "Assign Nick to the 5 tasks in This week."; any other link, said as setting it.
75
+ const verb = /^(\w+?)ed to$/i.exec(planned.called)?.[1];
76
+ steps.push({ part: "record", said: verb ? `${capital(verb.toLowerCase())} ${who} to ${these}.` : `Set “${called}” to ${who} on ${these}.` });
77
+ }
78
+ else if (planned.field) {
79
+ const value = missing.value;
80
+ if (value === undefined)
81
+ return { refused: `${missing.said} Say what to set it to.` };
82
+ for (const id of members)
83
+ records.push({ name: planned.act, args: { id, [planned.arg]: value } });
84
+ steps.push({ part: "record", said: `Set “${called}” to ${value} on ${these}.` });
85
+ }
86
+ const numbered = steps.length;
87
+ /* WHO MAKES THE FIRST STEPS: this seat, through the host — or, said once, whoever may. */
88
+ const may = Boolean(remembered) && options.host && options.compose !== undefined && reshape.mayChangeDeclaration(env.store, env.principal);
89
+ if (!may) {
90
+ const whoMay = !remembered ? "whoever develops this app" : !options.host || !options.compose ? "whoever hosts this app" : whoMayChange(env);
91
+ return { question: `${missing.said} ${capital(whoMay)} would add ${range(1, appSteps)}; then I can do ${range(appSteps + 1, numbered)}.`, parts: steps, whoMay };
92
+ }
93
+ /* COMPOSED AND REHEARSED WHOLE before it is offered: the changed app, judged by the checker, and these records in it, as this person. */
94
+ const composed = options.compose({ document: remembered, edits: planned.edits });
95
+ // A checker's sentence is never a person's: the change could not be made, said plainly.
96
+ if (!composed.ok)
97
+ return { refused: `${missing.said} That change could not be made here.` };
98
+ const app = composed.app;
99
+ try {
100
+ const scratch = new Store({ schema: app.schema, mutations: app.mutations ?? [], invariants: app.invariants ?? [], ...(app.policy ? { policy: app.policy } : {}), snapshot: env.store.graph.snapshot() });
101
+ scratch.previewAll(records, { author: env.principal });
102
+ }
103
+ catch {
104
+ return { refused: `${missing.said} I could not make that work here.` };
105
+ }
106
+ return {
107
+ question: `${missing.said} I can do it in ${numbered} steps. Should I?`,
108
+ parts: steps,
109
+ proposal: { said: options.said, add: [], drop: [], card: { said: steps.map((one) => one.said).join(" "), adds: [], keeps: [], drops: [], breaking: [] }, edits: planned.edits, records, via: `ai:${env.ai.name ?? "model"}` },
110
+ };
111
+ }
112
+ //# sourceMappingURL=quick-ask-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quick-ask-plan.js","sourceRoot":"","sources":["../src/quick-ask-plan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"quick-ask.d.ts","sourceRoot":"","sources":["../src/quick-ask.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEzE,OAAO,YAAY,CAAC;AAEpB;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B;AAkCD,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,iBAAiB,+BAmVvE"}
1
+ {"version":3,"file":"quick-ask.d.ts","sourceRoot":"","sources":["../src/quick-ask.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAMzE,OAAO,YAAY,CAAC;AAiBpB;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC;CAC5B;AAiED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,iBAAiB,+BA2kBvE"}