forgecad 0.9.2 → 0.9.3

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 (79) hide show
  1. package/LICENSE +7 -5
  2. package/README.md +1 -1
  3. package/README.public.md +24 -2
  4. package/dist/assets/{AdminPage-Bs4PiK00.js → AdminPage-4jihcEk_.js} +1 -1
  5. package/dist/assets/{BlogPage-DVmgN0ma.js → BlogPage-BvzruKtw.js} +1 -1
  6. package/dist/assets/{DocsPage-BP6wlsBN.js → DocsPage-DHbd-WS-.js} +13 -13
  7. package/dist/assets/{EditorApp-Arw2NnGJ.js → EditorApp-C5P2rBfh.js} +433 -84
  8. package/dist/assets/{EditorApp-VY9lXx0N.css → EditorApp-DS0AIUrZ.css} +25 -0
  9. package/dist/assets/{EmbedViewer-qgQiOahL.js → EmbedViewer-B70wQwlE.js} +2 -2
  10. package/dist/assets/{LandingPageProofDriven-DvhtmWOz.js → LandingPageProofDriven-DIsYTnep.js} +1 -1
  11. package/dist/assets/{PricingPage-Ck3CP2ti.css → PricingPage-BMedqFef.css} +48 -0
  12. package/dist/assets/{PricingPage-657oLvWh.js → PricingPage-YPOr12pP.js} +34 -6
  13. package/dist/assets/{SettingsPage-wNy3_2yn.js → SettingsPage-rntoyJ3b.js} +10 -13
  14. package/dist/assets/{app-BdBoMQeO.js → app-CWucmnLZ.js} +801 -1208
  15. package/dist/assets/cli/{render-Ci3jjyT1.js → render-DZHmUySW.js} +214 -23
  16. package/dist/assets/copy-CQKQppF-.js +8 -0
  17. package/dist/assets/{evalWorker-CMCAbK8r.js → evalWorker-C3dKxi9Y.js} +1117 -95
  18. package/dist/assets/{manifold-BMn-8Vf8.js → manifold-CQ3FhfWB.js} +1 -1
  19. package/dist/assets/{manifold-jlYQ6E5R.js → manifold-CU0G1yYL.js} +1 -1
  20. package/dist/assets/{manifold-DbyILno4.js → manifold-CYWZMfjB.js} +2 -2
  21. package/dist/assets/{renderSceneState-DAnqvxSt.js → renderSceneState-BBUrnsUN.js} +1 -1
  22. package/dist/assets/{reportWorker-BcRVMHK-.js → reportWorker-BhZ7DjxQ.js} +1091 -95
  23. package/dist/assets/{sectionPlaneMath-DXJ_TdIW.js → sectionPlaneMath-BxfokaJE.js} +1091 -95
  24. package/dist/cli/render.html +1 -1
  25. package/dist/docs/index.html +2 -2
  26. package/dist/docs-raw/AI/usage.md +182 -89
  27. package/dist/docs-raw/API/core/concepts.md +26 -0
  28. package/dist/docs-raw/CLI.md +58 -37
  29. package/dist/docs-raw/INDEX.md +81 -64
  30. package/dist/docs-raw/cli-monetization.md +9 -8
  31. package/dist/docs-raw/generated/concepts.md +111 -4
  32. package/dist/docs-raw/generated/core.md +2 -0
  33. package/dist/docs-raw/generated/curves.md +480 -1
  34. package/dist/docs-raw/generated/output.md +1 -0
  35. package/dist/docs-raw/generated/sketch.md +2 -0
  36. package/dist/docs-raw/generated/viewport.md +81 -3
  37. package/dist/docs-raw/product/user-outreach-email-templates.md +159 -0
  38. package/dist/docs-raw/skills/forgecad-image-replicator.md +1 -1
  39. package/dist/docs-raw/skills/forgecad-make-a-model.md +33 -4
  40. package/dist/docs-raw/skills/forgecad-prepare-prompt.md +1 -1
  41. package/dist/docs-raw/skills/forgecad-project.md +1 -1
  42. package/dist/docs-raw/skills/forgecad-render-inspect.md +1 -1
  43. package/dist/docs-raw/skills/forgecad.md +2 -1
  44. package/dist/docs-raw/welcome.md +85 -137
  45. package/dist/index.html +1 -1
  46. package/dist/llms.txt +4 -3
  47. package/dist/sitemap.xml +6 -6
  48. package/dist-cli/forgecad.js +1413 -219
  49. package/dist-cli/forgecad.js.map +1 -1
  50. package/dist-skill/CONTEXT.md +594 -5
  51. package/dist-skill/SKILL-dev.md +2 -1
  52. package/dist-skill/SKILL.md +2 -1
  53. package/dist-skill/docs/API/core/concepts.md +26 -0
  54. package/dist-skill/docs/CLI.md +58 -37
  55. package/dist-skill/docs/generated/core.md +2 -0
  56. package/dist-skill/docs/generated/curves.md +480 -1
  57. package/dist-skill/docs/generated/output.md +1 -0
  58. package/dist-skill/docs/generated/sketch.md +2 -0
  59. package/dist-skill/docs/generated/viewport.md +81 -3
  60. package/dist-skill/docs-dev/API/core/concepts.md +26 -0
  61. package/dist-skill/docs-dev/CLI.md +58 -37
  62. package/dist-skill/docs-dev/generated/core.md +2 -0
  63. package/dist-skill/docs-dev/generated/curves.md +480 -1
  64. package/dist-skill/docs-dev/generated/output.md +1 -0
  65. package/dist-skill/docs-dev/generated/sketch.md +2 -0
  66. package/dist-skill/docs-dev/generated/viewport.md +81 -3
  67. package/dist-skill/library/README.md +0 -1
  68. package/dist-skill/library/forgecad-image-replicator/SKILL.md +1 -1
  69. package/dist-skill/library/forgecad-make-a-model/SKILL.md +33 -4
  70. package/dist-skill/library/forgecad-prepare-prompt/SKILL.md +1 -1
  71. package/dist-skill/library/forgecad-project/SKILL.md +1 -1
  72. package/dist-skill/library/forgecad-render-inspect/SKILL.md +1 -1
  73. package/examples/api/conformal-product-ribbon.forge.js +77 -0
  74. package/examples/api/render-labels.forge.js +33 -0
  75. package/examples/api/text2d-basics.forge.js +6 -3
  76. package/package.json +1 -1
  77. package/dist-skill/library/forgecad-deep-dive/SKILL.md +0 -120
  78. package/dist-skill/library/forgecad-deep-dive/agents/openai.yaml +0 -4
  79. package/dist-skill/library/forgecad-deep-dive/references/output-shape.md +0 -64
package/LICENSE CHANGED
@@ -5,11 +5,13 @@ Parameters
5
5
  Licensor: Ruben Kostandyan
6
6
  Licensed Work: ForgeCAD
7
7
  The Licensed Work is (c) 2026 Ruben Kostandyan
8
- Additional Use Grant: You may make production use of the Licensed Work,
9
- provided such use does not include offering the Licensed
10
- Work to third parties on a hosted or embedded basis in
11
- order to compete with the Licensor's paid version of the
12
- Licensed Work.
8
+ Additional Use Grant: You may make production use of the Licensed Work for
9
+ personal, learning, evaluation, open-source, and other
10
+ non-commercial purposes. Commercial use for client work,
11
+ employer work, products for sale, funded projects, or
12
+ closed commercial IP requires a ForgeCAD Pro, Team,
13
+ Enterprise, or other commercial license unless separately
14
+ agreed in writing.
13
15
  Change Date: Four years from the date of each version's first
14
16
  publicly available distribution
15
17
  Change License: MIT
package/README.md CHANGED
@@ -155,4 +155,4 @@ The published package includes `dist/`, `dist-cli/`, `dist-skill/`, `examples/`,
155
155
 
156
156
  ## License
157
157
 
158
- [Business Source License 1.1](LICENSE) - free for non-production use. Converts to MIT on 2030-02-18.
158
+ [Business Source License 1.1](LICENSE). Personal, learning, evaluation, open-source, and other non-commercial work can stay free. Commercial use for client work, employer work, products for sale, funded projects, or closed commercial IP requires ForgeCAD Pro, Team, Enterprise, or another commercial license. Converts to MIT on 2030-02-18.
package/README.public.md CHANGED
@@ -27,7 +27,19 @@ cd start-here
27
27
  forgecad studio .
28
28
  ```
29
29
 
30
- A ForgeCAD project is a local folder linked to the hosted app by `.forgecad/project.json`. Use `forgecad project clone <slug>` to download an existing project, or run `forgecad project init` inside a folder you already want to make into a ForgeCAD project.
30
+ A ForgeCAD project is a dedicated local folder linked to the hosted app by `forgecad.json`. Use `forgecad project clone <slug>` to download an existing project, or run `forgecad project init` inside a folder you want to make into a new ForgeCAD project.
31
+
32
+ Create a new project locally:
33
+
34
+ ```bash
35
+ mkdir spool-adapter
36
+ cd spool-adapter
37
+ forgecad project init "Spool Adapter" --visibility private
38
+ forgecad new adapter --template part
39
+ forgecad studio .
40
+ ```
41
+
42
+ Do not point `forgecad studio` at your home directory, downloads folder, desktop, or a huge source tree. It requires an explicit project path; use `.` for the current project folder.
31
43
 
32
44
  Explore the public examples locally:
33
45
 
@@ -98,7 +110,7 @@ Active application development currently happens in a private repository. This p
98
110
  | Task | Command |
99
111
  | --- | --- |
100
112
  | Clone a hosted project | `forgecad project clone <slug>` |
101
- | Initialize the current folder as a project | `forgecad project init "Project Name"` |
113
+ | Create a new hosted project from the current folder | `forgecad project init "Project Name"` |
102
114
  | Open one or more local projects | `forgecad studio <project-path> [project-path ...]` |
103
115
  | Validate a script | `forgecad run file.forge.js` |
104
116
  | Render a PNG | `forgecad render 3d file.forge.js` |
@@ -108,6 +120,8 @@ Active application development currently happens in a private repository. This p
108
120
  | Export STEP | `forgecad export step file.forge.js` |
109
121
  | Sweep parameters | `forgecad check params file.forge.js --samples 10` |
110
122
 
123
+ `forgecad project init` creates the remote project, writes `forgecad.json`, and uploads local source files. `forgecad project push` syncs an already initialized project; it does not create a remote project from a random folder.
124
+
111
125
  Run `forgecad doctor` if render or exact export dependencies need checking.
112
126
 
113
127
  ## AI And Agent Workflows
@@ -145,6 +159,14 @@ The library includes public prompts for:
145
159
 
146
160
  The generated core modeling skill is checked in at [`skills/forgecad/SKILL.md`](skills/forgecad/SKILL.md). The full public skill index is [`skills/README.md`](skills/README.md).
147
161
 
162
+ Start the agent inside the initialized project folder and require command evidence:
163
+
164
+ ```text
165
+ Use the ForgeCAD skills. Work in this project folder. Build real ForgeCAD
166
+ geometry, validate with forgecad run, render or inspect the result, run
167
+ parameter checks when relevant, and push with forgecad project push when done.
168
+ ```
169
+
148
170
  For chat tools without local shell access, generate a single context file:
149
171
 
150
172
  ```bash
@@ -1,5 +1,5 @@
1
1
  import { r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-mDaEzY3y.js";
2
- import { u as useAuthStore } from "./app-BdBoMQeO.js";
2
+ import { u as useAuthStore } from "./app-CWucmnLZ.js";
3
3
  function formatUptime(seconds) {
4
4
  const d = Math.floor(seconds / 86400);
5
5
  const h = Math.floor(seconds % 86400 / 3600);
@@ -1,5 +1,5 @@
1
1
  import { u as useParams, j as jsxRuntimeExports, L as Link } from "./vendor-react-mDaEzY3y.js";
2
- import { B as BrandMark } from "./app-BdBoMQeO.js";
2
+ import { B as BrandMark } from "./app-CWucmnLZ.js";
3
3
  const POSTS = [
4
4
  {
5
5
  slug: "hello-forgecad-io",
@@ -4,7 +4,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
4
4
  var _a;
5
5
  import { u as useParams, f as useNavigate, r as reactExports, j as jsxRuntimeExports, L as Link } from "./vendor-react-mDaEzY3y.js";
6
6
  import { H as HighlightJS, j as javascript$1 } from "./javascript-C0oc9u8V.js";
7
- import { a as applyTheme } from "./app-BdBoMQeO.js";
7
+ import { a as applyTheme } from "./app-CWucmnLZ.js";
8
8
  function M() {
9
9
  return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
10
10
  }
@@ -3848,11 +3848,11 @@ const DOC_SECTIONS = [
3848
3848
  { slug: "concepts", title: "Concepts", description: "Semantic data structures" }
3849
3849
  ];
3850
3850
  const START_SECTIONS = [
3851
- { slug: "welcome", title: "Welcome", description: "First model, first CLI loop, first AI-assisted iteration" },
3852
- { slug: "ai-usage", title: "AI Usage", description: "Approved models, CLI loop, Codex and Claude Code setup" }
3851
+ { slug: "welcome", title: "Welcome", description: "Project setup, local editor, browser sync, and first AI loop" },
3852
+ { slug: "ai-usage", title: "AI Usage", description: "Approved models, project-first agents, validation, and recording ideas" }
3853
3853
  ];
3854
- const CLI_SECTIONS = [{ slug: "cli", title: "CLI", description: "Install, run, export, publish — from your terminal" }];
3855
- const ALL_SECTIONS = [...START_SECTIONS, ...DOC_SECTIONS, ...CLI_SECTIONS, ...SKILL_SECTIONS];
3854
+ const CLI_SECTIONS = [{ slug: "cli", title: "CLI", description: "Create projects, open local studios, validate, export, and sync" }];
3855
+ const ALL_SECTIONS = [...START_SECTIONS, ...CLI_SECTIONS, ...DOC_SECTIONS, ...SKILL_SECTIONS];
3856
3856
  function docsRawFilename(slug) {
3857
3857
  if (slug === "cli") return "CLI.md";
3858
3858
  if (slug === "welcome") return "welcome.md";
@@ -3981,8 +3981,8 @@ function Sidebar({ activeSlug, open, onClose }) {
3981
3981
  },
3982
3982
  s.slug
3983
3983
  )),
3984
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-sidebar-group-title", children: "API Reference" }),
3985
- DOC_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3984
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-sidebar-group-title", style: { marginTop: 16 }, children: "Tools" }),
3985
+ CLI_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3986
3986
  Link,
3987
3987
  {
3988
3988
  ref: activeSlug === s.slug ? activeRef : void 0,
@@ -3993,8 +3993,8 @@ function Sidebar({ activeSlug, open, onClose }) {
3993
3993
  },
3994
3994
  s.slug
3995
3995
  )),
3996
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-sidebar-group-title", style: { marginTop: 16 }, children: "Tools" }),
3997
- CLI_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3996
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-sidebar-group-title", style: { marginTop: 16 }, children: "API Reference" }),
3997
+ DOC_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsx(
3998
3998
  Link,
3999
3999
  {
4000
4000
  ref: activeSlug === s.slug ? activeRef : void 0,
@@ -4307,13 +4307,13 @@ function DocsIndex() {
4307
4307
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-card-title", children: s.title }),
4308
4308
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-card-desc", children: s.description })
4309
4309
  ] }, s.slug)) }),
4310
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "fc-docs-index-heading", children: "API Reference" }),
4311
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-grid", children: DOC_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: `/docs/${s.slug}`, className: "fc-docs-index-card", children: [
4310
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "fc-docs-index-heading", children: "Tools" }),
4311
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-grid", children: CLI_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: `/docs/${s.slug}`, className: "fc-docs-index-card", children: [
4312
4312
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-card-title", children: s.title }),
4313
4313
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-card-desc", children: s.description })
4314
4314
  ] }, s.slug)) }),
4315
- /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "fc-docs-index-heading", children: "Tools" }),
4316
- /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-grid", children: CLI_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: `/docs/${s.slug}`, className: "fc-docs-index-card", children: [
4315
+ /* @__PURE__ */ jsxRuntimeExports.jsx("h2", { className: "fc-docs-index-heading", children: "API Reference" }),
4316
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-grid", children: DOC_SECTIONS.map((s) => /* @__PURE__ */ jsxRuntimeExports.jsxs(Link, { to: `/docs/${s.slug}`, className: "fc-docs-index-card", children: [
4317
4317
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-card-title", children: s.title }),
4318
4318
  /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "fc-docs-index-card-desc", children: s.description })
4319
4319
  ] }, s.slug)) }),