@softacus-software/elwis-data-mcp 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +6 -0
  3. package/README.md +183 -0
  4. package/dist/app-scope.js +92 -0
  5. package/dist/app-scope.js.map +1 -0
  6. package/dist/artifact-read.js +114 -0
  7. package/dist/artifact-read.js.map +1 -0
  8. package/dist/audit.js +36 -0
  9. package/dist/audit.js.map +1 -0
  10. package/dist/builders/artifact-type-execute.js +100 -0
  11. package/dist/builders/artifact-type-execute.js.map +1 -0
  12. package/dist/builders/artifact-type-plan.js +139 -0
  13. package/dist/builders/artifact-type-plan.js.map +1 -0
  14. package/dist/builders/design-interview.js +246 -0
  15. package/dist/builders/design-interview.js.map +1 -0
  16. package/dist/builders/entity-lifecycle-execute.js +12 -0
  17. package/dist/builders/entity-lifecycle-execute.js.map +1 -0
  18. package/dist/builders/entity-lifecycle-plan.js +345 -0
  19. package/dist/builders/entity-lifecycle-plan.js.map +1 -0
  20. package/dist/builders/links-execute.js +50 -0
  21. package/dist/builders/links-execute.js.map +1 -0
  22. package/dist/builders/links-plan.js +62 -0
  23. package/dist/builders/links-plan.js.map +1 -0
  24. package/dist/builders/page-execute.js +38 -0
  25. package/dist/builders/page-execute.js.map +1 -0
  26. package/dist/builders/page-plan.js +148 -0
  27. package/dist/builders/page-plan.js.map +1 -0
  28. package/dist/builders/records-execute.js +24 -0
  29. package/dist/builders/records-execute.js.map +1 -0
  30. package/dist/builders/records-lifecycle-execute.js +30 -0
  31. package/dist/builders/records-lifecycle-execute.js.map +1 -0
  32. package/dist/builders/records-lifecycle-plan.js +199 -0
  33. package/dist/builders/records-lifecycle-plan.js.map +1 -0
  34. package/dist/builders/records-plan.js +74 -0
  35. package/dist/builders/records-plan.js.map +1 -0
  36. package/dist/builders/update-page-execute.js +38 -0
  37. package/dist/builders/update-page-execute.js.map +1 -0
  38. package/dist/builders/update-page-plan.js +137 -0
  39. package/dist/builders/update-page-plan.js.map +1 -0
  40. package/dist/builders/workflow-execute.js +11 -0
  41. package/dist/builders/workflow-execute.js.map +1 -0
  42. package/dist/builders/workflow-plan.js +115 -0
  43. package/dist/builders/workflow-plan.js.map +1 -0
  44. package/dist/cli/client-configs.js +98 -0
  45. package/dist/cli/client-configs.js.map +1 -0
  46. package/dist/cli/login.js +64 -0
  47. package/dist/cli/login.js.map +1 -0
  48. package/dist/cli/prompter.js +77 -0
  49. package/dist/cli/prompter.js.map +1 -0
  50. package/dist/cli/setup.js +214 -0
  51. package/dist/cli/setup.js.map +1 -0
  52. package/dist/config.js +38 -0
  53. package/dist/config.js.map +1 -0
  54. package/dist/confirm.js +22 -0
  55. package/dist/confirm.js.map +1 -0
  56. package/dist/elwis-api.js +96 -0
  57. package/dist/elwis-api.js.map +1 -0
  58. package/dist/http-client.js +142 -0
  59. package/dist/http-client.js.map +1 -0
  60. package/dist/index.js +20 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/jwt.js +18 -0
  63. package/dist/jwt.js.map +1 -0
  64. package/dist/prune.js +9 -0
  65. package/dist/prune.js.map +1 -0
  66. package/dist/resolve.js +71 -0
  67. package/dist/resolve.js.map +1 -0
  68. package/dist/result.js +16 -0
  69. package/dist/result.js.map +1 -0
  70. package/dist/server.js +82 -0
  71. package/dist/server.js.map +1 -0
  72. package/dist/session-store.js +51 -0
  73. package/dist/session-store.js.map +1 -0
  74. package/dist/tools/build-artifact-type.js +36 -0
  75. package/dist/tools/build-artifact-type.js.map +1 -0
  76. package/dist/tools/build-links.js +33 -0
  77. package/dist/tools/build-links.js.map +1 -0
  78. package/dist/tools/build-page.js +40 -0
  79. package/dist/tools/build-page.js.map +1 -0
  80. package/dist/tools/build-workflow.js +36 -0
  81. package/dist/tools/build-workflow.js.map +1 -0
  82. package/dist/tools/create-application.js +44 -0
  83. package/dist/tools/create-application.js.map +1 -0
  84. package/dist/tools/create-artifacts.js +33 -0
  85. package/dist/tools/create-artifacts.js.map +1 -0
  86. package/dist/tools/create-folder.js +55 -0
  87. package/dist/tools/create-folder.js.map +1 -0
  88. package/dist/tools/delete-artifacts.js +33 -0
  89. package/dist/tools/delete-artifacts.js.map +1 -0
  90. package/dist/tools/delete-entity.js +35 -0
  91. package/dist/tools/delete-entity.js.map +1 -0
  92. package/dist/tools/explain-access.js +40 -0
  93. package/dist/tools/explain-access.js.map +1 -0
  94. package/dist/tools/get-entity.js +36 -0
  95. package/dist/tools/get-entity.js.map +1 -0
  96. package/dist/tools/get-page.js +75 -0
  97. package/dist/tools/get-page.js.map +1 -0
  98. package/dist/tools/list-apps.js +22 -0
  99. package/dist/tools/list-apps.js.map +1 -0
  100. package/dist/tools/list-entities.js +43 -0
  101. package/dist/tools/list-entities.js.map +1 -0
  102. package/dist/tools/propose-page-design.js +17 -0
  103. package/dist/tools/propose-page-design.js.map +1 -0
  104. package/dist/tools/raw-api.js +132 -0
  105. package/dist/tools/raw-api.js.map +1 -0
  106. package/dist/tools/read-artifacts.js +197 -0
  107. package/dist/tools/read-artifacts.js.map +1 -0
  108. package/dist/tools/resolve-entity.js +22 -0
  109. package/dist/tools/resolve-entity.js.map +1 -0
  110. package/dist/tools/update-artifacts.js +33 -0
  111. package/dist/tools/update-artifacts.js.map +1 -0
  112. package/dist/tools/update-entity.js +41 -0
  113. package/dist/tools/update-entity.js.map +1 -0
  114. package/dist/tools/update-page.js +40 -0
  115. package/dist/tools/update-page.js.map +1 -0
  116. package/dist/write-gate.js +25 -0
  117. package/dist/write-gate.js.map +1 -0
  118. package/package.json +55 -0
@@ -0,0 +1,139 @@
1
+ import { z } from 'zod';
2
+ import { RequireApplicationId, ResolveOneId } from '../resolve.js';
3
+ const BASE = z.enum(['TEXT', 'HTML', 'MARKDOWN', 'HYPERLINK', 'DECIMAL', 'INTEGER', 'BOOLEAN', 'DATE', 'TIME', 'DATETIME', 'FILE', 'USER']);
4
+ const KIND = z.enum(['SIMPLE', 'ENUMERATED', 'BOUNDED', 'COUNTER', 'UNIT', 'CUSTOM-UNIT']);
5
+ const SIMPLE_PRIMARY = new Set(['TEXT', 'INTEGER', 'DECIMAL', 'BOOLEAN', 'DATE', 'TIME', 'DATETIME']);
6
+ export const AttributeInput = z.object({
7
+ name: z.string().min(1),
8
+ alias: z.string().optional(),
9
+ baseDataType: BASE,
10
+ kind: KIND.default('SIMPLE'),
11
+ enumeratedValues: z.array(z.string()).optional(),
12
+ multipleValues: z.boolean().default(false),
13
+ multipleValuesOrdering: z.enum(['ASC', 'DESC', 'NONE']).optional(),
14
+ minimum: z.union([z.string(), z.number()]).transform(String).optional(),
15
+ maximum: z.union([z.string(), z.number()]).transform(String).optional(),
16
+ units: z.array(z.object({ name: z.string(), symbol: z.string(), base: z.string() })).optional(),
17
+ siUnit: z.enum(['TIME', 'LENGTH', 'MASS', 'AREA', 'VOLUME', 'SPEED']).optional(),
18
+ counterFormat: z.string().optional(),
19
+ counterNextValue: z.number().int().positive().optional(),
20
+ fileArtifactTypeId: z.string().optional(),
21
+ description: z.string().optional(),
22
+ uri: z.string().optional(),
23
+ icon: z.string().optional(),
24
+ private: z.boolean().optional(),
25
+ mandatory: z.boolean().default(false),
26
+ existingDataTypeId: z.string().optional(),
27
+ existingAttributeId: z.string().optional(),
28
+ initialValue: z.unknown().optional(),
29
+ help: z.string().optional(),
30
+ regexValidator: z.string().optional(),
31
+ regexFlags: z.string().optional(),
32
+ equation: z.string().optional(),
33
+ equationRecalculate: z.boolean().optional(),
34
+ entityFilter: z.string().optional(),
35
+ }).strict();
36
+ export const BuildArtifactTypeInput = z.object({
37
+ applicationId: z.string().optional(),
38
+ applicationName: z.string().optional(),
39
+ name: z.string().min(1),
40
+ alias: z.string().optional(),
41
+ description: z.string().default(''),
42
+ icon: z.string().default(''),
43
+ format: z.enum(['TEXT', 'FILE', 'MODULE', 'USER', 'TREE_ROOT']).default('TEXT'),
44
+ primaryAttribute: z.string().optional(),
45
+ attributes: z.array(AttributeInput).min(1),
46
+ color: z.string().optional(),
47
+ delimiter: z.string().nullable().optional(),
48
+ isLoggingDisabled: z.boolean().optional(),
49
+ inheritableAcl: z.boolean().optional(),
50
+ defaultIsHeading: z.boolean().optional(),
51
+ defaultFolder: z.string().optional(),
52
+ defaultPage: z.string().optional(),
53
+ defaultWidgets: z.object({ artifactWidgetTemplateId: z.string().nullable(), cardWidgetTemplateId: z.string().nullable() }).optional(),
54
+ avrMapper: z.record(z.string(), z.unknown()).optional(),
55
+ avrTriggers: z.array(z.enum(['CREATE', 'UPDATE', 'DEMAND'])).optional(),
56
+ preferredArtifactTypes: z.array(z.string()).optional(),
57
+ dryRun: z.boolean().default(false),
58
+ confirm: z.string().optional().describe('Confirmation token from the previous preview of this exact plan; required to execute when confirmation mode is on'),
59
+ });
60
+ export async function BuildArtifactTypePlan(api, raw) {
61
+ const input = BuildArtifactTypeInput.parse(raw);
62
+ const applicationId = await RequireApplicationId(api, input);
63
+ const existingType = (await api.list('artifact-type', { applicationId: { $oid: applicationId }, name: input.name })).find(r => r.name === input.name);
64
+ if (existingType) {
65
+ return {
66
+ applicationId,
67
+ reuse: { id: existingType.id, name: existingType.name },
68
+ dataTypes: [],
69
+ attributes: [],
70
+ artifactType: { name: input.name, format: input.format, primaryAttributeName: '', description: '', icon: '' },
71
+ };
72
+ }
73
+ const dataTypes = [];
74
+ const attributes = [];
75
+ for (const a of input.attributes) {
76
+ const baseDataType = a.kind === 'COUNTER' ? 'TEXT' : a.baseDataType;
77
+ const dtName = a.kind === 'SIMPLE' ? BaseTypeLabel(baseDataType) : a.name;
78
+ let dt;
79
+ if (a.existingDataTypeId) {
80
+ dt = { name: dtName, action: 'reuse', id: a.existingDataTypeId, detail: {}, reason: 'explicit-id' };
81
+ }
82
+ else if (a.kind === 'SIMPLE') {
83
+ const simpleList = await api.list('data-type', { applicationId: { $oid: applicationId }, baseDataType, kind: 'SIMPLE' });
84
+ const existing = simpleList.find(r => r.name === dtName) ?? simpleList[0];
85
+ dt = existing
86
+ ? { name: existing.name, action: 'reuse', id: existing.id, detail: {}, reason: simpleList.find(r => r.name === dtName) ? 'name-match' : 'simple-type-lookup' }
87
+ : { name: dtName, action: 'create', detail: { applicationId, name: dtName, description: a.description ?? '', uri: a.uri ?? '', baseDataType, kind: 'SIMPLE' } };
88
+ }
89
+ else {
90
+ const named = (await api.list('data-type', { applicationId: { $oid: applicationId }, name: dtName })).find(r => r.name === dtName);
91
+ dt = named
92
+ ? { name: dtName, action: 'reuse', id: named.id, detail: {}, reason: 'name-match' }
93
+ : { name: dtName, action: 'create', detail: { applicationId, name: dtName, description: a.description ?? '', uri: a.uri ?? '', baseDataType, kind: a.kind, ...(a.kind === 'ENUMERATED' ? { values: (a.enumeratedValues ?? []).map(v => ({ value: v, label: v, icon: '', uri: '', textColor: null, backgroundColor: null, iconColor: null })) } : {}), ...(a.minimum !== undefined ? { minimum: a.minimum } : {}), ...(a.maximum !== undefined ? { maximum: a.maximum } : {}), ...(a.units !== undefined ? { units: a.units } : {}), ...(a.siUnit !== undefined ? { siUnit: a.siUnit } : {}) } };
94
+ }
95
+ dataTypes.push(dt);
96
+ const needsFile = baseDataType === 'HTML' || baseDataType === 'FILE';
97
+ const existingAttr = a.existingAttributeId
98
+ ? { id: a.existingAttributeId, name: a.name }
99
+ : (await api.list('attribute', { applicationId: { $oid: applicationId }, name: a.name })).find(r => r.name === a.name);
100
+ const attrItem = existingAttr
101
+ ? { name: a.name, action: 'reuse', id: existingAttr.id, detail: {}, isMandatory: a.mandatory, reason: a.existingAttributeId ? 'explicit-id' : 'name-match', dataTypeRef: dt.name }
102
+ : { name: a.name, action: 'create', detail: { applicationId, name: a.name, alias: a.alias, description: a.description ?? '', uri: a.uri ?? '', multipleValues: a.multipleValues, ...(a.icon !== undefined ? { icon: a.icon } : {}), ...(a.private !== undefined ? { private: a.private } : {}), ...(a.multipleValues ? { multipleValuesOrdering: a.multipleValuesOrdering ?? 'NONE' } : {}), ...(a.kind === 'COUNTER' ? { counterFormat: a.counterFormat ?? '${value, format: arabic}', counterNextValue: a.counterNextValue ?? 1 } : {}) }, isMandatory: a.mandatory, dataTypeRef: dt.name };
103
+ attrItem.needsFile = needsFile;
104
+ const mapEntry = {};
105
+ if (a.initialValue !== undefined)
106
+ mapEntry.initialValue = a.initialValue;
107
+ if (a.help !== undefined)
108
+ mapEntry.help = a.help;
109
+ if (a.regexValidator !== undefined)
110
+ mapEntry.regexValidator = a.regexValidator;
111
+ if (a.regexFlags !== undefined)
112
+ mapEntry.regexFlags = a.regexFlags;
113
+ if (a.equation !== undefined)
114
+ mapEntry.equation = a.equation;
115
+ if (a.equationRecalculate !== undefined)
116
+ mapEntry.equationRecalculate = a.equationRecalculate;
117
+ if (a.entityFilter !== undefined)
118
+ mapEntry.entityFilter = a.entityFilter;
119
+ if (Object.keys(mapEntry).length > 0)
120
+ attrItem.mapEntry = mapEntry;
121
+ if (a.fileArtifactTypeId)
122
+ attrItem.fileArtifactTypeId = a.fileArtifactTypeId;
123
+ attributes.push(attrItem);
124
+ }
125
+ const primaryAttributeName = input.primaryAttribute ?? (input.attributes.find(a => SIMPLE_PRIMARY.has(a.baseDataType)) ?? input.attributes[0]).name;
126
+ if (input.preferredArtifactTypes !== undefined && input.format !== 'MODULE') {
127
+ throw new Error('preferredArtifactTypes is only valid when format is MODULE');
128
+ }
129
+ const preferredArtifactTypeIds = input.preferredArtifactTypes !== undefined
130
+ ? await Promise.all(input.preferredArtifactTypes.map(ref => ResolveOneId(api, 'artifact-type', applicationId, ref)))
131
+ : undefined;
132
+ const defaultFolderId = input.defaultFolder !== undefined ? await ResolveOneId(api, 'folder', applicationId, input.defaultFolder) : undefined;
133
+ const defaultPageId = input.defaultPage !== undefined ? await ResolveOneId(api, 'page', applicationId, input.defaultPage) : undefined;
134
+ return { applicationId, dataTypes, attributes, artifactType: { name: input.name, format: input.format, primaryAttributeName, description: input.description, icon: input.icon, ...(input.color !== undefined ? { color: input.color } : {}), ...(input.delimiter !== undefined ? { delimiter: input.delimiter } : {}), ...(input.isLoggingDisabled !== undefined ? { isLoggingDisabled: input.isLoggingDisabled } : {}), ...(input.inheritableAcl !== undefined ? { inheritableAcl: input.inheritableAcl } : {}), ...(input.defaultIsHeading !== undefined ? { defaultIsHeading: input.defaultIsHeading } : {}), ...(defaultFolderId !== undefined ? { defaultFolderId } : {}), ...(defaultPageId !== undefined ? { defaultPageId } : {}), ...(input.defaultWidgets !== undefined ? { defaultWidgets: input.defaultWidgets } : {}), ...(input.avrMapper !== undefined ? { avrMapper: input.avrMapper } : {}), ...(input.avrTriggers !== undefined ? { avrTriggers: input.avrTriggers } : {}), ...(preferredArtifactTypeIds !== undefined ? { preferredArtifactTypeIds } : {}) } };
135
+ }
136
+ function BaseTypeLabel(base) {
137
+ return base.charAt(0) + base.slice(1).toLowerCase();
138
+ }
139
+ //# sourceMappingURL=artifact-type-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-type-plan.js","sourceRoot":"","sources":["../../src/builders/artifact-type-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,246 @@
1
+ import { z } from 'zod';
2
+ export const ProposePageDesignInput = z.object({
3
+ topic: z.string().min(1).max(500).describe('What the page is about, in the user\'s words'),
4
+ genre: z.string().optional().describe('Page kind once known: wiki, storefront, landing, booking, blog, dashboard, or custom'),
5
+ answers: z
6
+ .record(z.string(), z.string())
7
+ .default({})
8
+ .describe('Answers collected from the user so far, keyed by question id; include corrected assumptions here under their id'),
9
+ assumptionsConfirmed: z.boolean().default(false).describe('Set true once the user has confirmed the stated assumptions (or corrected them via answers)'),
10
+ });
11
+ export const COLOR_FAMILIES = {
12
+ yellow: [
13
+ { name: 'amber', hex: '#f59e0b', hint: 'warm, like a taxi cab' },
14
+ { name: 'lemon', hex: '#fde047', hint: 'bright, like a highlighter' },
15
+ { name: 'gold', hex: '#eab308', hint: 'rich, classic gold' },
16
+ { name: 'mustard', hex: '#ca8a04', hint: 'muted, earthy' },
17
+ ],
18
+ purple: [
19
+ { name: 'violet', hex: '#a855f7', hint: 'vivid, tech-brand purple' },
20
+ { name: 'royal', hex: '#6d28d9', hint: 'deep and formal' },
21
+ { name: 'lavender', hex: '#c4b5fd', hint: 'soft pastel' },
22
+ ],
23
+ red: [
24
+ { name: 'crimson', hex: '#dc2626', hint: 'classic alert red' },
25
+ { name: 'coral', hex: '#f87171', hint: 'soft, friendly' },
26
+ { name: 'wine', hex: '#7f1d1d', hint: 'dark, elegant' },
27
+ ],
28
+ blue: [
29
+ { name: 'azure', hex: '#3b82f6', hint: 'bright default blue' },
30
+ { name: 'navy', hex: '#1e3a8a', hint: 'dark, corporate' },
31
+ { name: 'sky', hex: '#7dd3fc', hint: 'light, airy' },
32
+ ],
33
+ green: [
34
+ { name: 'emerald', hex: '#10b981', hint: 'fresh, success-green' },
35
+ { name: 'forest', hex: '#166534', hint: 'dark, natural' },
36
+ { name: 'lime', hex: '#84cc16', hint: 'bright, energetic' },
37
+ ],
38
+ orange: [
39
+ { name: 'tangerine', hex: '#f97316', hint: 'loud and warm' },
40
+ { name: 'peach', hex: '#fdba74', hint: 'soft pastel' },
41
+ { name: 'burnt', hex: '#c2410c', hint: 'deep, autumnal' },
42
+ ],
43
+ pink: [
44
+ { name: 'rose', hex: '#f43f5e', hint: 'strong, modern' },
45
+ { name: 'blush', hex: '#f9a8d4', hint: 'light pastel' },
46
+ { name: 'magenta', hex: '#d946ef', hint: 'electric' },
47
+ ],
48
+ teal: [
49
+ { name: 'lagoon', hex: '#14b8a6', hint: 'balanced blue-green' },
50
+ { name: 'cyan', hex: '#22d3ee', hint: 'bright, digital' },
51
+ { name: 'deep sea', hex: '#134e4a', hint: 'dark, calm' },
52
+ ],
53
+ gray: [
54
+ { name: 'slate', hex: '#64748b', hint: 'blue-ish neutral' },
55
+ { name: 'stone', hex: '#78716c', hint: 'warm neutral' },
56
+ { name: 'charcoal', hex: '#27272a', hint: 'near-black' },
57
+ ],
58
+ brown: [
59
+ { name: 'chocolate', hex: '#7c2d12', hint: 'dark, rich' },
60
+ { name: 'caramel', hex: '#b45309', hint: 'warm mid-brown' },
61
+ { name: 'sand', hex: '#d6c7b0', hint: 'light, beachy' },
62
+ ],
63
+ white: [
64
+ { name: 'pure white', hex: '#ffffff', hint: 'crisp, maximum contrast' },
65
+ { name: 'off-white', hex: '#fafaf9', hint: 'softer on the eyes' },
66
+ { name: 'paper', hex: '#faf6f0', hint: 'warm cream, like good paper' },
67
+ { name: 'ivory', hex: '#fffbeb', hint: 'slightly yellow, classic' },
68
+ ],
69
+ carbon: [
70
+ { name: 'deep carbon', hex: '#0f0f14', hint: 'near-black with a hint of blue' },
71
+ { name: 'graphite', hex: '#1f2937', hint: 'softer dark gray-blue' },
72
+ { name: 'onyx', hex: '#000000', hint: 'pure black' },
73
+ ],
74
+ };
75
+ const COLOR_ALIASES = { black: 'carbon', dark: 'carbon', grey: 'gray', silver: 'gray', beige: 'brown', cream: 'white' };
76
+ const PALETTE_SUGGESTIONS = [
77
+ 'dark carbon background with one bright accent color',
78
+ 'clean light: white background, one accent color, lots of air',
79
+ 'warm: cream background (#faf6f0) with an amber accent',
80
+ ];
81
+ const SECTIONS = {
82
+ wiki: 'title + summary, an infobox card on the right, then Overview, History, Features, References with a clickable contents list',
83
+ storefront: 'a header with search, a filters sidebar, the product grid, and a footer with contacts',
84
+ landing: 'a big opening banner with the headline and one action button, three benefit cards, customer quotes, and a footer',
85
+ booking: 'an intro, a picker or service list, a booking form, and a confirmation note',
86
+ blog: 'a header, a featured article, the article list, and an about-the-author footer',
87
+ dashboard: 'a title, two or three number and chart tiles, and a live table of your records',
88
+ custom: 'a header, two or three content sections, and a footer',
89
+ };
90
+ const TONE = {
91
+ wiki: 'neutral and encyclopedic',
92
+ storefront: 'commercial and energetic',
93
+ landing: 'persuasive and concise',
94
+ booking: 'friendly and reassuring',
95
+ blog: 'personal and readable',
96
+ dashboard: 'compact and factual',
97
+ custom: 'clear and simple',
98
+ };
99
+ const INTERACTIVITY = {
100
+ wiki: 'none, an informational page with a clickable contents list',
101
+ storefront: 'Buy buttons that save each order, matching the data you chose above',
102
+ landing: 'one action button',
103
+ booking: 'a form that saves the entries you described above',
104
+ blog: 'none, informational',
105
+ dashboard: 'live lists and charts of the records you named above',
106
+ custom: 'none unless you ask for it',
107
+ };
108
+ const DATA_SHOW = 'show existing records live, name which ones, and I will put a live table (and charts or counters, if you want) on the page that updates whenever the data changes';
109
+ const DATA_TRACK = 'track something new, we will design the fields together first, then the page shows the live records';
110
+ const DATA_COLLECT = 'collect entries from visitors, a form that saves real records';
111
+ const DATA_NONE = 'just information to read, no data behind it';
112
+ const DATA_MIX = 'you can mix these, for example a reading page with one live table on it';
113
+ const DATA_SUGGESTIONS = {
114
+ wiki: [DATA_NONE, DATA_SHOW, DATA_MIX],
115
+ storefront: [DATA_TRACK, DATA_SHOW, DATA_MIX],
116
+ landing: [DATA_NONE, DATA_COLLECT, DATA_MIX],
117
+ booking: [DATA_COLLECT, DATA_SHOW, DATA_MIX],
118
+ blog: [DATA_NONE, DATA_SHOW, DATA_MIX],
119
+ dashboard: [DATA_SHOW, DATA_TRACK, DATA_MIX],
120
+ custom: [DATA_SHOW, DATA_TRACK, DATA_COLLECT, DATA_NONE, DATA_MIX],
121
+ };
122
+ export const GENRES = ['wiki', 'storefront', 'landing', 'booking', 'blog', 'dashboard', 'custom'];
123
+ function Slots(genre, topic) {
124
+ void topic;
125
+ return [
126
+ {
127
+ id: 'data',
128
+ mode: 'ask',
129
+ question: 'What data should this page work with? Pages here run on real records, a live table, a saving form, not just text',
130
+ suggestions: DATA_SUGGESTIONS[genre],
131
+ },
132
+ { id: 'colors', mode: 'ask', question: 'What colors should it use?', suggestions: PALETTE_SUGGESTIONS },
133
+ { id: 'contentNotes', mode: 'ask', question: 'For each section, give me one line about what should be in it, or say "suggest" and I will draft the texts for your approval', suggestions: ['suggest'] },
134
+ { id: 'sections', mode: 'assume', assumption: () => `the page will have ${SECTIONS[genre]}, remove or add anything` },
135
+ { id: 'pageName', mode: 'assume', assumption: (t) => `the page will be named "${t}" in the page list, give me a different name if you want` },
136
+ { id: 'language', mode: 'assume', assumption: () => 'the texts will be in English, say so if you want German or another language' },
137
+ { id: 'headline', mode: 'assume', assumption: (t) => `the page is titled "${t}" with a one-line subtitle I will draft` },
138
+ { id: 'images', mode: 'assume', assumption: () => 'themed placeholder photos, replaceable later with your own image links' },
139
+ { id: 'tone', mode: 'assume', assumption: () => `the tone is ${TONE[genre]}` },
140
+ { id: 'interactivity', mode: 'assume', assumption: () => `interactivity: ${INTERACTIVITY[genre]}` },
141
+ ];
142
+ }
143
+ function BareColorFamily(answer) {
144
+ if (!answer)
145
+ return null;
146
+ const word = answer.trim().toLowerCase();
147
+ const key = COLOR_ALIASES[word] ?? word;
148
+ return COLOR_FAMILIES[key] ? key : null;
149
+ }
150
+ function Normalize(text) {
151
+ return text.toLowerCase().replace(/[^a-z0-9 ]/g, ' ').replace(/\s+/g, ' ').trim();
152
+ }
153
+ const VAGUE_DATA_ECHOES = new Set([
154
+ ...[DATA_SHOW, DATA_TRACK, DATA_MIX].map(Normalize),
155
+ 'records', 'data', 'existing records', 'show existing records', 'show existing records live', 'show records', 'show them live', 'track something new', 'something new', 'live data', 'live records',
156
+ ]);
157
+ function VagueDataAnswer(answer) {
158
+ if (!answer?.trim())
159
+ return false;
160
+ return VAGUE_DATA_ECHOES.has(Normalize(answer));
161
+ }
162
+ const NEED_MORE_GUIDANCE = 'DO NOT BUILD YET. Ask at most two questions per message, conversationally. Present all assumptions together as one short bulleted list the user can confirm with a single "yes", phrase each as "I\'m assuming …, correct me if that\'s wrong". If any answer references a site or style you are not certain about, research real examples on the web first. Feed the user\'s replies back via answers{} and set assumptionsConfirmed:true once they agree; call this tool again until status is "ready".';
163
+ export function NextInterviewStep(input) {
164
+ const genre = (input.genre ?? input.answers.genre)?.trim().toLowerCase();
165
+ if (!genre || !GENRES.includes(genre)) {
166
+ return {
167
+ status: 'need_more',
168
+ progress: { answered: 0, total: 1 },
169
+ questions: [{
170
+ id: 'genre',
171
+ question: `What kind of page should "${input.topic}" be?`,
172
+ suggestions: [
173
+ 'wiki, an encyclopedic article with an infobox and table of contents, like Wikipedia',
174
+ 'storefront, products with prices and buy buttons',
175
+ 'landing, a promotional page with one big message and an action button',
176
+ 'booking, visitors pick something and submit a request',
177
+ 'blog, articles to read',
178
+ 'dashboard, live numbers, charts and a table of your real data',
179
+ 'custom, describe it in your own words (if it is a style or site I might not know, I will look up real examples first)',
180
+ ],
181
+ }],
182
+ guidance: 'Relay the question with its options to the user. If they reference a site or style you are not certain about, research real examples on the web first and present 2-3 concrete interpretations. Do not build anything yet.',
183
+ };
184
+ }
185
+ const slots = Slots(genre, input.topic);
186
+ const answers = input.answers;
187
+ const answered = (id) => Boolean(answers[id]?.trim());
188
+ const asks = slots.filter((s) => s.mode === 'ask');
189
+ const assumes = slots.filter((s) => s.mode === 'assume');
190
+ const questions = [];
191
+ const vagueData = VagueDataAnswer(answers.data);
192
+ if (vagueData) {
193
+ questions.push({
194
+ id: 'data',
195
+ question: 'Which records exactly? Name the thing you track (products, orders, patients, tasks...), I can also list what already exists in this application',
196
+ suggestions: [
197
+ 'show me what already exists in this application so I can pick',
198
+ 'products with prices and stock',
199
+ 'tasks with a status and an owner',
200
+ ],
201
+ });
202
+ }
203
+ const family = BareColorFamily(answers.colors);
204
+ if (family) {
205
+ questions.push({
206
+ id: 'colors',
207
+ question: `Which ${family === 'carbon' ? 'dark shade' : family} exactly?`,
208
+ suggestions: COLOR_FAMILIES[family].map(c => `${c.name} ${c.hex}, ${c.hint}`),
209
+ });
210
+ }
211
+ for (const slot of asks) {
212
+ if (questions.length >= 3)
213
+ break;
214
+ if (answered(slot.id) || questions.some(q => q.id === slot.id))
215
+ continue;
216
+ questions.push({ id: slot.id, question: slot.question, suggestions: slot.suggestions });
217
+ }
218
+ const assumptionsSatisfied = input.assumptionsConfirmed || assumes.every(s => answered(s.id));
219
+ const assumptions = assumptionsSatisfied
220
+ ? undefined
221
+ : assumes.filter(s => !answered(s.id)).map(s => ({ id: s.id, assumption: s.assumption(input.topic) }));
222
+ const askScore = asks.filter(s => answered(s.id)).length - (family ? 1 : 0) - (vagueData ? 1 : 0);
223
+ const total = asks.length + 1;
224
+ const score = Math.max(0, askScore) + (assumptionsSatisfied ? 1 : 0);
225
+ if (questions.length === 0 && assumptionsSatisfied) {
226
+ const brief = { topic: input.topic, genre };
227
+ for (const slot of asks)
228
+ brief[slot.id] = answers[slot.id].trim();
229
+ for (const slot of assumes)
230
+ brief[slot.id] = answers[slot.id]?.trim() || slot.assumption(input.topic);
231
+ return {
232
+ status: 'ready',
233
+ progress: { answered: total, total },
234
+ brief,
235
+ guidance: 'Every choice is confirmed. Unless brief.data says the page is information-only, do the data work FIRST, in order: 1) existing data, resolve the artifact type and its attribute ids with list_elwis_entities (kind artifactType, then kind attribute); the system Name column id comes from explain_elwis_access systemAttributes; new data, create the type with build_artifact_type and starting records with create_elwis_artifacts; if brief.data names no concrete type, first call list_elwis_entities, show the user what exists and ask them to pick, do not guess. 2) In build_page bind a LIST-NEW widget to that artifact type so the page shows live data, never copy record values into TEXT html. 3) Use brief.pageName as the page name, dryRun:true first, name the table columns in plain words when you show the user the plan, then build for real.',
236
+ };
237
+ }
238
+ return {
239
+ status: 'need_more',
240
+ progress: { answered: score, total },
241
+ questions: questions.length ? questions : undefined,
242
+ assumptions,
243
+ guidance: NEED_MORE_GUIDANCE,
244
+ };
245
+ }
246
+ //# sourceMappingURL=design-interview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-interview.js","sourceRoot":"","sources":["../../src/builders/design-interview.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export async function ExecuteEntityUpdatePlan(api, plan) {
2
+ await api.update(plan.kind, plan.document);
3
+ const name = typeof plan.document.name === 'string' ? plan.document.name : plan.name;
4
+ return { updated: { entity: plan.entity, id: plan.id, name, fields: plan.changedFields.map(c => c.field) } };
5
+ }
6
+ export async function ExecuteEntityDeletePlan(api, plan) {
7
+ if (plan.disableFirst)
8
+ await api.update(plan.kind, { id: plan.id, state: 'DISABLED' });
9
+ await api.softDelete(plan.kind, plan.id);
10
+ return { deleted: { entity: plan.entity, id: plan.id, name: plan.name } };
11
+ }
12
+ //# sourceMappingURL=entity-lifecycle-execute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-lifecycle-execute.js","sourceRoot":"","sources":["../../src/builders/entity-lifecycle-execute.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAa,EAAE,IAAsB;IACjF,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACrF,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AAC/G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAa,EAAE,IAAsB;IACjF,IAAI,IAAI,CAAC,YAAY;QAAE,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,IAAiD,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;IACpI,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AAC5E,CAAC"}