@x12i/made-easy 0.0.0-stage → 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 (169) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -2
  3. package/dist/analysis.d.ts +19 -0
  4. package/dist/analysis.d.ts.map +1 -0
  5. package/dist/analysis.js +90 -0
  6. package/dist/analysis.js.map +1 -0
  7. package/dist/build.d.ts +36 -0
  8. package/dist/build.d.ts.map +1 -0
  9. package/dist/build.js +260 -0
  10. package/dist/build.js.map +1 -0
  11. package/dist/contracts/api.d.ts +447 -0
  12. package/dist/contracts/api.d.ts.map +1 -0
  13. package/dist/contracts/api.js +152 -0
  14. package/dist/contracts/api.js.map +1 -0
  15. package/dist/contracts/blocks.d.ts +221 -0
  16. package/dist/contracts/blocks.d.ts.map +1 -0
  17. package/dist/contracts/blocks.js +392 -0
  18. package/dist/contracts/blocks.js.map +1 -0
  19. package/dist/contracts/diagnostics.d.ts +111 -0
  20. package/dist/contracts/diagnostics.d.ts.map +1 -0
  21. package/dist/contracts/diagnostics.js +122 -0
  22. package/dist/contracts/diagnostics.js.map +1 -0
  23. package/dist/contracts/index.d.ts +11 -0
  24. package/dist/contracts/index.d.ts.map +1 -0
  25. package/dist/contracts/index.js +11 -0
  26. package/dist/contracts/index.js.map +1 -0
  27. package/dist/contracts/json-schema.d.ts +5 -0
  28. package/dist/contracts/json-schema.d.ts.map +1 -0
  29. package/dist/contracts/json-schema.js +41 -0
  30. package/dist/contracts/json-schema.js.map +1 -0
  31. package/dist/contracts/recipe.d.ts +535 -0
  32. package/dist/contracts/recipe.d.ts.map +1 -0
  33. package/dist/contracts/recipe.js +380 -0
  34. package/dist/contracts/recipe.js.map +1 -0
  35. package/dist/contracts/schemas.d.ts +413 -0
  36. package/dist/contracts/schemas.d.ts.map +1 -0
  37. package/dist/contracts/schemas.js +205 -0
  38. package/dist/contracts/schemas.js.map +1 -0
  39. package/dist/draft.d.ts +157 -0
  40. package/dist/draft.d.ts.map +1 -0
  41. package/dist/draft.js +254 -0
  42. package/dist/draft.js.map +1 -0
  43. package/dist/emit-assets.d.ts +2 -0
  44. package/dist/emit-assets.d.ts.map +1 -0
  45. package/dist/emit-assets.js +27 -0
  46. package/dist/emit-assets.js.map +1 -0
  47. package/dist/index.d.ts +25 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +30 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/markdown-doc.d.ts +59 -0
  52. package/dist/markdown-doc.d.ts.map +1 -0
  53. package/dist/markdown-doc.js +187 -0
  54. package/dist/markdown-doc.js.map +1 -0
  55. package/dist/model.d.ts +54 -0
  56. package/dist/model.d.ts.map +1 -0
  57. package/dist/model.js +244 -0
  58. package/dist/model.js.map +1 -0
  59. package/dist/normalize.d.ts +63 -0
  60. package/dist/normalize.d.ts.map +1 -0
  61. package/dist/normalize.js +54 -0
  62. package/dist/normalize.js.map +1 -0
  63. package/dist/npm.d.ts +24 -0
  64. package/dist/npm.d.ts.map +1 -0
  65. package/dist/npm.js +51 -0
  66. package/dist/npm.js.map +1 -0
  67. package/dist/render/blocks.d.ts +17 -0
  68. package/dist/render/blocks.d.ts.map +1 -0
  69. package/dist/render/blocks.js +384 -0
  70. package/dist/render/blocks.js.map +1 -0
  71. package/dist/render/brief.d.ts +77 -0
  72. package/dist/render/brief.d.ts.map +1 -0
  73. package/dist/render/brief.js +62 -0
  74. package/dist/render/brief.js.map +1 -0
  75. package/dist/render/context.d.ts +43 -0
  76. package/dist/render/context.d.ts.map +1 -0
  77. package/dist/render/context.js +88 -0
  78. package/dist/render/context.js.map +1 -0
  79. package/dist/render/html.d.ts +19 -0
  80. package/dist/render/html.d.ts.map +1 -0
  81. package/dist/render/html.js +178 -0
  82. package/dist/render/html.js.map +1 -0
  83. package/dist/render/markdown-out.d.ts +11 -0
  84. package/dist/render/markdown-out.d.ts.map +1 -0
  85. package/dist/render/markdown-out.js +121 -0
  86. package/dist/render/markdown-out.js.map +1 -0
  87. package/dist/render/pdf.d.ts +23 -0
  88. package/dist/render/pdf.d.ts.map +1 -0
  89. package/dist/render/pdf.js +138 -0
  90. package/dist/render/pdf.js.map +1 -0
  91. package/dist/render/prose.d.ts +15 -0
  92. package/dist/render/prose.d.ts.map +1 -0
  93. package/dist/render/prose.js +110 -0
  94. package/dist/render/prose.js.map +1 -0
  95. package/dist/scaffold.d.ts +13 -0
  96. package/dist/scaffold.d.ts.map +1 -0
  97. package/dist/scaffold.js +393 -0
  98. package/dist/scaffold.js.map +1 -0
  99. package/dist/sdk.d.ts +56 -0
  100. package/dist/sdk.d.ts.map +1 -0
  101. package/dist/sdk.js +238 -0
  102. package/dist/sdk.js.map +1 -0
  103. package/dist/source.d.ts +57 -0
  104. package/dist/source.d.ts.map +1 -0
  105. package/dist/source.js +289 -0
  106. package/dist/source.js.map +1 -0
  107. package/dist/theme/book.d.ts +10 -0
  108. package/dist/theme/book.d.ts.map +1 -0
  109. package/dist/theme/book.js +198 -0
  110. package/dist/theme/book.js.map +1 -0
  111. package/dist/util.d.ts +14 -0
  112. package/dist/util.d.ts.map +1 -0
  113. package/dist/util.js +69 -0
  114. package/dist/util.js.map +1 -0
  115. package/dist/validate.d.ts +36 -0
  116. package/dist/validate.d.ts.map +1 -0
  117. package/dist/validate.js +986 -0
  118. package/dist/validate.js.map +1 -0
  119. package/dist/verify.d.ts +35 -0
  120. package/dist/verify.d.ts.map +1 -0
  121. package/dist/verify.js +112 -0
  122. package/dist/verify.js.map +1 -0
  123. package/dist/version.d.ts +3 -0
  124. package/dist/version.d.ts.map +1 -0
  125. package/dist/version.js +4 -0
  126. package/dist/version.js.map +1 -0
  127. package/dist/yamlfile.d.ts +22 -0
  128. package/dist/yamlfile.d.ts.map +1 -0
  129. package/dist/yamlfile.js +129 -0
  130. package/dist/yamlfile.js.map +1 -0
  131. package/package.json +64 -4
  132. package/recipes/index.json +282 -0
  133. package/recipes/shared-1.0.0.json +456 -0
  134. package/schemas/artifact.v1.json +36 -0
  135. package/schemas/assets.v1.json +61 -0
  136. package/schemas/block.v1.json +27 -0
  137. package/schemas/blocks/brief.v1.json +20 -0
  138. package/schemas/blocks/callout.v1.json +25 -0
  139. package/schemas/blocks/code.v1.json +21 -0
  140. package/schemas/blocks/decision.v1.json +80 -0
  141. package/schemas/blocks/evidence-comparison.v1.json +33 -0
  142. package/schemas/blocks/example.v1.json +52 -0
  143. package/schemas/blocks/figure.v1.json +22 -0
  144. package/schemas/blocks/human-action.v1.json +42 -0
  145. package/schemas/blocks/job-map.v1.json +170 -0
  146. package/schemas/blocks/pause.v1.json +25 -0
  147. package/schemas/blocks/reference-profile.v1.json +41 -0
  148. package/schemas/blocks/review-checklist.v1.json +19 -0
  149. package/schemas/blocks/table.v1.json +59 -0
  150. package/schemas/brief.v1.json +157 -0
  151. package/schemas/build-request.v1.json +173 -0
  152. package/schemas/build-result.v1.json +171 -0
  153. package/schemas/checks.v1.json +149 -0
  154. package/schemas/create-request.v1.json +47 -0
  155. package/schemas/diagnostic.v1.json +50 -0
  156. package/schemas/draft-request.v1.json +196 -0
  157. package/schemas/guide.v1.json +172 -0
  158. package/schemas/job.v1.json +107 -0
  159. package/schemas/preview-request.v1.json +153 -0
  160. package/schemas/preview-result.v1.json +84 -0
  161. package/schemas/problem.v1.json +78 -0
  162. package/schemas/recipe-definition.v1.json +673 -0
  163. package/schemas/source-ref.v1.json +111 -0
  164. package/schemas/sources.v1.json +158 -0
  165. package/schemas/validate-request.v1.json +135 -0
  166. package/schemas/validate-result.v1.json +110 -0
  167. package/schemas/verification.v1.json +77 -0
  168. package/themes/book/1.0.0/theme.css +190 -0
  169. package/themes/book/1.0.0/theme.json +5 -0
@@ -0,0 +1,157 @@
1
+ import { z } from 'zod';
2
+ import { type Diagnostic, type SourceSnapshot, type Track } from './contracts/index.js';
3
+ import { type GuideInput, type ReadOptions } from './sdk.js';
4
+ export interface DraftSectionRequest {
5
+ track: Track;
6
+ entry: string;
7
+ role: string;
8
+ title: string;
9
+ path: string;
10
+ /** The current file content. The proposal must keep the author's existing work. */
11
+ markdown: string;
12
+ /** What the recipe requires from this section. */
13
+ guidance: string;
14
+ }
15
+ export interface DraftModelRequest {
16
+ guideId: string;
17
+ subject: {
18
+ type: string;
19
+ name: string;
20
+ scope: string;
21
+ };
22
+ recipe: {
23
+ id: string;
24
+ version: string;
25
+ };
26
+ baseRevision: string;
27
+ snapshot: SourceSnapshot;
28
+ sections: DraftSectionRequest[];
29
+ }
30
+ export declare const ProposedSectionSchema: z.ZodObject<{
31
+ track: z.ZodEnum<{
32
+ human: "human";
33
+ operator: "operator";
34
+ }>;
35
+ entry: z.ZodString;
36
+ markdown: z.ZodString;
37
+ citations: z.ZodArray<z.ZodObject<{
38
+ source: z.ZodString;
39
+ locator: z.ZodOptional<z.ZodString>;
40
+ quote: z.ZodOptional<z.ZodString>;
41
+ }, z.core.$strict>>;
42
+ unresolved: z.ZodArray<z.ZodObject<{
43
+ text: z.ZodString;
44
+ reason: z.ZodString;
45
+ }, z.core.$strict>>;
46
+ }, z.core.$strict>;
47
+ export declare const ProposedClaimSchema: z.ZodObject<{
48
+ id: z.ZodString;
49
+ text: z.ZodString;
50
+ status: z.ZodOptional<z.ZodEnum<{
51
+ supported: "supported";
52
+ unresolved: "unresolved";
53
+ }>>;
54
+ evidence: z.ZodArray<z.ZodObject<{
55
+ source: z.ZodString;
56
+ locator: z.ZodOptional<z.ZodString>;
57
+ }, z.core.$strict>>;
58
+ }, z.core.$strict>;
59
+ export declare const AdapterOutputSchema: z.ZodObject<{
60
+ sections: z.ZodArray<z.ZodObject<{
61
+ track: z.ZodEnum<{
62
+ human: "human";
63
+ operator: "operator";
64
+ }>;
65
+ entry: z.ZodString;
66
+ markdown: z.ZodString;
67
+ citations: z.ZodArray<z.ZodObject<{
68
+ source: z.ZodString;
69
+ locator: z.ZodOptional<z.ZodString>;
70
+ quote: z.ZodOptional<z.ZodString>;
71
+ }, z.core.$strict>>;
72
+ unresolved: z.ZodArray<z.ZodObject<{
73
+ text: z.ZodString;
74
+ reason: z.ZodString;
75
+ }, z.core.$strict>>;
76
+ }, z.core.$strict>>;
77
+ claims: z.ZodOptional<z.ZodArray<z.ZodObject<{
78
+ id: z.ZodString;
79
+ text: z.ZodString;
80
+ status: z.ZodOptional<z.ZodEnum<{
81
+ supported: "supported";
82
+ unresolved: "unresolved";
83
+ }>>;
84
+ evidence: z.ZodArray<z.ZodObject<{
85
+ source: z.ZodString;
86
+ locator: z.ZodOptional<z.ZodString>;
87
+ }, z.core.$strict>>;
88
+ }, z.core.$strict>>>;
89
+ }, z.core.$strict>;
90
+ export type ProposedSection = z.infer<typeof ProposedSectionSchema>;
91
+ export type ProposedClaim = z.infer<typeof ProposedClaimSchema>;
92
+ export interface DraftProposal {
93
+ schemaVersion: string;
94
+ baseRevision: string;
95
+ snapshotId: string;
96
+ adapter: string;
97
+ sections: ProposedSection[];
98
+ claims: ProposedClaim[];
99
+ }
100
+ /** A draft adapter turns a pinned snapshot into an editable proposal. No provider is mandatory. */
101
+ export interface DraftAdapter {
102
+ readonly name: string;
103
+ propose(request: DraftModelRequest, context: {
104
+ signal?: AbortSignal;
105
+ }): Promise<z.input<typeof AdapterOutputSchema>>;
106
+ }
107
+ export interface DraftOptions extends ReadOptions {
108
+ sections: {
109
+ track?: Track;
110
+ entry: string;
111
+ }[];
112
+ snapshot: SourceSnapshot;
113
+ adapter?: DraftAdapter;
114
+ /** Fail with REVISION_MISMATCH if the bundle has moved on. */
115
+ expectedRevision?: string;
116
+ signal?: AbortSignal;
117
+ }
118
+ export interface DraftResult {
119
+ ok: boolean;
120
+ proposal?: DraftProposal;
121
+ diagnostics: Diagnostic[];
122
+ }
123
+ /** Produce an editable proposal. Never changes the bundle; apply it with applyDraftProposal. */
124
+ export declare function draftGuide(input: GuideInput, options: DraftOptions): Promise<DraftResult>;
125
+ export interface ApplyOptions extends ReadOptions {
126
+ /** Required: the revision the author last saw. The proposal is applied only against it. */
127
+ expectedRevision: string;
128
+ /** Apply only these entry IDs. Default: every section in the proposal. */
129
+ entries?: string[];
130
+ snapshot?: SourceSnapshot;
131
+ }
132
+ export interface ApplyResult {
133
+ ok: boolean;
134
+ /** Changed files only (relative path -> new text). Write them to apply the proposal. */
135
+ files: Record<string, string>;
136
+ revision?: string;
137
+ diagnostics: Diagnostic[];
138
+ }
139
+ /** Apply a proposal against the expected revision. Existing edits survive: a moved bundle is refused. */
140
+ export declare function applyDraftProposal(input: GuideInput, proposal: DraftProposal, options: ApplyOptions): Promise<ApplyResult>;
141
+ /**
142
+ * Deterministic, offline adapter. It keeps the author's section intact and inserts a
143
+ * "Draft notes" block that cites each pinned source, marking sources without excerpts unresolved.
144
+ */
145
+ export declare function createTemplateDraftAdapter(): DraftAdapter;
146
+ export interface ChatCompletionsOptions {
147
+ /** Full URL of an OpenAI-compatible /chat/completions endpoint. */
148
+ endpoint: string;
149
+ model: string;
150
+ apiKey?: string;
151
+ headers?: Record<string, string>;
152
+ fetch?: typeof fetch;
153
+ temperature?: number;
154
+ }
155
+ /** Adapter for any OpenAI-compatible chat-completions endpoint. Bring your own provider and key. */
156
+ export declare function createChatCompletionsAdapter(options: ChatCompletionsOptions): DraftAdapter;
157
+ //# sourceMappingURL=draft.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"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"}
package/dist/draft.js ADDED
@@ -0,0 +1,254 @@
1
+ import { z } from 'zod';
2
+ import { parseDocument } from 'yaml';
3
+ import { IdSchema, SCHEMA_VERSION, SourceSnapshotSchema, sortDiagnostics, } from './contracts/index.js';
4
+ import { loadGuide } from './sdk.js';
5
+ import { memorySource } from './source.js';
6
+ import { readGuide } from './model.js';
7
+ import { validateModel } from './validate.js';
8
+ export const ProposedSectionSchema = z.strictObject({
9
+ track: z.enum(['human', 'operator']),
10
+ entry: IdSchema,
11
+ markdown: z.string().min(1),
12
+ citations: z.array(z.strictObject({ source: IdSchema, locator: z.string().optional(), quote: z.string().optional() })),
13
+ unresolved: z.array(z.strictObject({ text: z.string(), reason: z.string() })),
14
+ });
15
+ export const ProposedClaimSchema = z.strictObject({
16
+ id: IdSchema,
17
+ text: z.string().min(1),
18
+ status: z.enum(['supported', 'unresolved']).optional(),
19
+ evidence: z.array(z.strictObject({ source: IdSchema, locator: z.string().optional() })),
20
+ });
21
+ export const AdapterOutputSchema = z.strictObject({
22
+ sections: z.array(ProposedSectionSchema),
23
+ claims: z.array(ProposedClaimSchema).optional(),
24
+ });
25
+ /* --------------------------------- drafting -------------------------------- */
26
+ const diag = (code, message, path = 'request') => ({ code, severity: 'error', path, message });
27
+ /** Produce an editable proposal. Never changes the bundle; apply it with applyDraftProposal. */
28
+ export async function draftGuide(input, options) {
29
+ if (!options.adapter) {
30
+ return { ok: false, diagnostics: [diag('DRAFT_ADAPTER_MISSING', 'No draft adapter is configured. Pass an adapter, or use the built-in template adapter.')] };
31
+ }
32
+ const snapshot = SourceSnapshotSchema.safeParse(options.snapshot);
33
+ if (!snapshot.success) {
34
+ return { ok: false, diagnostics: snapshot.error.issues.map((i) => diag('DRAFT_PROPOSAL_INVALID', `snapshot.${i.path.join('.')}: ${i.message}`)) };
35
+ }
36
+ const model = await loadGuide(input, options);
37
+ if (!model.guide) {
38
+ const r = validateModel(model, { mode: 'draft' });
39
+ return { ok: false, diagnostics: r.diagnostics };
40
+ }
41
+ if (options.expectedRevision && options.expectedRevision !== model.revision) {
42
+ return {
43
+ ok: false,
44
+ diagnostics: [diag('REVISION_MISMATCH', `The bundle is at ${model.revision.slice(7, 19)} but ${options.expectedRevision.slice(0, 19)} was expected.`)],
45
+ };
46
+ }
47
+ const problems = [];
48
+ const sections = [];
49
+ for (const sel of options.sections) {
50
+ const track = sel.track ?? 'human';
51
+ const entry = model.entries.find((e) => e.track === track && e.id === sel.entry);
52
+ if (!entry) {
53
+ problems.push(diag('REF_UNRESOLVED', `${track} entry "${sel.entry}" does not exist.`));
54
+ continue;
55
+ }
56
+ const role = model.recipe?.roleDetails.find((r) => r.role === entry.role);
57
+ sections.push({
58
+ track,
59
+ entry: entry.id,
60
+ role: entry.role,
61
+ title: entry.title,
62
+ path: entry.path,
63
+ markdown: model.files.text(entry.path) ?? '',
64
+ guidance: role?.purpose ?? model.recipe?.operatorRoles.find((r) => r.role === entry.role)?.purpose ?? '',
65
+ });
66
+ }
67
+ if (problems.length)
68
+ return { ok: false, diagnostics: problems };
69
+ const request = {
70
+ guideId: model.guide.guideId,
71
+ subject: model.guide.subject,
72
+ recipe: model.guide.recipe,
73
+ baseRevision: model.revision,
74
+ snapshot: snapshot.data,
75
+ sections,
76
+ };
77
+ let raw;
78
+ try {
79
+ raw = await options.adapter.propose(request, { signal: options.signal });
80
+ }
81
+ catch (e) {
82
+ return { ok: false, diagnostics: [diag('DRAFT_PROPOSAL_INVALID', `The draft adapter "${options.adapter.name}" failed: ${e.message}`)] };
83
+ }
84
+ const parsed = AdapterOutputSchema.safeParse(raw);
85
+ if (!parsed.success) {
86
+ return {
87
+ ok: false,
88
+ diagnostics: parsed.error.issues.map((i) => diag('DRAFT_PROPOSAL_INVALID', `proposal.${i.path.join('.')}: ${i.message}`)),
89
+ };
90
+ }
91
+ const known = new Set(snapshot.data.sources.map((s) => s.id));
92
+ const asked = new Set(sections.map((s) => `${s.track}/${s.entry}`));
93
+ const out = [];
94
+ for (const s of parsed.data.sections) {
95
+ if (!asked.has(`${s.track}/${s.entry}`))
96
+ out.push(diag('DRAFT_PROPOSAL_INVALID', `The proposal includes ${s.track} entry "${s.entry}", which was not requested.`));
97
+ for (const c of s.citations) {
98
+ if (!known.has(c.source))
99
+ out.push(diag('DRAFT_PROPOSAL_INVALID', `Citation of source "${c.source}" in "${s.entry}" is outside the pinned snapshot ${snapshot.data.id}.`));
100
+ }
101
+ }
102
+ const claimIds = new Set(model.sources?.claims?.map((c) => c.id) ?? []);
103
+ for (const c of parsed.data.claims ?? []) {
104
+ if (claimIds.has(c.id))
105
+ out.push(diag('DRAFT_PROPOSAL_INVALID', `Claim id "${c.id}" already exists.`));
106
+ claimIds.add(c.id);
107
+ for (const e of c.evidence) {
108
+ if (!known.has(e.source))
109
+ out.push(diag('DRAFT_PROPOSAL_INVALID', `Claim "${c.id}" cites source "${e.source}" outside the pinned snapshot.`));
110
+ }
111
+ }
112
+ if (out.length)
113
+ return { ok: false, diagnostics: out };
114
+ return {
115
+ ok: true,
116
+ proposal: {
117
+ schemaVersion: SCHEMA_VERSION,
118
+ baseRevision: model.revision,
119
+ snapshotId: snapshot.data.id,
120
+ adapter: options.adapter.name,
121
+ sections: parsed.data.sections,
122
+ claims: parsed.data.claims ?? [],
123
+ },
124
+ diagnostics: [],
125
+ };
126
+ }
127
+ /** Apply a proposal against the expected revision. Existing edits survive: a moved bundle is refused. */
128
+ export async function applyDraftProposal(input, proposal, options) {
129
+ const model = await loadGuide(input, options);
130
+ if (options.expectedRevision !== model.revision || proposal.baseRevision !== model.revision) {
131
+ return {
132
+ ok: false,
133
+ files: {},
134
+ diagnostics: [
135
+ diag('REVISION_MISMATCH', `The bundle changed since this proposal was drafted (bundle ${model.revision.slice(7, 19)}, proposal based on ${proposal.baseRevision.slice(7, 19)}, expected ${options.expectedRevision.slice(7, 19)}). Draft again against the current revision; nothing was changed.`),
136
+ ],
137
+ };
138
+ }
139
+ const files = {};
140
+ const wanted = new Set(options.entries ?? proposal.sections.map((s) => s.entry));
141
+ for (const s of proposal.sections) {
142
+ if (!wanted.has(s.entry))
143
+ continue;
144
+ const entry = model.entries.find((e) => e.track === s.track && e.id === s.entry);
145
+ if (!entry)
146
+ return { ok: false, files: {}, diagnostics: [diag('REF_UNRESOLVED', `${s.track} entry "${s.entry}" does not exist.`)] };
147
+ const unresolved = s.unresolved.map((u) => `[[TODO: unresolved \u2014 ${u.text}: ${u.reason}]]`);
148
+ files[entry.path] = `${s.markdown.replace(/\s+$/, '')}${unresolved.length ? `\n\n${unresolved.join('\n\n')}` : ''}\n`;
149
+ }
150
+ if (proposal.claims.length) {
151
+ const text = model.files.text('sources.yaml') ?? `schemaVersion: "${SCHEMA_VERSION}"\n`;
152
+ const doc = parseDocument(text);
153
+ const haveSources = new Set((model.sources?.sources ?? []).map((s) => s.id));
154
+ for (const c of proposal.claims) {
155
+ for (const e of c.evidence) {
156
+ const snap = options.snapshot?.sources.find((x) => x.id === e.source);
157
+ if (!haveSources.has(e.source) && snap) {
158
+ doc.addIn(['sources'], doc.createNode({ id: snap.id, title: snap.title, kind: 'document', version: snap.version, locator: snap.locator, visibility: 'private' }));
159
+ haveSources.add(e.source);
160
+ }
161
+ }
162
+ doc.addIn(['claims'], doc.createNode({ id: c.id, text: c.text, status: c.status ?? 'supported', evidence: c.evidence }));
163
+ }
164
+ files['sources.yaml'] = doc.toString({ lineWidth: 0 });
165
+ }
166
+ // Re-read the applied bundle to report the new revision and draft diagnostics.
167
+ const merged = {};
168
+ for (const [p] of model.files.entries())
169
+ merged[p] = model.files.text(p) ?? '';
170
+ Object.assign(merged, files);
171
+ const next = await readGuide(memorySource(merged, model.label));
172
+ const report = validateModel(next, { mode: 'draft' });
173
+ return { ok: true, files, revision: next.revision, diagnostics: sortDiagnostics(report.diagnostics) };
174
+ }
175
+ /* ------------------------------ built-in adapters --------------------------- */
176
+ /**
177
+ * Deterministic, offline adapter. It keeps the author's section intact and inserts a
178
+ * "Draft notes" block that cites each pinned source, marking sources without excerpts unresolved.
179
+ */
180
+ export function createTemplateDraftAdapter() {
181
+ return {
182
+ name: 'template',
183
+ async propose(request) {
184
+ const sections = [];
185
+ const claims = [];
186
+ for (const section of request.sections) {
187
+ const citations = [];
188
+ const unresolved = [];
189
+ const lines = [];
190
+ for (const source of request.snapshot.sources) {
191
+ if (source.excerpt) {
192
+ const claimId = `draft-${section.entry}-${source.id}`.slice(0, 64);
193
+ claims.push({
194
+ id: claimId,
195
+ text: source.excerpt,
196
+ status: 'supported',
197
+ evidence: [{ source: source.id, locator: source.locator }],
198
+ });
199
+ citations.push({ source: source.id, locator: source.locator, quote: source.excerpt });
200
+ lines.push(`- ${source.excerpt} [[claim:${claimId}]]`);
201
+ }
202
+ else {
203
+ unresolved.push({ text: `${source.title} (${source.version}) has no excerpt to draw on`, reason: 'add an excerpt or write this part by hand' });
204
+ }
205
+ }
206
+ const notes = lines.length ? `\n\n**Draft notes** (from snapshot ${request.snapshot.id}; review before keeping):\n\n${lines.join('\n')}\n` : '';
207
+ const text = section.markdown.replace(/\r\n?/g, '\n');
208
+ // Insert after the first heading line when there is one, otherwise at the top.
209
+ const m = /^(#{1,6}[^\n]*\n)/.exec(text);
210
+ const markdown = m ? `${m[1]}${notes}${text.slice(m[1].length)}` : `${notes.trimStart()}\n${text}`;
211
+ sections.push({ track: section.track, entry: section.entry, markdown, citations, unresolved });
212
+ }
213
+ return { sections, claims };
214
+ },
215
+ };
216
+ }
217
+ /** Adapter for any OpenAI-compatible chat-completions endpoint. Bring your own provider and key. */
218
+ export function createChatCompletionsAdapter(options) {
219
+ const doFetch = options.fetch ?? fetch;
220
+ return {
221
+ name: `chat-completions:${options.model}`,
222
+ async propose(request, context) {
223
+ const system = 'You draft sections of a two-track "Made Easy" guide. Use ONLY the provided sources. Keep every existing block and the author\'s existing text; add or improve prose. ' +
224
+ 'Cite with [[claim:ID]] markers and return every claim you create. Anything you cannot support goes in "unresolved", never in the text as fact. ' +
225
+ 'Reply with one JSON object: {"sections":[{"track","entry","markdown","citations":[{"source","locator","quote"}],"unresolved":[{"text","reason"}]}],"claims":[{"id","text","status","evidence":[{"source","locator"}]}]}.';
226
+ const res = await doFetch(options.endpoint, {
227
+ method: 'POST',
228
+ signal: context.signal,
229
+ headers: {
230
+ 'content-type': 'application/json',
231
+ ...(options.apiKey ? { authorization: `Bearer ${options.apiKey}` } : {}),
232
+ ...(options.headers ?? {}),
233
+ },
234
+ body: JSON.stringify({
235
+ model: options.model,
236
+ temperature: options.temperature ?? 0.2,
237
+ response_format: { type: 'json_object' },
238
+ messages: [
239
+ { role: 'system', content: system },
240
+ { role: 'user', content: JSON.stringify(request) },
241
+ ],
242
+ }),
243
+ });
244
+ if (!res.ok)
245
+ throw new Error(`endpoint returned ${res.status}`);
246
+ const body = (await res.json());
247
+ const content = body.choices?.[0]?.message?.content;
248
+ if (!content)
249
+ throw new Error('the response had no message content');
250
+ return JSON.parse(content);
251
+ },
252
+ };
253
+ }
254
+ //# sourceMappingURL=draft.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"draft.js","sourceRoot":"","sources":["../src/draft.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=emit-assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-assets.d.ts","sourceRoot":"","sources":["../src/emit-assets.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Emits the files shipped next to dist/: JSON schemas, recipe definitions and the theme.
3
+ * Run by the workspace build after tsc.
4
+ */
5
+ import { mkdir, writeFile } from 'node:fs/promises';
6
+ import { dirname, join } from 'node:path';
7
+ import { fileURLToPath } from 'node:url';
8
+ import { getJsonSchemas } from './contracts/json-schema.js';
9
+ import { listGuideRecipes, listRecipeDefinitions } from './contracts/recipe.js';
10
+ import { BOOK_THEME, BOOK_THEME_CSS } from './theme/book.js';
11
+ const root = fileURLToPath(new URL('../', import.meta.url));
12
+ async function emit(rel, text) {
13
+ const abs = join(root, rel);
14
+ await mkdir(dirname(abs), { recursive: true });
15
+ await writeFile(abs, text);
16
+ }
17
+ for (const [name, schema] of Object.entries(getJsonSchemas())) {
18
+ await emit(`schemas/${name}.json`, `${JSON.stringify(schema, null, 2)}\n`);
19
+ }
20
+ for (const def of listRecipeDefinitions()) {
21
+ await emit(`recipes/${def.id}-${def.version}.json`, `${JSON.stringify(def, null, 2)}\n`);
22
+ }
23
+ await emit('recipes/index.json', `${JSON.stringify(listGuideRecipes(), null, 2)}\n`);
24
+ await emit(`themes/${BOOK_THEME.id}/${BOOK_THEME.version}/theme.css`, `${BOOK_THEME_CSS.trim()}\n`);
25
+ await emit(`themes/${BOOK_THEME.id}/${BOOK_THEME.version}/theme.json`, `${JSON.stringify({ ...BOOK_THEME, description: 'Cover, chapter headings, typography, navigation, code and print styles.' }, null, 2)}\n`);
26
+ console.log('emitted schemas, recipes and theme');
27
+ //# sourceMappingURL=emit-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-assets.js","sourceRoot":"","sources":["../src/emit-assets.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAE7D,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE5D,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC5B,MAAM,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;IAC9D,MAAM,IAAI,CAAC,WAAW,IAAI,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AACD,KAAK,MAAM,GAAG,IAAI,qBAAqB,EAAE,EAAE,CAAC;IAC1C,MAAM,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,OAAO,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3F,CAAC;AACD,MAAM,IAAI,CAAC,oBAAoB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACrF,MAAM,IAAI,CAAC,UAAU,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,YAAY,EAAE,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACpG,MAAM,IAAI,CAAC,UAAU,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,OAAO,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,UAAU,EAAE,WAAW,EAAE,yEAAyE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AAClN,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @x12i/made-easy — headless SDK.
3
+ *
4
+ * Scaffold, validate, preview and build two-track guides (a human ebook and an operator
5
+ * reference) from one source bundle. No React, no service dependencies, no mandatory model provider.
6
+ */
7
+ export * from './contracts/index.js';
8
+ export { readGuide, computeRevision, computeReferenceRevision, fileDigest, entriesOf, allBlocks, blocksOf, guideTitle, type GuideModel, type ModelEntry, } from './model.js';
9
+ export { toNormalizedGuide, type NormalizedGuide, type NormalizedEntry, type NormalizedBlock } from './normalize.js';
10
+ export { BundleFiles, DEFAULT_LIMITS, checkBundlePath, defaultBundleLabel, directorySource, isBundlePath, loadBundleFiles, memorySource, zipSource, type BundleLimits, type BundleSource, } from './source.js';
11
+ export { parseMarkdownDoc, type BlockNode, type DocNode, type Heading, type MarkdownNode } from './markdown-doc.js';
12
+ export { buildGuide, buildGuideArtifacts, loadGuide, pinGuide, previewGuide, resolveInput, stabilizeAnchors, validateGuide, writeBundle, type BuildGuideOptions, type GuideInput, type PinResult, type ReadOptions, type ValidateGuideOptions, } from './sdk.js';
13
+ export { createGuide, scaffoldGuide, type CreatedGuide } from './scaffold.js';
14
+ export { validateModel, exampleDigest, isFilled, SUPPORTED_THEMES, type ValidateOptions, type ValidationReport } from './validate.js';
15
+ export { buildArtifacts, deliverFiles, mediaTypeFor, type ArtifactBuild, type ArtifactBuildOptions } from './build.js';
16
+ export { applyDraftProposal, createChatCompletionsAdapter, createTemplateDraftAdapter, draftGuide, type ApplyOptions, type ApplyResult, type ChatCompletionsOptions, type DraftAdapter, type DraftModelRequest, type DraftOptions, type DraftProposal, type DraftResult, type ProposedClaim, type ProposedSection, } from './draft.js';
17
+ export { resolveNpmPackage, type ResolvedNpmPackage, type ResolveNpmOptions } from './npm.js';
18
+ export { verifyExamples, type VerifyOptions, type VerifyOutcome, type VerifyResult } from './verify.js';
19
+ export { renderPage, GENERATOR } from './render/html.js';
20
+ export { buildBriefDocument, type BriefDocument } from './render/brief.js';
21
+ export { renderBriefJson, renderBriefMarkdown, renderTrackMarkdown } from './render/markdown-out.js';
22
+ export { findBrowser } from './render/pdf.js';
23
+ export { BOOK_THEME, BOOK_THEME_CSS } from './theme/book.js';
24
+ export { VERSION } from './version.js';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EACL,SAAS,EACT,eAAe,EACf,wBAAwB,EACxB,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,UAAU,EACV,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACrH,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,SAAS,EACT,KAAK,YAAY,EACjB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGpH,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,KAAK,iBAAiB,EACtB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGvH,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @x12i/made-easy — headless SDK.
3
+ *
4
+ * Scaffold, validate, preview and build two-track guides (a human ebook and an operator
5
+ * reference) from one source bundle. No React, no service dependencies, no mandatory model provider.
6
+ */
7
+ export * from './contracts/index.js';
8
+ // Reading and the normalized model
9
+ export { readGuide, computeRevision, computeReferenceRevision, fileDigest, entriesOf, allBlocks, blocksOf, guideTitle, } from './model.js';
10
+ export { toNormalizedGuide } from './normalize.js';
11
+ export { BundleFiles, DEFAULT_LIMITS, checkBundlePath, defaultBundleLabel, directorySource, isBundlePath, loadBundleFiles, memorySource, zipSource, } from './source.js';
12
+ export { parseMarkdownDoc } from './markdown-doc.js';
13
+ // Operations
14
+ export { buildGuide, buildGuideArtifacts, loadGuide, pinGuide, previewGuide, resolveInput, stabilizeAnchors, validateGuide, writeBundle, } from './sdk.js';
15
+ export { createGuide, scaffoldGuide } from './scaffold.js';
16
+ export { validateModel, exampleDigest, isFilled, SUPPORTED_THEMES } from './validate.js';
17
+ export { buildArtifacts, deliverFiles, mediaTypeFor } from './build.js';
18
+ // Drafting (optional)
19
+ export { applyDraftProposal, createChatCompletionsAdapter, createTemplateDraftAdapter, draftGuide, } from './draft.js';
20
+ // Explicit network / execution helpers (never used by build)
21
+ export { resolveNpmPackage } from './npm.js';
22
+ export { verifyExamples } from './verify.js';
23
+ // Rendering pieces and theme
24
+ export { renderPage, GENERATOR } from './render/html.js';
25
+ export { buildBriefDocument } from './render/brief.js';
26
+ export { renderBriefJson, renderBriefMarkdown, renderTrackMarkdown } from './render/markdown-out.js';
27
+ export { findBrowser } from './render/pdf.js';
28
+ export { BOOK_THEME, BOOK_THEME_CSS } from './theme/book.js';
29
+ export { VERSION } from './version.js';
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,sBAAsB,CAAC;AAErC,mCAAmC;AACnC,OAAO,EACL,SAAS,EACT,eAAe,EACf,wBAAwB,EACxB,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,UAAU,GAGX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAoE,MAAM,gBAAgB,CAAC;AACrH,OAAO,EACL,WAAW,EACX,cAAc,EACd,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,SAAS,GAGV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAiE,MAAM,mBAAmB,CAAC;AAEpH,aAAa;AACb,OAAO,EACL,UAAU,EACV,mBAAmB,EACnB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,WAAW,GAMZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAqB,MAAM,eAAe,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,gBAAgB,EAA+C,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAiD,MAAM,YAAY,CAAC;AAEvH,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,UAAU,GAWX,MAAM,YAAY,CAAC;AAEpB,6DAA6D;AAC7D,OAAO,EAAE,iBAAiB,EAAmD,MAAM,UAAU,CAAC;AAC9F,OAAO,EAAE,cAAc,EAA6D,MAAM,aAAa,CAAC;AAExG,6BAA6B;AAC7B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAsB,MAAM,mBAAmB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACrG,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,59 @@
1
+ import type { Diagnostic } from './contracts/diagnostics.js';
2
+ import { type RefKind } from './contracts/index.js';
3
+ import { type LineLookup } from './yamlfile.js';
4
+ export interface Heading {
5
+ level: number;
6
+ text: string;
7
+ anchor: string;
8
+ /** True when the author wrote `{#anchor}`; only explicit anchors survive heading edits. */
9
+ explicit: boolean;
10
+ line: number;
11
+ }
12
+ export interface MarkdownNode {
13
+ kind: 'markdown';
14
+ source: string;
15
+ line: number;
16
+ endLine: number;
17
+ }
18
+ export interface BlockNode {
19
+ kind: 'block';
20
+ id: string;
21
+ type: string;
22
+ props: Record<string, unknown>;
23
+ line: number;
24
+ endLine: number;
25
+ /** Maps a pointer inside the block YAML to a 1-based file line. */
26
+ lineOf: LineLookup;
27
+ }
28
+ export type DocNode = MarkdownNode | BlockNode;
29
+ export interface ParsedMarkdown {
30
+ nodes: DocNode[];
31
+ headings: Heading[];
32
+ diagnostics: Diagnostic[];
33
+ }
34
+ export declare const REF_PATTERN: RegExp;
35
+ export declare const PLACEHOLDER_PATTERN: RegExp;
36
+ /** Split a markdown file into prose and `made-easy` structured blocks, collecting headings. */
37
+ export declare function parseMarkdownDoc(path: string, rawText: string): ParsedMarkdown;
38
+ export interface InlineRef {
39
+ kind: RefKind;
40
+ id: string;
41
+ anchor?: string;
42
+ line: number;
43
+ raw: string;
44
+ }
45
+ /** Iterate prose lines of a markdown node, skipping fenced code. */
46
+ export declare function proseLines(node: MarkdownNode): Generator<{
47
+ text: string;
48
+ line: number;
49
+ }>;
50
+ export declare function extractInlineRefs(node: MarkdownNode): InlineRef[];
51
+ /** Bundle paths of Markdown images (`![alt](assets/x.png)`), normalised the way the renderer looks them up. */
52
+ export declare function extractImagePaths(node: MarkdownNode): string[];
53
+ export declare function extractPlaceholders(node: MarkdownNode): {
54
+ line: number;
55
+ text: string;
56
+ }[];
57
+ /** Prose text without fenced code, markup noise or placeholders, for word counting. */
58
+ export declare function proseText(node: MarkdownNode): string;
59
+ //# sourceMappingURL=markdown-doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-doc.d.ts","sourceRoot":"","sources":["../src/markdown-doc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAkC,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEpF,OAAO,EAA8B,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAE5E,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,2FAA2F;IAC3F,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,SAAS,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B;AAKD,eAAO,MAAM,WAAW,QAGvB,CAAC;AACF,eAAO,MAAM,mBAAmB,QAAyB,CAAC;AAE1D,+FAA+F;AAC/F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAkH9E;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAOD,oEAAoE;AACpE,wBAAiB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAczF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,EAAE,CAcjE;AAED,+GAA+G;AAC/G,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,CAM9D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAMxF;AAED,uFAAuF;AACvF,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAEpD"}