@lssm/example.content-generation 0.0.0-canary-20251217062943 → 0.0.0-canary-20251217072406
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build$colon$bundle.log +73 -69
- package/.turbo/turbo-build.log +74 -18
- package/CHANGELOG.md +5 -4
- package/dist/docs/content-generation.docblock.js +27 -14
- package/dist/docs/index.js +1 -1
- package/dist/example.js +38 -1
- package/dist/generate.js +52 -1
- package/dist/index.js +5 -1
- package/dist/libs/content-gen/dist/generators/blog.js +68 -1
- package/dist/libs/content-gen/dist/generators/email.js +96 -9
- package/dist/libs/content-gen/dist/generators/landing-page.js +76 -2
- package/dist/libs/content-gen/dist/generators/social.js +73 -1
- package/dist/libs/content-gen/dist/seo/optimizer.js +48 -1
- package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +16 -76
- package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +16 -350
- package/dist/libs/contracts/dist/docs/index.js +29 -1
- package/dist/libs/contracts/dist/docs/presentations.js +71 -1
- package/dist/libs/contracts/dist/docs/registry.js +44 -1
- package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +16 -383
- package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +16 -68
- package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +16 -140
- package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +16 -86
- package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +16 -1
- package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +24 -2
- package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +21 -2
- package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +16 -213
- package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +73 -5
- package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +37 -1
- package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +16 -1
- package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +20 -262
- package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +48 -1
- package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +24 -2
- package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +23 -2
- package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +25 -16
- package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +67 -1
- package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +22 -2
- package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +40 -36
- package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +47 -1
- package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +23 -2
- package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +36 -3
- package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +20 -1
- package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +36 -3
- package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +20 -1
- package/dist/libs/logger/dist/context.node.js +78 -1
- package/dist/libs/logger/dist/elysia-plugin.js +3 -1
- package/dist/libs/logger/dist/formatters.js +163 -9
- package/dist/libs/logger/dist/index.js +7 -1
- package/dist/libs/logger/dist/logger.node.js +189 -1
- package/dist/libs/logger/dist/timer.js +126 -1
- package/dist/libs/logger/dist/tracer.node.js +115 -1
- package/dist/libs/logger/dist/types.js +13 -1
- package/package.json +7 -6
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,69 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
[34mℹ[39m
|
|
4
|
-
[34mℹ[39m
|
|
5
|
-
[34mℹ[39m
|
|
6
|
-
[34mℹ[39m
|
|
7
|
-
[34mℹ[39m
|
|
8
|
-
[34mℹ[39m
|
|
9
|
-
[34mℹ[39m
|
|
10
|
-
[34mℹ[39m [2mdist/[22m[
|
|
11
|
-
[34mℹ[39m [2mdist/[22m[
|
|
12
|
-
[34mℹ[39m [2mdist/[22m[
|
|
13
|
-
[34mℹ[39m [2mdist/[22m[
|
|
14
|
-
[34mℹ[39m [2mdist/[
|
|
15
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/
|
|
16
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
17
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
18
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
19
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
20
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
21
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
22
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
23
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
24
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
25
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
26
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/
|
|
27
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/
|
|
28
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
29
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
30
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/
|
|
31
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
32
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
33
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
34
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
35
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
36
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/
|
|
37
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
38
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/
|
|
39
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
40
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/
|
|
41
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
42
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
43
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/
|
|
44
|
-
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/
|
|
45
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/
|
|
46
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/
|
|
47
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
48
|
-
[34mℹ[39m [2mdist/[22mlibs/logger/dist/
|
|
49
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/
|
|
50
|
-
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/
|
|
51
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
52
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
53
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
54
|
-
[34mℹ[39m [2mdist/[22mlibs/
|
|
55
|
-
[34mℹ[39m [2mdist/[22mlibs/logger/dist/index.js [2m 0.
|
|
56
|
-
[34mℹ[39m [2mdist/[22mlibs/logger/dist/
|
|
57
|
-
[34mℹ[39m [2mdist/[
|
|
58
|
-
[34mℹ[39m [2mdist/[22m[32m[
|
|
59
|
-
[34mℹ[39m [2mdist/[22m[32m[
|
|
60
|
-
[34mℹ[39m [2mdist/[22m[32m[
|
|
61
|
-
[34mℹ[39m [2mdist/[22m[32m[1mdocs/
|
|
62
|
-
[34mℹ[39m
|
|
63
|
-
[
|
|
64
|
-
[
|
|
65
|
-
|
|
66
|
-
[38;5;
|
|
67
|
-
[38;5;240m
|
|
68
|
-
|
|
69
|
-
[
|
|
1
|
+
$ tsdown
|
|
2
|
+
[34mℹ[39m tsdown [2mv0.17.4[22m powered by rolldown [2mv1.0.0-beta.53[22m
|
|
3
|
+
[34mℹ[39m config file: [4m/home/runner/work/contractspec/contractspec/packages/examples/content-generation/tsdown.config.js[24m
|
|
4
|
+
[34mℹ[39m entry: [34msrc/example.ts, src/generate.ts, src/index.ts, src/docs/content-generation.docblock.ts, src/docs/index.ts[39m
|
|
5
|
+
[34mℹ[39m target: [34mesnext[39m
|
|
6
|
+
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
7
|
+
[34mℹ[39m Build start
|
|
8
|
+
[34mℹ[39m Cleaning 72 files
|
|
9
|
+
[34mℹ[39m [2mdist/[22m[1mgenerate.js[22m [2m 2.07 kB[22m [2m│ gzip: 0.93 kB[22m
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[1mdocs/content-generation.docblock.js[22m [2m 1.37 kB[22m [2m│ gzip: 0.69 kB[22m
|
|
11
|
+
[34mℹ[39m [2mdist/[22m[1mexample.js[22m [2m 0.78 kB[22m [2m│ gzip: 0.41 kB[22m
|
|
12
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 0.20 kB[22m [2m│ gzip: 0.13 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22m[1mdocs/index.js[22m [2m 0.04 kB[22m [2m│ gzip: 0.06 kB[22m
|
|
14
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js [2m16.91 kB[22m [2m│ gzip: 7.23 kB[22m
|
|
15
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/schema/README.docblock.js [2m11.21 kB[22m [2m│ gzip: 4.33 kB[22m
|
|
16
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js [2m 9.96 kB[22m [2m│ gzip: 3.83 kB[22m
|
|
17
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/llm/llm-integration.docblock.js [2m 9.53 kB[22m [2m│ gzip: 3.50 kB[22m
|
|
18
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js [2m 9.22 kB[22m [2m│ gzip: 2.77 kB[22m
|
|
19
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js [2m 6.16 kB[22m [2m│ gzip: 2.65 kB[22m
|
|
20
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/templates/runtime.docblock.js [2m 5.85 kB[22m [2m│ gzip: 2.66 kB[22m
|
|
21
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/workflows/overview.docblock.js [2m 5.66 kB[22m [2m│ gzip: 2.34 kB[22m
|
|
22
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/formatters.js [2m 5.42 kB[22m [2m│ gzip: 1.71 kB[22m
|
|
23
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/logger.node.js [2m 5.40 kB[22m [2m│ gzip: 1.66 kB[22m
|
|
24
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js [2m 4.62 kB[22m [2m│ gzip: 2.13 kB[22m
|
|
25
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/telemetry-ingest.docblock.js [2m 4.16 kB[22m [2m│ gzip: 1.78 kB[22m
|
|
26
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/vscode-extension.docblock.js [2m 3.85 kB[22m [2m│ gzip: 1.47 kB[22m
|
|
27
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/PUBLISHING.docblock.js [2m 3.62 kB[22m [2m│ gzip: 1.65 kB[22m
|
|
28
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js [2m 3.60 kB[22m [2m│ gzip: 1.53 kB[22m
|
|
29
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js [2m 3.33 kB[22m [2m│ gzip: 1.47 kB[22m
|
|
30
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js [2m 3.30 kB[22m [2m│ gzip: 1.42 kB[22m
|
|
31
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js [2m 3.25 kB[22m [2m│ gzip: 1.59 kB[22m
|
|
32
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js [2m 3.13 kB[22m [2m│ gzip: 1.47 kB[22m
|
|
33
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/presentation-runtime.docblock.js [2m 2.97 kB[22m [2m│ gzip: 1.38 kB[22m
|
|
34
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/tracer.node.js [2m 2.86 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
35
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/email.js [2m 2.85 kB[22m [2m│ gzip: 1.17 kB[22m
|
|
36
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/project-routing.docblock.js [2m 2.75 kB[22m [2m│ gzip: 1.22 kB[22m
|
|
37
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/timer.js [2m 2.43 kB[22m [2m│ gzip: 0.85 kB[22m
|
|
38
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/team-invitations.docblock.js [2m 2.40 kB[22m [2m│ gzip: 1.13 kB[22m
|
|
39
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/landing-page.js [2m 2.24 kB[22m [2m│ gzip: 1.10 kB[22m
|
|
40
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/presentations.js [2m 2.18 kB[22m [2m│ gzip: 0.77 kB[22m
|
|
41
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/workspaces.docblock.js [2m 2.13 kB[22m [2m│ gzip: 1.02 kB[22m
|
|
42
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/blog.js [2m 2.10 kB[22m [2m│ gzip: 0.96 kB[22m
|
|
43
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/learning-events.docblock.js [2m 2.04 kB[22m [2m│ gzip: 0.97 kB[22m
|
|
44
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/social.js [2m 1.98 kB[22m [2m│ gzip: 0.95 kB[22m
|
|
45
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js [2m 1.96 kB[22m [2m│ gzip: 0.97 kB[22m
|
|
46
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js [2m 1.85 kB[22m [2m│ gzip: 0.87 kB[22m
|
|
47
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js [2m 1.73 kB[22m [2m│ gzip: 0.82 kB[22m
|
|
48
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/context.node.js [2m 1.63 kB[22m [2m│ gzip: 0.62 kB[22m
|
|
49
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/index.js [2m 1.58 kB[22m [2m│ gzip: 0.51 kB[22m
|
|
50
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/mcp-endpoints.docblock.js [2m 1.46 kB[22m [2m│ gzip: 0.77 kB[22m
|
|
51
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/seo/optimizer.js [2m 1.37 kB[22m [2m│ gzip: 0.66 kB[22m
|
|
52
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/registry.js [2m 1.25 kB[22m [2m│ gzip: 0.56 kB[22m
|
|
53
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js [2m 1.14 kB[22m [2m│ gzip: 0.65 kB[22m
|
|
54
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/types.js [2m 0.44 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
55
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/index.js [2m 0.31 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
56
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/elysia-plugin.js [2m 0.07 kB[22m [2m│ gzip: 0.07 kB[22m
|
|
57
|
+
[34mℹ[39m [2mdist/[22m[32m[1mexample.d.ts[22m[39m [2m 1.02 kB[22m [2m│ gzip: 0.41 kB[22m
|
|
58
|
+
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.ts[22m[39m [2m 0.14 kB[22m [2m│ gzip: 0.10 kB[22m
|
|
59
|
+
[34mℹ[39m [2mdist/[22m[32m[1mgenerate.d.ts[22m[39m [2m 0.14 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
60
|
+
[34mℹ[39m [2mdist/[22m[32m[1mdocs/content-generation.docblock.d.ts[22m[39m [2m 0.01 kB[22m [2m│ gzip: 0.03 kB[22m
|
|
61
|
+
[34mℹ[39m [2mdist/[22m[32m[1mdocs/index.d.ts[22m[39m [2m 0.01 kB[22m [2m│ gzip: 0.03 kB[22m
|
|
62
|
+
[34mℹ[39m 53 files, total: 167.68 kB
|
|
63
|
+
[33m[UNRESOLVED_IMPORT] Warning:[0m Could not resolve 'node:async_hooks' in ../../libs/logger/dist/context.node.mjs
|
|
64
|
+
[38;5;246m╭[0m[38;5;246m─[0m[38;5;246m[[0m ../../libs/logger/dist/context.node.mjs:1:35 [38;5;246m][0m
|
|
65
|
+
[38;5;246m│[0m
|
|
66
|
+
[38;5;246m1 │[0m [38;5;249mi[0m[38;5;249mm[0m[38;5;249mp[0m[38;5;249mo[0m[38;5;249mr[0m[38;5;249mt[0m[38;5;249m [0m[38;5;249m{[0m[38;5;249m [0m[38;5;249mA[0m[38;5;249ms[0m[38;5;249my[0m[38;5;249mn[0m[38;5;249mc[0m[38;5;249mL[0m[38;5;249mo[0m[38;5;249mc[0m[38;5;249ma[0m[38;5;249ml[0m[38;5;249mS[0m[38;5;249mt[0m[38;5;249mo[0m[38;5;249mr[0m[38;5;249ma[0m[38;5;249mg[0m[38;5;249me[0m[38;5;249m [0m[38;5;249m}[0m[38;5;249m [0m[38;5;249mf[0m[38;5;249mr[0m[38;5;249mo[0m[38;5;249mm[0m[38;5;249m [0m"node:async_hooks"[38;5;249m;[0m
|
|
67
|
+
[38;5;240m │[0m ─────────┬────────
|
|
68
|
+
[38;5;240m │[0m ╰────────── Module not found, treating it as an external dependency
|
|
69
|
+
[38;5;240m │[0m
|
|
70
|
+
[38;5;240m │[0m [38;5;115mHelp[0m: The "main" field here was ignored. Main fields must be configured explicitly when using the "neutral" platform.
|
|
71
|
+
[38;5;246m───╯[0m
|
|
72
|
+
|
|
73
|
+
[32m✔[39m Build complete in [32m30714ms[39m
|
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,18 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
[
|
|
4
|
-
[34mℹ[39m
|
|
5
|
-
[34mℹ[39m
|
|
6
|
-
[34mℹ[39m
|
|
7
|
-
[34mℹ[39m
|
|
8
|
-
[34mℹ[39m
|
|
9
|
-
[34mℹ[39m
|
|
10
|
-
[34mℹ[39m
|
|
11
|
-
[34mℹ[39m [2mdist/[22m[
|
|
12
|
-
[34mℹ[39m [2mdist/[22m[
|
|
13
|
-
[34mℹ[39m [2mdist/[22m[
|
|
14
|
-
[34mℹ[39m [2mdist/[
|
|
15
|
-
[34mℹ[39m [2mdist/[
|
|
16
|
-
[34mℹ[39m
|
|
17
|
-
[
|
|
18
|
-
[
|
|
1
|
+
$ bun build:bundle && bun build:types
|
|
2
|
+
$ tsdown
|
|
3
|
+
[34mℹ[39m tsdown [2mv0.17.4[22m powered by rolldown [2mv1.0.0-beta.53[22m
|
|
4
|
+
[34mℹ[39m config file: [4m/home/runner/work/contractspec/contractspec/packages/examples/content-generation/tsdown.config.js[24m
|
|
5
|
+
[34mℹ[39m entry: [34msrc/example.ts, src/generate.ts, src/index.ts, src/docs/content-generation.docblock.ts, src/docs/index.ts[39m
|
|
6
|
+
[34mℹ[39m target: [34mesnext[39m
|
|
7
|
+
[34mℹ[39m tsconfig: [34mtsconfig.json[39m
|
|
8
|
+
[34mℹ[39m Build start
|
|
9
|
+
[34mℹ[39m [2mdist/[22m[1mgenerate.js[22m [2m 2.07 kB[22m [2m│ gzip: 0.93 kB[22m
|
|
10
|
+
[34mℹ[39m [2mdist/[22m[1mdocs/content-generation.docblock.js[22m [2m 1.37 kB[22m [2m│ gzip: 0.69 kB[22m
|
|
11
|
+
[34mℹ[39m [2mdist/[22m[1mexample.js[22m [2m 0.78 kB[22m [2m│ gzip: 0.41 kB[22m
|
|
12
|
+
[34mℹ[39m [2mdist/[22m[1mindex.js[22m [2m 0.20 kB[22m [2m│ gzip: 0.13 kB[22m
|
|
13
|
+
[34mℹ[39m [2mdist/[22m[1mdocs/index.js[22m [2m 0.04 kB[22m [2m│ gzip: 0.06 kB[22m
|
|
14
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js [2m16.91 kB[22m [2m│ gzip: 7.23 kB[22m
|
|
15
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/schema/README.docblock.js [2m11.21 kB[22m [2m│ gzip: 4.33 kB[22m
|
|
16
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js [2m 9.96 kB[22m [2m│ gzip: 3.83 kB[22m
|
|
17
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/llm/llm-integration.docblock.js [2m 9.53 kB[22m [2m│ gzip: 3.50 kB[22m
|
|
18
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js [2m 9.22 kB[22m [2m│ gzip: 2.77 kB[22m
|
|
19
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js [2m 6.16 kB[22m [2m│ gzip: 2.65 kB[22m
|
|
20
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/templates/runtime.docblock.js [2m 5.85 kB[22m [2m│ gzip: 2.66 kB[22m
|
|
21
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/workflows/overview.docblock.js [2m 5.66 kB[22m [2m│ gzip: 2.34 kB[22m
|
|
22
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/formatters.js [2m 5.42 kB[22m [2m│ gzip: 1.71 kB[22m
|
|
23
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/logger.node.js [2m 5.40 kB[22m [2m│ gzip: 1.66 kB[22m
|
|
24
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js [2m 4.62 kB[22m [2m│ gzip: 2.13 kB[22m
|
|
25
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/telemetry-ingest.docblock.js [2m 4.16 kB[22m [2m│ gzip: 1.78 kB[22m
|
|
26
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/vscode-extension.docblock.js [2m 3.85 kB[22m [2m│ gzip: 1.47 kB[22m
|
|
27
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/PUBLISHING.docblock.js [2m 3.62 kB[22m [2m│ gzip: 1.65 kB[22m
|
|
28
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js [2m 3.60 kB[22m [2m│ gzip: 1.53 kB[22m
|
|
29
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js [2m 3.33 kB[22m [2m│ gzip: 1.47 kB[22m
|
|
30
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js [2m 3.30 kB[22m [2m│ gzip: 1.42 kB[22m
|
|
31
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js [2m 3.25 kB[22m [2m│ gzip: 1.59 kB[22m
|
|
32
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js [2m 3.13 kB[22m [2m│ gzip: 1.47 kB[22m
|
|
33
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/presentation-runtime.docblock.js [2m 2.97 kB[22m [2m│ gzip: 1.38 kB[22m
|
|
34
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/tracer.node.js [2m 2.86 kB[22m [2m│ gzip: 1.01 kB[22m
|
|
35
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/email.js [2m 2.85 kB[22m [2m│ gzip: 1.17 kB[22m
|
|
36
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/project-routing.docblock.js [2m 2.75 kB[22m [2m│ gzip: 1.22 kB[22m
|
|
37
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/timer.js [2m 2.43 kB[22m [2m│ gzip: 0.85 kB[22m
|
|
38
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/team-invitations.docblock.js [2m 2.40 kB[22m [2m│ gzip: 1.13 kB[22m
|
|
39
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/landing-page.js [2m 2.24 kB[22m [2m│ gzip: 1.10 kB[22m
|
|
40
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/presentations.js [2m 2.18 kB[22m [2m│ gzip: 0.77 kB[22m
|
|
41
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/workspaces.docblock.js [2m 2.13 kB[22m [2m│ gzip: 1.02 kB[22m
|
|
42
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/blog.js [2m 2.10 kB[22m [2m│ gzip: 0.96 kB[22m
|
|
43
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/learning-events.docblock.js [2m 2.04 kB[22m [2m│ gzip: 0.97 kB[22m
|
|
44
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/generators/social.js [2m 1.98 kB[22m [2m│ gzip: 0.95 kB[22m
|
|
45
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js [2m 1.96 kB[22m [2m│ gzip: 0.97 kB[22m
|
|
46
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js [2m 1.85 kB[22m [2m│ gzip: 0.87 kB[22m
|
|
47
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js [2m 1.73 kB[22m [2m│ gzip: 0.82 kB[22m
|
|
48
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/context.node.js [2m 1.63 kB[22m [2m│ gzip: 0.62 kB[22m
|
|
49
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/index.js [2m 1.58 kB[22m [2m│ gzip: 0.51 kB[22m
|
|
50
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/mcp-endpoints.docblock.js [2m 1.46 kB[22m [2m│ gzip: 0.77 kB[22m
|
|
51
|
+
[34mℹ[39m [2mdist/[22mlibs/content-gen/dist/seo/optimizer.js [2m 1.37 kB[22m [2m│ gzip: 0.66 kB[22m
|
|
52
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/registry.js [2m 1.25 kB[22m [2m│ gzip: 0.56 kB[22m
|
|
53
|
+
[34mℹ[39m [2mdist/[22mlibs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js [2m 1.14 kB[22m [2m│ gzip: 0.65 kB[22m
|
|
54
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/types.js [2m 0.44 kB[22m [2m│ gzip: 0.23 kB[22m
|
|
55
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/index.js [2m 0.31 kB[22m [2m│ gzip: 0.16 kB[22m
|
|
56
|
+
[34mℹ[39m [2mdist/[22mlibs/logger/dist/elysia-plugin.js [2m 0.07 kB[22m [2m│ gzip: 0.07 kB[22m
|
|
57
|
+
[34mℹ[39m [2mdist/[22m[32m[1mexample.d.ts[22m[39m [2m 1.02 kB[22m [2m│ gzip: 0.41 kB[22m
|
|
58
|
+
[34mℹ[39m [2mdist/[22m[32m[1mindex.d.ts[22m[39m [2m 0.14 kB[22m [2m│ gzip: 0.10 kB[22m
|
|
59
|
+
[34mℹ[39m [2mdist/[22m[32m[1mgenerate.d.ts[22m[39m [2m 0.14 kB[22m [2m│ gzip: 0.12 kB[22m
|
|
60
|
+
[34mℹ[39m [2mdist/[22m[32m[1mdocs/content-generation.docblock.d.ts[22m[39m [2m 0.01 kB[22m [2m│ gzip: 0.03 kB[22m
|
|
61
|
+
[34mℹ[39m [2mdist/[22m[32m[1mdocs/index.d.ts[22m[39m [2m 0.01 kB[22m [2m│ gzip: 0.03 kB[22m
|
|
62
|
+
[34mℹ[39m 53 files, total: 167.68 kB
|
|
63
|
+
[33m[UNRESOLVED_IMPORT] Warning:[0m Could not resolve 'node:async_hooks' in ../../libs/logger/dist/context.node.mjs
|
|
64
|
+
[38;5;246m╭[0m[38;5;246m─[0m[38;5;246m[[0m ../../libs/logger/dist/context.node.mjs:1:35 [38;5;246m][0m
|
|
65
|
+
[38;5;246m│[0m
|
|
66
|
+
[38;5;246m1 │[0m [38;5;249mi[0m[38;5;249mm[0m[38;5;249mp[0m[38;5;249mo[0m[38;5;249mr[0m[38;5;249mt[0m[38;5;249m [0m[38;5;249m{[0m[38;5;249m [0m[38;5;249mA[0m[38;5;249ms[0m[38;5;249my[0m[38;5;249mn[0m[38;5;249mc[0m[38;5;249mL[0m[38;5;249mo[0m[38;5;249mc[0m[38;5;249ma[0m[38;5;249ml[0m[38;5;249mS[0m[38;5;249mt[0m[38;5;249mo[0m[38;5;249mr[0m[38;5;249ma[0m[38;5;249mg[0m[38;5;249me[0m[38;5;249m [0m[38;5;249m}[0m[38;5;249m [0m[38;5;249mf[0m[38;5;249mr[0m[38;5;249mo[0m[38;5;249mm[0m[38;5;249m [0m"node:async_hooks"[38;5;249m;[0m
|
|
67
|
+
[38;5;240m │[0m ─────────┬────────
|
|
68
|
+
[38;5;240m │[0m ╰────────── Module not found, treating it as an external dependency
|
|
69
|
+
[38;5;240m │[0m
|
|
70
|
+
[38;5;240m │[0m [38;5;115mHelp[0m: The "main" field here was ignored. Main fields must be configured explicitly when using the "neutral" platform.
|
|
71
|
+
[38;5;246m───╯[0m
|
|
72
|
+
|
|
73
|
+
[32m✔[39m Build complete in [32m34284ms[39m
|
|
74
|
+
$ tsc --noEmit
|
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @lssm/example.content-generation
|
|
2
2
|
|
|
3
|
-
## 0.0.0-canary-
|
|
3
|
+
## 0.0.0-canary-20251217072406
|
|
4
4
|
|
|
5
5
|
### Minor Changes
|
|
6
6
|
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
### Patch Changes
|
|
10
10
|
|
|
11
11
|
- Updated dependencies [66a5dfd]
|
|
12
|
-
- @lssm/lib.content-gen@0.0.0-canary-
|
|
13
|
-
- @lssm/lib.contracts@0.0.0-canary-
|
|
14
|
-
- @lssm/lib.logger@0.0.0-canary-
|
|
12
|
+
- @lssm/lib.content-gen@0.0.0-canary-20251217072406
|
|
13
|
+
- @lssm/lib.contracts@0.0.0-canary-20251217072406
|
|
14
|
+
- @lssm/lib.logger@0.0.0-canary-20251217072406
|
|
15
|
+
- @lssm/lib.schema@0.0.0-canary-20251217072406
|
|
@@ -1,16 +1,29 @@
|
|
|
1
|
-
import{
|
|
2
|
-
|
|
3
|
-
- Deterministic orchestration of generators (same input → same structure).
|
|
1
|
+
import { registerDocBlocks } from "../libs/contracts/dist/docs/registry.js";
|
|
2
|
+
import "../libs/contracts/dist/docs/index.js";
|
|
4
3
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
4
|
+
//#region src/docs/content-generation.docblock.ts
|
|
5
|
+
registerDocBlocks([{
|
|
6
|
+
id: "docs.examples.content-generation",
|
|
7
|
+
title: "Content Generation (example)",
|
|
8
|
+
summary: "Generate a consistent set of marketing assets from a typed ContentBrief (blog, landing hero, email, social, SEO).",
|
|
9
|
+
kind: "reference",
|
|
10
|
+
visibility: "public",
|
|
11
|
+
route: "/docs/examples/content-generation",
|
|
12
|
+
tags: [
|
|
13
|
+
"content",
|
|
14
|
+
"marketing",
|
|
15
|
+
"example"
|
|
16
|
+
],
|
|
17
|
+
body: `## What this example shows\n- A spec-first-ish interface for content brief inputs (typed, validated).\n- Deterministic orchestration of generators (same input → same structure).\n\n## Outputs\n- Blog intro\n- Landing hero\n- Email subject/body\n- Social post bodies\n- SEO metadata`
|
|
18
|
+
}, {
|
|
19
|
+
id: "docs.examples.content-generation.usage",
|
|
20
|
+
title: "Content Generation — Usage",
|
|
21
|
+
summary: "How to run the example and extend the brief.",
|
|
22
|
+
kind: "usage",
|
|
23
|
+
visibility: "public",
|
|
24
|
+
route: "/docs/examples/content-generation/usage",
|
|
25
|
+
tags: ["content", "usage"],
|
|
26
|
+
body: `## Usage\n- Call \`runContentGenerationExample()\`.\n- Modify the \`ContentBrief\` fields to drive different outputs.\n\n## Guardrails\n- Avoid PII in briefs.\n- Keep output logging structured; no raw \`console.log\` in library code.`
|
|
27
|
+
}]);
|
|
13
28
|
|
|
14
|
-
|
|
15
|
-
- Avoid PII in briefs.
|
|
16
|
-
- Keep output logging structured; no raw \`console.log\` in library code.`}]);
|
|
29
|
+
//#endregion
|
package/dist/docs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import"./content-generation.docblock.js";
|
|
1
|
+
import "./content-generation.docblock.js";
|
package/dist/example.js
CHANGED
|
@@ -1 +1,38 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/example.ts
|
|
2
|
+
const example = {
|
|
3
|
+
id: "content-generation",
|
|
4
|
+
title: "Content Generation",
|
|
5
|
+
summary: "Generate blog/landing/email/social/SEO assets from a typed ContentBrief using @lssm/lib.content-gen.",
|
|
6
|
+
tags: [
|
|
7
|
+
"content",
|
|
8
|
+
"marketing",
|
|
9
|
+
"generation",
|
|
10
|
+
"ai"
|
|
11
|
+
],
|
|
12
|
+
kind: "script",
|
|
13
|
+
visibility: "public",
|
|
14
|
+
docs: {
|
|
15
|
+
rootDocId: "docs.examples.content-generation",
|
|
16
|
+
usageDocId: "docs.examples.content-generation.usage"
|
|
17
|
+
},
|
|
18
|
+
entrypoints: {
|
|
19
|
+
packageName: "@lssm/example.content-generation",
|
|
20
|
+
docs: "./docs"
|
|
21
|
+
},
|
|
22
|
+
surfaces: {
|
|
23
|
+
templates: true,
|
|
24
|
+
sandbox: {
|
|
25
|
+
enabled: true,
|
|
26
|
+
modes: ["markdown"]
|
|
27
|
+
},
|
|
28
|
+
studio: {
|
|
29
|
+
enabled: true,
|
|
30
|
+
installable: true
|
|
31
|
+
},
|
|
32
|
+
mcp: { enabled: true }
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
var example_default = example;
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
export { example_default as default };
|
package/dist/generate.js
CHANGED
|
@@ -1 +1,52 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import { BlogGenerator } from "./libs/content-gen/dist/generators/blog.js";
|
|
2
|
+
import { LandingPageGenerator } from "./libs/content-gen/dist/generators/landing-page.js";
|
|
3
|
+
import { EmailCampaignGenerator } from "./libs/content-gen/dist/generators/email.js";
|
|
4
|
+
import { SocialPostGenerator } from "./libs/content-gen/dist/generators/social.js";
|
|
5
|
+
import { SeoOptimizer } from "./libs/content-gen/dist/seo/optimizer.js";
|
|
6
|
+
import { LogLevel } from "./libs/logger/dist/types.js";
|
|
7
|
+
import { Logger } from "./libs/logger/dist/logger.node.js";
|
|
8
|
+
import "./libs/logger/dist/index.js";
|
|
9
|
+
|
|
10
|
+
//#region src/generate.ts
|
|
11
|
+
const logger = new Logger({
|
|
12
|
+
level: process.env.NODE_ENV === "production" ? LogLevel.INFO : LogLevel.DEBUG,
|
|
13
|
+
environment: process.env.NODE_ENV || "development",
|
|
14
|
+
enableColors: process.env.NODE_ENV !== "production"
|
|
15
|
+
});
|
|
16
|
+
async function runContentGenerationExample() {
|
|
17
|
+
const brief = {
|
|
18
|
+
title: "AI-Native Operations Copilot",
|
|
19
|
+
summary: "Automates support resolutions, growth playbooks, and DevOps rituals.",
|
|
20
|
+
problems: ["Support queues pile up after hours", "Growth teams lack fresh experiments"],
|
|
21
|
+
solutions: [
|
|
22
|
+
"Stateful AI agents grounded in your knowledge spaces",
|
|
23
|
+
"CI-safe approval workflows for human review",
|
|
24
|
+
"Analytics + experimentation stack built into ContractSpec"
|
|
25
|
+
],
|
|
26
|
+
metrics: ["80% auto-resolution rate", "10+ experiments shipped weekly"],
|
|
27
|
+
audience: {
|
|
28
|
+
role: "COO",
|
|
29
|
+
industry: "Fintech",
|
|
30
|
+
maturity: "scaleup"
|
|
31
|
+
},
|
|
32
|
+
callToAction: "Book a 15‑minute pilot run"
|
|
33
|
+
};
|
|
34
|
+
const blog = await new BlogGenerator().generate(brief);
|
|
35
|
+
const landing = await new LandingPageGenerator().generate(brief);
|
|
36
|
+
const email = await new EmailCampaignGenerator().generate({
|
|
37
|
+
brief,
|
|
38
|
+
variant: "announcement"
|
|
39
|
+
});
|
|
40
|
+
const social = await new SocialPostGenerator().generate(brief);
|
|
41
|
+
const seo = new SeoOptimizer().optimize(brief);
|
|
42
|
+
logger.info("Generated content assets", {
|
|
43
|
+
blogIntro: blog.intro,
|
|
44
|
+
landingHero: landing.hero,
|
|
45
|
+
emailSubject: email.subject,
|
|
46
|
+
socialPosts: social.map((post) => post.body),
|
|
47
|
+
seo
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
//#endregion
|
|
52
|
+
export { runContentGenerationExample };
|
package/dist/index.js
CHANGED
|
@@ -1 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import example_default from "./example.js";
|
|
2
|
+
import { runContentGenerationExample } from "./generate.js";
|
|
3
|
+
import "./docs/index.js";
|
|
4
|
+
|
|
5
|
+
export { example_default as example, runContentGenerationExample };
|
|
@@ -1 +1,68 @@
|
|
|
1
|
-
|
|
1
|
+
//#region ../../libs/content-gen/dist/generators/blog.js
|
|
2
|
+
var BlogGenerator = class {
|
|
3
|
+
llm;
|
|
4
|
+
model;
|
|
5
|
+
temperature;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.llm = options?.llm;
|
|
8
|
+
this.model = options?.model;
|
|
9
|
+
this.temperature = options?.temperature ?? .4;
|
|
10
|
+
}
|
|
11
|
+
async generate(brief) {
|
|
12
|
+
if (this.llm) return this.generateWithLlm(brief);
|
|
13
|
+
return this.generateDeterministic(brief);
|
|
14
|
+
}
|
|
15
|
+
async generateWithLlm(brief) {
|
|
16
|
+
const jsonPart = (await this.llm.chat([{
|
|
17
|
+
role: "system",
|
|
18
|
+
content: [{
|
|
19
|
+
type: "text",
|
|
20
|
+
text: "You are a product marketing writer. Produce JSON with title, subtitle, intro, sections[].heading/body/bullets, outro."
|
|
21
|
+
}]
|
|
22
|
+
}, {
|
|
23
|
+
role: "user",
|
|
24
|
+
content: [{
|
|
25
|
+
type: "text",
|
|
26
|
+
text: JSON.stringify({ brief })
|
|
27
|
+
}]
|
|
28
|
+
}], {
|
|
29
|
+
responseFormat: "json",
|
|
30
|
+
model: this.model,
|
|
31
|
+
temperature: this.temperature
|
|
32
|
+
})).message.content.find((part) => "text" in part);
|
|
33
|
+
if (jsonPart && "text" in jsonPart) return JSON.parse(jsonPart.text);
|
|
34
|
+
return this.generateDeterministic(brief);
|
|
35
|
+
}
|
|
36
|
+
generateDeterministic(brief) {
|
|
37
|
+
const intro = `Operators like ${brief.audience.role} teams face ${brief.problems.slice(0, 2).join(" and ")}. ${brief.title} changes that by ${brief.summary}.`;
|
|
38
|
+
const sections = [
|
|
39
|
+
{
|
|
40
|
+
heading: "Why now",
|
|
41
|
+
body: this.renderWhyNow(brief)
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
heading: "What you get",
|
|
45
|
+
body: "A focused stack built for policy-safe automation.",
|
|
46
|
+
bullets: brief.solutions
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
heading: "Proof it works",
|
|
50
|
+
body: "Teams using the blueprint report measurable wins.",
|
|
51
|
+
bullets: brief.metrics ?? ["Launch workflows in minutes", "Cut review time by 60%"]
|
|
52
|
+
}
|
|
53
|
+
];
|
|
54
|
+
return {
|
|
55
|
+
title: brief.title,
|
|
56
|
+
subtitle: brief.summary,
|
|
57
|
+
intro,
|
|
58
|
+
sections,
|
|
59
|
+
outro: brief.callToAction ?? "Ready to see it live? Spin up a sandbox in under 5 minutes."
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
renderWhyNow(brief) {
|
|
63
|
+
return `${`${brief.audience.role}${brief.audience.industry ? ` in ${brief.audience.industry}` : ""}`} teams are stuck with ${brief.problems.slice(0, 2).join("; ")}. ${brief.title} delivers guardrails without slowing shipping.`;
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { BlogGenerator };
|