@withbuddi/buddi 0.1.0-pre.36 → 0.1.0-pre.37
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/examples/agents/concierge/agent.md +5 -0
- package/examples/skills/letterhead/SKILL.md +21 -0
- package/examples/skills/letterhead/assets/letterhead.md +16 -0
- package/examples/skills/letterhead/assets/logo.svg +6 -0
- package/extension/manifest.json +2 -2
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.js +38 -3
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts +25 -0
- package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.js +28 -0
- package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/actions/approvals.d.ts +7 -0
- package/node_modules/@buddi/core/dist/actions/approvals.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/actions/approvals.js +11 -1
- package/node_modules/@buddi/core/dist/actions/approvals.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.js +2 -2
- package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.d.ts +60 -1
- package/node_modules/@buddi/core/dist/agents/skills.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.js +157 -17
- package/node_modules/@buddi/core/dist/agents/skills.js.map +1 -1
- package/node_modules/@buddi/core/dist/day-month.d.ts +52 -0
- package/node_modules/@buddi/core/dist/day-month.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/day-month.js +101 -0
- package/node_modules/@buddi/core/dist/day-month.js.map +1 -0
- package/node_modules/@buddi/core/dist/host/build.d.ts +11 -2
- package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/host/build.js +115 -4
- package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/http.d.ts +35 -0
- package/node_modules/@buddi/core/dist/host/http.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/host/http.js +133 -29
- package/node_modules/@buddi/core/dist/host/http.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/types.d.ts +72 -1
- package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.d.ts +2 -0
- package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.js +2 -0
- package/node_modules/@buddi/core/dist/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/store.js +28 -5
- package/node_modules/@buddi/core/dist/onboarding/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts +10 -0
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +145 -11
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +113 -5
- package/node_modules/@buddi/core/dist/pages.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts +4 -0
- package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.js +2 -0
- package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts +78 -0
- package/node_modules/@buddi/core/dist/plugin/sign-in.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/sign-in.js +54 -0
- package/node_modules/@buddi/core/dist/plugin/sign-in.js.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts +7 -0
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.js +15 -0
- package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/core/dist/questions/types.d.ts +1 -1
- package/node_modules/@buddi/core/dist/questions/types.js +1 -1
- package/node_modules/@buddi/core/dist/queue/jobs.d.ts +57 -2
- package/node_modules/@buddi/core/dist/queue/jobs.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/jobs.js +114 -0
- package/node_modules/@buddi/core/dist/queue/jobs.js.map +1 -1
- package/node_modules/@buddi/core/dist/queue/worker.d.ts +24 -2
- package/node_modules/@buddi/core/dist/queue/worker.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/worker.js +66 -11
- package/node_modules/@buddi/core/dist/queue/worker.js.map +1 -1
- package/node_modules/@buddi/core/dist/registry.d.ts +8 -0
- package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/registry.js +15 -2
- package/node_modules/@buddi/core/dist/registry.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/scrub.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/scrub.js +15 -0
- package/node_modules/@buddi/core/dist/secrets/scrub.js.map +1 -1
- package/node_modules/@buddi/core/dist/tools.d.ts +29 -0
- package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/tools.js.map +1 -1
- package/node_modules/@buddi/core/dist/views.d.ts +12 -12
- package/node_modules/@buddi/core/dist/widgets.d.ts +14 -1
- package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/widgets.js +30 -0
- package/node_modules/@buddi/core/dist/widgets.js.map +1 -1
- package/node_modules/@buddi/core/migrations/074_owner_identity.sql +14 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalog.js +3 -3
- package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +8 -0
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +11 -4
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +36 -2
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +19 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +108 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +4 -4
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.js +11 -0
- package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js +4 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.d.ts +33 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/evals/golden.js +168 -3
- package/node_modules/@buddi/gateway/dist/evals/golden.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.js +1 -0
- package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/dates.d.ts +98 -0
- package/node_modules/@buddi/gateway/dist/missions/dates.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions/dates.js +252 -0
- package/node_modules/@buddi/gateway/dist/missions/dates.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +8 -0
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js +16 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/report.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/report.js +1 -0
- package/node_modules/@buddi/gateway/dist/missions/report.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/ollama-local.d.ts +90 -0
- package/node_modules/@buddi/gateway/dist/ollama-local.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/ollama-local.js +201 -0
- package/node_modules/@buddi/gateway/dist/ollama-local.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +8 -0
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.js +22 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.js +50 -5
- package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js +2 -2
- package/node_modules/@buddi/gateway/dist/system-context.d.ts +21 -1
- package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/system-context.js +76 -2
- package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/approvals.js +4 -2
- package/node_modules/@buddi/gateway/dist/telegram/approvals.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.js +6 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/html.d.ts +34 -0
- package/node_modules/@buddi/gateway/dist/telegram/html.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/html.js +263 -0
- package/node_modules/@buddi/gateway/dist/telegram/html.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/notify.js +25 -3
- package/node_modules/@buddi/gateway/dist/telegram/notify.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/tips/facts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.js +4 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/rules.js +10 -0
- package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +72 -9
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-scan.js +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-scan.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +9 -0
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/composer.d.ts +45 -0
- package/node_modules/@buddi/gateway/dist/web/composer.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/composer.js +85 -0
- package/node_modules/@buddi/gateway/dist/web/composer.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/market.d.ts +20 -1
- package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/market.js +41 -1
- package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/people.d.ts +44 -0
- package/node_modules/@buddi/gateway/dist/web/people.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/people.js +114 -0
- package/node_modules/@buddi/gateway/dist/web/people.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/server.d.ts +4 -0
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +137 -11
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts +101 -0
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.js +439 -0
- package/node_modules/@buddi/gateway/dist/web/skill-bundles.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/skills.d.ts +57 -1
- package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/skills.js +171 -9
- package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts +31 -0
- package/node_modules/@buddi/gateway/dist/web/zip-read.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/zip-read.js +125 -0
- package/node_modules/@buddi/gateway/dist/web/zip-read.js.map +1 -0
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/index.d.ts +1 -0
- package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/index.js +1 -0
- package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.js +11 -1
- package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts +12 -0
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.js +397 -0
- package/node_modules/@buddi/runtime/dist/plugin-sign-in.js.map +1 -0
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/write.d.ts.map +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/tools/write.js +1 -0
- package/node_modules/@buddi/tool-artifacts/dist/tools/write.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/widgets.js +2 -1
- package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-host/dist/index.d.ts +2 -1
- package/node_modules/@buddi/tool-host/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-host/dist/index.js +3 -2
- package/node_modules/@buddi/tool-host/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/process.d.ts +4 -0
- package/node_modules/@buddi/tool-host/dist/process.d.ts.map +1 -1
- package/node_modules/@buddi/tool-host/dist/process.js +4 -2
- package/node_modules/@buddi/tool-host/dist/process.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/service.d.ts +66 -17
- package/node_modules/@buddi/tool-host/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-host/dist/service.js +172 -9
- package/node_modules/@buddi/tool-host/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/skill-run.d.ts +55 -0
- package/node_modules/@buddi/tool-host/dist/skill-run.d.ts.map +1 -0
- package/node_modules/@buddi/tool-host/dist/skill-run.js +132 -0
- package/node_modules/@buddi/tool-host/dist/skill-run.js.map +1 -0
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/index.d.ts +1 -0
- package/node_modules/@buddi/tool-memory/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-memory/dist/index.js +7 -2
- package/node_modules/@buddi/tool-memory/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-memory/dist/people.d.ts +218 -0
- package/node_modules/@buddi/tool-memory/dist/people.d.ts.map +1 -0
- package/node_modules/@buddi/tool-memory/dist/people.js +582 -0
- package/node_modules/@buddi/tool-memory/dist/people.js.map +1 -0
- package/node_modules/@buddi/tool-memory/dist/preamble.d.ts +4 -1
- package/node_modules/@buddi/tool-memory/dist/preamble.d.ts.map +1 -1
- package/node_modules/@buddi/tool-memory/dist/preamble.js +25 -7
- package/node_modules/@buddi/tool-memory/dist/preamble.js.map +1 -1
- package/node_modules/@buddi/tool-memory/migrations/002_people.sql +40 -0
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/imapflow/CHANGELOG.md +8 -0
- package/node_modules/imapflow/dist/cjs/commands/append.js +27 -3
- package/node_modules/imapflow/dist/cjs/commands/store.js +31 -6
- package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/imap-flow.js +1 -1
- package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
- package/node_modules/imapflow/dist/esm/commands/append.js +27 -3
- package/node_modules/imapflow/dist/esm/commands/store.js +31 -6
- package/node_modules/imapflow/dist/esm/imap-flow.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/imap-flow.js +1 -1
- package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/package-info.js +1 -1
- package/node_modules/imapflow/package.json +4 -4
- package/node_modules/pino/CONTRIBUTING.md +5 -1
- package/node_modules/pino/LICENSE +1 -1
- package/node_modules/pino/README.md +1 -1
- package/node_modules/pino/SECURITY.md +18 -2
- package/node_modules/pino/browser.js +68 -8
- package/node_modules/pino/docs/api.md +75 -4
- package/node_modules/pino/docs/asynchronous.md +18 -3
- package/node_modules/pino/docs/browser.md +63 -0
- package/node_modules/pino/docs/child-loggers.md +22 -1
- package/node_modules/pino/docs/ecosystem.md +1 -0
- package/node_modules/pino/docs/help.md +11 -3
- package/node_modules/pino/docs/lts.md +29 -0
- package/node_modules/pino/docs/pretty.md +3 -0
- package/node_modules/pino/docs/redaction.md +3 -8
- package/node_modules/pino/docs/transports.md +71 -0
- package/node_modules/pino/docs/web.md +11 -14
- package/node_modules/pino/eslint.config.js +15 -7
- package/node_modules/pino/lib/caller.js +10 -0
- package/node_modules/pino/lib/meta.js +1 -1
- package/node_modules/pino/lib/multistream.js +15 -7
- package/node_modules/pino/lib/redaction.js +8 -3
- package/node_modules/pino/lib/symbols.js +3 -1
- package/node_modules/pino/lib/tools.js +2 -2
- package/node_modules/pino/lib/transport.js +14 -1
- package/node_modules/pino/lib/worker.js +4 -1
- package/node_modules/pino/package.json +14 -22
- package/node_modules/pino/pino.d.ts +709 -736
- package/node_modules/pino/pino.js +27 -2
- package/node_modules/pino/test/basic.test.js +66 -0
- package/node_modules/pino/test/browser-bindings.test.js +114 -0
- package/node_modules/pino/test/browser-redaction.test.js +264 -0
- package/node_modules/pino/test/browser-set-bindings.test.js +99 -0
- package/node_modules/pino/test/caller.test.js +20 -0
- package/node_modules/pino/test/escaping.test.js +17 -0
- package/node_modules/pino/test/fixtures/caller-loop.js +6 -0
- package/node_modules/pino/test/fixtures/ts/transpile.cjs +3 -3
- package/node_modules/pino/test/helper.js +6 -2
- package/node_modules/pino/test/multistream.test.js +64 -0
- package/node_modules/pino/test/redact.test.js +30 -0
- package/node_modules/pino/test/smoke.js +59 -0
- package/node_modules/pino/test/transport/core.test.js +85 -0
- package/node_modules/pino/test/transport/sync-false.test.js +12 -0
- package/node_modules/pino/test/transport/uses-pino-config.test.js +4 -4
- package/node_modules/pino/test/types/pino-import.tst.cts +30 -0
- package/node_modules/pino/test/types/pino-import.tst.js +73 -0
- package/node_modules/pino/test/types/pino-multistream.tst.ts +49 -0
- package/node_modules/pino/test/types/pino-top-export.tst.ts +32 -0
- package/node_modules/pino/test/types/{pino-transport.test-d.ts → pino-transport.tst.ts} +85 -70
- package/node_modules/pino/test/types/pino-type-only.tst.ts +77 -0
- package/node_modules/pino/test/types/pino.ts +14 -7
- package/node_modules/pino/test/types/{pino.test-d.ts → pino.tst.ts} +135 -137
- package/node_modules/pino/test/types/tsconfig.json +10 -0
- package/node_modules/pino/tsconfig.json +6 -6
- package/node_modules/real-require/README.md +6 -6
- package/node_modules/real-require/package.json +10 -21
- package/node_modules/real-require/src/index.js +2 -2
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
- package/packages/cli/dist/doctor-probes.js +38 -3
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/doctor.d.ts +25 -0
- package/packages/cli/dist/doctor.d.ts.map +1 -1
- package/packages/cli/dist/doctor.js +28 -0
- package/packages/cli/dist/doctor.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/actions/approvals.d.ts +7 -0
- package/packages/core/dist/actions/approvals.d.ts.map +1 -1
- package/packages/core/dist/actions/approvals.js +11 -1
- package/packages/core/dist/actions/approvals.js.map +1 -1
- package/packages/core/dist/agents/catalog.d.ts.map +1 -1
- package/packages/core/dist/agents/catalog.js +2 -2
- package/packages/core/dist/agents/catalog.js.map +1 -1
- package/packages/core/dist/agents/skills.d.ts +60 -1
- package/packages/core/dist/agents/skills.d.ts.map +1 -1
- package/packages/core/dist/agents/skills.js +157 -17
- package/packages/core/dist/agents/skills.js.map +1 -1
- package/packages/core/dist/day-month.d.ts +52 -0
- package/packages/core/dist/day-month.d.ts.map +1 -0
- package/packages/core/dist/day-month.js +101 -0
- package/packages/core/dist/day-month.js.map +1 -0
- package/packages/core/dist/host/build.d.ts +11 -2
- package/packages/core/dist/host/build.d.ts.map +1 -1
- package/packages/core/dist/host/build.js +115 -4
- package/packages/core/dist/host/build.js.map +1 -1
- package/packages/core/dist/host/http.d.ts +35 -0
- package/packages/core/dist/host/http.d.ts.map +1 -1
- package/packages/core/dist/host/http.js +133 -29
- package/packages/core/dist/host/http.js.map +1 -1
- package/packages/core/dist/host/types.d.ts +72 -1
- package/packages/core/dist/host/types.d.ts.map +1 -1
- package/packages/core/dist/index.d.ts +2 -0
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +2 -0
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/onboarding/store.d.ts.map +1 -1
- package/packages/core/dist/onboarding/store.js +28 -5
- package/packages/core/dist/onboarding/store.js.map +1 -1
- package/packages/core/dist/onboarding/types.d.ts +10 -0
- package/packages/core/dist/onboarding/types.d.ts.map +1 -1
- package/packages/core/dist/onboarding/types.js.map +1 -1
- package/packages/core/dist/pages.d.ts +145 -11
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +113 -5
- package/packages/core/dist/pages.js.map +1 -1
- package/packages/core/dist/plugin/index.d.ts +4 -0
- package/packages/core/dist/plugin/index.d.ts.map +1 -1
- package/packages/core/dist/plugin/index.js +2 -0
- package/packages/core/dist/plugin/index.js.map +1 -1
- package/packages/core/dist/plugin/sign-in.d.ts +78 -0
- package/packages/core/dist/plugin/sign-in.d.ts.map +1 -0
- package/packages/core/dist/plugin/sign-in.js +54 -0
- package/packages/core/dist/plugin/sign-in.js.map +1 -0
- package/packages/core/dist/plugin/version.d.ts +1 -1
- package/packages/core/dist/plugin/version.js +1 -1
- package/packages/core/dist/provider-accounts.d.ts +7 -0
- package/packages/core/dist/provider-accounts.d.ts.map +1 -1
- package/packages/core/dist/provider-accounts.js +15 -0
- package/packages/core/dist/provider-accounts.js.map +1 -1
- package/packages/core/dist/questions/types.d.ts +1 -1
- package/packages/core/dist/questions/types.js +1 -1
- package/packages/core/dist/queue/jobs.d.ts +57 -2
- package/packages/core/dist/queue/jobs.d.ts.map +1 -1
- package/packages/core/dist/queue/jobs.js +114 -0
- package/packages/core/dist/queue/jobs.js.map +1 -1
- package/packages/core/dist/queue/worker.d.ts +24 -2
- package/packages/core/dist/queue/worker.d.ts.map +1 -1
- package/packages/core/dist/queue/worker.js +66 -11
- package/packages/core/dist/queue/worker.js.map +1 -1
- package/packages/core/dist/registry.d.ts +8 -0
- package/packages/core/dist/registry.d.ts.map +1 -1
- package/packages/core/dist/registry.js +15 -2
- package/packages/core/dist/registry.js.map +1 -1
- package/packages/core/dist/secrets/scrub.d.ts.map +1 -1
- package/packages/core/dist/secrets/scrub.js +15 -0
- package/packages/core/dist/secrets/scrub.js.map +1 -1
- package/packages/core/dist/tools.d.ts +29 -0
- package/packages/core/dist/tools.d.ts.map +1 -1
- package/packages/core/dist/tools.js.map +1 -1
- package/packages/core/dist/views.d.ts +12 -12
- package/packages/core/dist/widgets.d.ts +14 -1
- package/packages/core/dist/widgets.d.ts.map +1 -1
- package/packages/core/dist/widgets.js +30 -0
- package/packages/core/dist/widgets.js.map +1 -1
- package/packages/core/migrations/074_owner_identity.sql +14 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
- package/packages/gateway/dist/agents/catalog.js +3 -3
- package/packages/gateway/dist/agents/catalog.js.map +1 -1
- package/packages/gateway/dist/agents/catalogue-package.d.ts +8 -0
- package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
- package/packages/gateway/dist/agents/catalogue-package.js +11 -4
- package/packages/gateway/dist/agents/catalogue-package.js.map +1 -1
- package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/packages/gateway/dist/agents/owner-tools.js +36 -2
- package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
- package/packages/gateway/dist/agents/platform-catalogue.d.ts +19 -0
- package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform-catalogue.js +108 -0
- package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -1
- package/packages/gateway/dist/agents/platform.d.ts +4 -4
- package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform.js +11 -0
- package/packages/gateway/dist/agents/platform.js.map +1 -1
- package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
- package/packages/gateway/dist/bootstrap.js +4 -1
- package/packages/gateway/dist/bootstrap.js.map +1 -1
- package/packages/gateway/dist/evals/golden.d.ts +33 -1
- package/packages/gateway/dist/evals/golden.d.ts.map +1 -1
- package/packages/gateway/dist/evals/golden.js +168 -3
- package/packages/gateway/dist/evals/golden.js.map +1 -1
- package/packages/gateway/dist/index.d.ts +1 -0
- package/packages/gateway/dist/index.d.ts.map +1 -1
- package/packages/gateway/dist/index.js +1 -0
- package/packages/gateway/dist/index.js.map +1 -1
- package/packages/gateway/dist/missions/dates.d.ts +98 -0
- package/packages/gateway/dist/missions/dates.d.ts.map +1 -0
- package/packages/gateway/dist/missions/dates.js +252 -0
- package/packages/gateway/dist/missions/dates.js.map +1 -0
- package/packages/gateway/dist/missions/execute.d.ts +8 -0
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +16 -1
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/missions/report.d.ts.map +1 -1
- package/packages/gateway/dist/missions/report.js +1 -0
- package/packages/gateway/dist/missions/report.js.map +1 -1
- package/packages/gateway/dist/ollama-local.d.ts +90 -0
- package/packages/gateway/dist/ollama-local.d.ts.map +1 -0
- package/packages/gateway/dist/ollama-local.js +201 -0
- package/packages/gateway/dist/ollama-local.js.map +1 -0
- package/packages/gateway/dist/plugins-cli.d.ts +8 -0
- package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/packages/gateway/dist/plugins-cli.js +22 -1
- package/packages/gateway/dist/plugins-cli.js.map +1 -1
- package/packages/gateway/dist/serve.d.ts.map +1 -1
- package/packages/gateway/dist/serve.js +50 -5
- package/packages/gateway/dist/serve.js.map +1 -1
- package/packages/gateway/dist/surfaces/pending-question.js +2 -2
- package/packages/gateway/dist/system-context.d.ts +21 -1
- package/packages/gateway/dist/system-context.d.ts.map +1 -1
- package/packages/gateway/dist/system-context.js +76 -2
- package/packages/gateway/dist/system-context.js.map +1 -1
- package/packages/gateway/dist/telegram/approvals.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/approvals.js +4 -2
- package/packages/gateway/dist/telegram/approvals.js.map +1 -1
- package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/channel.js +6 -1
- package/packages/gateway/dist/telegram/channel.js.map +1 -1
- package/packages/gateway/dist/telegram/html.d.ts +34 -0
- package/packages/gateway/dist/telegram/html.d.ts.map +1 -0
- package/packages/gateway/dist/telegram/html.js +263 -0
- package/packages/gateway/dist/telegram/html.js.map +1 -0
- package/packages/gateway/dist/telegram/notify.d.ts +6 -0
- package/packages/gateway/dist/telegram/notify.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/notify.js +25 -3
- package/packages/gateway/dist/telegram/notify.js.map +1 -1
- package/packages/gateway/dist/tips/facts.d.ts +2 -0
- package/packages/gateway/dist/tips/facts.d.ts.map +1 -1
- package/packages/gateway/dist/tips/facts.js +4 -1
- package/packages/gateway/dist/tips/facts.js.map +1 -1
- package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
- package/packages/gateway/dist/tips/rules.js +10 -0
- package/packages/gateway/dist/tips/rules.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +72 -9
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/api-scan.d.ts +1 -1
- package/packages/gateway/dist/web/api-scan.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-scan.js +1 -0
- package/packages/gateway/dist/web/api-scan.js.map +1 -1
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +9 -0
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/composer.d.ts +45 -0
- package/packages/gateway/dist/web/composer.d.ts.map +1 -0
- package/packages/gateway/dist/web/composer.js +85 -0
- package/packages/gateway/dist/web/composer.js.map +1 -0
- package/packages/gateway/dist/web/market.d.ts +20 -1
- package/packages/gateway/dist/web/market.d.ts.map +1 -1
- package/packages/gateway/dist/web/market.js +41 -1
- package/packages/gateway/dist/web/market.js.map +1 -1
- package/packages/gateway/dist/web/people.d.ts +44 -0
- package/packages/gateway/dist/web/people.d.ts.map +1 -0
- package/packages/gateway/dist/web/people.js +114 -0
- package/packages/gateway/dist/web/people.js.map +1 -0
- package/packages/gateway/dist/web/server.d.ts +4 -0
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +137 -11
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/skill-bundles.d.ts +101 -0
- package/packages/gateway/dist/web/skill-bundles.d.ts.map +1 -0
- package/packages/gateway/dist/web/skill-bundles.js +439 -0
- package/packages/gateway/dist/web/skill-bundles.js.map +1 -0
- package/packages/gateway/dist/web/skills.d.ts +57 -1
- package/packages/gateway/dist/web/skills.d.ts.map +1 -1
- package/packages/gateway/dist/web/skills.js +171 -9
- package/packages/gateway/dist/web/skills.js.map +1 -1
- package/packages/gateway/dist/web/zip-read.d.ts +31 -0
- package/packages/gateway/dist/web/zip-read.d.ts.map +1 -0
- package/packages/gateway/dist/web/zip-read.js +125 -0
- package/packages/gateway/dist/web/zip-read.js.map +1 -0
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/index.d.ts +1 -0
- package/packages/runtime/dist/index.d.ts.map +1 -1
- package/packages/runtime/dist/index.js +1 -0
- package/packages/runtime/dist/index.js.map +1 -1
- package/packages/runtime/dist/loop.js +11 -1
- package/packages/runtime/dist/loop.js.map +1 -1
- package/packages/runtime/dist/plugin-sign-in.d.ts +12 -0
- package/packages/runtime/dist/plugin-sign-in.d.ts.map +1 -0
- package/packages/runtime/dist/plugin-sign-in.js +397 -0
- package/packages/runtime/dist/plugin-sign-in.js.map +1 -0
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/artifacts/dist/tools/write.d.ts.map +1 -1
- package/packages/tools/artifacts/dist/tools/write.js +1 -0
- package/packages/tools/artifacts/dist/tools/write.js.map +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/widgets.d.ts.map +1 -1
- package/packages/tools/email/dist/widgets.js +2 -1
- package/packages/tools/email/dist/widgets.js.map +1 -1
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/host/dist/index.d.ts +2 -1
- package/packages/tools/host/dist/index.d.ts.map +1 -1
- package/packages/tools/host/dist/index.js +3 -2
- package/packages/tools/host/dist/index.js.map +1 -1
- package/packages/tools/host/dist/process.d.ts +4 -0
- package/packages/tools/host/dist/process.d.ts.map +1 -1
- package/packages/tools/host/dist/process.js +4 -2
- package/packages/tools/host/dist/process.js.map +1 -1
- package/packages/tools/host/dist/service.d.ts +66 -17
- package/packages/tools/host/dist/service.d.ts.map +1 -1
- package/packages/tools/host/dist/service.js +172 -9
- package/packages/tools/host/dist/service.js.map +1 -1
- package/packages/tools/host/dist/skill-run.d.ts +55 -0
- package/packages/tools/host/dist/skill-run.d.ts.map +1 -0
- package/packages/tools/host/dist/skill-run.js +132 -0
- package/packages/tools/host/dist/skill-run.js.map +1 -0
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/index.d.ts +1 -0
- package/packages/tools/memory/dist/index.d.ts.map +1 -1
- package/packages/tools/memory/dist/index.js +7 -2
- package/packages/tools/memory/dist/index.js.map +1 -1
- package/packages/tools/memory/dist/people.d.ts +218 -0
- package/packages/tools/memory/dist/people.d.ts.map +1 -0
- package/packages/tools/memory/dist/people.js +582 -0
- package/packages/tools/memory/dist/people.js.map +1 -0
- package/packages/tools/memory/dist/preamble.d.ts +4 -1
- package/packages/tools/memory/dist/preamble.d.ts.map +1 -1
- package/packages/tools/memory/dist/preamble.js +25 -7
- package/packages/tools/memory/dist/preamble.js.map +1 -1
- package/packages/tools/memory/migrations/002_people.sql +40 -0
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/{index-B_P_ux2I.css → index-CN1AXMI1.css} +1 -1
- package/packages/web/dist/assets/index-CQRE9LJX.js +145 -0
- package/packages/web/dist/assets/{lottie_light-Dj5SSwxs.js → lottie_light-CKJ88Yuk.js} +1 -1
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/precache.json +4 -4
- package/node_modules/pino/test/types/pino-import.test-d.cts +0 -30
- package/node_modules/pino/test/types/pino-multistream.test-d.ts +0 -28
- package/node_modules/pino/test/types/pino-top-export.test-d.ts +0 -34
- package/node_modules/pino/test/types/pino-type-only.test-d.ts +0 -75
- package/node_modules/thread-stream/node_modules/real-require/LICENSE.md +0 -21
- package/node_modules/thread-stream/node_modules/real-require/README.md +0 -51
- package/node_modules/thread-stream/node_modules/real-require/package.json +0 -38
- package/node_modules/thread-stream/node_modules/real-require/src/index.js +0 -14
- package/packages/web/dist/assets/index-CjOzIGL7.js +0 -134
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import type { IncomingMessage } from 'node:http';
|
|
2
|
+
export interface RouteReply {
|
|
3
|
+
status: number;
|
|
4
|
+
body: unknown;
|
|
5
|
+
}
|
|
6
|
+
/** A bundle is at most this big unpacked. */
|
|
7
|
+
export declare const BUNDLE_MAX_BYTES: number;
|
|
8
|
+
/** A bundle holds at most this many files. */
|
|
9
|
+
export declare const BUNDLE_MAX_FILES = 500;
|
|
10
|
+
export type RefusalKind = 'notzip' | 'big' | 'count' | 'noskill' | 'paths' | 'frontmatter' | 'executable' | 'damaged';
|
|
11
|
+
export interface Refusal {
|
|
12
|
+
kind: RefusalKind;
|
|
13
|
+
filename: string;
|
|
14
|
+
/** Bytes, for `big`: unpacked, or the upload's own size when it was stopped on the way in. */
|
|
15
|
+
size?: number;
|
|
16
|
+
/** For `count`. */
|
|
17
|
+
files?: number;
|
|
18
|
+
/** For `paths` and `executable`: each entry and why. */
|
|
19
|
+
entries?: Array<{
|
|
20
|
+
path: string;
|
|
21
|
+
why: string;
|
|
22
|
+
target?: string;
|
|
23
|
+
}>;
|
|
24
|
+
/** For `noskill`: where buddi looked (`''` is the top). */
|
|
25
|
+
looked?: string[];
|
|
26
|
+
}
|
|
27
|
+
export type FileKind = 'skill' | 'script' | 'font' | 'image' | 'template' | 'data' | 'other';
|
|
28
|
+
export interface BundleFileRow {
|
|
29
|
+
path: string;
|
|
30
|
+
size: number;
|
|
31
|
+
kind: FileKind;
|
|
32
|
+
/** A script whose name says it sets things up (`setup.sh`, `install.py`). */
|
|
33
|
+
setup?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export interface StagedBundle {
|
|
36
|
+
id: string;
|
|
37
|
+
filename: string;
|
|
38
|
+
/** The zip's own size. */
|
|
39
|
+
packed: number;
|
|
40
|
+
/** Unpacked. */
|
|
41
|
+
size: number;
|
|
42
|
+
files: BundleFileRow[];
|
|
43
|
+
scripts: string[];
|
|
44
|
+
skill: {
|
|
45
|
+
name: string;
|
|
46
|
+
title: string;
|
|
47
|
+
description: string;
|
|
48
|
+
firstLines: string;
|
|
49
|
+
body: string;
|
|
50
|
+
network?: boolean;
|
|
51
|
+
};
|
|
52
|
+
createdAt: string;
|
|
53
|
+
}
|
|
54
|
+
export declare function fileKind(rel: string): FileKind;
|
|
55
|
+
/** Every file in a bundle's folder, SKILL.md first, then by path. */
|
|
56
|
+
export declare function bundleFileRows(dir: string): BundleFileRow[];
|
|
57
|
+
/** The staging folder: `<private>/.incoming/skills` beside the skills folder. */
|
|
58
|
+
export declare function incomingDirFor(skillsDir: string): string;
|
|
59
|
+
/** The filename the browser sent, as a label: its base name, no quotes or line breaks. */
|
|
60
|
+
export declare function uploadLabel(claimed: string | undefined): string;
|
|
61
|
+
/**
|
|
62
|
+
* Stream the request body to a temporary file, counted as it arrives and
|
|
63
|
+
* abandoned the moment it crosses the cap. Returns the path, or the refusal.
|
|
64
|
+
*/
|
|
65
|
+
export declare function receiveBundleUpload(incomingDir: string, req: IncomingMessage, filename: string): Promise<{
|
|
66
|
+
path: string;
|
|
67
|
+
} | RouteReply>;
|
|
68
|
+
/** Staged uploads older than an hour, and stray zips, go. */
|
|
69
|
+
export declare function sweepStaged(incomingDir: string, now?: number): void;
|
|
70
|
+
/** The lenient read of SKILL.md's front matter: the top-level `key: value` lines, nested maps skipped. */
|
|
71
|
+
export declare function readBundleFrontmatter(text: string): {
|
|
72
|
+
fields: Record<string, string>;
|
|
73
|
+
body: string;
|
|
74
|
+
} | null;
|
|
75
|
+
/**
|
|
76
|
+
* Read the zip at `zipPath`, check it, and unpack it into a staging folder.
|
|
77
|
+
* Answers the preview, or the refusal with what buddi saw. The zip is
|
|
78
|
+
* removed either way.
|
|
79
|
+
*/
|
|
80
|
+
export declare function stageBundle(incomingDir: string, zipPath: string, filename: string, now: Date): RouteReply;
|
|
81
|
+
/** A staged upload by its id: its meta and the folder its files are in. Null when it is gone. */
|
|
82
|
+
export declare function readStaged(incomingDir: string, id: string): {
|
|
83
|
+
staged: StagedBundle;
|
|
84
|
+
dir: string;
|
|
85
|
+
root: string;
|
|
86
|
+
} | null;
|
|
87
|
+
export declare function discardStaged(incomingDir: string, id: string): RouteReply;
|
|
88
|
+
/** A path inside `dir`, or null when it names anything else (or a link). */
|
|
89
|
+
export declare function bundlePath(dir: string, rel: string): string | null;
|
|
90
|
+
/** `{ path, size, kind, text }` for a text file, `{ …, binary: true }` (and `image` for a picture) for the rest. */
|
|
91
|
+
export declare function bundleFileView(dir: string, rel: string): RouteReply;
|
|
92
|
+
/** A picture's bytes and type, for the viewer's <img>. Null for anything that is not a picture. */
|
|
93
|
+
export declare function bundleImage(dir: string, rel: string): {
|
|
94
|
+
bytes: Buffer;
|
|
95
|
+
type: string;
|
|
96
|
+
} | null;
|
|
97
|
+
/** The bundle as a .zip, its folder at the top, for Download. */
|
|
98
|
+
export declare function zipBundle(dir: string, name: string): Uint8Array;
|
|
99
|
+
/** Whether a folder exists (for the accept's collision check). */
|
|
100
|
+
export declare function folderExists(dir: string): boolean;
|
|
101
|
+
//# sourceMappingURL=skill-bundles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-bundles.d.ts","sourceRoot":"","sources":["../../src/web/skill-bundles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill bundles, the upload half (specs/skills-zone.md, part 2): a `.zip`
|
|
3
|
+
* holding a SKILL.md with `scripts/` and `assets/` beside it.
|
|
4
|
+
*
|
|
5
|
+
* Nothing in a bundle runs here, ever. The upload is streamed to a temporary
|
|
6
|
+
* folder, read and checked before anything is kept — size, file count, a
|
|
7
|
+
* SKILL.md with front matter, no absolute paths, no `..`, no links, nothing
|
|
8
|
+
* executable outside `scripts/` — and unpacked into a staging folder the
|
|
9
|
+
* preview reads from. Only the owner's "Add the skill" moves it into the
|
|
10
|
+
* skills folder (skills.ts, `acceptBundleRoute`); a staged upload nobody
|
|
11
|
+
* accepted is swept after an hour.
|
|
12
|
+
*/
|
|
13
|
+
import { randomUUID } from 'node:crypto';
|
|
14
|
+
import { createWriteStream, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
|
|
15
|
+
import { mkdir, rm } from 'node:fs/promises';
|
|
16
|
+
import path from 'node:path';
|
|
17
|
+
import { pipeline } from 'node:stream/promises';
|
|
18
|
+
import { zipSync } from 'fflate';
|
|
19
|
+
import { BUNDLE_SKILL_FILE, BUNDLE_SCRIPTS_DIR, splitFrontmatter } from '@buddi/core';
|
|
20
|
+
import { isExecutableMode, isSymlink, readZipEntries, readZipMember, ZipFormatError, ZipLimitError } from './zip-read.js';
|
|
21
|
+
/** A bundle is at most this big unpacked. */
|
|
22
|
+
export const BUNDLE_MAX_BYTES = 20 * 1024 * 1024;
|
|
23
|
+
/** A bundle holds at most this many files. */
|
|
24
|
+
export const BUNDLE_MAX_FILES = 500;
|
|
25
|
+
/** The upload itself: a zip a little over the unpacked limit (stored members carry headers). */
|
|
26
|
+
const UPLOAD_MAX_BYTES = BUNDLE_MAX_BYTES + 1024 * 1024;
|
|
27
|
+
/** A staged upload nobody accepted goes after this long. */
|
|
28
|
+
const STAGED_TTL_MS = 60 * 60 * 1000;
|
|
29
|
+
/** The largest file the viewer shows as text. */
|
|
30
|
+
const VIEW_TEXT_MAX = 256 * 1024;
|
|
31
|
+
const refuse = (status, refusal, error) => ({ status, body: { error, refusal } });
|
|
32
|
+
/* ------------------------------------------------------------------ *
|
|
33
|
+
* kinds
|
|
34
|
+
* ------------------------------------------------------------------ */
|
|
35
|
+
const FONT = /\.(ttf|otf|woff2?)$/i;
|
|
36
|
+
const IMAGE = /\.(png|jpe?g|gif|webp|svg|ico)$/i;
|
|
37
|
+
const DATA = /\.(json|csv|tsv|ya?ml|toml|xml)$/i;
|
|
38
|
+
const TEMPLATE = /\.(md|markdown|txt|html?|css|tex|rtf)$/i;
|
|
39
|
+
/** Kept out of everywhere but `scripts/`: what runs, or what a shell or a loader runs. */
|
|
40
|
+
const EXECUTABLE_EXT = /\.(sh|bash|zsh|fish|command|py|pyc|rb|pl|php|js|mjs|cjs|ts|exe|dll|so|dylib|bat|cmd|ps1|vbs|jar|app|bin|elf|msi|scpt|applescript)$/i;
|
|
41
|
+
const RASTER = { '.png': 'image/png', '.jpg': 'image/jpeg', '.jpeg': 'image/jpeg', '.gif': 'image/gif', '.webp': 'image/webp', '.svg': 'image/svg+xml', '.ico': 'image/x-icon' };
|
|
42
|
+
export function fileKind(rel) {
|
|
43
|
+
if (rel === BUNDLE_SKILL_FILE)
|
|
44
|
+
return 'skill';
|
|
45
|
+
if (rel.startsWith(`${BUNDLE_SCRIPTS_DIR}/`))
|
|
46
|
+
return 'script';
|
|
47
|
+
if (FONT.test(rel))
|
|
48
|
+
return 'font';
|
|
49
|
+
if (IMAGE.test(rel))
|
|
50
|
+
return 'image';
|
|
51
|
+
if (DATA.test(rel))
|
|
52
|
+
return 'data';
|
|
53
|
+
if (TEMPLATE.test(rel))
|
|
54
|
+
return 'template';
|
|
55
|
+
return 'other';
|
|
56
|
+
}
|
|
57
|
+
function rowOf(rel, size) {
|
|
58
|
+
const kind = fileKind(rel);
|
|
59
|
+
const setup = kind === 'script' && /^(setup|install|bootstrap)([._-]|$)/i.test(path.posix.basename(rel));
|
|
60
|
+
return { path: rel, size, kind, ...(setup ? { setup: true } : {}) };
|
|
61
|
+
}
|
|
62
|
+
/** Every file in a bundle's folder, SKILL.md first, then by path. */
|
|
63
|
+
export function bundleFileRows(dir) {
|
|
64
|
+
const rows = [];
|
|
65
|
+
const walk = (rel) => {
|
|
66
|
+
let entries;
|
|
67
|
+
try {
|
|
68
|
+
entries = readdirSync(path.join(dir, rel), { withFileTypes: true });
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
for (const e of entries) {
|
|
74
|
+
const child = rel ? `${rel}/${e.name}` : e.name;
|
|
75
|
+
if (e.isDirectory())
|
|
76
|
+
walk(child);
|
|
77
|
+
else if (e.isFile())
|
|
78
|
+
rows.push(rowOf(child, statSync(path.join(dir, child)).size));
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
walk('');
|
|
82
|
+
return rows.sort((a, b) => (a.path === BUNDLE_SKILL_FILE ? -1 : b.path === BUNDLE_SKILL_FILE ? 1 : a.path.localeCompare(b.path)));
|
|
83
|
+
}
|
|
84
|
+
/* ------------------------------------------------------------------ *
|
|
85
|
+
* receiving the upload
|
|
86
|
+
* ------------------------------------------------------------------ */
|
|
87
|
+
/** The staging folder: `<private>/.incoming/skills` beside the skills folder. */
|
|
88
|
+
export function incomingDirFor(skillsDir) {
|
|
89
|
+
return path.join(path.dirname(path.resolve(skillsDir)), '.incoming', 'skills');
|
|
90
|
+
}
|
|
91
|
+
/** The filename the browser sent, as a label: its base name, no quotes or line breaks. */
|
|
92
|
+
export function uploadLabel(claimed) {
|
|
93
|
+
let name = claimed ?? '';
|
|
94
|
+
try {
|
|
95
|
+
name = decodeURIComponent(name);
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// As sent.
|
|
99
|
+
}
|
|
100
|
+
return path.basename(name.replace(/\\/g, '/')).replace(/[\r\n"]/g, '').trim().slice(0, 200) || 'bundle.zip';
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Stream the request body to a temporary file, counted as it arrives and
|
|
104
|
+
* abandoned the moment it crosses the cap. Returns the path, or the refusal.
|
|
105
|
+
*/
|
|
106
|
+
export async function receiveBundleUpload(incomingDir, req, filename) {
|
|
107
|
+
if (!/\.zip$/i.test(filename)) {
|
|
108
|
+
return refuse(415, { kind: 'notzip', filename }, `“${filename}” isn’t a .zip or a .md. A skill is one Markdown file, or a .zip bundle with SKILL.md inside.`);
|
|
109
|
+
}
|
|
110
|
+
sweepStaged(incomingDir);
|
|
111
|
+
await mkdir(incomingDir, { recursive: true, mode: 0o700 });
|
|
112
|
+
const target = path.join(incomingDir, `${randomUUID()}.zip`);
|
|
113
|
+
const declared = Number(req.headers['content-length'] ?? NaN);
|
|
114
|
+
if (Number.isFinite(declared) && declared > UPLOAD_MAX_BYTES) {
|
|
115
|
+
req.resume();
|
|
116
|
+
return refuse(413, { kind: 'big', filename, size: declared }, tooBigSentence(filename, declared));
|
|
117
|
+
}
|
|
118
|
+
let bytes = 0;
|
|
119
|
+
let tooBig = false;
|
|
120
|
+
req.on('data', (chunk) => {
|
|
121
|
+
bytes += chunk.length;
|
|
122
|
+
if (bytes > UPLOAD_MAX_BYTES && !tooBig) {
|
|
123
|
+
tooBig = true;
|
|
124
|
+
req.destroy(new Error('too big'));
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
try {
|
|
128
|
+
await pipeline(req, createWriteStream(target, { mode: 0o600 }));
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
await rm(target, { force: true }).catch(() => { });
|
|
132
|
+
if (tooBig)
|
|
133
|
+
return refuse(413, { kind: 'big', filename, size: bytes }, tooBigSentence(filename, bytes));
|
|
134
|
+
return { status: 400, body: { error: `The upload did not finish: ${err instanceof Error ? err.message : String(err)}` } };
|
|
135
|
+
}
|
|
136
|
+
if (bytes === 0) {
|
|
137
|
+
await rm(target, { force: true }).catch(() => { });
|
|
138
|
+
return { status: 400, body: { error: 'That upload was empty.' } };
|
|
139
|
+
}
|
|
140
|
+
return { path: target };
|
|
141
|
+
}
|
|
142
|
+
function mb(bytes) {
|
|
143
|
+
return `${Math.max(1, Math.round(bytes / (1024 * 1024)))} MB`;
|
|
144
|
+
}
|
|
145
|
+
function tooBigSentence(filename, size) {
|
|
146
|
+
return `“${filename}” is too big: it’s ${mb(size)}; a bundle can be up to ${mb(BUNDLE_MAX_BYTES)} unpacked. Leave large files out — SKILL.md can say where to find them.`;
|
|
147
|
+
}
|
|
148
|
+
/** Staged uploads older than an hour, and stray zips, go. */
|
|
149
|
+
export function sweepStaged(incomingDir, now = Date.now()) {
|
|
150
|
+
let names;
|
|
151
|
+
try {
|
|
152
|
+
names = readdirSync(incomingDir);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
for (const name of names) {
|
|
158
|
+
const full = path.join(incomingDir, name);
|
|
159
|
+
try {
|
|
160
|
+
if (now - lstatSync(full).mtimeMs > STAGED_TTL_MS)
|
|
161
|
+
rmSync(full, { recursive: true, force: true });
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// Gone already.
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/* ------------------------------------------------------------------ *
|
|
169
|
+
* checking and unpacking
|
|
170
|
+
* ------------------------------------------------------------------ */
|
|
171
|
+
const IGNORED = (name) => name.startsWith('__MACOSX/') || /(^|\/)\.DS_Store$/.test(name);
|
|
172
|
+
/** Why a member's path is refused, or null. */
|
|
173
|
+
function pathProblem(name) {
|
|
174
|
+
if (name.includes('\0'))
|
|
175
|
+
return 'has a NUL in its name';
|
|
176
|
+
if (name.includes('\\'))
|
|
177
|
+
return 'uses backslashes, which can climb out on some systems';
|
|
178
|
+
if (name.startsWith('/') || /^[A-Za-z]:/.test(name))
|
|
179
|
+
return 'is an absolute path';
|
|
180
|
+
if (name.split('/').some((part) => part === '..'))
|
|
181
|
+
return 'climbs out of the folder';
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
/** Bytes that start a program: ELF, Mach-O (thin and fat), a Windows executable. */
|
|
185
|
+
function looksLikeProgram(bytes) {
|
|
186
|
+
if (bytes.length < 4)
|
|
187
|
+
return false;
|
|
188
|
+
const b = (i) => bytes[i];
|
|
189
|
+
const word = ((b(0) << 24) | (b(1) << 16) | (b(2) << 8) | b(3)) >>> 0;
|
|
190
|
+
if (word === 0x7f454c46)
|
|
191
|
+
return true;
|
|
192
|
+
if ([0xfeedface, 0xfeedfacf, 0xcefaedfe, 0xcffaedfe, 0xcafebabe].includes(word))
|
|
193
|
+
return true;
|
|
194
|
+
return b(0) === 0x4d && b(1) === 0x5a;
|
|
195
|
+
}
|
|
196
|
+
/** The lenient read of SKILL.md's front matter: the top-level `key: value` lines, nested maps skipped. */
|
|
197
|
+
export function readBundleFrontmatter(text) {
|
|
198
|
+
let split;
|
|
199
|
+
try {
|
|
200
|
+
split = splitFrontmatter(text.replace(/^/, '').replace(/\r\n/g, '\n'));
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
const fields = {};
|
|
206
|
+
for (const line of split.frontmatter.split('\n')) {
|
|
207
|
+
const m = /^([A-Za-z][A-Za-z0-9_-]*):\s*(.*)$/.exec(line);
|
|
208
|
+
if (!m)
|
|
209
|
+
continue;
|
|
210
|
+
const value = m[2].trim().replace(/^(['"])(.*)\1$/, '$2').trim();
|
|
211
|
+
if (value !== '' && value !== '|' && value !== '>')
|
|
212
|
+
fields[m[1].toLowerCase()] = value;
|
|
213
|
+
}
|
|
214
|
+
return { fields, body: split.body };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Read the zip at `zipPath`, check it, and unpack it into a staging folder.
|
|
218
|
+
* Answers the preview, or the refusal with what buddi saw. The zip is
|
|
219
|
+
* removed either way.
|
|
220
|
+
*/
|
|
221
|
+
export function stageBundle(incomingDir, zipPath, filename, now) {
|
|
222
|
+
try {
|
|
223
|
+
return stage(incomingDir, zipPath, filename, now);
|
|
224
|
+
}
|
|
225
|
+
finally {
|
|
226
|
+
rmSync(zipPath, { force: true });
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
function stage(incomingDir, zipPath, filename, now) {
|
|
230
|
+
const zip = new Uint8Array(readFileSync(zipPath));
|
|
231
|
+
let entries;
|
|
232
|
+
try {
|
|
233
|
+
entries = readZipEntries(zip).filter((e) => !IGNORED(e.name));
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
return refuse(422, { kind: 'notzip', filename }, `“${filename}” could not be read as a zip: ${err instanceof Error ? err.message : String(err)}`);
|
|
237
|
+
}
|
|
238
|
+
// Paths and links first: one bad entry and nothing is unpacked.
|
|
239
|
+
const bad = [];
|
|
240
|
+
for (const e of entries) {
|
|
241
|
+
const problem = pathProblem(e.name);
|
|
242
|
+
if (problem)
|
|
243
|
+
bad.push({ path: e.name, why: problem });
|
|
244
|
+
else if (isSymlink(e)) {
|
|
245
|
+
let target;
|
|
246
|
+
try {
|
|
247
|
+
target = new TextDecoder().decode(readZipMember(zip, e, 4096)).slice(0, 200);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
target = undefined;
|
|
251
|
+
}
|
|
252
|
+
bad.push({ path: e.name, why: 'is a link', ...(target ? { target } : {}) });
|
|
253
|
+
}
|
|
254
|
+
else if (e.encrypted)
|
|
255
|
+
bad.push({ path: e.name, why: 'is encrypted' });
|
|
256
|
+
}
|
|
257
|
+
if (bad.length > 0) {
|
|
258
|
+
return refuse(422, { kind: 'paths', filename, entries: bad }, `“${filename}” was refused: ${bad.length === 1 ? 'one entry reaches' : `${bad.length} entries reach`} outside the bundle or can’t be read (${bad.map((b) => `${b.path} ${b.why}`).join('; ')}), so nothing was unpacked.`);
|
|
259
|
+
}
|
|
260
|
+
const files = entries.filter((e) => !e.directory);
|
|
261
|
+
if (files.length > BUNDLE_MAX_FILES) {
|
|
262
|
+
return refuse(422, { kind: 'count', filename, files: files.length }, `“${filename}” holds ${files.length} files; a bundle can hold up to ${BUNDLE_MAX_FILES}.`);
|
|
263
|
+
}
|
|
264
|
+
const declared = files.reduce((sum, e) => sum + e.size, 0);
|
|
265
|
+
if (declared > BUNDLE_MAX_BYTES)
|
|
266
|
+
return refuse(413, { kind: 'big', filename, size: declared }, tooBigSentence(filename, declared));
|
|
267
|
+
// Where SKILL.md is: at the top, or inside the one folder everything sits in.
|
|
268
|
+
const tops = new Set(entries.map((e) => e.name.split('/')[0]));
|
|
269
|
+
const single = tops.size === 1 && entries.some((e) => e.name.includes('/')) ? `${[...tops][0]}/` : null;
|
|
270
|
+
const prefix = files.some((e) => e.name === BUNDLE_SKILL_FILE) ? '' : single && files.some((e) => e.name === `${single}${BUNDLE_SKILL_FILE}`) ? single : null;
|
|
271
|
+
if (prefix === null) {
|
|
272
|
+
return refuse(422, { kind: 'noskill', filename, looked: single ? ['', single] : [''] }, `No SKILL.md in “${filename}”. buddi looked at the top${single ? ` and inside ${single}` : ''}. A bundle needs SKILL.md in one of them, with scripts/ and assets/ beside it.`);
|
|
273
|
+
}
|
|
274
|
+
const rel = (e) => e.name.slice(prefix.length);
|
|
275
|
+
// Executables outside scripts/: by mode and by name, then by their first bytes as they unpack.
|
|
276
|
+
const executables = [];
|
|
277
|
+
for (const e of files) {
|
|
278
|
+
const r = rel(e);
|
|
279
|
+
if (r.startsWith(`${BUNDLE_SCRIPTS_DIR}/`))
|
|
280
|
+
continue;
|
|
281
|
+
if (isExecutableMode(e))
|
|
282
|
+
executables.push({ path: r, why: 'is marked executable' });
|
|
283
|
+
else if (EXECUTABLE_EXT.test(r))
|
|
284
|
+
executables.push({ path: r, why: 'is a script or a program' });
|
|
285
|
+
}
|
|
286
|
+
const id = randomUUID();
|
|
287
|
+
const root = path.join(incomingDir, id);
|
|
288
|
+
const filesDir = path.join(root, 'files');
|
|
289
|
+
const rows = [];
|
|
290
|
+
let unpacked = 0;
|
|
291
|
+
try {
|
|
292
|
+
mkdirSync(filesDir, { recursive: true, mode: 0o700 });
|
|
293
|
+
for (const e of files) {
|
|
294
|
+
const r = rel(e);
|
|
295
|
+
let bytes;
|
|
296
|
+
try {
|
|
297
|
+
bytes = readZipMember(zip, e, BUNDLE_MAX_BYTES - unpacked);
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
rmSync(root, { recursive: true, force: true });
|
|
301
|
+
if (err instanceof ZipLimitError) {
|
|
302
|
+
return refuse(413, { kind: 'big', filename, size: declared }, `“${filename}” was refused: ${err.message} Nothing was kept.`);
|
|
303
|
+
}
|
|
304
|
+
if (err instanceof ZipFormatError)
|
|
305
|
+
return refuse(422, { kind: 'damaged', filename }, `“${filename}” is damaged: ${err.message}`);
|
|
306
|
+
throw err;
|
|
307
|
+
}
|
|
308
|
+
unpacked += bytes.length;
|
|
309
|
+
if (!r.startsWith(`${BUNDLE_SCRIPTS_DIR}/`) && looksLikeProgram(bytes) && !executables.some((x) => x.path === r)) {
|
|
310
|
+
executables.push({ path: r, why: 'is a program' });
|
|
311
|
+
}
|
|
312
|
+
const target = path.join(filesDir, r);
|
|
313
|
+
if (!target.startsWith(filesDir + path.sep))
|
|
314
|
+
throw new Error(`refusing ${r}`);
|
|
315
|
+
mkdirSync(path.dirname(target), { recursive: true, mode: 0o755 });
|
|
316
|
+
writeFileSync(target, bytes, { mode: 0o644, flag: 'wx' });
|
|
317
|
+
rows.push(rowOf(r, bytes.length));
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
rmSync(root, { recursive: true, force: true });
|
|
322
|
+
if (err.code === 'EEXIST') {
|
|
323
|
+
return refuse(422, { kind: 'damaged', filename }, `“${filename}” lists the same file twice, so it was refused.`);
|
|
324
|
+
}
|
|
325
|
+
const code = err.code;
|
|
326
|
+
if (code === 'ENOTDIR' || code === 'EISDIR') {
|
|
327
|
+
return refuse(422, { kind: 'damaged', filename }, `“${filename}” holds a file and a folder with the same name, so it was refused.`);
|
|
328
|
+
}
|
|
329
|
+
throw err;
|
|
330
|
+
}
|
|
331
|
+
if (executables.length > 0) {
|
|
332
|
+
rmSync(root, { recursive: true, force: true });
|
|
333
|
+
return refuse(422, { kind: 'executable', filename, entries: executables }, `“${filename}” was refused: ${executables.map((x) => `${x.path} ${x.why}`).join('; ')}. A bundle keeps anything that runs in scripts/.`);
|
|
334
|
+
}
|
|
335
|
+
const skillText = readFileSync(path.join(filesDir, BUNDLE_SKILL_FILE), 'utf8');
|
|
336
|
+
const fm = readBundleFrontmatter(skillText);
|
|
337
|
+
const description = fm?.fields.description ?? '';
|
|
338
|
+
if (!fm || description === '' || fm.body.trim() === '') {
|
|
339
|
+
rmSync(root, { recursive: true, force: true });
|
|
340
|
+
return refuse(422, { kind: 'frontmatter', filename }, `“${filename}”’s SKILL.md needs front matter with a description (when it’s used) between --- lines, then the steps.`);
|
|
341
|
+
}
|
|
342
|
+
const body = fm.body.trim();
|
|
343
|
+
const heading = /^#\s+(.+)$/m.exec(body)?.[1]?.trim();
|
|
344
|
+
const named = fm.fields.name ?? '';
|
|
345
|
+
const words = (named || filename.replace(/\.zip$/i, '')).replace(/[-_]+/g, ' ').trim();
|
|
346
|
+
const title = (fm.fields.title ?? heading ?? (words.charAt(0).toUpperCase() + words.slice(1))).slice(0, 80);
|
|
347
|
+
const firstLines = body.replace(/^#.*$/m, '').replace(/\s+/g, ' ').trim().slice(0, 160);
|
|
348
|
+
rows.sort((a, b) => (a.path === BUNDLE_SKILL_FILE ? -1 : b.path === BUNDLE_SKILL_FILE ? 1 : a.path.localeCompare(b.path)));
|
|
349
|
+
const staged = {
|
|
350
|
+
id,
|
|
351
|
+
filename,
|
|
352
|
+
packed: zip.length,
|
|
353
|
+
size: unpacked,
|
|
354
|
+
files: rows,
|
|
355
|
+
scripts: rows.filter((r) => r.kind === 'script').map((r) => r.path),
|
|
356
|
+
skill: { name: named, title, description: description.slice(0, 300), firstLines, body, ...(fm.fields.network === 'true' ? { network: true } : {}) },
|
|
357
|
+
createdAt: now.toISOString(),
|
|
358
|
+
};
|
|
359
|
+
writeFileSync(path.join(root, 'meta.json'), JSON.stringify(staged), { mode: 0o600 });
|
|
360
|
+
return { status: 200, body: { staged: previewOf(staged) } };
|
|
361
|
+
}
|
|
362
|
+
/** What the preview shows: everything but the whole text. */
|
|
363
|
+
function previewOf(staged) {
|
|
364
|
+
const { body: _body, ...skill } = staged.skill;
|
|
365
|
+
return { ...staged, skill };
|
|
366
|
+
}
|
|
367
|
+
const STAGED_ID = /^[0-9a-f-]{36}$/;
|
|
368
|
+
/** A staged upload by its id: its meta and the folder its files are in. Null when it is gone. */
|
|
369
|
+
export function readStaged(incomingDir, id) {
|
|
370
|
+
if (!STAGED_ID.test(id))
|
|
371
|
+
return null;
|
|
372
|
+
const root = path.join(incomingDir, id);
|
|
373
|
+
try {
|
|
374
|
+
const staged = JSON.parse(readFileSync(path.join(root, 'meta.json'), 'utf8'));
|
|
375
|
+
return { staged, dir: path.join(root, 'files'), root };
|
|
376
|
+
}
|
|
377
|
+
catch {
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
export function discardStaged(incomingDir, id) {
|
|
382
|
+
const found = readStaged(incomingDir, id);
|
|
383
|
+
if (found)
|
|
384
|
+
rmSync(found.root, { recursive: true, force: true });
|
|
385
|
+
return { status: 200, body: { discarded: id } };
|
|
386
|
+
}
|
|
387
|
+
/* ------------------------------------------------------------------ *
|
|
388
|
+
* reading one file, for the viewer
|
|
389
|
+
* ------------------------------------------------------------------ */
|
|
390
|
+
/** A path inside `dir`, or null when it names anything else (or a link). */
|
|
391
|
+
export function bundlePath(dir, rel) {
|
|
392
|
+
if (!rel || pathProblem(rel) || rel.split('/').some((p) => p === '' || p === '.'))
|
|
393
|
+
return null;
|
|
394
|
+
const full = path.join(dir, rel);
|
|
395
|
+
if (!full.startsWith(path.resolve(dir) + path.sep))
|
|
396
|
+
return null;
|
|
397
|
+
try {
|
|
398
|
+
const st = lstatSync(full);
|
|
399
|
+
return st.isFile() ? full : null;
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
return null;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/** `{ path, size, kind, text }` for a text file, `{ …, binary: true }` (and `image` for a picture) for the rest. */
|
|
406
|
+
export function bundleFileView(dir, rel) {
|
|
407
|
+
const full = bundlePath(dir, rel);
|
|
408
|
+
if (!full)
|
|
409
|
+
return { status: 404, body: { error: `There is no file "${rel}" in this bundle.` } };
|
|
410
|
+
const row = rowOf(rel, statSync(full).size);
|
|
411
|
+
const image = RASTER[path.extname(rel).toLowerCase()] !== undefined;
|
|
412
|
+
if (row.kind === 'font' || (image && !/\.svg$/i.test(rel)) || row.size > VIEW_TEXT_MAX) {
|
|
413
|
+
return { status: 200, body: { file: { ...row, binary: true, ...(image ? { image: true } : {}) } } };
|
|
414
|
+
}
|
|
415
|
+
const bytes = readFileSync(full);
|
|
416
|
+
if (bytes.subarray(0, 8192).includes(0))
|
|
417
|
+
return { status: 200, body: { file: { ...row, binary: true } } };
|
|
418
|
+
return { status: 200, body: { file: { ...row, text: bytes.toString('utf8'), ...(image ? { image: true } : {}) } } };
|
|
419
|
+
}
|
|
420
|
+
/** A picture's bytes and type, for the viewer's <img>. Null for anything that is not a picture. */
|
|
421
|
+
export function bundleImage(dir, rel) {
|
|
422
|
+
const type = RASTER[path.extname(rel).toLowerCase()];
|
|
423
|
+
const full = type ? bundlePath(dir, rel) : null;
|
|
424
|
+
if (!full || !type)
|
|
425
|
+
return null;
|
|
426
|
+
return { bytes: readFileSync(full), type };
|
|
427
|
+
}
|
|
428
|
+
/** The bundle as a .zip, its folder at the top, for Download. */
|
|
429
|
+
export function zipBundle(dir, name) {
|
|
430
|
+
const tree = {};
|
|
431
|
+
for (const row of bundleFileRows(dir))
|
|
432
|
+
tree[`${name}/${row.path}`] = new Uint8Array(readFileSync(path.join(dir, row.path)));
|
|
433
|
+
return zipSync(tree, { level: 6 });
|
|
434
|
+
}
|
|
435
|
+
/** Whether a folder exists (for the accept's collision check). */
|
|
436
|
+
export function folderExists(dir) {
|
|
437
|
+
return existsSync(dir);
|
|
438
|
+
}
|
|
439
|
+
//# sourceMappingURL=skill-bundles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-bundles.js","sourceRoot":"","sources":["../../src/web/skill-bundles.ts"],"names":[],"mappings":"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"}
|