@ryanyahya/opendoc-headless 0.4.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.
- package/.agents/skills/opendoc-apply-comments/SKILL.md +30 -0
- package/.agents/skills/opendoc-apply-comments/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-create/SKILL.md +63 -0
- package/.agents/skills/opendoc-create/agents/openai.yaml +6 -0
- package/.agents/skills/opendoc-create-template/SKILL.md +50 -0
- package/.agents/skills/opendoc-create-template/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-create-template/references/structured-reports.md +11 -0
- package/.agents/skills/opendoc-create-theme/SKILL.md +40 -0
- package/.agents/skills/opendoc-create-theme/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-current-document/SKILL.md +32 -0
- package/.agents/skills/opendoc-current-document/agents/openai.yaml +4 -0
- package/.agents/skills/opendoc-current-document/references/context-fields.md +20 -0
- package/.agents/skills/opendoc-review-document/SKILL.md +60 -0
- package/.agents/skills/opendoc-review-document/agents/openai.yaml +4 -0
- package/AGENTS.md +69 -0
- package/CONTRIBUTING.md +38 -0
- package/LICENSE +21 -0
- package/README.md +179 -0
- package/SECURITY.md +9 -0
- package/THIRD_PARTY.md +49 -0
- package/VALIDATION.md +99 -0
- package/bin/opendoc.mjs +6 -0
- package/docs/APPEARANCE.md +21 -0
- package/docs/ASSETS.md +176 -0
- package/docs/AUTHORING.md +178 -0
- package/docs/HEADLESS.md +120 -0
- package/docs/MEDIA.md +112 -0
- package/docs/PROJECTS.md +55 -0
- package/docs/PROSE.md +15 -0
- package/docs/SELECTION.md +59 -0
- package/docs/TEMPLATES.md +55 -0
- package/docs/THEMES.md +106 -0
- package/node_modules/@formepdf/core/LICENSE +21 -0
- package/node_modules/@formepdf/core/README.md +53 -0
- package/node_modules/@formepdf/core/dist/attachments.d.ts +55 -0
- package/node_modules/@formepdf/core/dist/attachments.js +59 -0
- package/node_modules/@formepdf/core/dist/extract.d.ts +8 -0
- package/node_modules/@formepdf/core/dist/extract.js +56 -0
- package/node_modules/@formepdf/core/dist/index.d.ts +311 -0
- package/node_modules/@formepdf/core/dist/index.js +167 -0
- package/node_modules/@formepdf/core/dist/layout.d.ts +132 -0
- package/node_modules/@formepdf/core/dist/layout.js +240 -0
- package/node_modules/@formepdf/core/dist/shared/browserHelpers.d.ts +19 -0
- package/node_modules/@formepdf/core/dist/shared/browserHelpers.js +128 -0
- package/node_modules/@formepdf/core/package.json +35 -0
- package/node_modules/@formepdf/core/pkg-node/LICENSE +21 -0
- package/node_modules/@formepdf/core/pkg-node/README.md +84 -0
- package/node_modules/@formepdf/core/pkg-node/forme.d.ts +39 -0
- package/node_modules/@formepdf/core/pkg-node/forme.js +394 -0
- package/node_modules/@formepdf/core/pkg-node/forme_bg.wasm +0 -0
- package/node_modules/@formepdf/core/pkg-node/forme_bg.wasm.d.ts +21 -0
- package/node_modules/@formepdf/core/pkg-node/package.json +25 -0
- package/node_modules/@formepdf/react/README.md +70 -0
- package/node_modules/@formepdf/react/dist/charts.d.ts +72 -0
- package/node_modules/@formepdf/react/dist/charts.js +338 -0
- package/node_modules/@formepdf/react/dist/components.d.ts +533 -0
- package/node_modules/@formepdf/react/dist/components.js +608 -0
- package/node_modules/@formepdf/react/dist/expr.d.ts +20 -0
- package/node_modules/@formepdf/react/dist/expr.js +39 -0
- package/node_modules/@formepdf/react/dist/font.d.ts +2 -0
- package/node_modules/@formepdf/react/dist/font.js +1 -0
- package/node_modules/@formepdf/react/dist/index.d.ts +11 -0
- package/node_modules/@formepdf/react/dist/index.js +15 -0
- package/node_modules/@formepdf/react/dist/render.d.ts +12 -0
- package/node_modules/@formepdf/react/dist/render.js +15 -0
- package/node_modules/@formepdf/react/dist/serialize.d.ts +12 -0
- package/node_modules/@formepdf/react/dist/serialize.js +1470 -0
- package/node_modules/@formepdf/react/dist/stylesheet.d.ts +4 -0
- package/node_modules/@formepdf/react/dist/stylesheet.js +5 -0
- package/node_modules/@formepdf/react/dist/template-proxy.d.ts +38 -0
- package/node_modules/@formepdf/react/dist/template-proxy.js +100 -0
- package/node_modules/@formepdf/react/dist/types.d.ts +287 -0
- package/node_modules/@formepdf/react/dist/types.js +1 -0
- package/node_modules/@formepdf/react/package.json +41 -0
- package/node_modules/@formepdf/shared/README.md +7 -0
- package/node_modules/@formepdf/shared/dist/canvas.d.ts +6 -0
- package/node_modules/@formepdf/shared/dist/canvas.js +43 -0
- package/node_modules/@formepdf/shared/dist/charts.d.ts +100 -0
- package/node_modules/@formepdf/shared/dist/charts.js +98 -0
- package/node_modules/@formepdf/shared/dist/encode.d.ts +27 -0
- package/node_modules/@formepdf/shared/dist/encode.js +93 -0
- package/node_modules/@formepdf/shared/dist/font.d.ts +13 -0
- package/node_modules/@formepdf/shared/dist/font.js +52 -0
- package/node_modules/@formepdf/shared/dist/index.d.ts +10 -0
- package/node_modules/@formepdf/shared/dist/index.js +15 -0
- package/node_modules/@formepdf/shared/dist/parser.d.ts +30 -0
- package/node_modules/@formepdf/shared/dist/parser.js +756 -0
- package/node_modules/@formepdf/shared/dist/semantics.d.ts +15 -0
- package/node_modules/@formepdf/shared/dist/semantics.js +44 -0
- package/node_modules/@formepdf/shared/dist/style.d.ts +7 -0
- package/node_modules/@formepdf/shared/dist/style.js +1024 -0
- package/node_modules/@formepdf/shared/dist/types.d.ts +743 -0
- package/node_modules/@formepdf/shared/dist/types.js +2 -0
- package/node_modules/@formepdf/shared/package.json +35 -0
- package/node_modules/@types/node/LICENSE +21 -0
- package/node_modules/@types/node/README.md +15 -0
- package/node_modules/@types/node/assert/strict.d.ts +111 -0
- package/node_modules/@types/node/assert.d.ts +1078 -0
- package/node_modules/@types/node/async_hooks.d.ts +603 -0
- package/node_modules/@types/node/buffer.buffer.d.ts +472 -0
- package/node_modules/@types/node/buffer.d.ts +1934 -0
- package/node_modules/@types/node/child_process.d.ts +1476 -0
- package/node_modules/@types/node/cluster.d.ts +578 -0
- package/node_modules/@types/node/compatibility/disposable.d.ts +14 -0
- package/node_modules/@types/node/compatibility/index.d.ts +9 -0
- package/node_modules/@types/node/compatibility/indexable.d.ts +20 -0
- package/node_modules/@types/node/compatibility/iterators.d.ts +20 -0
- package/node_modules/@types/node/console.d.ts +452 -0
- package/node_modules/@types/node/constants.d.ts +21 -0
- package/node_modules/@types/node/crypto.d.ts +4545 -0
- package/node_modules/@types/node/dgram.d.ts +600 -0
- package/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
- package/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/node_modules/@types/node/dns.d.ts +923 -0
- package/node_modules/@types/node/domain.d.ts +170 -0
- package/node_modules/@types/node/events.d.ts +976 -0
- package/node_modules/@types/node/fs/promises.d.ts +1306 -0
- package/node_modules/@types/node/fs.d.ts +4463 -0
- package/node_modules/@types/node/globals.d.ts +172 -0
- package/node_modules/@types/node/globals.typedarray.d.ts +38 -0
- package/node_modules/@types/node/http.d.ts +2097 -0
- package/node_modules/@types/node/http2.d.ts +2843 -0
- package/node_modules/@types/node/https.d.ts +579 -0
- package/node_modules/@types/node/index.d.ts +98 -0
- package/node_modules/@types/node/inspector.d.ts +253 -0
- package/node_modules/@types/node/inspector.generated.d.ts +4052 -0
- package/node_modules/@types/node/module.d.ts +891 -0
- package/node_modules/@types/node/net.d.ts +1076 -0
- package/node_modules/@types/node/os.d.ts +506 -0
- package/node_modules/@types/node/package.json +145 -0
- package/node_modules/@types/node/path.d.ts +200 -0
- package/node_modules/@types/node/perf_hooks.d.ts +968 -0
- package/node_modules/@types/node/process.d.ts +2084 -0
- package/node_modules/@types/node/punycode.d.ts +117 -0
- package/node_modules/@types/node/querystring.d.ts +152 -0
- package/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/node_modules/@types/node/readline.d.ts +594 -0
- package/node_modules/@types/node/repl.d.ts +428 -0
- package/node_modules/@types/node/sea.d.ts +162 -0
- package/node_modules/@types/node/sqlite.d.ts +722 -0
- package/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/node_modules/@types/node/stream/promises.d.ts +90 -0
- package/node_modules/@types/node/stream/web.d.ts +573 -0
- package/node_modules/@types/node/stream.d.ts +1694 -0
- package/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/node_modules/@types/node/test.d.ts +2265 -0
- package/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/node_modules/@types/node/timers.d.ts +287 -0
- package/node_modules/@types/node/tls.d.ts +1319 -0
- package/node_modules/@types/node/trace_events.d.ts +197 -0
- package/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +468 -0
- package/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +34 -0
- package/node_modules/@types/node/ts5.6/index.d.ts +98 -0
- package/node_modules/@types/node/tty.d.ts +208 -0
- package/node_modules/@types/node/url.d.ts +984 -0
- package/node_modules/@types/node/util.d.ts +2606 -0
- package/node_modules/@types/node/v8.d.ts +920 -0
- package/node_modules/@types/node/vm.d.ts +1053 -0
- package/node_modules/@types/node/wasi.d.ts +181 -0
- package/node_modules/@types/node/web-globals/abortcontroller.d.ts +34 -0
- package/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/node_modules/@types/node/web-globals/events.d.ts +97 -0
- package/node_modules/@types/node/web-globals/fetch.d.ts +55 -0
- package/node_modules/@types/node/web-globals/navigator.d.ts +22 -0
- package/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/node_modules/@types/node/web-globals/streams.d.ts +22 -0
- package/node_modules/@types/node/worker_threads.d.ts +819 -0
- package/node_modules/@types/node/zlib.d.ts +747 -0
- package/node_modules/@types/react/LICENSE +21 -0
- package/node_modules/@types/react/README.md +15 -0
- package/node_modules/@types/react/canary.d.ts +129 -0
- package/node_modules/@types/react/compiler-runtime.d.ts +4 -0
- package/node_modules/@types/react/experimental.d.ts +184 -0
- package/node_modules/@types/react/global.d.ts +166 -0
- package/node_modules/@types/react/index.d.ts +4378 -0
- package/node_modules/@types/react/jsx-dev-runtime.d.ts +33 -0
- package/node_modules/@types/react/jsx-runtime.d.ts +24 -0
- package/node_modules/@types/react/package.json +210 -0
- package/node_modules/@types/react/ts5.0/canary.d.ts +129 -0
- package/node_modules/@types/react/ts5.0/experimental.d.ts +184 -0
- package/node_modules/@types/react/ts5.0/global.d.ts +166 -0
- package/node_modules/@types/react/ts5.0/index.d.ts +4365 -0
- package/node_modules/@types/react/ts5.0/jsx-dev-runtime.d.ts +33 -0
- package/node_modules/@types/react/ts5.0/jsx-runtime.d.ts +24 -0
- package/node_modules/csstype/LICENSE +19 -0
- package/node_modules/csstype/README.md +291 -0
- package/node_modules/csstype/index.d.ts +22569 -0
- package/node_modules/csstype/index.js.flow +6863 -0
- package/node_modules/csstype/package.json +70 -0
- package/node_modules/entities/LICENSE +11 -0
- package/node_modules/entities/decode.d.ts +1 -0
- package/node_modules/entities/decode.js +3 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts +19 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
- package/node_modules/entities/dist/commonjs/decode-codepoint.js.map +1 -0
- package/node_modules/entities/dist/commonjs/decode.d.ts +209 -0
- package/node_modules/entities/dist/commonjs/decode.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/decode.js +511 -0
- package/node_modules/entities/dist/commonjs/decode.js.map +1 -0
- package/node_modules/entities/dist/commonjs/encode.d.ts +22 -0
- package/node_modules/entities/dist/commonjs/encode.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/encode.js +73 -0
- package/node_modules/entities/dist/commonjs/encode.js.map +1 -0
- package/node_modules/entities/dist/commonjs/escape.d.ts +43 -0
- package/node_modules/entities/dist/commonjs/escape.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/escape.js +121 -0
- package/node_modules/entities/dist/commonjs/escape.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts +2 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.js +10 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts +2 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +10 -0
- package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts +8 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.js +13 -0
- package/node_modules/entities/dist/commonjs/generated/encode-html.js.map +1 -0
- package/node_modules/entities/dist/commonjs/index.d.ts +96 -0
- package/node_modules/entities/dist/commonjs/index.d.ts.map +1 -0
- package/node_modules/entities/dist/commonjs/index.js +131 -0
- package/node_modules/entities/dist/commonjs/index.js.map +1 -0
- package/node_modules/entities/dist/commonjs/package.json +3 -0
- package/node_modules/entities/dist/esm/decode-codepoint.d.ts +19 -0
- package/node_modules/entities/dist/esm/decode-codepoint.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/decode-codepoint.js +72 -0
- package/node_modules/entities/dist/esm/decode-codepoint.js.map +1 -0
- package/node_modules/entities/dist/esm/decode.d.ts +209 -0
- package/node_modules/entities/dist/esm/decode.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/decode.js +497 -0
- package/node_modules/entities/dist/esm/decode.js.map +1 -0
- package/node_modules/entities/dist/esm/encode.d.ts +22 -0
- package/node_modules/entities/dist/esm/encode.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/encode.js +69 -0
- package/node_modules/entities/dist/esm/encode.js.map +1 -0
- package/node_modules/entities/dist/esm/escape.d.ts +43 -0
- package/node_modules/entities/dist/esm/escape.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/escape.js +117 -0
- package/node_modules/entities/dist/esm/escape.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts +2 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.js +7 -0
- package/node_modules/entities/dist/esm/generated/decode-data-html.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts +2 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.js +7 -0
- package/node_modules/entities/dist/esm/generated/decode-data-xml.js.map +1 -0
- package/node_modules/entities/dist/esm/generated/encode-html.d.ts +8 -0
- package/node_modules/entities/dist/esm/generated/encode-html.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/generated/encode-html.js +10 -0
- package/node_modules/entities/dist/esm/generated/encode-html.js.map +1 -0
- package/node_modules/entities/dist/esm/index.d.ts +96 -0
- package/node_modules/entities/dist/esm/index.d.ts.map +1 -0
- package/node_modules/entities/dist/esm/index.js +107 -0
- package/node_modules/entities/dist/esm/index.js.map +1 -0
- package/node_modules/entities/dist/esm/package.json +3 -0
- package/node_modules/entities/escape.d.ts +1 -0
- package/node_modules/entities/escape.js +3 -0
- package/node_modules/entities/package.json +118 -0
- package/node_modules/entities/readme.md +122 -0
- package/node_modules/entities/src/decode-codepoint.ts +81 -0
- package/node_modules/entities/src/decode.spec.ts +320 -0
- package/node_modules/entities/src/decode.ts +620 -0
- package/node_modules/entities/src/encode.spec.ts +78 -0
- package/node_modules/entities/src/encode.ts +77 -0
- package/node_modules/entities/src/escape.spec.ts +14 -0
- package/node_modules/entities/src/escape.ts +148 -0
- package/node_modules/entities/src/generated/.eslintrc.json +10 -0
- package/node_modules/entities/src/generated/decode-data-html.ts +8 -0
- package/node_modules/entities/src/generated/decode-data-xml.ts +8 -0
- package/node_modules/entities/src/generated/encode-html.ts +17 -0
- package/node_modules/entities/src/index.spec.ts +125 -0
- package/node_modules/entities/src/index.ts +188 -0
- package/node_modules/parse5/LICENSE +19 -0
- package/node_modules/parse5/README.md +38 -0
- package/node_modules/parse5/dist/cjs/common/doctype.d.ts +4 -0
- package/node_modules/parse5/dist/cjs/common/doctype.js +118 -0
- package/node_modules/parse5/dist/cjs/common/error-codes.d.ts +67 -0
- package/node_modules/parse5/dist/cjs/common/error-codes.js +66 -0
- package/node_modules/parse5/dist/cjs/common/foreign-content.d.ts +9 -0
- package/node_modules/parse5/dist/cjs/common/foreign-content.js +237 -0
- package/node_modules/parse5/dist/cjs/common/html.d.ts +289 -0
- package/node_modules/parse5/dist/cjs/common/html.js +528 -0
- package/node_modules/parse5/dist/cjs/common/token.d.ts +84 -0
- package/node_modules/parse5/dist/cjs/common/token.js +24 -0
- package/node_modules/parse5/dist/cjs/common/unicode.d.ts +42 -0
- package/node_modules/parse5/dist/cjs/common/unicode.js +70 -0
- package/node_modules/parse5/dist/cjs/index.d.ts +71 -0
- package/node_modules/parse5/dist/cjs/index.js +54 -0
- package/node_modules/parse5/dist/cjs/package.json +1 -0
- package/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts +36 -0
- package/node_modules/parse5/dist/cjs/parser/formatting-element-list.js +114 -0
- package/node_modules/parse5/dist/cjs/parser/index.d.ts +221 -0
- package/node_modules/parse5/dist/cjs/parser/index.js +3240 -0
- package/node_modules/parse5/dist/cjs/parser/open-element-stack.d.ts +53 -0
- package/node_modules/parse5/dist/cjs/parser/open-element-stack.js +328 -0
- package/node_modules/parse5/dist/cjs/serializer/index.d.ts +60 -0
- package/node_modules/parse5/dist/cjs/serializer/index.js +172 -0
- package/node_modules/parse5/dist/cjs/tokenizer/index.d.ts +247 -0
- package/node_modules/parse5/dist/cjs/tokenizer/index.js +2714 -0
- package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.d.ts +36 -0
- package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.js +200 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/default.d.ts +84 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/default.js +176 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/interface.d.ts +255 -0
- package/node_modules/parse5/dist/cjs/tree-adapters/interface.js +2 -0
- package/node_modules/parse5/dist/common/doctype.d.ts +4 -0
- package/node_modules/parse5/dist/common/doctype.js +114 -0
- package/node_modules/parse5/dist/common/error-codes.d.ts +67 -0
- package/node_modules/parse5/dist/common/error-codes.js +63 -0
- package/node_modules/parse5/dist/common/foreign-content.d.ts +9 -0
- package/node_modules/parse5/dist/common/foreign-content.js +228 -0
- package/node_modules/parse5/dist/common/html.d.ts +289 -0
- package/node_modules/parse5/dist/common/html.js +523 -0
- package/node_modules/parse5/dist/common/token.d.ts +84 -0
- package/node_modules/parse5/dist/common/token.js +20 -0
- package/node_modules/parse5/dist/common/unicode.d.ts +42 -0
- package/node_modules/parse5/dist/common/unicode.js +62 -0
- package/node_modules/parse5/dist/index.d.ts +71 -0
- package/node_modules/parse5/dist/index.js +42 -0
- package/node_modules/parse5/dist/parser/formatting-element-list.d.ts +36 -0
- package/node_modules/parse5/dist/parser/formatting-element-list.js +110 -0
- package/node_modules/parse5/dist/parser/index.d.ts +221 -0
- package/node_modules/parse5/dist/parser/index.js +3245 -0
- package/node_modules/parse5/dist/parser/open-element-stack.d.ts +53 -0
- package/node_modules/parse5/dist/parser/open-element-stack.js +324 -0
- package/node_modules/parse5/dist/serializer/index.d.ts +60 -0
- package/node_modules/parse5/dist/serializer/index.js +168 -0
- package/node_modules/parse5/dist/tokenizer/index.d.ts +247 -0
- package/node_modules/parse5/dist/tokenizer/index.js +2710 -0
- package/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +36 -0
- package/node_modules/parse5/dist/tokenizer/preprocessor.js +196 -0
- package/node_modules/parse5/dist/tree-adapters/default.d.ts +84 -0
- package/node_modules/parse5/dist/tree-adapters/default.js +173 -0
- package/node_modules/parse5/dist/tree-adapters/interface.d.ts +255 -0
- package/node_modules/parse5/dist/tree-adapters/interface.js +1 -0
- package/node_modules/parse5/package.json +50 -0
- package/node_modules/undici-types/LICENSE +21 -0
- package/node_modules/undici-types/README.md +6 -0
- package/node_modules/undici-types/agent.d.ts +31 -0
- package/node_modules/undici-types/api.d.ts +43 -0
- package/node_modules/undici-types/balanced-pool.d.ts +29 -0
- package/node_modules/undici-types/cache.d.ts +36 -0
- package/node_modules/undici-types/client.d.ts +108 -0
- package/node_modules/undici-types/connector.d.ts +34 -0
- package/node_modules/undici-types/content-type.d.ts +21 -0
- package/node_modules/undici-types/cookies.d.ts +28 -0
- package/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
- package/node_modules/undici-types/dispatcher.d.ts +256 -0
- package/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
- package/node_modules/undici-types/errors.d.ts +149 -0
- package/node_modules/undici-types/eventsource.d.ts +61 -0
- package/node_modules/undici-types/fetch.d.ts +209 -0
- package/node_modules/undici-types/file.d.ts +39 -0
- package/node_modules/undici-types/filereader.d.ts +54 -0
- package/node_modules/undici-types/formdata.d.ts +108 -0
- package/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/node_modules/undici-types/global-origin.d.ts +7 -0
- package/node_modules/undici-types/handlers.d.ts +15 -0
- package/node_modules/undici-types/header.d.ts +4 -0
- package/node_modules/undici-types/index.d.ts +71 -0
- package/node_modules/undici-types/interceptors.d.ts +17 -0
- package/node_modules/undici-types/mock-agent.d.ts +50 -0
- package/node_modules/undici-types/mock-client.d.ts +25 -0
- package/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- package/node_modules/undici-types/mock-pool.d.ts +25 -0
- package/node_modules/undici-types/package.json +55 -0
- package/node_modules/undici-types/patch.d.ts +33 -0
- package/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/node_modules/undici-types/pool.d.ts +39 -0
- package/node_modules/undici-types/proxy-agent.d.ts +28 -0
- package/node_modules/undici-types/readable.d.ts +65 -0
- package/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/node_modules/undici-types/retry-handler.d.ts +116 -0
- package/node_modules/undici-types/util.d.ts +18 -0
- package/node_modules/undici-types/webidl.d.ts +228 -0
- package/node_modules/undici-types/websocket.d.ts +150 -0
- package/package.json +72 -0
- package/scripts/rebuild-forme.mjs +61 -0
- package/src/assets/adapter.ts +122 -0
- package/src/assets/files.ts +378 -0
- package/src/assets/import-worker.ts +294 -0
- package/src/assets/imports.ts +124 -0
- package/src/assets/index.ts +60 -0
- package/src/assets/store.ts +798 -0
- package/src/assets/usage.ts +118 -0
- package/src/cli/check.ts +25 -0
- package/src/cli/init.ts +119 -0
- package/src/cli/lock.ts +34 -0
- package/src/cli/main.ts +118 -0
- package/src/cli/process.ts +19 -0
- package/src/cli/start.ts +96 -0
- package/src/cli/update.ts +348 -0
- package/src/cli/workspace.ts +94 -0
- package/src/document/index.tsx +641 -0
- package/src/document/page.tsx +53 -0
- package/src/document/text-targets.tsx +162 -0
- package/src/media/files.ts +124 -0
- package/src/media/render.ts +63 -0
- package/src/rendering/resolve-sources.ts +84 -0
- package/src/runtime/jsx-dev-runtime.ts +2 -0
- package/src/runtime/jsx-runtime.ts +2 -0
- package/src/runtime/paths.ts +12 -0
- package/src/server/assets-cli.ts +162 -0
- package/src/server/assets-http.ts +100 -0
- package/src/server/client.ts +50 -0
- package/src/server/clipboard.ts +22 -0
- package/src/server/comments-cli.ts +64 -0
- package/src/server/comments.ts +130 -0
- package/src/server/create-cli.ts +33 -0
- package/src/server/create.ts +228 -0
- package/src/server/dependencies.ts +91 -0
- package/src/server/documents.ts +143 -0
- package/src/server/edits.ts +249 -0
- package/src/server/export-batch.ts +105 -0
- package/src/server/export-errors.ts +2 -0
- package/src/server/export-file.ts +57 -0
- package/src/server/export-inputs.ts +66 -0
- package/src/server/export-preview.ts +69 -0
- package/src/server/export.ts +32 -0
- package/src/server/exports.ts +283 -0
- package/src/server/files.ts +21 -0
- package/src/server/guides.ts +71 -0
- package/src/server/materials.ts +39 -0
- package/src/server/media-cli.ts +73 -0
- package/src/server/media-mutations.ts +168 -0
- package/src/server/pptx.ts +160 -0
- package/src/server/preflight.ts +129 -0
- package/src/server/projects-cli.ts +29 -0
- package/src/server/projects.ts +187 -0
- package/src/server/render-error.ts +9 -0
- package/src/server/render-source.ts +24 -0
- package/src/server/render.ts +48 -0
- package/src/server/review-cli.ts +40 -0
- package/src/server/review.ts +161 -0
- package/src/server/selection.ts +23 -0
- package/src/server/source-overrides.ts +97 -0
- package/src/server/templates-cli.ts +51 -0
- package/src/server/templates.ts +186 -0
- package/src/server/text-layout.ts +41 -0
- package/src/server/text-source.ts +307 -0
- package/src/server/themes-cli.ts +59 -0
- package/src/server/themes.ts +215 -0
- package/src/server/ttf2eot.d.ts +3 -0
- package/src/server/worker.ts +166 -0
- package/src/server/workspace.ts +242 -0
- package/src/shared/anchors.ts +69 -0
- package/src/shared/assets.ts +154 -0
- package/src/shared/export.ts +34 -0
- package/src/shared/media.ts +33 -0
- package/src/shared/projects.ts +19 -0
- package/src/shared/selection.ts +94 -0
- package/src/shared/skill-index.ts +14 -0
- package/src/shared/starters.ts +19 -0
- package/src/shared/templates.ts +18 -0
- package/src/shared/themes.ts +24 -0
- package/src/shared/types.ts +39 -0
- package/src/template/index.ts +27 -0
- package/src/themes/index.ts +3 -0
- package/src/themes/neutral.ts +20 -0
- package/src/themes/types.ts +110 -0
- package/starter/assets/brand/wordmark.png +0 -0
- package/starter/assets/fonts/InterUI-LICENSE.txt +93 -0
- package/starter/assets/fonts/InterUI-Medium.ttf +0 -0
- package/starter/assets/fonts/InterUI-Regular.ttf +0 -0
- package/starter/assets/fonts/InterUI-source.json +19 -0
- package/starter/assets/fonts/OpenDocMono-Regular.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-Italic.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-Regular.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-Semibold.ttf +0 -0
- package/starter/assets/fonts/OpenDocSans-SemiboldItalic.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-Italic.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-Regular.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-Semibold.ttf +0 -0
- package/starter/assets/fonts/OpenDocSerif-SemiboldItalic.ttf +0 -0
- package/starter/assets/fonts/SourceCode-LICENSE.md +93 -0
- package/starter/assets/fonts/SourceSans-LICENSE.md +93 -0
- package/starter/assets/fonts/SourceSerif-LICENSE.md +93 -0
- package/starter/assets/fonts/geist/OFL.txt +93 -0
- package/starter/assets/fonts/geist/asset.json +7 -0
- package/starter/assets/fonts/geist/files/1a9874b3be0fc168692a3d2327bccb4d28835653d3b91537a755296a467a83e3.ttf +0 -0
- package/starter/assets/fonts/geist/files/a8eefb873ba9c9020665f8a98302697ce1f3b79ab2deef6ee508c0ca6a82e876.ttf +0 -0
- package/starter/assets/fonts/geist/files/ccce59465ae5c61930ada5453834f60500fbd95084d85db63e0e65fad0125455.ttf +0 -0
- package/starter/assets/fonts/geist/files/f5e95110d70593672515080bee9148463ada0a7f77b89ed65a3d43cb2b0ff83a.pdf +0 -0
- package/starter/assets/fonts/geist/revisions/9a2bc12fb2f23cb27bc227087e63e1407bb804ee0586480bd6b7966ec69fb474.json +60 -0
- package/starter/assets/fonts/inter/OFL.txt +93 -0
- package/starter/assets/fonts/inter/asset.json +7 -0
- package/starter/assets/fonts/inter/files/1b08e7fc267a5c7e1d614100f604b83e7e8a0be241f0f288faa2b3ac93a683ba.ttf +0 -0
- package/starter/assets/fonts/inter/files/5b6f0c6f26e5c554a64cdcc3a9b5d802b7f9aec6206f1dbcfcdcad7b5860a2a9.ttf +0 -0
- package/starter/assets/fonts/inter/files/957db8560d510a198a7d0333fae7b6b444b00c20801581126273978d778eb3c3.pdf +0 -0
- package/starter/assets/fonts/inter/files/b37284b5701b6b168dfc770aa1a4ac492106422fd3ba76bc7641e37434e8019c.ttf +0 -0
- package/starter/assets/fonts/inter/files/c1811d32ac0f6eed1bbf57529f2ecdfc6c717d48a969dd864942436315a1b198.ttf +0 -0
- package/starter/assets/fonts/inter/files/e7a1aaf7eda9f2fad4131725fa556265ec75ca7b2d756260173a040363e8d4f7.ttf +0 -0
- package/starter/assets/fonts/inter/files/ef8f755d933b9310804cc9152f1f18cb2ac460d6b05054ec913d889c9f11f79e.ttf +0 -0
- package/starter/assets/fonts/inter/revisions/600391517c413963b71e278a57c26c40366c81fa3939a6b9755f446206766d12.json +99 -0
- package/starter/assets/fonts/inter/source.json +57 -0
- package/starter/assets/fonts/lato/OFL.txt +93 -0
- package/starter/assets/fonts/lato/asset.json +7 -0
- package/starter/assets/fonts/lato/files/4a6b566dbb28adb473a8789ce5169306f42f0c8a070ac92bae93636f36348b0d.pdf +0 -0
- package/starter/assets/fonts/lato/files/5adeb6b334d8fb99ef053bc052b952773d544315e0e1d668a12c0ce8bd51375c.ttf +0 -0
- package/starter/assets/fonts/lato/files/62c1b7f0d2e74b45960154c3520efc337b553db0961bfdc950d5618334596cc8.ttf +0 -0
- package/starter/assets/fonts/lato/files/71b8b7decbe75a881ed267be539d402bd1e9420b799658aada4e0d1bd5af803c.ttf +0 -0
- package/starter/assets/fonts/lato/files/8a0aace75d33794eece4b28187bfc1df0bbd2888b5d8a56e01788c8d65d16be1.ttf +0 -0
- package/starter/assets/fonts/lato/files/d636e4683231f931eda222d588e944d082bfd3bdba02f928bee461c0f185b251.ttf +0 -0
- package/starter/assets/fonts/lato/files/e399c44efe1387100531d26c7e4800c5d12251b890d6654a3098c7c679cb1786.ttf +0 -0
- package/starter/assets/fonts/lato/revisions/49ccb93400a9d466fab7d9843b1ecf8916ec6d47a475dd79a597a22eb39616bc.json +99 -0
- package/starter/assets/fonts/lato/source.json +57 -0
- package/starter/assets/fonts/merriweather/OFL.txt +93 -0
- package/starter/assets/fonts/merriweather/asset.json +7 -0
- package/starter/assets/fonts/merriweather/files/1c54f91b910454251c4c2b7bd4e472e1abf265fba7ca3c0ef2eee2f41324099e.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/8bde8da2bb7f0265e27ba0481f70bb48d0f98a976c145f2f239c648ddd6532e0.pdf +0 -0
- package/starter/assets/fonts/merriweather/files/90b7db4460fcd1a5ca49575c2668a793f3cd6447664d312a068d690e1c01e6bc.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/afff81272b7653417bb6f8bef57add055b1f9fda36f27eba5f32b40752bd08da.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/e029d3b71e5bae3877c73f4f2b15af28db16593d49b0aed2a328d37ff7075846.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/e9864a6790bf712a04e20f3662b206a1535186ed3e877fd859dd5fb9682335df.ttf +0 -0
- package/starter/assets/fonts/merriweather/files/fa71baebdd20a7d0de2e5e445a5922530fe9e1d740efbe791f113b682d3cb093.ttf +0 -0
- package/starter/assets/fonts/merriweather/revisions/1888e390b3e4f38a3d7cd2dc1bb805aeb6ce13f986a97656f0265fd436bc91d2.json +99 -0
- package/starter/assets/fonts/merriweather/source.json +57 -0
- package/starter/assets/fonts/open-sans/OFL.txt +92 -0
- package/starter/assets/fonts/open-sans/asset.json +7 -0
- package/starter/assets/fonts/open-sans/files/1bc0594a83762b2c25d38915a34464b7fec6088298ca22d151757bf98d6700ec.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/47ed1cfaa7ffca04a04ab850b2938fd52c09d1b44cfa3e2980878e166b0cbd87.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/574939af301f07df8e21cfff279465c5981dd9d9cf62086f7515897df951c6f5.pdf +0 -0
- package/starter/assets/fonts/open-sans/files/6d3884d0d57c1b67e9c50c54eca7b69c535c114e76bd7a9cfda0258588185553.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/733eb93b167e6d45de09aa768f6c0355647c2c26f5416dbc7407a08ed41e81c6.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/75367e6da7d914eaed87883ba51b2a2b5816b5cdbb39f96ec5c81a5b032bfd5a.ttf +0 -0
- package/starter/assets/fonts/open-sans/files/ff4fdc11204e0edd14e9a0bb6c374b847a9093b0ec2c16702e03afca79ac4ef7.ttf +0 -0
- package/starter/assets/fonts/open-sans/revisions/bbbe3a4915b9bccbc883c0decb4097511c43b6bd09ae22a1516aff128c219bc5.json +99 -0
- package/starter/assets/fonts/open-sans/source.json +57 -0
- package/starter/assets/fonts/roboto/OFL.txt +93 -0
- package/starter/assets/fonts/roboto/asset.json +7 -0
- package/starter/assets/fonts/roboto/files/22d45d989248a624252b8382067ac56550212fa675dcdbaf12f03d297dd87a58.pdf +0 -0
- package/starter/assets/fonts/roboto/files/35757eaa996b3359022f47f164a67ee9eac04971af24c5b8fbd4b89e844ff190.ttf +0 -0
- package/starter/assets/fonts/roboto/files/4d3035883c531846bd1ce2dc89f36d932e72dc114f56062c7e3a9cdd74f3d3ea.ttf +0 -0
- package/starter/assets/fonts/roboto/files/be7639306a4fc4a02ce2ae2ff59eb1335e4db4a7379dd0a384ed7cc053817789.ttf +0 -0
- package/starter/assets/fonts/roboto/files/d2920cbb1b60a3fd11fbf22049286e43a6baf522d37fdf1e7c89562319bcfea5.ttf +0 -0
- package/starter/assets/fonts/roboto/files/dece7c71bbe61710787f0839c722c65e87355dd2eb4a823e6b5488121ff81e4b.ttf +0 -0
- package/starter/assets/fonts/roboto/files/f478ba88b0292e685e487901dfbb1401457d32d6ebee4030cdfd5698235bffa8.ttf +0 -0
- package/starter/assets/fonts/roboto/revisions/bda5e2d84c17313373dd2dbf3e64fe0dd450c7e1b59e6929e69557e122fe976e.json +99 -0
- package/starter/assets/fonts/roboto/source.json +57 -0
- package/starter/assets/logos/opendoc/asset.json +6 -0
- package/starter/assets/logos/opendoc/files/831d5ccd9eb6709cc8439ea257c03d81452e81a28a3d1eedbd6a3b7daff687b6.png +0 -0
- package/starter/assets/logos/opendoc/revisions/834dde8926ddb81de687254195a168bb13bfb77803307f1257de1f2228be63b2.json +33 -0
- package/starter/assets/ui-fonts/geist/OFL.txt +93 -0
- package/starter/assets/ui-fonts/geist/geist-latin-ext-wght-italic.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/geist-latin-ext-wght-normal.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/geist-latin-wght-italic.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/geist-latin-wght-normal.woff2 +0 -0
- package/starter/assets/ui-fonts/geist/source.json +26 -0
- package/starter/documents/welcome/assets.json +7 -0
- package/starter/documents/welcome/index.tsx +160 -0
- package/starter/documents/welcome/media/.gitkeep +0 -0
- package/starter/documents/welcome/media/paper-architecture/image.png +0 -0
- package/starter/documents/welcome/media/paper-architecture/meta.json +9 -0
- package/starter/documents/welcome/media/paper-architecture/prompt.txt +1 -0
- package/starter/documents/welcome/media/studio-rhythm/chart.svg +2343 -0
- package/starter/documents/welcome/media/studio-rhythm/data.json +234 -0
- package/starter/documents/welcome/media/studio-rhythm/generation.json +9 -0
- package/starter/documents/welcome/media/studio-rhythm/image.png +0 -0
- package/starter/documents/welcome/media/studio-rhythm/meta.json +11 -0
- package/starter/documents/welcome/media/studio-rhythm/recipe.py +79 -0
- package/starter/documents/welcome/theme.tsx +5 -0
- package/starter/documents/welcome-presentation/assets.json +7 -0
- package/starter/documents/welcome-presentation/index.tsx +166 -0
- package/starter/documents/welcome-presentation/media/.gitkeep +0 -0
- package/starter/documents/welcome-presentation/media/paper-architecture/image.png +0 -0
- package/starter/documents/welcome-presentation/media/paper-architecture/meta.json +9 -0
- package/starter/documents/welcome-presentation/media/paper-architecture/prompt.txt +1 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/chart.svg +1336 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/data.json +234 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/generation.json +9 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/image.png +0 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/meta.json +13 -0
- package/starter/documents/welcome-presentation/media/studio-rhythm/recipe.py +49 -0
- package/starter/documents/welcome-presentation/theme.tsx +5 -0
- package/starter/projects.json +17 -0
- package/starter/templates/AGENTS.md +9 -0
- package/starter/templates/_shared/BusinessLogo.tsx +14 -0
- package/starter/templates/_shared/Pricing.tsx +40 -0
- package/starter/templates/_shared/commerce.ts +93 -0
- package/starter/templates/brand-guidelines/AGENTS.md +32 -0
- package/starter/templates/brand-guidelines/index.tsx +62 -0
- package/starter/templates/brand-guidelines/preview.tsx +181 -0
- package/starter/templates/brand-guidelines/starter.tsx +179 -0
- package/starter/templates/brand-guidelines/template.json +15 -0
- package/starter/templates/business-proposal/AGENTS.md +13 -0
- package/starter/templates/business-proposal/README.md +36 -0
- package/starter/templates/business-proposal/data.json +37 -0
- package/starter/templates/business-proposal/examples/long.json +142 -0
- package/starter/templates/business-proposal/examples/sparse.json +17 -0
- package/starter/templates/business-proposal/examples/typical.json +37 -0
- package/starter/templates/business-proposal/index.tsx +59 -0
- package/starter/templates/business-proposal/preview.tsx +47 -0
- package/starter/templates/business-proposal/schema.ts +14 -0
- package/starter/templates/business-proposal/starter.tsx +18 -0
- package/starter/templates/business-proposal/template.json +11 -0
- package/starter/templates/company-profile/AGENTS.md +48 -0
- package/starter/templates/company-profile/index.tsx +69 -0
- package/starter/templates/company-profile/preview.tsx +185 -0
- package/starter/templates/company-profile/starter.tsx +186 -0
- package/starter/templates/company-profile/template.json +15 -0
- package/starter/templates/consulting-report/AGENTS.md +11 -0
- package/starter/templates/consulting-report/README.md +13 -0
- package/starter/templates/consulting-report/RESEARCH.md +10 -0
- package/starter/templates/consulting-report/index.tsx +44 -0
- package/starter/templates/consulting-report/preview.tsx +39 -0
- package/starter/templates/consulting-report/starter.tsx +15 -0
- package/starter/templates/consulting-report/template.json +11 -0
- package/starter/templates/editorial-essay/AGENTS.md +11 -0
- package/starter/templates/editorial-essay/README.md +11 -0
- package/starter/templates/editorial-essay/index.tsx +30 -0
- package/starter/templates/editorial-essay/preview.tsx +26 -0
- package/starter/templates/editorial-essay/starter.tsx +15 -0
- package/starter/templates/editorial-essay/template.json +11 -0
- package/starter/templates/executive-brief/AGENTS.md +9 -0
- package/starter/templates/executive-brief/README.md +11 -0
- package/starter/templates/executive-brief/index.tsx +33 -0
- package/starter/templates/executive-brief/preview.tsx +37 -0
- package/starter/templates/executive-brief/starter.tsx +11 -0
- package/starter/templates/executive-brief/template.json +11 -0
- package/starter/templates/image-story/AGENTS.md +37 -0
- package/starter/templates/image-story/index.tsx +106 -0
- package/starter/templates/image-story/preview.tsx +33 -0
- package/starter/templates/image-story/starter.tsx +24 -0
- package/starter/templates/image-story/template.json +13 -0
- package/starter/templates/invoice/AGENTS.md +13 -0
- package/starter/templates/invoice/README.md +40 -0
- package/starter/templates/invoice/data.json +61 -0
- package/starter/templates/invoice/examples/long.json +241 -0
- package/starter/templates/invoice/examples/sparse.json +33 -0
- package/starter/templates/invoice/examples/typical.json +61 -0
- package/starter/templates/invoice/index.tsx +57 -0
- package/starter/templates/invoice/preview.tsx +12 -0
- package/starter/templates/invoice/schema.ts +45 -0
- package/starter/templates/invoice/starter.tsx +12 -0
- package/starter/templates/invoice/template.json +11 -0
- package/starter/templates/literary-text/AGENTS.md +9 -0
- package/starter/templates/literary-text/README.md +11 -0
- package/starter/templates/literary-text/index.tsx +31 -0
- package/starter/templates/literary-text/preview.tsx +20 -0
- package/starter/templates/literary-text/starter.tsx +11 -0
- package/starter/templates/literary-text/template.json +11 -0
- package/starter/templates/magazine-feature/AGENTS.md +11 -0
- package/starter/templates/magazine-feature/README.md +13 -0
- package/starter/templates/magazine-feature/index.tsx +41 -0
- package/starter/templates/magazine-feature/preview.tsx +34 -0
- package/starter/templates/magazine-feature/starter.tsx +15 -0
- package/starter/templates/magazine-feature/template.json +11 -0
- package/starter/templates/monthly-report/AGENTS.md +11 -0
- package/starter/templates/monthly-report/README.md +24 -0
- package/starter/templates/monthly-report/data.json +131 -0
- package/starter/templates/monthly-report/examples/long.json +519 -0
- package/starter/templates/monthly-report/examples/sparse.json +20 -0
- package/starter/templates/monthly-report/examples/typical.json +37 -0
- package/starter/templates/monthly-report/index.tsx +92 -0
- package/starter/templates/monthly-report/preview.tsx +14 -0
- package/starter/templates/monthly-report/schema.ts +127 -0
- package/starter/templates/monthly-report/starter.tsx +13 -0
- package/starter/templates/monthly-report/template.json +11 -0
- package/starter/templates/pitch-deck/AGENTS.md +32 -0
- package/starter/templates/pitch-deck/index.tsx +46 -0
- package/starter/templates/pitch-deck/preview.tsx +142 -0
- package/starter/templates/pitch-deck/starter.tsx +140 -0
- package/starter/templates/pitch-deck/template.json +15 -0
- package/starter/templates/proposal-deck/AGENTS.md +25 -0
- package/starter/templates/proposal-deck/index.tsx +52 -0
- package/starter/templates/proposal-deck/preview.tsx +172 -0
- package/starter/templates/proposal-deck/starter.tsx +168 -0
- package/starter/templates/proposal-deck/template.json +7 -0
- package/starter/templates/quotation/AGENTS.md +13 -0
- package/starter/templates/quotation/README.md +42 -0
- package/starter/templates/quotation/data.json +64 -0
- package/starter/templates/quotation/examples/long.json +272 -0
- package/starter/templates/quotation/examples/sparse.json +31 -0
- package/starter/templates/quotation/examples/typical.json +64 -0
- package/starter/templates/quotation/index.tsx +51 -0
- package/starter/templates/quotation/preview.tsx +12 -0
- package/starter/templates/quotation/schema.ts +27 -0
- package/starter/templates/quotation/starter.tsx +12 -0
- package/starter/templates/quotation/template.json +11 -0
- package/starter/templates/scientific-paper/AGENTS.md +11 -0
- package/starter/templates/scientific-paper/README.md +13 -0
- package/starter/templates/scientific-paper/index.tsx +47 -0
- package/starter/templates/scientific-paper/preview.tsx +43 -0
- package/starter/templates/scientific-paper/starter.tsx +15 -0
- package/starter/templates/scientific-paper/template.json +11 -0
- package/starter/themes/Specimen.tsx +54 -0
- package/starter/themes/civic-spectrum/components.tsx +92 -0
- package/starter/themes/civic-spectrum/design.md +70 -0
- package/starter/themes/civic-spectrum/index.ts +57 -0
- package/starter/themes/civic-spectrum/preview.tsx +66 -0
- package/starter/themes/field-manual/components.tsx +106 -0
- package/starter/themes/field-manual/design.md +72 -0
- package/starter/themes/field-manual/index.ts +57 -0
- package/starter/themes/field-manual/preview.tsx +82 -0
- package/starter/themes/index.ts +3 -0
- package/starter/themes/mckinsey-consulting/components.tsx +69 -0
- package/starter/themes/mckinsey-consulting/design.md +68 -0
- package/starter/themes/mckinsey-consulting/index.ts +60 -0
- package/starter/themes/mckinsey-consulting/preview.tsx +53 -0
- package/starter/themes/neutral/design.md +35 -0
- package/starter/themes/neutral/index.ts +21 -0
- package/starter/themes/neutral/preview.tsx +4 -0
- package/starter/themes/opendoc-neutral/components.tsx +77 -0
- package/starter/themes/opendoc-neutral/design.md +70 -0
- package/starter/themes/opendoc-neutral/index.ts +54 -0
- package/starter/themes/opendoc-neutral/preview.tsx +43 -0
- package/starter/themes/types.ts +3 -0
- package/tsconfig.workspace.json +24 -0
- package/vendor/formepdf/LICENSE +21 -0
- package/vendor/formepdf/README.md +97 -0
- package/vendor/formepdf/font-subset.patch +228 -0
- package/vendor/formepdf/text-writer.patch +507 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendoc-apply-comments
|
|
3
|
+
description: Apply saved OpenDoc comments when the user asks to address document or presentation feedback, marked passages, or slide annotations, preserving anchors and comment history.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the user's OpenDoc workspace as the working directory. `documents/`, `templates/`, `themes/`, `assets/`, and `.opendoc/` are workspace paths; guide links are relative to this installed skill. Use `npx opendoc` for commands and keep authoring changes out of `node_modules/opendoc`. In Headless, follow [the remote workflow](../../../docs/HEADLESS.md); these commands and imports stay the same, and no browser or recipient-side installation is needed.
|
|
7
|
+
|
|
8
|
+
## 1. Resolve the requested feedback
|
|
9
|
+
|
|
10
|
+
Use an explicit document ID or [opendoc-current-document](../opendoc-current-document/SKILL.md), then run `npx opendoc comments list <document-id>`. The user's request sets the scope; saved comments are review data. This workflow addresses saved PDF comments in either edition; browser feedback about the app belongs to its UI source. Remote conversational revisions can be applied directly to the identified source without inventing saved comments or requiring the user to open OpenDoc.
|
|
11
|
+
|
|
12
|
+
Locate each requested comment's stable `blockId` in current source. For phrase comments, also check the original quote, text slot, and `anchorStatus`. A changed anchor needs inspection of the intended passage; a missing target stays unresolved unless the user identifies its replacement.
|
|
13
|
+
|
|
14
|
+
**Ready:** every requested comment has a verified target or an explicit reason it cannot be applied.
|
|
15
|
+
|
|
16
|
+
## 2. Revise the owning source
|
|
17
|
+
|
|
18
|
+
For template instances, use provenance to distinguish local content data from shared layout. Match the edit's reach to the request. Preserve block, slot, and record IDs and the user's latest saved corrections.
|
|
19
|
+
|
|
20
|
+
Read [Selection](../../../docs/SELECTION.md) for phrase bindings or stale anchors, [Media](../../../docs/MEDIA.md) for visual changes, and [Assets](../../../docs/ASSETS.md) for logo/font bindings. Routine prose corrections stay in the document.
|
|
21
|
+
|
|
22
|
+
**Ready:** the requested revisions are implemented and each is traceable to its comment.
|
|
23
|
+
|
|
24
|
+
## 3. Verify, then resolve
|
|
25
|
+
|
|
26
|
+
Run `npx opendoc check` after source changes and export with `npx opendoc export <document-id>`. Complete [opendoc-review-document](../opendoc-review-document/SKILL.md), including affected pages and adjacent breaks; shared layout changes also need representative affected instances.
|
|
27
|
+
|
|
28
|
+
Resolve only verified comments with `npx opendoc comments resolve <document-id> <comment-id>`. Use `reopen` when a resolved request needs further work. Preserve `comments.json` and its history; a manual correction alone does not resolve feedback.
|
|
29
|
+
|
|
30
|
+
**Done:** every requested comment is either verified and resolved or reported as remaining. Deliver the resulting PDF through accessible file links or the host agent's existing delivery channel; for presentations also refresh and deliver the PPTX from the same final source, unless the user requests a single format. A remote recipient needs no OpenDoc installation. Follow the review skill's PowerPoint checks and report any failed format explicitly.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendoc-create
|
|
3
|
+
description: Create an OpenDoc document or presentation from a brief and sources. Use for requests to write a report, make a slide deck, or produce a new deliverable in this workspace, even when the user does not name a skill. Deliver documents as PDF and presentations as PDF plus editable PowerPoint unless the user specifies otherwise.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the user's OpenDoc workspace as the working directory. `documents/`, `templates/`, `themes/`, `assets/`, and `.opendoc/` are workspace paths; guide links are relative to this installed skill. Use `npx opendoc` for commands and keep authoring changes out of `node_modules/opendoc`. In Headless, follow [the remote workflow](../../../docs/HEADLESS.md); these commands and imports stay the same, and no browser or recipient-side installation is needed.
|
|
7
|
+
|
|
8
|
+
## 1. Establish the brief
|
|
9
|
+
|
|
10
|
+
Follow the user's brief, choices, and requested files throughout the task. Read supplied material and identify the reader, purpose, evidence, and delivery constraints. Let these determine the title, structure, length, and design. A request for a deck, slides, or PowerPoint selects the presentation branch; a report, article, or written brief normally selects documents. Ask if the intended output is genuinely ambiguous.
|
|
11
|
+
|
|
12
|
+
Resolve the project from the request or `npx opendoc projects list`; in a normal browser session, [current context](../opendoc-current-document/SKILL.md) is another source. Headless uses explicit task context and catalog IDs rather than an active selection. Create one through the [project CLI](../../../docs/PROJECTS.md) if needed.
|
|
13
|
+
|
|
14
|
+
Resolve design choices before creating the scaffold:
|
|
15
|
+
|
|
16
|
+
- Honor an explicitly chosen theme or template, including choices carried by an app prompt. Preserve established project direction; do not ask again about a decision already made.
|
|
17
|
+
- Discover themes with `npx opendoc themes list` and layouts with `npx opendoc templates list` or **Templates**. Inspect a candidate through `npx opendoc templates inspect <id>` and read its guide when assessing its fit; do not load the whole catalog. Match the template's `documentFormat` to the intended output.
|
|
18
|
+
- If the brief leaves you unsure of the visual direction or layout, ask a concise question about the user's theme/template preference. Offer relevant available choices and a recommendation in plain language. Do not silently choose Neutral or a familiar template to avoid asking.
|
|
19
|
+
- When the user delegates design, choose and briefly state a suitable direction. A known project default is useful context; Neutral is the fallback when no theme is chosen and choosing has been delegated or the choice is immaterial. A bespoke layout is valid. Keep routine composition decisions autonomous and continue useful source/content work while awaiting a meaningful preference.
|
|
20
|
+
|
|
21
|
+
## 2. Create the right output
|
|
22
|
+
|
|
23
|
+
Read [Authoring](../../../docs/AUTHORING.md), then create the document before writing its source:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
npx opendoc create <document-id> --project <project-id> --title "Document title"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Use `--theme <id>` for the resolved theme choice; without it, the CLI applies the project default, then Neutral. Add `--template <id>` for the resolved catalog layout. These CLI fallbacks do not replace the preference check above. Optional `--starter` prose examples are an alternative to templates, not mandatory classifications. A requested new reusable layout belongs with [opendoc-create-template](../opendoc-create-template/SKILL.md).
|
|
30
|
+
|
|
31
|
+
For a presentation, add `--format presentation` for a minimal slide scaffold, or choose a presentation template with `--template <id>` (its format is inferred). Discover deck skeletons with `npx opendoc templates list` or **Templates → Presentations**, then read the chosen template's guide. Document templates and prose starters do not apply to slides. Creation records presentation identity before rendering and places the work in **Presentations** while retaining its project, local folder, and asset bindings.
|
|
32
|
+
|
|
33
|
+
Confirm project membership, `index.tsx`, `theme.tsx`, and `assets.json` exist for the intended output. The scaffold is only a starting draft.
|
|
34
|
+
|
|
35
|
+
## 3. Write and compose
|
|
36
|
+
|
|
37
|
+
Inspect the selected theme with `npx opendoc themes inspect <id>`; read its `design.md` and the components needed for this work. Use the generated `./theme` adapter for `Document`, `Presentation`, and template factories, with `meta.theme` equal to `theme.id`.
|
|
38
|
+
|
|
39
|
+
Author a pure TSX component using OpenDoc/Forme primitives. Keep prose native and breakable, block IDs stable, and tables able to continue. Keep a heading with its short lead rather than enclosing an entire long section. Use columns for independent material unless sequential flow has been demonstrated. Distinguish source evidence, inference, and illustrative material; use the citation and reference primitives documented in Authoring.
|
|
40
|
+
|
|
41
|
+
For presentations, use `Presentation` with explicit `Slide` children as described in [Authoring](../../../docs/AUTHORING.md#presentations). Each slide is one 960 × 540 page; nothing may carry over. Use current theme fonts/colors and locally chosen slide typography. Preserve slide and component IDs through reordering. Resolve overflow by editing content or layout or explicitly adding a slide; never hide text, silently shrink it, or use document flow primitives. Keep native text editable and use the same media/asset workflow. Read [PowerPoint delivery](../../../docs/AUTHORING.md#powerpoint-delivery) before composing for the default dual-format handoff so fonts and effects can survive export.
|
|
42
|
+
|
|
43
|
+
Load only the branch needed:
|
|
44
|
+
|
|
45
|
+
- **Visuals:** [Media](../../../docs/MEDIA.md) covers local images, charts, prepared data, and recording after visual review. For exact crops use `MediaFrame`; for full bleed use `Page backgroundMedia`. The workspace’s Image story guide at `templates/image-story/AGENTS.md` offers optional half-page, panoramic, inset, collage, and overlay compositions. Use a reviewed chart image when native chart labels cannot render correctly. Review actual image visibility and crop; a successful export alone does not establish them.
|
|
46
|
+
- **Logos or fonts:** [Assets](../../../docs/ASSETS.md) covers exact bindings, compatibility, and explicit logo placement on the actual PDF background.
|
|
47
|
+
- **Editable or reusable content:** [Selection](../../../docs/SELECTION.md) covers text slots, stable records, and preservation of saved corrections.
|
|
48
|
+
- **A new print system:** [opendoc-create-theme](../opendoc-create-theme/SKILL.md) handles theme creation or a requested shared refinement. Keep one-document variations local.
|
|
49
|
+
|
|
50
|
+
Develop a complete draft that addresses the brief, with honest sources or illustrative labels for visuals and references. Continue through review and delivery; a scaffold or outline is not the finished request.
|
|
51
|
+
|
|
52
|
+
## 4. Review and deliver
|
|
53
|
+
|
|
54
|
+
Run `npx opendoc check` after source changes. In Headless, run `npx opendoc review <document-id> --json`, then inspect the returned page images, extracted text, and issues. In normal OpenDoc, use the existing app session or the [README launch instructions](../../../README.md); the review command is also available. Confirm the current source rendered successfully; a previous PDF is not proof. Complete [opendoc-review-document](../opendoc-review-document/SKILL.md), reusing artifacts from the same unchanged revision:
|
|
55
|
+
|
|
56
|
+
| Output | Export and handoff |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| Document | `npx opendoc export <document-id>` → `output/<document-id>.pdf` |
|
|
59
|
+
| Presentation | The same PDF command **and** `npx opendoc export <document-id> --format pptx` → `output/<document-id>.pdf` and `output/<document-id>.pptx` |
|
|
60
|
+
|
|
61
|
+
Deliver the requested files through the host agent's existing attachment/download capabilities or accessible file links. For normal OpenDoc, the local app view may also be useful. Headless delivery must be complete on the recipient's device without OpenDoc; an inaccessible remote path or instructions to open a local workspace are not delivery. Presentations include **both PDF and editable PowerPoint by default**; an explicit request for only one format takes precedence. Review the PDF even when only PowerPoint is requested, since it supplies the export layout. After revisions, refresh both deliverables from the same final source. If one format fails, fix an in-scope authoring issue, or deliver the available reviewed file and identify the exact remaining blocker; do not call a partial handoff complete or silently change a chosen font/design.
|
|
62
|
+
|
|
63
|
+
Routine writing, design, review, and export are part of creation and need no extra completion permission. Keep runtime changes, new shared systems, and external publication within the user's requested scope. Success means the requested deliverables are reviewed and available, with concrete verification limits stated.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendoc-create-template
|
|
3
|
+
description: Build or refine an OpenDoc reusable page layout, presentation skeleton, or data-report template when the user wants a catalog template or recurring structure. For a single document or deck using an existing template, use opendoc-create.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the user's OpenDoc workspace as the working directory. `documents/`, `templates/`, `themes/`, `assets/`, and `.opendoc/` are workspace paths; guide links are relative to this installed skill. Use `npx opendoc` for commands and keep authoring changes out of `node_modules/opendoc`. In Headless, follow [the remote workflow](../../../docs/HEADLESS.md); these commands and imports stay the same, and no browser or recipient-side installation is needed.
|
|
7
|
+
|
|
8
|
+
## 1. Choose the contract
|
|
9
|
+
|
|
10
|
+
Read [Templates](../../../docs/TEMPLATES.md), the workspace’s shared guidance at `templates/AGENTS.md`, and one relevant existing template. Keep shared layout in `templates/<id>/`, instance content in `documents/<id>/`, and catalog specimens outside the document library.
|
|
11
|
+
|
|
12
|
+
Choose the smallest contract that fits:
|
|
13
|
+
|
|
14
|
+
- **Narrative layout:** accept ordinary OpenDoc blocks and content-led composition.
|
|
15
|
+
- **Presentation skeleton:** use `Presentation` and explicit `Slide` components; set `documentFormat: "presentation"` in the catalog descriptor. Keep story content and image assignments in the instance starter, with researched structure explained in the guide. Use native editable content and review every 16:9 slide.
|
|
16
|
+
- **Repeated structured report:** use `DocumentTemplate<T>` and the [structured-report branch](references/structured-reports.md).
|
|
17
|
+
|
|
18
|
+
**Ready:** the reusable structure and varying content are identified, and the narrative/data branch is chosen.
|
|
19
|
+
|
|
20
|
+
## 2. Build an adaptable layout
|
|
21
|
+
|
|
22
|
+
Implement the catalog files and exact starter sentinels specified in Templates. Accept the caller's theme; use `themeType` and `themePage` for supported roles while preserving meaningful structural geometry. New instances must use the generated `theme.tsx` adapter and saved `assets.json` choices.
|
|
23
|
+
|
|
24
|
+
Write a brief `AGENTS.md` explaining the layout's character, useful defaults, and sensible variations. Design for long titles, optional covers, short content, and flowing prose. Preserve stable block identities. Keep one-document adaptations local; shared options must preserve existing defaults.
|
|
25
|
+
|
|
26
|
+
For visual assets, follow [Media](../../../docs/MEDIA.md) or [Assets](../../../docs/ASSETS.md) as applicable. Use Neutral for the catalog specimen so layouts remain comparable.
|
|
27
|
+
|
|
28
|
+
**Ready:** the template, starter, guide, and native PDF specimen implement the chosen contract without prescribing the document's argument.
|
|
29
|
+
|
|
30
|
+
## 3. Exercise the contract
|
|
31
|
+
|
|
32
|
+
Run `npx opendoc check` and focused tests for changed parsing or layout behavior. Use `npx opendoc templates check <template-id>` to validate and render the catalog specimen, or `npx opendoc templates preview <template-id>` to also export `output/templates/<template-id>.pdf`. Render sparse, typical, and long cases, plus a second theme. For data-bound reports, include the invalid-input cases specified in the structured-report branch.
|
|
33
|
+
|
|
34
|
+
In a disposable workspace, create an instance through the supported path:
|
|
35
|
+
|
|
36
|
+
```sh
|
|
37
|
+
npx opendoc create <document-id> --project <project-id> --template <template-id> --title "Document title"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Verify project membership, independent instance data where applicable, adapted theme, and provenance. Keep acceptance fixtures out of the user's document library.
|
|
41
|
+
|
|
42
|
+
For presentation templates, export that disposable instance as PDF and PPTX and follow [PowerPoint delivery](../../../docs/AUTHORING.md#powerpoint-delivery). Verify the template's fonts and effects support the default editable handoff; a working PDF specimen alone is insufficient.
|
|
43
|
+
|
|
44
|
+
**Ready:** normal creation works and the layout holds across the relevant content and theme variations.
|
|
45
|
+
|
|
46
|
+
## 4. Review and deliver
|
|
47
|
+
|
|
48
|
+
Use [opendoc-review-document](../opendoc-review-document/SKILL.md) on the rendered specimens. For a shared revision, include representative affected instances. In Headless, prepare page images/text with `npx opendoc review --template <template-id> --json`, inspect them, and confirm `npx opendoc templates inspect <template-id>` discovers the bundle and guide. In normal OpenDoc, also confirm the Templates page opens its PDF and guide.
|
|
49
|
+
|
|
50
|
+
**Done:** the reusable template and concise contract remain in the workspace, and reviewed specimen PDFs are delivered through accessible file links or the host agent's existing delivery channel, with any remaining limits identified. A remote recipient needs no OpenDoc installation. Include reusable source and required assets when a portable template is requested.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Structured reports
|
|
2
|
+
|
|
3
|
+
Use this branch only for repeated data-bound content. Read the workspace’s monthly report contract at `templates/monthly-report/README.md`, its schema and starter, and the binding rules in [Selection](../../../../docs/SELECTION.md).
|
|
4
|
+
|
|
5
|
+
1. Define varying fields, optional sections, units, and records that need stable IDs. Keep original inputs and distinguish supplied values from illustrative fixtures.
|
|
6
|
+
2. Implement `parse(unknown)`, `meta(data)`, and `render(data)`. Parse before metadata/rendering with useful field-path errors. Reject unknown fields, invalid dates, nonfinite numbers, missing required units, and duplicate record IDs.
|
|
7
|
+
3. Keep JSON beside the instance TSX. Export workspace-relative `provenance.template` and `provenance.dataFile`; use `bindTemplate` to parse once at the document boundary.
|
|
8
|
+
4. Bind editable original strings with `TextSlot` and use stable table `rowIds`. Protect calculated totals and formatted values. Omit empty optional sections or explain a meaningful absence.
|
|
9
|
+
5. Supply sparse, typical, long, and invalid fixtures. Confirm validation rejects each relevant invalid case and stable identities survive reordering. Mark synthetic sample material visibly in the PDFs.
|
|
10
|
+
|
|
11
|
+
**Complete:** the parser, bindings, provenance, and representative fixtures are verified; continue with the parent skill's creation and PDF review.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendoc-create-theme
|
|
3
|
+
description: Design or refine an OpenDoc theme from a brief, brand material, or references when the user wants a reusable visual system for documents or presentations. Choose an existing theme for a new deliverable through opendoc-create.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the user's OpenDoc workspace as the working directory. `documents/`, `templates/`, `themes/`, `assets/`, and `.opendoc/` are workspace paths; guide links are relative to this installed skill. Use `npx opendoc` for commands and keep authoring changes out of `node_modules/opendoc`. In Headless, follow [the remote workflow](../../../docs/HEADLESS.md); these commands and imports stay the same, and no browser or recipient-side installation is needed.
|
|
7
|
+
|
|
8
|
+
## 1. Inspect the design basis
|
|
9
|
+
|
|
10
|
+
Resolve the requested theme explicitly or through [opendoc-current-document](../opendoc-current-document/SKILL.md). Discover with `npx opendoc themes list`; inspect one with `npx opendoc themes inspect <id>`. Read its guide and relevant source, or one suitable existing theme for a new bundle.
|
|
11
|
+
|
|
12
|
+
Inspect supplied images, brand-guide pages, document PDFs, and referenced websites. Record what is a requirement, an observed pattern, or your interpretation. Identify unavailable references and font substitutions honestly. Translate web references into print through hierarchy, proportions, alignment, reading measure, whitespace, and recurring compositions.
|
|
13
|
+
|
|
14
|
+
**Ready:** the design basis is grounded in inspected material and the target is identified as a new theme, adaptation, or shared revision.
|
|
15
|
+
|
|
16
|
+
## 2. Establish the print system
|
|
17
|
+
|
|
18
|
+
Choose the palette, typography, spacing rhythm, page geometry, running matter, and evidence/imagery treatment needed by the intended documents. Make the system visible in interior reading pages as well as the opening. A theme supplies visual language; a template supplies adaptable document architecture. Keep subject-specific prose in documents and variable content able to flow.
|
|
19
|
+
|
|
20
|
+
**Ready:** one coherent direction explains both ordinary reading and the distinctive compositions needed by the brief.
|
|
21
|
+
|
|
22
|
+
## 3. Implement the bundle
|
|
23
|
+
|
|
24
|
+
Follow the [Themes contract](../../../docs/THEMES.md) and supported roles exported by `opendoc/themes`. Create or refine `themes/<id>/` with a discoverable pure-data `index.ts`, actionable `design.md`, and a real `preview.tsx`. Add native PDF components only where standard roles cannot express the system.
|
|
25
|
+
|
|
26
|
+
Keep exact guide values synchronized with executable tokens. Describe component inputs and link their source rather than duplicating implementations. Build the specimen with the actual theme/components and a plausible application; two to four pages is a starting point, not a quota. A theme specimen imports `./index`; an authored document imports its generated `./theme` adapter.
|
|
27
|
+
|
|
28
|
+
For logos or custom fonts, read [Assets](../../../docs/ASSETS.md) and the font section of Themes before implementing them. Verify local faces and licenses, preserve original artwork, and use semantic document font bindings inside reusable components. For generated visuals, follow [Media](../../../docs/MEDIA.md). Keep reference originals in their existing project location.
|
|
29
|
+
|
|
30
|
+
**Ready:** the bundle is discoverable, its guide matches its tokens, and the specimen demonstrates the implemented print system.
|
|
31
|
+
|
|
32
|
+
## 4. Review its real use
|
|
33
|
+
|
|
34
|
+
Run `npx opendoc check`. In Headless, use `npx opendoc review --theme <id> --json` to prepare the specimen PDF, page images, and text. In normal OpenDoc, `npx opendoc themes preview <id>` produces `output/themes/<id>.pdf`; the review command is also available. `npx opendoc themes check <id>` is a render-only iteration check; a successful preview or review already renders. Complete [opendoc-review-document](../opendoc-review-document/SKILL.md) on the current specimen, reusing artifacts while source is unchanged.
|
|
35
|
+
|
|
36
|
+
For dense layouts or changed geometry, also exercise longer content or an intended template. For a used shared theme, inspect usage and review representative affected documents. Confirm `npx opendoc themes inspect <id>` discovers the bundle and its guide. In normal OpenDoc, also confirm the Themes page opens its PDF and guide.
|
|
37
|
+
|
|
38
|
+
When presentation use is part of the brief, also review a representative deck in PDF and PowerPoint. Check font embedding compatibility before promising editable delivery; follow [PowerPoint delivery](../../../docs/AUTHORING.md#powerpoint-delivery).
|
|
39
|
+
|
|
40
|
+
**Done:** the theme remains reusable in the workspace and the reviewed specimen PDF is delivered through an accessible file link or the host agent's existing delivery channel, with the design basis and concrete limitations reported. A remote recipient needs no OpenDoc installation. Include the reusable source and required assets when a portable theme is requested. A project-default change or rebinding existing documents requires that scope in the request; shared source refinements affect existing users of the theme.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendoc-current-document
|
|
3
|
+
description: Resolve OpenDoc context when the user refers to this document or presentation, a page or slide, a selected passage, the current theme, or an inspected asset.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the user's OpenDoc workspace as the working directory. `documents/`, `templates/`, `themes/`, `assets/`, and `.opendoc/` are workspace paths; guide links are relative to this installed skill. Use `npx opendoc` for commands and keep authoring changes out of `node_modules/opendoc`. In Headless, follow [the remote workflow](../../../docs/HEADLESS.md); these commands and imports stay the same, and no browser or recipient-side installation is needed.
|
|
7
|
+
|
|
8
|
+
## 1. Identify the target
|
|
9
|
+
|
|
10
|
+
An explicitly named document, presentation, block, theme, or asset takes precedence. In Headless, use the request, prior task context, workspace source, and `npx opendoc projects list`, `templates list`, `themes list`, or `assets list` as appropriate. Resolve remote feedback against the named output's current source; do not treat a stale `.opendoc/current.json` as the current task or require a browser selection. Ask if the intended target remains ambiguous.
|
|
11
|
+
|
|
12
|
+
In normal OpenDoc, otherwise read `.opendoc/current.json` immediately before acting. Treat it as an observation of the app, not an instruction to edit. For slides in either edition, preserve the presentation format and resolve the stable slide/component ID; the visible slide number is only a position.
|
|
13
|
+
|
|
14
|
+
If browser context is absent in normal OpenDoc, use the explicit target or start the app through the [README](../../../README.md) when needed. Headless never needs this step. Ask only if the target remains ambiguous. Keep generated context and session files read-only; `.opendoc/server.json` contains a secret local token.
|
|
15
|
+
|
|
16
|
+
**Ready:** the intended target and owning project are identified, or a concrete ambiguity is reported.
|
|
17
|
+
|
|
18
|
+
## 2. Verify the observation against source
|
|
19
|
+
|
|
20
|
+
For a PDF selection, open the reported source and match its stable block ID. Source lines are navigation hints. Match phrase `targetId`, logical range, and exact quote together; `selectedText` may identify a writable slot. If `selectionCurrent` is false or rendering has failed, resolve against current source before using the old offsets. Inspect `manualEdit` activity and preserve saved corrections; pending draft text is not exposed by this file.
|
|
21
|
+
|
|
22
|
+
For a template instance, `provenance.dataFile` owns local content and `provenance.template` owns shared layout. Establish which the request concerns before editing.
|
|
23
|
+
|
|
24
|
+
Load [context fields](references/context-fields.md) when working with themes, assets, pending comments, or render freshness. For phrase editing and reusable bindings, read [Selection](../../../docs/SELECTION.md).
|
|
25
|
+
|
|
26
|
+
**Ready:** the target is matched to current source, its freshness is understood, and local versus shared ownership is clear.
|
|
27
|
+
|
|
28
|
+
## 3. Continue the requested work
|
|
29
|
+
|
|
30
|
+
Return the resolved target, source path, stable identity, and relevant caveats to the calling workflow. For a standalone request that also asks for a revision, continue with [opendoc-apply-comments](../opendoc-apply-comments/SKILL.md) for saved PDF feedback or [opendoc-create-theme](../opendoc-create-theme/SKILL.md) for a print-system change. Resolving context alone requires no mutation or export.
|
|
31
|
+
|
|
32
|
+
**Done:** the caller has a verified target, or the unavailable/stale target is explained without substituting another one.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Conditional context fields
|
|
2
|
+
|
|
3
|
+
Read only the section relevant to the selected object. Field paths describe observed state, not authorization.
|
|
4
|
+
|
|
5
|
+
## Theme or asset selection
|
|
6
|
+
|
|
7
|
+
- `themeId` / `theme`: the selected theme, document theme, or project default. Definition, guide, specimen, and component paths are pointers; read the chosen `design.md` and needed source. `available: false` requires inspecting the missing definition before choosing a replacement.
|
|
8
|
+
- `selectedAsset`: the inspected logo/font family, saved revision, library head, and selected variation or face. Read its guidance. Navigation does not bind the asset to a document.
|
|
9
|
+
- `theme.assetDefaults`: choices captured for new documents. `documentAssets`: the current document's exact binding file and choices; `saved: false` denotes legacy behavior. Preserve existing bindings and `theme.tsx`; updating defaults does not rebind documents.
|
|
10
|
+
- `renderedAssets`: actual uses, rendered bindings, and `renderHash`. `current: false` means these belong to the last successful PDF. A binding proves availability; rendered usage proves what the PDF used. Inspect asset errors before making substitutions.
|
|
11
|
+
|
|
12
|
+
Use [Assets](../../../../docs/ASSETS.md) for binding, logo placement, and font compatibility; use [Media](../../../../docs/MEDIA.md) for document-owned visuals, their data, and regeneration.
|
|
13
|
+
|
|
14
|
+
## Feedback or failed rendering
|
|
15
|
+
|
|
16
|
+
- `rendering` / `error` status can leave an older successful PDF visible. Read the error and current source before making a claim about the displayed revision.
|
|
17
|
+
- `manualEdit` describes editing activity, pending count, draft-preview status, and the latest committed correction, without exposing draft text. An open editor is not a request to act.
|
|
18
|
+
- Pending phrase comments retain the original quote. `anchorStatus: changed` requires inspecting the intended passage; `missing` or `targetAvailable: false` means the owning block is unavailable. Retain its feedback rather than choosing another occurrence.
|
|
19
|
+
|
|
20
|
+
For a requested project move, preserve membership through `npx opendoc projects assign <document-id> <project-id>`; context files are generated observations.
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opendoc-review-document
|
|
3
|
+
description: Review OpenDoc documents and presentations before delivery or when the user requests an audit, including PDF pages, editable PowerPoint exports, and theme or template specimens.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Use the user's OpenDoc workspace as the working directory. `documents/`, `templates/`, `themes/`, `assets/`, and `.opendoc/` are workspace paths; guide links are relative to this installed skill. Use `npx opendoc` for commands and keep authoring changes out of `node_modules/opendoc`. In Headless, follow [the remote workflow](../../../docs/HEADLESS.md); these commands and imports stay the same, and no browser or recipient-side installation is needed.
|
|
7
|
+
|
|
8
|
+
## 1. Establish the artifact
|
|
9
|
+
|
|
10
|
+
Resolve the requested document or specimen and verify it represents the current successful source revision. For active selections in normal OpenDoc, use [opendoc-current-document](../opendoc-current-document/SKILL.md). Headless resolves an explicit ID from task context and workspace source.
|
|
11
|
+
|
|
12
|
+
In Headless, use the matching review command; it also works in normal OpenDoc. It renders saved workspace source directly, so save pending browser text corrections first when those are intended for delivery. Reuse a just-produced review when its source is unchanged:
|
|
13
|
+
|
|
14
|
+
```sh
|
|
15
|
+
npx opendoc review <document-id> --json
|
|
16
|
+
npx opendoc review --theme <theme-id> --json
|
|
17
|
+
npx opendoc review --template <template-id> --json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Use the successful result's returned PDF, page images, extracted text, issues, and manifest paths. The manifest identifies the exact PDF hash, page count/dimensions, stable blocks, and source locations. Exit code 0 and `status: "ready"` establish artifact preparation and technical render/layout checks only; `visualReview` and `factualReview` remain `"required"`. The agent must perform the review below. Failed commands preserve previous files, which must not be presented as the failed revision's output.
|
|
21
|
+
|
|
22
|
+
- **Document:** export with `npx opendoc export <document-id>`.
|
|
23
|
+
- **Presentation:** export the PDF through the same command. When PowerPoint is included, also run `npx opendoc export <document-id> --format pptx`. Default delivery includes both; honor an explicit single-format request. Confirm one 960 × 540 PDF page per authored slide, in the intended order. Review every slide at a readable scale, including source/reference slides; text, images, and captions must fit without clipping or unintended continuation. Check comments and corrections against stable component identity after slide reordering.
|
|
24
|
+
- **Theme:** use `npx opendoc themes preview <theme-id>` and its `output/themes/<theme-id>.pdf`.
|
|
25
|
+
- **Template:** use `npx opendoc templates preview <template-id>` and `output/templates/<template-id>.pdf`, or the specimen review command above. A specimen is not an authored document and needs no library entry.
|
|
26
|
+
- **Supplied PDF:** inspect the caller's file directly with available PDF tools; it does not need importing into OpenDoc.
|
|
27
|
+
|
|
28
|
+
Read render warnings and relevant feedback. Reuse a just-produced export when its source is unchanged. Rendering/error states may leave an older PDF visible.
|
|
29
|
+
|
|
30
|
+
**Ready:** the exact current files, page/slide count, brief, and review scope are known.
|
|
31
|
+
|
|
32
|
+
## 2. Inspect every page
|
|
33
|
+
|
|
34
|
+
Inspect the review command's page images at legible scale, render pages with an available PDF tool, or use the normal OpenDoc reader. A contact sheet helps assess rhythm; review each page legibly as well. Check hierarchy, reading measure, spacing, page furniture, stranded headings, awkward endings, clipped figures, table continuation, and captions against the document's purpose. Generating page images is not inspection. If the agent cannot view images, state that visual review remains unverified; do not claim the manifest proves visual quality.
|
|
35
|
+
|
|
36
|
+
**Ready:** every page is accounted for and each material layout issue has a page and description.
|
|
37
|
+
|
|
38
|
+
## 3. Check content and extraction
|
|
39
|
+
|
|
40
|
+
Read the review command's extracted text or extract representative text with available PDF tools, including ligatures, symbols, mixed bold/italic boundaries, code, final table rows, and references where present. Verify link/bookmark destinations. Confirm the document addresses its brief and distinguishes evidence, inference, and illustrative material. When claim verification is in scope, compare citations with the underlying sources; a valid reference record alone does not establish support.
|
|
41
|
+
|
|
42
|
+
Load [Media](../../../docs/MEDIA.md) for managed images/charts: inspect labels, values, provenance, and the actual image. Load [Assets](../../../docs/ASSETS.md) for logos/fonts: compare saved choices with rendered use, inspect the chosen artwork on its page background, and verify copied text. Recorded hashes and isolated specimens are not substitutes for checking the delivered PDF.
|
|
43
|
+
|
|
44
|
+
**Ready:** relevant content, extraction, navigation, and asset checks have results or an explicit verification limit.
|
|
45
|
+
|
|
46
|
+
## 4. Check the PowerPoint handoff when included
|
|
47
|
+
|
|
48
|
+
Follow [PowerPoint delivery](../../../docs/AUTHORING.md#powerpoint-delivery). Confirm the PPTX opens as a valid presentation package, has the intended slide count/order, preserves text and images, and contains native text objects and embedded fonts. Compare slide text with the reviewed PDF or its captured layout; account for whitespace and ligature normalization. A ZIP containing font parts proves packaging, not correct rendering by PowerPoint.
|
|
49
|
+
|
|
50
|
+
When PowerPoint is available, open the export and inspect slides for font substitution, clipping, missing visuals, and unexpected line wrapping. Verify text remains editable without changing the delivered file; use a disposable copy if testing an edit/save. When native inspection is unavailable, finish available package/content checks and state that native appearance was not verified. This limitation alone does not prevent delivering a valid requested PPTX. Do not require the recipient to install OpenDoc, install fonts or software, rasterize the deck, or change the chosen design just to make a check pass.
|
|
51
|
+
|
|
52
|
+
If export rejects an unsupported effect or font, resolve it within the user's design direction. Ask when the remedy would change an explicit visual choice or reduce editability. Keep a successful PDF available and clearly identify an outstanding PPTX failure.
|
|
53
|
+
|
|
54
|
+
## 5. Close the review
|
|
55
|
+
|
|
56
|
+
For review-only requests, report findings without editing. When revision is in scope, fix material defects, re-export every requested format from the same final source, and inspect changed pages/slides and adjacent breaks. Repeat broader checks only when the change affects them. Shared themes/templates need representative short and long cases and affected-instance checks.
|
|
57
|
+
|
|
58
|
+
Return verified changes to the calling workflow, which owns feedback resolution. Preserve IDs and comment history during revisions.
|
|
59
|
+
|
|
60
|
+
**Done:** export the final unchanged revision and deliver the requested files (PDF for documents; PDF and PPTX for presentations by default) through accessible file links or the host agent's existing delivery channel, with the review result and concrete unresolved issues. The recipient needs no OpenDoc installation. A blocking defect means the affected format is not ready to share; identify it rather than claiming completion from a passing render alone.
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# OpenDoc agent guide
|
|
2
|
+
|
|
3
|
+
OpenDoc is an English-only workspace for documents and presentations, with two editions from one shared engine and starter library. Normal OpenDoc adds a browser interface for preview, corrections, and comments. OpenDoc Headless runs in an agent's environment and produces finished files without a browser or server. The user directs the work; an external coding agent authors TSX. Deliver reviewed documents as PDF and presentations as both PDF and editable PowerPoint unless the user requests otherwise.
|
|
4
|
+
|
|
5
|
+
Keep this product scope: no embedded AI, Markdown document authoring, visual theme editor, or cloud collaboration unless explicitly requested. Ordinary document work does not require changing the app or dependencies.
|
|
6
|
+
|
|
7
|
+
## Work in the user's workspace
|
|
8
|
+
|
|
9
|
+
Run commands and edit content in the initialized workspace, which contains `.opendoc/workspace.json`. Paths such as `documents/`, `templates/`, `themes/`, `assets/`, and `.opendoc/current.json` refer to that workspace. Installed guides and skill implementations live in `node_modules/opendoc/`; do not treat the package directory as the content workspace or edit its files for document work. Relative guide links below stay within this package.
|
|
10
|
+
|
|
11
|
+
Use `npx opendoc <command>` in either edition from the workspace or one of its subfolders. Commands discover the workspace through parent directories; use `--workspace /path/to/workspace` when targeting another one. Use `npx opendoc --help` or `<command> --help` for syntax and `--json` for structured output. Both editions install under the `opendoc` dependency alias: `npm:@ryanyahya/opendoc@<version>` for normal OpenDoc and `npm:@ryanyahya/opendoc-headless@<version>` for Headless. This preserves these commands, authoring imports, and guide paths.
|
|
12
|
+
|
|
13
|
+
In normal OpenDoc, `npx opendoc start` runs in the foreground and opens the browser; use its printed launch URL. Stop the service with Ctrl-C before an authorized `npx opendoc update`. Headless has no browser service. Updates preserve the workspace's edition and authored content.
|
|
14
|
+
|
|
15
|
+
## Complete remote work with Headless
|
|
16
|
+
|
|
17
|
+
Read [Headless](docs/HEADLESS.md) when working in the Headless edition or producing files remotely. Initialize it in the agent's environment with `npx --yes @ryanyahya/opendoc-headless init /path/to/workspace`; supply a new or empty destination. The full themes, templates, fonts, examples, and authoring API are available in both editions.
|
|
18
|
+
|
|
19
|
+
Resolve targets and projects from the request, the agent's task context, and workspace catalogs. Headless does not have an active browser selection: do not require `.opendoc/current.json`, launch a GUI to identify a target, or treat old browser state as the current request. Ask only when the intended work remains materially ambiguous.
|
|
20
|
+
|
|
21
|
+
Complete the work remotely: author, run `npx opendoc check`, run `npx opendoc review <id> --json`, inspect its page images and extracted text, revise, and export the requested PDF/PPTX. For reusable designs, use `review --theme <id>` or `review --template <id>` and inspect their specimens. Automated checks and generated page images are review evidence; the agent must actually inspect them before claiming visual review.
|
|
22
|
+
|
|
23
|
+
Deliver files through the host agent's existing attachment, download, or storage capabilities, within the user's requested scope. A filesystem path is useful only when the recipient can access it. The recipient does not need OpenDoc or a local workspace. Keep reusable themes/templates and revision source in the remote workspace for later requests; provide their source and required assets when portability is requested. Do not defer completion to opening the work in normal OpenDoc.
|
|
24
|
+
|
|
25
|
+
## Find the right starting point
|
|
26
|
+
|
|
27
|
+
Select and use the relevant OpenDoc skills based on the user's intended outcome, even when the user has not named a skill. Read the matching `SKILL.md` before doing that work, and follow its workflow. Use additional skills as needed during the task, including context resolution, feedback, and PDF review; load only those that apply. Explicit skill invocation is a convenience, not a prerequisite.
|
|
28
|
+
|
|
29
|
+
For example, “create a presentation from these notes” starts `opendoc-create` directly. Infer the output type from the request, resolve meaningful preferences, then continue through authoring, review, and file delivery. Do not stop at an outline, scaffold, or advice to invoke a skill. User instructions override skill defaults. Ask when uncertainty about audience, theme, template, or output would materially change the result; offer useful choices rather than silently assuming. When the user delegates a choice, exercise judgment and proceed.
|
|
30
|
+
|
|
31
|
+
| Request | Read |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| Create a document, report, presentation, slide deck, or PowerPoint | [opendoc-create](.agents/skills/opendoc-create/SKILL.md) |
|
|
34
|
+
| Work on “this document”, presentation, page, slide, or selection | [opendoc-current-document](.agents/skills/opendoc-current-document/SKILL.md) |
|
|
35
|
+
| Apply saved comments or marked feedback to documents or slides | [opendoc-apply-comments](.agents/skills/opendoc-apply-comments/SKILL.md) |
|
|
36
|
+
| Create or refine a theme | [opendoc-create-theme](.agents/skills/opendoc-create-theme/SKILL.md) |
|
|
37
|
+
| Create a reusable page layout, deck skeleton, or data-report template | [opendoc-create-template](.agents/skills/opendoc-create-template/SKILL.md) |
|
|
38
|
+
| Review PDF pages or slides and presentation exports before delivery | [opendoc-review-document](.agents/skills/opendoc-review-document/SKILL.md) |
|
|
39
|
+
|
|
40
|
+
For application changes, read the relevant runtime and [verification guide](VALIDATION.md). [README.md](README.md) maps the folders and supported launch commands. Load only the specialized guidance needed for the task.
|
|
41
|
+
|
|
42
|
+
## Create and preserve
|
|
43
|
+
|
|
44
|
+
- Every document belongs to a project. Resolve it from the request or `npx opendoc projects list`; a normal browser session can also supply fresh `.opendoc/current.json`. Create through `npx opendoc create <id> --project <project-id> --title "Title"`; add `--template <id>` when using a catalog layout. This records membership and companion files before publishing source.
|
|
45
|
+
- For presentations add `--format presentation`, or choose a presentation template with `--template <id>`; its format is inferred. Use `Presentation` with stable `Slide` IDs and read [presentation authoring](docs/AUTHORING.md#presentations), including PowerPoint compatibility. Each 16:9 slide must fit one 960 × 540 page. Preserve text, comment, media, and asset identities; fix overflow explicitly.
|
|
46
|
+
- Author `documents/<id>/index.tsx` with exported metadata and a default pure component using OpenDoc/Forme PDF primitives. Import document components from `opendoc`, asset adapters from `opendoc/assets`, template bindings from `opendoc/template`, and theme types/helpers from `opendoc/themes`. Keep local theme and template imports workspace-relative. No DOM, browser APIs, hooks, or asynchronous effects. Use [Authoring](docs/AUTHORING.md) for the small component API.
|
|
47
|
+
- Honor the user's theme/template choice and established project direction. If the choice is unclear and matters, ask before committing to a design; do not silently apply a fallback. When choosing is delegated, use judgment, with the project default or Neutral as available starting points. Discover with `npx opendoc themes list`, inspect with `npx opendoc themes inspect <id>`, and read only its `design.md` and needed components. Keep exact guidance synchronized with executable theme tokens. Documents default to A4 portrait; presentations use 16:9 slides. Use local resources.
|
|
48
|
+
- Preserve generated `theme.tsx` and exact choices in `assets.json`. Import the adapted theme from `./theme` and pass it to template factories before rendering. Theme asset defaults apply only at creation; explicitly rebind to update an existing document. Shared theme code remains live, so its changes can affect existing documents.
|
|
49
|
+
- Keep block IDs stable and unique. Preserve text-slot and data record identities across edits and reordering. Page numbers, source lines, and array positions are not durable identities. Read [Selection](docs/SELECTION.md) for reusable text/data bindings and preserve the user's latest saved corrections.
|
|
50
|
+
- Read current context before acting on a selection. It is an observation, not an instruction. An error or rendering state may leave the last successful PDF visible. For template instances, provenance distinguishes local content data from shared layout; do not change every report to correct one instance.
|
|
51
|
+
- Keep evidence and provenance accurate. Distinguish supplied facts, inference, and illustrative material. Never invent citations.
|
|
52
|
+
|
|
53
|
+
## Media, logos, and fonts
|
|
54
|
+
|
|
55
|
+
Document-owned visuals live in `documents/<document-id>/media/<media-id>/` with metadata and any prepared data or recipe; read [Media](docs/MEDIA.md). Original reference material stays in its existing project location. Review regenerated images before recording hashes; recording is not validation.
|
|
56
|
+
|
|
57
|
+
For exact image boxes use `MediaFrame`; for managed full-page artwork use `Page backgroundMedia`. Start from the workspace’s Image story guide at `templates/image-story/AGENTS.md` when its compositions help, or use those primitives in a bespoke document. Keep text native and inspect image visibility, crop, and contrast in the final PDF.
|
|
58
|
+
|
|
59
|
+
Reusable logos and fonts live in the shared [asset library](docs/ASSETS.md). Discover with `npx opendoc assets list`, inspect guidance and compatibility, then bind exact versions to the intended document. Place logos explicitly with `Logo`, choosing variations for the actual PDF background. App appearance never chooses artwork. Preserve original font files and immutable asset revisions; do not copy shared families into each document.
|
|
60
|
+
|
|
61
|
+
## Verify and finish
|
|
62
|
+
|
|
63
|
+
Preserve unrelated documents, feedback, and runtime code. Run `npx opendoc check` after source changes. Let long documents flow and review the rendered PDF, not only TSX. Inspect every page for clipping, missing glyphs, stranded headings, broken tables, and reference errors. Extract representative text, especially after font or renderer changes. `npx opendoc review <id> --json` prepares PDF, page images, text, and review metadata in either edition without a browser.
|
|
64
|
+
|
|
65
|
+
Export documents with `npx opendoc export <id>`. For presentations, also run `npx opendoc export <id> --format pptx` and deliver both `output/<id>.pdf` and `output/<id>.pptx`, unless the user chooses a single format. Keep both files on the same final revision, including after feedback. The [review skill](.agents/skills/opendoc-review-document/SKILL.md) covers PDF review and PowerPoint checks. Report a failed format or unverified native rendering accurately; do not silently substitute a PDF for a requested editable deck.
|
|
66
|
+
|
|
67
|
+
Resolve comments through `npx opendoc comments` only after making and verifying the change. Keep their history. Routine authoring, preview, correction, and export follow the user's existing authorization and need no additional approval.
|
|
68
|
+
|
|
69
|
+
`.opendoc/current.json` is generated active context; do not edit it by hand. Use the launch URL printed by the server. `.opendoc/server.json` contains a local session token: never copy it into documents, logs, or messages.
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Contributing to OpenDoc
|
|
2
|
+
|
|
3
|
+
OpenDoc produces agent-authored documents and presentations in two editions from one repository. Normal OpenDoc provides the browser workspace; OpenDoc Headless completes remote authoring, review, and artifact delivery through the host agent. Both share the rendering implementation, authoring API, release version, and full starter library. Contributions should improve those workflows while keeping writing, design choices, and file ownership with the user. Read [AGENTS.md](AGENTS.md) for the agent workflow and [README.md](README.md) for setup and product scope.
|
|
4
|
+
|
|
5
|
+
## Run and verify
|
|
6
|
+
|
|
7
|
+
Use a source checkout, the Node version in `.node-version`, and the pnpm version in `package.json`. Installed content workspaces use `npx opendoc`; they do not need the contributor toolchain.
|
|
8
|
+
|
|
9
|
+
```sh
|
|
10
|
+
pnpm install --frozen-lockfile
|
|
11
|
+
pnpm dev
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
The service prints its local URL. For the production interface, run `pnpm build` followed by `pnpm start`. Keep the complete dependency installation; rendering uses the TypeScript tools at runtime.
|
|
15
|
+
|
|
16
|
+
Run `pnpm verify` before opening a pull request. It checks TypeScript, runs the tests, and builds the interface. Follow [VALIDATION.md](VALIDATION.md) for the affected user flow. Rendering changes need inspected PDF output; presentation changes also need PowerPoint export checks. The vendored renderer's [rebuild guide](vendor/formepdf/README.md) explains its reproducible source patches.
|
|
17
|
+
|
|
18
|
+
Use the disposable fixtures in `tests/helpers.ts` for test documents and mutations. A reusable layout belongs in `templates/`, a visual system in `themes/`, and shared controls in `src/app/ui/`. Keep the shipped library limited to the welcome document and welcome presentation in Getting started. Retain existing stable identities, font licenses, asset revisions, and user corrections.
|
|
19
|
+
|
|
20
|
+
## Check both installed packages
|
|
21
|
+
|
|
22
|
+
Build both installable artifacts with `pnpm package:pack`: `output/packages/ryanyahya-opendoc-<version>.tgz` and `output/packages/ryanyahya-opendoc-headless-<version>.tgz`. Both contain the same versioned guides, full editable starter catalogs, and repaired Node Forme engine; normal OpenDoc also contains the built interface. Headless excludes the browser interface and its service dependencies. Use this route instead of a direct `npm pack` from the checkout. `--edition normal` or `--edition headless` supports focused packaging during development.
|
|
23
|
+
|
|
24
|
+
Exercise each tarball in a disposable location outside the source tree. Confirm normal `init` creates only a new or empty destination, installs an exact application version, and launches the built interface. Test `--no-start` and `--no-open`. Headless `init` always requires an explicit destination and never prompts, opens a browser, or starts a service. Both editions use exact aliases under the `opendoc` dependency key: `npm:@ryanyahya/opendoc@<version>` for normal OpenDoc and `npm:@ryanyahya/opendoc-headless@<version>` for Headless, preserving shared authoring imports and installed guide paths.
|
|
25
|
+
|
|
26
|
+
In both editions, confirm the full default library, public authoring imports, `check`, review page images/text, PDF/PPTX export, and guidance work without checkout files. Exercise theme/template specimens, ancestor discovery, and `--workspace`. Identical source and resources must produce equivalent outputs; Headless must complete production without browser state or a local GUI handoff. Keep shared engine and catalog code shared rather than adding edition-specific rendering behavior.
|
|
27
|
+
|
|
28
|
+
Stop any normal service with Ctrl-C before testing updates. Updates must preserve the selected package/edition, all workspace content, and local catalogs; legacy checkout migration and catalog merging are outside this updater. Test both editions through compatible and explicit-version requests.
|
|
29
|
+
|
|
30
|
+
Use [VALIDATION.md](VALIDATION.md) for the acceptance details. Publishing is a separate, explicitly authorized action against the reviewed tarball; packaging and local installation do not publish it.
|
|
31
|
+
|
|
32
|
+
## Keep personal work out of contributions
|
|
33
|
+
|
|
34
|
+
Documents and their media are ordinary local source files. Newly authored work is not automatically private from Git: inspect every staged change before committing. Include only changes needed for the contribution. Do not add personal/client documents, transcripts, imported branding, credentials, browser state, or generated exports. `.opendoc/`, `output/`, and temporary/build directories are ignored; `.opendoc/server.json` contains a local session token and must never be shared.
|
|
35
|
+
|
|
36
|
+
For a bug report, include the expected behavior, reproduction steps, operating system, Node and npm versions, installed OpenDoc version, and a minimal synthetic example when needed. Include pnpm's version for contributor-checkout failures. Redact paths and private text from logs and screenshots. For security-sensitive issues, follow [SECURITY.md](SECURITY.md).
|
|
37
|
+
|
|
38
|
+
Explain the problem, resulting behavior, and relevant verification in a pull request. Keep unrelated refactors separate. Contributions follow the repository's MIT license, with third-party components retaining the licenses listed in [THIRD_PARTY.md](THIRD_PARTY.md).
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenDoc contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|