@ic-reactor/mcp 0.0.0-stage → 0.0.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/.github/ISSUE_TEMPLATE/bug_report.yml +108 -0
- package/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/.github/ISSUE_TEMPLATE/feature_request.yml +77 -0
- package/.github/actions/setup-rust-wasm/action.yml +25 -0
- package/.github/dependabot.yml +107 -0
- package/.github/workflows/auth-latest.yml +67 -0
- package/.github/workflows/b3pay-site.yml +49 -0
- package/.github/workflows/ci.yml +430 -0
- package/.github/workflows/codeql.yml +41 -0
- package/.github/workflows/dependency-review.yml +68 -0
- package/.github/workflows/docs-check.yml +98 -0
- package/.github/workflows/docs.yml +265 -0
- package/.github/workflows/e2e.yml +90 -0
- package/.github/workflows/examples-published.yml +97 -0
- package/.github/workflows/release.yml +326 -0
- package/.husky/pre-commit +12 -0
- package/.prettierignore +109 -0
- package/.prettierrc +6 -0
- package/AGENTS.md +103 -0
- package/CHANGELOG.md +3268 -0
- package/CLAUDE.md +93 -0
- package/CNAME +1 -0
- package/CODE_OF_CONDUCT.md +7 -0
- package/CONTRIBUTING.md +433 -0
- package/LICENSE +21 -0
- package/README.md +2 -2
- package/SECURITY.md +74 -0
- package/b3pay-module.json +194 -0
- package/docs/.remarkrc.json +10 -0
- package/docs/README.md +64 -0
- package/docs/astro.config.mjs +205 -0
- package/docs/favicon.svg +15 -0
- package/docs/package.json +39 -0
- package/docs/public/favicon.svg +15 -0
- package/docs/public/ic-reactor-social-card.png +0 -0
- package/docs/scripts/b3pay-static.mjs +22 -0
- package/docs/scripts/check-example-docs.mjs +214 -0
- package/docs/scripts/check-links.mjs +212 -0
- package/docs/scripts/fix-dist-links.js +125 -0
- package/docs/scripts/fix-frontmatter.js +71 -0
- package/docs/scripts/remove-redundant-h1.cjs +48 -0
- package/docs/scripts/rewrite-typedoc-links.js +110 -0
- package/docs/scripts/split-index.js +69 -0
- package/docs/src/assets/ic-reactor-hero-dark.svg +23 -0
- package/docs/src/assets/ic-reactor-hero-light.svg +23 -0
- package/docs/src/assets/ic-reactor-lockup-dark.svg +15 -0
- package/docs/src/assets/ic-reactor-lockup-light.svg +15 -0
- package/docs/src/assets/ic-reactor-mark-dark.svg +14 -0
- package/docs/src/assets/ic-reactor-mark-light.svg +14 -0
- package/docs/src/assets/layers/candid-core-layer-icon-dark.svg +4 -0
- package/docs/src/assets/layers/candid-core-layer-icon-light.svg +4 -0
- package/docs/src/assets/layers/candid-profile-layer-icon-dark.svg +4 -0
- package/docs/src/assets/layers/candid-profile-layer-icon-light.svg +4 -0
- package/docs/src/assets/layers/ic-reactor-layer-icon-dark.svg +4 -0
- package/docs/src/assets/layers/ic-reactor-layer-icon-light.svg +4 -0
- package/docs/src/components/LibraryCards.astro +172 -0
- package/docs/src/components/LibraryIcon.astro +28 -0
- package/docs/src/components/SiteTitle.astro +241 -0
- package/docs/src/content/docs/404.mdx +19 -0
- package/docs/src/content/docs/build/agent-tools.mdx +593 -0
- package/docs/src/content/docs/build/icrc1-wallet.mdx +619 -0
- package/docs/src/content/docs/build/ssr-per-user.mdx +552 -0
- package/docs/src/content/docs/examples/canister-studio.mdx +95 -0
- package/docs/src/content/docs/examples/icrc-ledger.mdx +45 -0
- package/docs/src/content/docs/examples/index.mdx +38 -0
- package/docs/src/content/docs/examples/next-ssr.mdx +73 -0
- package/docs/src/content/docs/examples/node-agent-tool.mdx +80 -0
- package/docs/src/content/docs/examples/vite-wallet.mdx +71 -0
- package/docs/src/content/docs/guides/auth.mdx +1181 -0
- package/docs/src/content/docs/guides/client.mdx +551 -0
- package/docs/src/content/docs/guides/deploy.mdx +180 -0
- package/docs/src/content/docs/guides/errors.mdx +475 -0
- package/docs/src/content/docs/guides/getting-started.mdx +620 -0
- package/docs/src/content/docs/guides/reads.mdx +586 -0
- package/docs/src/content/docs/guides/ssr.mdx +529 -0
- package/docs/src/content/docs/guides/testing.mdx +401 -0
- package/docs/src/content/docs/guides/values.mdx +261 -0
- package/docs/src/content/docs/guides/vite-plugin.mdx +690 -0
- package/docs/src/content/docs/guides/writes.mdx +572 -0
- package/docs/src/content/docs/ic-reactor/index.mdx +167 -0
- package/docs/src/content/docs/index.mdx +65 -0
- package/docs/src/content/docs/migrating-from-3.mdx +535 -0
- package/docs/src/content/docs/packages/core.mdx +186 -0
- package/docs/src/content/docs/packages/mcp.mdx +163 -0
- package/docs/src/content/docs/packages/react.mdx +207 -0
- package/docs/src/content/docs/packages/vite-plugin.mdx +73 -0
- package/docs/src/content/docs/versioning.mdx +104 -0
- package/docs/src/content.config.ts +7 -0
- package/docs/src/styles/custom.css +189 -0
- package/docs/tsconfig.typedoc.json +26 -0
- package/docs/typedoc-entry.ts +17 -0
- package/docs/typedoc.json +37 -0
- package/e2e/Cargo.lock +646 -0
- package/e2e/Cargo.toml +3 -0
- package/e2e/README.md +101 -0
- package/e2e/frontends/build.mjs +94 -0
- package/e2e/frontends/index.html +10 -0
- package/e2e/global-setup.ts +65 -0
- package/e2e/icp.yaml +38 -0
- package/e2e/package.json +40 -0
- package/e2e/setup.ts +6 -0
- package/e2e/src/actor/Cargo.toml +14 -0
- package/e2e/src/actor/hello_actor.did +10 -0
- package/e2e/src/actor/src/lib.rs +73 -0
- package/e2e/src/calls.test.ts +132 -0
- package/e2e/src/declarations/hello_actor.envelope.json +175 -0
- package/e2e/src/declarations/hello_actor.ts +15 -0
- package/e2e/src/errors.test.ts +107 -0
- package/e2e/src/frontend-headers.test.ts +253 -0
- package/e2e/src/identity.test.ts +61 -0
- package/e2e/src/react.test.tsx +59 -0
- package/e2e/src/replica.ts +70 -0
- package/e2e/src/vite-env.test.ts +108 -0
- package/e2e/test.sh +47 -0
- package/e2e/tsconfig.json +20 -0
- package/e2e/tsconfig.typecheck.json +9 -0
- package/e2e/vitest.config.ts +22 -0
- package/eslint.config.mjs +100 -0
- package/evals/PREREGISTRATION.md +1346 -0
- package/evals/README.md +756 -0
- package/evals/conditions/thin/condition.json +8 -0
- package/evals/conditions/thin/docs/candid-core-cli.README.md +90 -0
- package/evals/conditions/thin/docs/candid-core-schema.README.md +339 -0
- package/evals/conditions/thin/package.json +25 -0
- package/evals/conditions/thin/starter/src/generated/icrc1.ts +57 -0
- package/evals/conditions/thin-guide/condition.json +10 -0
- package/evals/conditions/thin-guide/docs/llms.txt +292 -0
- package/evals/conditions/v3/condition.json +9 -0
- package/evals/conditions/v3/docs/ic-reactor-core.llms.txt +232 -0
- package/evals/conditions/v3/docs/ic-reactor-react.llms.txt +280 -0
- package/evals/conditions/v3/docs/llms-full.txt +1053 -0
- package/evals/conditions/v3/package.json +26 -0
- package/evals/conditions/v3/starter/src/declarations/icrc1.did.d.ts +95 -0
- package/evals/conditions/v3/starter/src/declarations/icrc1.did.js +140 -0
- package/evals/conditions/v4/PORTING.md +384 -0
- package/evals/conditions/v4/README.md +106 -0
- package/evals/conditions/v4/condition.json +5 -0
- package/evals/conditions/v4/docs/llms.txt +323 -0
- package/evals/conditions/v4/package.json +27 -0
- package/evals/conditions/v4/starter/src/generated/icrc1.ts +78 -0
- package/evals/conditions/v4-proto/condition.json +6 -0
- package/evals/conditions/v4-proto/docs/llms.txt +291 -0
- package/evals/conditions/v4-proto/lib/SHIM-NOTES.md +20 -0
- package/evals/conditions/v4-proto/lib/package.json +27 -0
- package/evals/conditions/v4-proto/lib/src/client.ts +471 -0
- package/evals/conditions/v4-proto/lib/src/errors.ts +214 -0
- package/evals/conditions/v4-proto/lib/src/index.ts +36 -0
- package/evals/conditions/v4-proto/lib/src/principal.ts +175 -0
- package/evals/conditions/v4-proto/lib/src/service.ts +69 -0
- package/evals/conditions/v4-proto/lib/src/types.ts +174 -0
- package/evals/conditions/v4-proto/lib/test/runtime.test.ts +170 -0
- package/evals/conditions/v4-proto/lib/test/tsconfig.json +10 -0
- package/evals/conditions/v4-proto/lib/test/types.test-d.ts +145 -0
- package/evals/conditions/v4-proto/lib/test/vitest.config.mjs +8 -0
- package/evals/conditions/v4-proto/lib/tsconfig.json +17 -0
- package/evals/conditions/v4-proto/package.json +26 -0
- package/evals/conditions/v4-proto/starter/src/generated/icrc1.service.ts +19 -0
- package/evals/conditions/v4-proto/starter/src/generated/icrc1.ts +57 -0
- package/evals/drive.mjs +1221 -0
- package/evals/gate.mjs +161 -0
- package/evals/harness/aggregate.mjs +534 -0
- package/evals/harness/aggregate.test.mjs +344 -0
- package/evals/harness/assemble.mjs +216 -0
- package/evals/harness/assemble.test.mjs +143 -0
- package/evals/harness/auth.mjs +91 -0
- package/evals/harness/check-docs.mjs +157 -0
- package/evals/harness/declarations/icrc1.did.d.ts +95 -0
- package/evals/harness/declarations/icrc1.did.js +140 -0
- package/evals/harness/drive-auth.test.mjs +584 -0
- package/evals/harness/drive.test.mjs +509 -0
- package/evals/harness/fake-auth.ts +67 -0
- package/evals/harness/fake-ledger.ts +178 -0
- package/evals/harness/gate-plan.mjs +104 -0
- package/evals/harness/gate-plan.test.mjs +243 -0
- package/evals/harness/icrc1.did +88 -0
- package/evals/harness/judge.mjs +63 -0
- package/evals/harness/judge.test.mjs +81 -0
- package/evals/harness/leak-scan.mjs +1373 -0
- package/evals/harness/leak-scan.test.mjs +1300 -0
- package/evals/harness/probes/amounts.ts +14 -0
- package/evals/harness/probes/node-tool.probe.ts +48 -0
- package/evals/harness/probes/probe.mjs +149 -0
- package/evals/harness/probes/react-wallet.probe.ts +96 -0
- package/evals/harness/public/support/auth.ts +38 -0
- package/evals/harness/public/support/fake-replica.d.ts +28 -0
- package/evals/harness/public/support/fake-replica.js +434 -0
- package/evals/harness/public/support/ledger.idl.d.ts +95 -0
- package/evals/harness/public/support/ledger.idl.js +140 -0
- package/evals/harness/public/support/world.ts +179 -0
- package/evals/harness/runs.mjs +139 -0
- package/evals/harness/sandbox.mjs +88 -0
- package/evals/harness/sandbox.test.mjs +134 -0
- package/evals/harness/ship.mjs +264 -0
- package/evals/harness/ship.test.mjs +552 -0
- package/evals/harness/world.ts +291 -0
- package/evals/package.json +26 -0
- package/evals/pnpm-lock.yaml +1537 -0
- package/evals/pnpm-workspace.yaml +12 -0
- package/evals/results/2026-09-30T14-22-05-924Z/pilot.json +384 -0
- package/evals/results/2026-09-30T14-22-05-924Z/pilot.rescanned.json +404 -0
- package/evals/results/2026-09-30T14-22-05-924Z/pilot.rescanned.rescored.json +404 -0
- package/evals/results/2026-09-30T14-22-05-924Z/plan.json +240 -0
- package/evals/results/2026-09-30T14-22-05-924Z/summary.json +1800 -0
- package/evals/results/2026-09-30T14-22-05-924Z/summary.rescanned.json +1843 -0
- package/evals/results/2026-09-30T14-22-05-924Z/summary.rescanned.rescored.json +2100 -0
- package/evals/results/2026-09-30T15-48-23-343Z/pilot.json +404 -0
- package/evals/results/2026-09-30T15-48-23-343Z/pilot.rescored.json +404 -0
- package/evals/results/2026-09-30T15-48-23-343Z/plan.json +242 -0
- package/evals/results/2026-09-30T15-48-23-343Z/summary.json +1843 -0
- package/evals/results/2026-09-30T15-48-23-343Z/summary.rescored.json +2195 -0
- package/evals/results/2026-10-03-beta1-gate/pilot.json +162 -0
- package/evals/results/2026-10-03-beta1-gate/plan.json +141 -0
- package/evals/results/2026-10-03-beta1-gate/summary.json +983 -0
- package/evals/results/2026-10-05-ga-gate/contaminated-run.json +55 -0
- package/evals/results/2026-10-05-ga-gate/pilot.json +162 -0
- package/evals/results/2026-10-05-ga-gate/plan.json +457 -0
- package/evals/results/2026-10-05-ga-gate/summary.json +1037 -0
- package/evals/results/2026-10-05-ga-gate/summary.rescanned.json +1037 -0
- package/evals/results/README.md +31 -0
- package/evals/runs-pilot.log +150 -0
- package/evals/runs-pilot2.log +150 -0
- package/evals/score.mjs +256 -0
- package/evals/setup.mjs +547 -0
- package/evals/tasks/node-tool/faulty/thin-accepts-exponent/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-accepts-exponent/src/index.ts +121 -0
- package/evals/tasks/node-tool/faulty/thin-anonymous-transfer/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-anonymous-transfer/src/index.ts +116 -0
- package/evals/tasks/node-tool/faulty/thin-every-reject-may-have-executed/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/thin-every-reject-may-have-executed/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/thin-fetches-root-key-off-local/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-fetches-root-key-off-local/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/thin-ignores-root-key/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-ignores-root-key/src/index.ts +117 -0
- package/evals/tasks/node-tool/faulty/thin-misclassifies-reject-codes/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/thin-misclassifies-reject-codes/src/index.ts +119 -0
- package/evals/tasks/node-tool/faulty/thin-no-nat64-cap/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/thin-no-nat64-cap/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/thin-number-amount/meta.json +10 -0
- package/evals/tasks/node-tool/faulty/thin-number-amount/src/index.ts +117 -0
- package/evals/tasks/node-tool/faulty/thin-truncates-fraction-digits/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-truncates-fraction-digits/src/index.ts +120 -0
- package/evals/tasks/node-tool/faulty/thin-unvalidated-recipient/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/thin-unvalidated-recipient/src/index.ts +118 -0
- package/evals/tasks/node-tool/faulty/v3-retry-call-errors/meta.json +11 -0
- package/evals/tasks/node-tool/faulty/v3-retry-call-errors/src/index.ts +149 -0
- package/evals/tasks/node-tool/faulty/v4-anonymous-identity-sent/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/v4-anonymous-identity-sent/src/index.ts +71 -0
- package/evals/tasks/node-tool/faulty/v4-never-may-have-executed/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/v4-never-may-have-executed/src/index.ts +84 -0
- package/evals/tasks/node-tool/faulty/v4-proto-never-may-have-executed/meta.json +9 -0
- package/evals/tasks/node-tool/faulty/v4-proto-never-may-have-executed/src/index.ts +72 -0
- package/evals/tasks/node-tool/faulty/v4-proto-refuses-nat64-max/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/v4-proto-refuses-nat64-max/src/index.ts +72 -0
- package/evals/tasks/node-tool/faulty/v4-refuses-nat64-max/meta.json +5 -0
- package/evals/tasks/node-tool/faulty/v4-refuses-nat64-max/src/index.ts +84 -0
- package/evals/tasks/node-tool/hidden/node-tool.test.ts +312 -0
- package/evals/tasks/node-tool/prompt.md +55 -0
- package/evals/tasks/node-tool/prompt.minimal.md +30 -0
- package/evals/tasks/node-tool/solutions/thin/reference/src/index.ts +118 -0
- package/evals/tasks/node-tool/solutions/thin/reference-module-scope/src/index.ts +145 -0
- package/evals/tasks/node-tool/solutions/thin-guide/reference/src/index.ts +118 -0
- package/evals/tasks/node-tool/solutions/thin-guide/reference-module-scope/src/index.ts +145 -0
- package/evals/tasks/node-tool/solutions/v3/reference/src/index.ts +140 -0
- package/evals/tasks/node-tool/solutions/v3/reference-module-scope/src/index.ts +153 -0
- package/evals/tasks/node-tool/solutions/v4/reference/src/index.ts +84 -0
- package/evals/tasks/node-tool/solutions/v4/reference-module-scope/src/index.ts +105 -0
- package/evals/tasks/node-tool/solutions/v4-proto/reference/src/index.ts +72 -0
- package/evals/tasks/node-tool/solutions/v4-proto/reference-module-scope/src/index.ts +87 -0
- package/evals/tasks/node-tool/starter/src/contract.ts +31 -0
- package/evals/tasks/node-tool/starter/src/index.ts +7 -0
- package/evals/tasks/node-tool/starter/test/smoke.test.ts +22 -0
- package/evals/tasks/node-tool/starter/tsconfig.json +17 -0
- package/evals/tasks/node-tool/task.json +63 -0
- package/evals/tasks/react-wallet/faulty/thin-accepts-exponent/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-accepts-exponent/src/Wallet.tsx +216 -0
- package/evals/tasks/react-wallet/faulty/thin-anonymous-transfer/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-anonymous-transfer/src/Wallet.tsx +212 -0
- package/evals/tasks/react-wallet/faulty/thin-both-auth-buttons/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-both-auth-buttons/src/Wallet.tsx +210 -0
- package/evals/tasks/react-wallet/faulty/thin-constant-balance-key/meta.json +8 -0
- package/evals/tasks/react-wallet/faulty/thin-constant-balance-key/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/faulty/thin-no-nat64-cap/meta.json +9 -0
- package/evals/tasks/react-wallet/faulty/thin-no-nat64-cap/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/faulty/thin-number-balance/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-number-balance/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/faulty/thin-transfer-as-query/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-transfer-as-query/src/Wallet.tsx +254 -0
- package/evals/tasks/react-wallet/faulty/thin-truncates-fraction-digits/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-truncates-fraction-digits/src/Wallet.tsx +215 -0
- package/evals/tasks/react-wallet/faulty/thin-unguarded-balance-effect/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/thin-unguarded-balance-effect/src/Wallet.tsx +214 -0
- package/evals/tasks/react-wallet/faulty/v3-http-4xx-unknown/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v3-http-4xx-unknown/src/Wallet.tsx +224 -0
- package/evals/tasks/react-wallet/faulty/v3-mutation-retry-3/meta.json +12 -0
- package/evals/tasks/react-wallet/faulty/v3-mutation-retry-3/src/Wallet.tsx +225 -0
- package/evals/tasks/react-wallet/faulty/v3-unknown-as-error/meta.json +11 -0
- package/evals/tasks/react-wallet/faulty/v3-unknown-as-error/src/Wallet.tsx +182 -0
- package/evals/tasks/react-wallet/faulty/v4-every-reject-unknown/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-every-reject-unknown/src/Wallet.tsx +160 -0
- package/evals/tasks/react-wallet/faulty/v4-keep-previous-data/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-keep-previous-data/src/Wallet.tsx +166 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-every-reject-unknown/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-every-reject-unknown/src/Wallet.tsx +161 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-keep-previous-data/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-keep-previous-data/src/Wallet.tsx +163 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-retry-spread/meta.json +12 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-retry-spread/src/Wallet.tsx +162 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-status-not-idle/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-proto-status-not-idle/src/Wallet.tsx +163 -0
- package/evals/tasks/react-wallet/faulty/v4-retry-spread/meta.json +12 -0
- package/evals/tasks/react-wallet/faulty/v4-retry-spread/src/Wallet.tsx +163 -0
- package/evals/tasks/react-wallet/faulty/v4-status-not-idle/meta.json +5 -0
- package/evals/tasks/react-wallet/faulty/v4-status-not-idle/src/Wallet.tsx +162 -0
- package/evals/tasks/react-wallet/hidden/react-wallet.test.ts +536 -0
- package/evals/tasks/react-wallet/prompt.md +88 -0
- package/evals/tasks/react-wallet/prompt.minimal.md +51 -0
- package/evals/tasks/react-wallet/solutions/thin/reference/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/solutions/thin/reference-module-scope/src/Wallet.tsx +227 -0
- package/evals/tasks/react-wallet/solutions/thin-guide/reference/src/Wallet.tsx +213 -0
- package/evals/tasks/react-wallet/solutions/thin-guide/reference-module-scope/src/Wallet.tsx +227 -0
- package/evals/tasks/react-wallet/solutions/v3/reference/src/Wallet.tsx +224 -0
- package/evals/tasks/react-wallet/solutions/v3/reference-module-scope/src/Wallet.tsx +230 -0
- package/evals/tasks/react-wallet/solutions/v4/reference/src/Wallet.tsx +160 -0
- package/evals/tasks/react-wallet/solutions/v4/reference-module-scope/src/Wallet.tsx +178 -0
- package/evals/tasks/react-wallet/solutions/v4-proto/reference/src/Wallet.tsx +161 -0
- package/evals/tasks/react-wallet/solutions/v4-proto/reference-module-scope/src/Wallet.tsx +161 -0
- package/evals/tasks/react-wallet/starter/src/Wallet.tsx +12 -0
- package/evals/tasks/react-wallet/starter/src/auth.ts +16 -0
- package/evals/tasks/react-wallet/starter/src/config.ts +14 -0
- package/evals/tasks/react-wallet/starter/src/ii-auth.ts +43 -0
- package/evals/tasks/react-wallet/starter/src/main.tsx +15 -0
- package/evals/tasks/react-wallet/starter/test/smoke.test.ts +34 -0
- package/evals/tasks/react-wallet/starter/tsconfig.json +18 -0
- package/evals/tasks/react-wallet/task.json +84 -0
- package/examples/canister-studio/.stackblitzrc +4 -0
- package/examples/canister-studio/README.md +183 -0
- package/examples/canister-studio/did/ckbtc_minter.did +806 -0
- package/examples/canister-studio/did/icp_ledger.did +586 -0
- package/examples/canister-studio/did/icrc1.did +88 -0
- package/examples/canister-studio/package.json +45 -0
- package/examples/canister-studio/scripts/smoke.ts +188 -0
- package/examples/canister-studio/src/calls/CacheKeyPanel.tsx +104 -0
- package/examples/canister-studio/src/calls/ConfirmWrite.tsx +265 -0
- package/examples/canister-studio/src/calls/ErrorPanel.test.tsx +113 -0
- package/examples/canister-studio/src/calls/ErrorPanel.tsx +214 -0
- package/examples/canister-studio/src/calls/MethodRunner.test.tsx +354 -0
- package/examples/canister-studio/src/calls/MethodRunner.tsx +57 -0
- package/examples/canister-studio/src/calls/ReadRunner.tsx +244 -0
- package/examples/canister-studio/src/calls/ResendPanel.tsx +165 -0
- package/examples/canister-studio/src/calls/ShareLink.tsx +59 -0
- package/examples/canister-studio/src/calls/WriteRunner.test.tsx +678 -0
- package/examples/canister-studio/src/calls/WriteRunner.tsx +670 -0
- package/examples/canister-studio/src/calls/dedupe.ts +189 -0
- package/examples/canister-studio/src/calls/error-info.ts +168 -0
- package/examples/canister-studio/src/calls/history.test.ts +284 -0
- package/examples/canister-studio/src/calls/history.ts +287 -0
- package/examples/canister-studio/src/calls/kinds.ts +68 -0
- package/examples/canister-studio/src/calls/prepare.ts +32 -0
- package/examples/canister-studio/src/calls/query-options.ts +30 -0
- package/examples/canister-studio/src/calls/read.ts +47 -0
- package/examples/canister-studio/src/calls/readback.ts +100 -0
- package/examples/canister-studio/src/calls/record.ts +123 -0
- package/examples/canister-studio/src/calls/safe-calls.test.ts +299 -0
- package/examples/canister-studio/src/calls/share.ts +46 -0
- package/examples/canister-studio/src/calls/testing/doubles.tsx +108 -0
- package/examples/canister-studio/src/calls/testing/fixtures.ts +185 -0
- package/examples/canister-studio/src/calls/useCanisterHandle.ts +35 -0
- package/examples/canister-studio/src/canisters/ckbtc_minter.envelope.json +4228 -0
- package/examples/canister-studio/src/canisters/ckbtc_minter.ts +868 -0
- package/examples/canister-studio/src/canisters/icp_ledger.envelope.json +3454 -0
- package/examples/canister-studio/src/canisters/icp_ledger.ts +584 -0
- package/examples/canister-studio/src/canisters/icrc1.envelope.json +840 -0
- package/examples/canister-studio/src/canisters/icrc1.ts +78 -0
- package/examples/canister-studio/src/components/ActionButton.tsx +32 -0
- package/examples/canister-studio/src/components/AppHeader.tsx +83 -0
- package/examples/canister-studio/src/components/AppShell.tsx +29 -0
- package/examples/canister-studio/src/components/AuthButton.tsx +79 -0
- package/examples/canister-studio/src/components/Badge.tsx +79 -0
- package/examples/canister-studio/src/components/CanisterHeader.tsx +200 -0
- package/examples/canister-studio/src/components/CanisterJump.tsx +130 -0
- package/examples/canister-studio/src/components/Card.tsx +64 -0
- package/examples/canister-studio/src/components/Code.tsx +101 -0
- package/examples/canister-studio/src/components/CopyButton.tsx +126 -0
- package/examples/canister-studio/src/components/Disclosure.tsx +34 -0
- package/examples/canister-studio/src/components/EmptyState.tsx +34 -0
- package/examples/canister-studio/src/components/MethodList.test.tsx +137 -0
- package/examples/canister-studio/src/components/MethodList.tsx +244 -0
- package/examples/canister-studio/src/components/Notice.tsx +36 -0
- package/examples/canister-studio/src/components/ProvenanceBadge.tsx +44 -0
- package/examples/canister-studio/src/components/RouteError.tsx +42 -0
- package/examples/canister-studio/src/components/SectionBoundary.tsx +76 -0
- package/examples/canister-studio/src/components/Spinner.tsx +33 -0
- package/examples/canister-studio/src/components/Tabs.tsx +96 -0
- package/examples/canister-studio/src/components/canister/CanisterLoadFailure.test.tsx +56 -0
- package/examples/canister-studio/src/components/canister/CanisterLoadFailure.tsx +165 -0
- package/examples/canister-studio/src/components/canister/CanisterNotFound.tsx +59 -0
- package/examples/canister-studio/src/components/canister/CanisterPending.tsx +33 -0
- package/examples/canister-studio/src/components/canister/MethodOverview.tsx +93 -0
- package/examples/canister-studio/src/components/canister/MethodWorkspace.test.tsx +201 -0
- package/examples/canister-studio/src/components/canister/MethodWorkspace.tsx +187 -0
- package/examples/canister-studio/src/components/canister/shared-call.test.ts +186 -0
- package/examples/canister-studio/src/components/canister/shared-call.ts +133 -0
- package/examples/canister-studio/src/components/canister/shared-link-loader.test.ts +116 -0
- package/examples/canister-studio/src/components/canister/use-canister-page.ts +44 -0
- package/examples/canister-studio/src/components/canister/workspace-key.test.ts +27 -0
- package/examples/canister-studio/src/components/canister/workspace-key.ts +36 -0
- package/examples/canister-studio/src/components/canister-id-input.ts +69 -0
- package/examples/canister-studio/src/components/canister-names.ts +11 -0
- package/examples/canister-studio/src/components/download.ts +34 -0
- package/examples/canister-studio/src/components/fallbacks.tsx +33 -0
- package/examples/canister-studio/src/components/helpers.test.ts +107 -0
- package/examples/canister-studio/src/components/history/HistoryList.tsx +284 -0
- package/examples/canister-studio/src/components/home/FeaturedLedger.tsx +149 -0
- package/examples/canister-studio/src/components/home/OpenCanister.tsx +99 -0
- package/examples/canister-studio/src/components/home/featured.test.tsx +92 -0
- package/examples/canister-studio/src/components/home/featured.ts +64 -0
- package/examples/canister-studio/src/components/interface/CandidTab.tsx +38 -0
- package/examples/canister-studio/src/components/interface/CompatReport.tsx +92 -0
- package/examples/canister-studio/src/components/interface/CompatibilityTab.tsx +190 -0
- package/examples/canister-studio/src/components/interface/ProjectTab.tsx +196 -0
- package/examples/canister-studio/src/components/interface/TypeScriptTab.tsx +114 -0
- package/examples/canister-studio/src/components/interface/tools.test.tsx +169 -0
- package/examples/canister-studio/src/components/modes.ts +31 -0
- package/examples/canister-studio/src/components/playground/MethodPicker.tsx +67 -0
- package/examples/canister-studio/src/components/playground/PlaygroundForms.tsx +112 -0
- package/examples/canister-studio/src/components/playground/PlaygroundTools.tsx +219 -0
- package/examples/canister-studio/src/components/playground/sample.ts +43 -0
- package/examples/canister-studio/src/components/playground/target.test.tsx +86 -0
- package/examples/canister-studio/src/components/primitives.test.tsx +121 -0
- package/examples/canister-studio/src/components/provenance.ts +38 -0
- package/examples/canister-studio/src/components/route-render.test.tsx +71 -0
- package/examples/canister-studio/src/components/use-task.ts +56 -0
- package/examples/canister-studio/src/components/wallet/BalancePanel.tsx +110 -0
- package/examples/canister-studio/src/components/wallet/LedgerSummary.tsx +63 -0
- package/examples/canister-studio/src/components/wallet/MinterPanel.tsx +255 -0
- package/examples/canister-studio/src/components/wallet/SendPanel.test.tsx +297 -0
- package/examples/canister-studio/src/components/wallet/SendPanel.tsx +446 -0
- package/examples/canister-studio/src/components/wallet/ledgers.test.ts +36 -0
- package/examples/canister-studio/src/components/wallet/ledgers.ts +111 -0
- package/examples/canister-studio/src/forms/JsonPanel.tsx +157 -0
- package/examples/canister-studio/src/forms/MethodForm.test.tsx +369 -0
- package/examples/canister-studio/src/forms/MethodForm.tsx +368 -0
- package/examples/canister-studio/src/forms/TypedForm.tsx +55 -0
- package/examples/canister-studio/src/forms/context.ts +62 -0
- package/examples/canister-studio/src/forms/convert.ts +131 -0
- package/examples/canister-studio/src/forms/edge.test.ts +252 -0
- package/examples/canister-studio/src/forms/engine.test.ts +358 -0
- package/examples/canister-studio/src/forms/engine.ts +1492 -0
- package/examples/canister-studio/src/forms/fields/BytesField.tsx +210 -0
- package/examples/canister-studio/src/forms/fields/Field.tsx +106 -0
- package/examples/canister-studio/src/forms/fields/FieldShell.tsx +101 -0
- package/examples/canister-studio/src/forms/fields/Group.tsx +74 -0
- package/examples/canister-studio/src/forms/fields/ListField.tsx +256 -0
- package/examples/canister-studio/src/forms/fields/Segmented.tsx +78 -0
- package/examples/canister-studio/src/forms/fields/TimestampField.tsx +108 -0
- package/examples/canister-studio/src/forms/fields/UnitsField.tsx +119 -0
- package/examples/canister-studio/src/forms/fields/composites.tsx +389 -0
- package/examples/canister-studio/src/forms/fields/leaves.tsx +350 -0
- package/examples/canister-studio/src/forms/fields.test.tsx +396 -0
- package/examples/canister-studio/src/forms/helpers.test.ts +225 -0
- package/examples/canister-studio/src/forms/hints.ts +128 -0
- package/examples/canister-studio/src/forms/json.ts +119 -0
- package/examples/canister-studio/src/forms/parsing.test.ts +217 -0
- package/examples/canister-studio/src/forms/useMethodForm.ts +251 -0
- package/examples/canister-studio/src/interface/browser.test.ts +23 -0
- package/examples/canister-studio/src/interface/browser.ts +153 -0
- package/examples/canister-studio/src/interface/cache.ts +68 -0
- package/examples/canister-studio/src/interface/cli-cache.test.ts +155 -0
- package/examples/canister-studio/src/interface/cli-cache.ts +125 -0
- package/examples/canister-studio/src/interface/compile.server.test.ts +198 -0
- package/examples/canister-studio/src/interface/compile.server.ts +262 -0
- package/examples/canister-studio/src/interface/compile.test.ts +108 -0
- package/examples/canister-studio/src/interface/compile.ts +305 -0
- package/examples/canister-studio/src/interface/docs.test.ts +75 -0
- package/examples/canister-studio/src/interface/docs.ts +100 -0
- package/examples/canister-studio/src/interface/functions.test.ts +42 -0
- package/examples/canister-studio/src/interface/functions.ts +200 -0
- package/examples/canister-studio/src/interface/live-candid.server.ts +91 -0
- package/examples/canister-studio/src/interface/live-loader.test.ts +515 -0
- package/examples/canister-studio/src/interface/live-loader.ts +364 -0
- package/examples/canister-studio/src/interface/load.test.ts +328 -0
- package/examples/canister-studio/src/interface/load.ts +249 -0
- package/examples/canister-studio/src/interface/read-candid.test.ts +185 -0
- package/examples/canister-studio/src/interface/read-candid.ts +233 -0
- package/examples/canister-studio/src/interface/server-result.ts +42 -0
- package/examples/canister-studio/src/interface/typed.ts +68 -0
- package/examples/canister-studio/src/interface/types.ts +121 -0
- package/examples/canister-studio/src/lib/format.test.ts +107 -0
- package/examples/canister-studio/src/lib/format.ts +139 -0
- package/examples/canister-studio/src/lib/hex.test.ts +43 -0
- package/examples/canister-studio/src/lib/hex.ts +33 -0
- package/examples/canister-studio/src/lib/ids.test.ts +70 -0
- package/examples/canister-studio/src/lib/ids.ts +93 -0
- package/examples/canister-studio/src/lib/reactor.test.ts +55 -0
- package/examples/canister-studio/src/lib/reactor.ts +55 -0
- package/examples/canister-studio/src/lib/registry.test.ts +74 -0
- package/examples/canister-studio/src/lib/registry.ts +238 -0
- package/examples/canister-studio/src/lib/schema.ts +148 -0
- package/examples/canister-studio/src/routeTree.gen.ts +227 -0
- package/examples/canister-studio/src/router.test.ts +290 -0
- package/examples/canister-studio/src/router.tsx +127 -0
- package/examples/canister-studio/src/routes/__root.tsx +58 -0
- package/examples/canister-studio/src/routes/canister.$canisterId.index.tsx +172 -0
- package/examples/canister-studio/src/routes/canister.$canisterId.interface.tsx +98 -0
- package/examples/canister-studio/src/routes/canister.$canisterId.tsx +91 -0
- package/examples/canister-studio/src/routes/history.tsx +55 -0
- package/examples/canister-studio/src/routes/index.tsx +169 -0
- package/examples/canister-studio/src/routes/playground.tsx +286 -0
- package/examples/canister-studio/src/routes/safety.tsx +57 -0
- package/examples/canister-studio/src/routes/wallet.tsx +213 -0
- package/examples/canister-studio/src/safety/LabTransferForm.tsx +84 -0
- package/examples/canister-studio/src/safety/RequestLog.tsx +79 -0
- package/examples/canister-studio/src/safety/SafetyLab.test.tsx +89 -0
- package/examples/canister-studio/src/safety/SafetyLab.tsx +140 -0
- package/examples/canister-studio/src/safety/ScenarioCard.tsx +262 -0
- package/examples/canister-studio/src/safety/lab-run.ts +283 -0
- package/examples/canister-studio/src/safety/mock-ledger.test.ts +99 -0
- package/examples/canister-studio/src/safety/mock-ledger.ts +263 -0
- package/examples/canister-studio/src/safety/scenarios.test.ts +157 -0
- package/examples/canister-studio/src/safety/scenarios.ts +924 -0
- package/examples/canister-studio/src/styles.css +3453 -0
- package/examples/canister-studio/src/styles.test.ts +46 -0
- package/examples/canister-studio/src/values/CallPreview.test.tsx +86 -0
- package/examples/canister-studio/src/values/CallPreview.tsx +148 -0
- package/examples/canister-studio/src/values/ErrValueView.tsx +66 -0
- package/examples/canister-studio/src/values/Inspector.tsx +133 -0
- package/examples/canister-studio/src/values/ReplyView.test.tsx +341 -0
- package/examples/canister-studio/src/values/ReplyView.tsx +164 -0
- package/examples/canister-studio/src/values/candid-text.test.ts +516 -0
- package/examples/canister-studio/src/values/candid-text.ts +479 -0
- package/examples/canister-studio/src/values/hints.ts +58 -0
- package/examples/canister-studio/src/values/json.test.ts +66 -0
- package/examples/canister-studio/src/values/json.ts +31 -0
- package/examples/canister-studio/src/values/leaves.tsx +309 -0
- package/examples/canister-studio/src/values/schema.test.ts +123 -0
- package/examples/canister-studio/src/values/schema.ts +78 -0
- package/examples/canister-studio/src/values/test-router.tsx +21 -0
- package/examples/canister-studio/src/values/tree.tsx +670 -0
- package/examples/canister-studio/src/values/use-sha256.ts +29 -0
- package/examples/canister-studio/tsconfig.json +20 -0
- package/examples/canister-studio/vite.config.ts +50 -0
- package/examples/canister-studio/vitest.config.ts +20 -0
- package/examples/icrc-ledger/.stackblitzrc +4 -0
- package/examples/icrc-ledger/README.md +100 -0
- package/examples/icrc-ledger/ckbtc_minter.did +12 -0
- package/examples/icrc-ledger/icp_ledger.did +147 -0
- package/examples/icrc-ledger/icrc1.did +88 -0
- package/examples/icrc-ledger/index.html +13 -0
- package/examples/icrc-ledger/package.json +40 -0
- package/examples/icrc-ledger/scripts/smoke.ts +151 -0
- package/examples/icrc-ledger/src/App.tsx +71 -0
- package/examples/icrc-ledger/src/ErrorPanel.tsx +105 -0
- package/examples/icrc-ledger/src/MainnetTab.tsx +450 -0
- package/examples/icrc-ledger/src/SandboxTab.test.tsx +379 -0
- package/examples/icrc-ledger/src/SandboxTab.tsx +761 -0
- package/examples/icrc-ledger/src/blocks.test.ts +247 -0
- package/examples/icrc-ledger/src/blocks.ts +140 -0
- package/examples/icrc-ledger/src/canisters/ckbtc_minter.envelope.json +96 -0
- package/examples/icrc-ledger/src/canisters/ckbtc_minter.ts +16 -0
- package/examples/icrc-ledger/src/canisters/icp_ledger.envelope.json +690 -0
- package/examples/icrc-ledger/src/canisters/icp_ledger.ts +223 -0
- package/examples/icrc-ledger/src/canisters/icrc1.envelope.json +840 -0
- package/examples/icrc-ledger/src/canisters/icrc1.ts +78 -0
- package/examples/icrc-ledger/src/format.test.ts +41 -0
- package/examples/icrc-ledger/src/format.ts +68 -0
- package/examples/icrc-ledger/src/ledger.ts +15 -0
- package/examples/icrc-ledger/src/main.tsx +10 -0
- package/examples/icrc-ledger/src/minter.ts +16 -0
- package/examples/icrc-ledger/src/sandbox.test.ts +464 -0
- package/examples/icrc-ledger/src/sandbox.ts +281 -0
- package/examples/icrc-ledger/src/styles.css +391 -0
- package/examples/icrc-ledger/src/transfer-form.test.ts +62 -0
- package/examples/icrc-ledger/src/transfer-form.ts +97 -0
- package/examples/icrc-ledger/tsconfig.json +19 -0
- package/examples/icrc-ledger/vite.config.ts +44 -0
- package/examples/icrc-ledger/vitest.config.ts +12 -0
- package/examples/next-ssr/.stackblitzrc +4 -0
- package/examples/next-ssr/README.md +112 -0
- package/examples/next-ssr/icrc1.did +88 -0
- package/examples/next-ssr/next.config.ts +10 -0
- package/examples/next-ssr/package.json +41 -0
- package/examples/next-ssr/scripts/smoke.ts +169 -0
- package/examples/next-ssr/src/app/account/CertifiedBalances.tsx +58 -0
- package/examples/next-ssr/src/app/account/account.test.tsx +165 -0
- package/examples/next-ssr/src/app/account/page.tsx +82 -0
- package/examples/next-ssr/src/app/api/balance/[ledger]/[principal]/route.ts +10 -0
- package/examples/next-ssr/src/app/globals.css +278 -0
- package/examples/next-ssr/src/app/layout.tsx +34 -0
- package/examples/next-ssr/src/app/page.tsx +46 -0
- package/examples/next-ssr/src/app/providers.browser.test.tsx +127 -0
- package/examples/next-ssr/src/app/providers.test.tsx +73 -0
- package/examples/next-ssr/src/app/providers.tsx +60 -0
- package/examples/next-ssr/src/canisters/icrc1.envelope.json +840 -0
- package/examples/next-ssr/src/canisters/icrc1.ts +78 -0
- package/examples/next-ssr/src/components/BalanceTable.tsx +43 -0
- package/examples/next-ssr/src/components/LedgerCard.test.tsx +96 -0
- package/examples/next-ssr/src/components/LedgerCard.tsx +230 -0
- package/examples/next-ssr/src/components/LedgerError.tsx +32 -0
- package/examples/next-ssr/src/components/LedgerSections.tsx +22 -0
- package/examples/next-ssr/src/components/MyBalances.test.tsx +253 -0
- package/examples/next-ssr/src/components/MyBalances.tsx +129 -0
- package/examples/next-ssr/src/components/SessionBadge.tsx +18 -0
- package/examples/next-ssr/src/components/hydration.test.tsx +259 -0
- package/examples/next-ssr/src/components/server-data.ts +10 -0
- package/examples/next-ssr/src/format.ts +46 -0
- package/examples/next-ssr/src/ledgers.ts +38 -0
- package/examples/next-ssr/src/server/balance-route.test.ts +151 -0
- package/examples/next-ssr/src/server/balance-route.ts +157 -0
- package/examples/next-ssr/src/server/error-summary.test.ts +34 -0
- package/examples/next-ssr/src/server/error-summary.ts +37 -0
- package/examples/next-ssr/src/server/parse-owner.test.ts +39 -0
- package/examples/next-ssr/src/server/parse-owner.ts +34 -0
- package/examples/next-ssr/src/server/prefetch-ledgers.test.ts +137 -0
- package/examples/next-ssr/src/server/prefetch-ledgers.ts +70 -0
- package/examples/next-ssr/src/server/read-balances.test.ts +103 -0
- package/examples/next-ssr/src/server/read-balances.ts +78 -0
- package/examples/next-ssr/src/server/request-client.rsc.test.tsx +110 -0
- package/examples/next-ssr/src/server/request-client.ts +24 -0
- package/examples/next-ssr/src/testing/mock-ledgers.ts +115 -0
- package/examples/next-ssr/src/testing/react-server-dom-turbopack.d.ts +15 -0
- package/examples/next-ssr/src/testing/setup.ts +10 -0
- package/examples/next-ssr/tsconfig.json +31 -0
- package/examples/next-ssr/vitest.config.ts +59 -0
- package/examples/node-agent-tool/.stackblitzrc +4 -0
- package/examples/node-agent-tool/README.md +165 -0
- package/examples/node-agent-tool/icp.yaml +11 -0
- package/examples/node-agent-tool/icrc1.did +88 -0
- package/examples/node-agent-tool/package.json +32 -0
- package/examples/node-agent-tool/src/canisters/icrc1.envelope.json +840 -0
- package/examples/node-agent-tool/src/canisters/icrc1.ts +78 -0
- package/examples/node-agent-tool/src/cli.test.ts +64 -0
- package/examples/node-agent-tool/src/cli.ts +23 -0
- package/examples/node-agent-tool/src/command-line.ts +159 -0
- package/examples/node-agent-tool/src/commands/balance.ts +73 -0
- package/examples/node-agent-tool/src/commands/demo.test.ts +51 -0
- package/examples/node-agent-tool/src/commands/demo.ts +359 -0
- package/examples/node-agent-tool/src/commands/info.ts +69 -0
- package/examples/node-agent-tool/src/commands/reads.test.ts +133 -0
- package/examples/node-agent-tool/src/commands/resend.test.ts +363 -0
- package/examples/node-agent-tool/src/commands/transfer.test.ts +313 -0
- package/examples/node-agent-tool/src/commands/transfer.ts +415 -0
- package/examples/node-agent-tool/src/commands/watch.test.ts +159 -0
- package/examples/node-agent-tool/src/commands/watch.ts +135 -0
- package/examples/node-agent-tool/src/commands/whoami.ts +36 -0
- package/examples/node-agent-tool/src/context.ts +20 -0
- package/examples/node-agent-tool/src/dispatch.ts +70 -0
- package/examples/node-agent-tool/src/failure.test.ts +59 -0
- package/examples/node-agent-tool/src/failure.ts +176 -0
- package/examples/node-agent-tool/src/identity.test.ts +242 -0
- package/examples/node-agent-tool/src/identity.ts +228 -0
- package/examples/node-agent-tool/src/input.ts +110 -0
- package/examples/node-agent-tool/src/ledgers.test.ts +74 -0
- package/examples/node-agent-tool/src/ledgers.ts +62 -0
- package/examples/node-agent-tool/src/mock-ledger.ts +211 -0
- package/examples/node-agent-tool/src/network.test.ts +128 -0
- package/examples/node-agent-tool/src/network.ts +101 -0
- package/examples/node-agent-tool/src/output.test.ts +208 -0
- package/examples/node-agent-tool/src/output.ts +163 -0
- package/examples/node-agent-tool/src/run.ts +73 -0
- package/examples/node-agent-tool/src/test-kit.ts +167 -0
- package/examples/node-agent-tool/tsconfig.json +18 -0
- package/examples/node-agent-tool/vitest.config.ts +8 -0
- package/examples/vite-wallet/.stackblitzrc +4 -0
- package/examples/vite-wallet/Cargo.lock +646 -0
- package/examples/vite-wallet/Cargo.toml +5 -0
- package/examples/vite-wallet/README.md +107 -0
- package/examples/vite-wallet/backend/Cargo.toml +12 -0
- package/examples/vite-wallet/backend/backend.did +37 -0
- package/examples/vite-wallet/backend/src/lib.rs +133 -0
- package/examples/vite-wallet/icp.yaml +44 -0
- package/examples/vite-wallet/index.html +13 -0
- package/examples/vite-wallet/ledger.did +54 -0
- package/examples/vite-wallet/package.json +46 -0
- package/examples/vite-wallet/public/.ic-assets.json5 +26 -0
- package/examples/vite-wallet/scripts/faucet-args.test.ts +30 -0
- package/examples/vite-wallet/scripts/faucet-args.ts +41 -0
- package/examples/vite-wallet/scripts/faucet.ts +41 -0
- package/examples/vite-wallet/src/AddressBook.test.tsx +191 -0
- package/examples/vite-wallet/src/AddressBook.tsx +147 -0
- package/examples/vite-wallet/src/App.tsx +53 -0
- package/examples/vite-wallet/src/Balance.test.tsx +57 -0
- package/examples/vite-wallet/src/Balance.tsx +58 -0
- package/examples/vite-wallet/src/EnvironmentPanel.test.tsx +83 -0
- package/examples/vite-wallet/src/EnvironmentPanel.tsx +103 -0
- package/examples/vite-wallet/src/ErrorNote.tsx +70 -0
- package/examples/vite-wallet/src/Profile.test.tsx +145 -0
- package/examples/vite-wallet/src/Profile.tsx +92 -0
- package/examples/vite-wallet/src/SendIcp.test.tsx +231 -0
- package/examples/vite-wallet/src/SendIcp.tsx +244 -0
- package/examples/vite-wallet/src/SendToContact.test.tsx +113 -0
- package/examples/vite-wallet/src/SendToContact.tsx +102 -0
- package/examples/vite-wallet/src/SignIn.test.tsx +106 -0
- package/examples/vite-wallet/src/SignIn.tsx +120 -0
- package/examples/vite-wallet/src/Wallet.test.tsx +89 -0
- package/examples/vite-wallet/src/account-switch.test.tsx +108 -0
- package/examples/vite-wallet/src/auth/dev-accounts.test.ts +113 -0
- package/examples/vite-wallet/src/auth/dev-accounts.ts +216 -0
- package/examples/vite-wallet/src/auth/local-page.test.ts +28 -0
- package/examples/vite-wallet/src/auth/local-page.ts +20 -0
- package/examples/vite-wallet/src/auth/wallet-auth.test.ts +159 -0
- package/examples/vite-wallet/src/auth/wallet-auth.ts +131 -0
- package/examples/vite-wallet/src/canisters/backend.envelope.json +275 -0
- package/examples/vite-wallet/src/canisters/backend.ts +58 -0
- package/examples/vite-wallet/src/canisters/ledger.envelope.json +451 -0
- package/examples/vite-wallet/src/canisters/ledger.ts +56 -0
- package/examples/vite-wallet/src/client.ts +45 -0
- package/examples/vite-wallet/src/main.tsx +18 -0
- package/examples/vite-wallet/src/optimistic-contacts.ts +113 -0
- package/examples/vite-wallet/src/refusal.ts +17 -0
- package/examples/vite-wallet/src/styles.css +282 -0
- package/examples/vite-wallet/src/test/test-wallet.tsx +322 -0
- package/examples/vite-wallet/src/token.ts +50 -0
- package/examples/vite-wallet/src/transfer.test.ts +178 -0
- package/examples/vite-wallet/src/transfer.ts +110 -0
- package/examples/vite-wallet/src/use-canisters.ts +49 -0
- package/examples/vite-wallet/tsconfig.json +19 -0
- package/examples/vite-wallet/vite.config.ts +47 -0
- package/examples/vite-wallet/vitest.config.ts +17 -0
- package/package.json +9 -4
- package/packages/core/.size-limit.js +47 -0
- package/packages/core/LICENSE +21 -0
- package/packages/core/README.md +84 -0
- package/packages/core/llms.txt +610 -0
- package/packages/core/package.json +89 -0
- package/packages/core/src/call.ts +961 -0
- package/packages/core/src/canister.ts +259 -0
- package/packages/core/src/client.ts +2061 -0
- package/packages/core/src/errors.ts +1079 -0
- package/packages/core/src/hydration.ts +239 -0
- package/packages/core/src/index.ts +23 -0
- package/packages/core/src/keys.ts +108 -0
- package/packages/core/src/management.ts +138 -0
- package/packages/core/src/network.ts +1020 -0
- package/packages/core/src/options.ts +1000 -0
- package/packages/core/src/runtime.ts +50 -0
- package/packages/core/src/testing/fake-replica.ts +1166 -0
- package/packages/core/src/testing/index.ts +16 -0
- package/packages/core/src/testing/test-auth.ts +340 -0
- package/packages/core/src/testing/test-client.ts +559 -0
- package/packages/core/src/types.ts +541 -0
- package/packages/core/src/units.ts +299 -0
- package/packages/core/src/version.ts +4 -0
- package/packages/core/tests/canister-helpers.ts +187 -0
- package/packages/core/tests/canister-id.test.ts +158 -0
- package/packages/core/tests/canister-unwrap.test.ts +94 -0
- package/packages/core/tests/canister.test-d.ts +406 -0
- package/packages/core/tests/canister.test.ts +1921 -0
- package/packages/core/tests/client-account-change.test.ts +131 -0
- package/packages/core/tests/client-agents.test.ts +402 -0
- package/packages/core/tests/client-auth-network.test.ts +719 -0
- package/packages/core/tests/client-disposed.test.ts +403 -0
- package/packages/core/tests/client-helpers.ts +136 -0
- package/packages/core/tests/client-hydration.test.ts +166 -0
- package/packages/core/tests/client-pinned.test.ts +626 -0
- package/packages/core/tests/client-session.test.ts +348 -0
- package/packages/core/tests/client.test-d.ts +181 -0
- package/packages/core/tests/client.test.ts +1162 -0
- package/packages/core/tests/encode.test.ts +171 -0
- package/packages/core/tests/env-canister-id.test.ts +666 -0
- package/packages/core/tests/env-cookie-copies.test.ts +182 -0
- package/packages/core/tests/error-guard.test.ts +222 -0
- package/packages/core/tests/errors.test-d.ts +280 -0
- package/packages/core/tests/errors.test.ts +1359 -0
- package/packages/core/tests/fixtures/README.md +28 -0
- package/packages/core/tests/fixtures/accounts.did +21 -0
- package/packages/core/tests/fixtures/accounts.envelope.json +367 -0
- package/packages/core/tests/fixtures/accounts.ts +26 -0
- package/packages/core/tests/fixtures/archive.did +31 -0
- package/packages/core/tests/fixtures/archive.envelope.json +259 -0
- package/packages/core/tests/fixtures/archive.ts +55 -0
- package/packages/core/tests/fixtures/icrc1.did +88 -0
- package/packages/core/tests/fixtures/icrc1.envelope.json +840 -0
- package/packages/core/tests/fixtures/icrc1.ts +78 -0
- package/packages/core/tests/fixtures/management.did +724 -0
- package/packages/core/tests/fixtures/management.envelope.json +4455 -0
- package/packages/core/tests/fixtures/management.ts +486 -0
- package/packages/core/tests/fixtures/shapes.did +33 -0
- package/packages/core/tests/fixtures/shapes.envelope.json +440 -0
- package/packages/core/tests/fixtures/shapes.ts +56 -0
- package/packages/core/tests/fixtures/skippable.did +15 -0
- package/packages/core/tests/fixtures/skippable.envelope.json +182 -0
- package/packages/core/tests/fixtures/skippable.ts +33 -0
- package/packages/core/tests/func.test.ts +154 -0
- package/packages/core/tests/identity-attributes.test.ts +214 -0
- package/packages/core/tests/keys.test.ts +289 -0
- package/packages/core/tests/management.test.ts +206 -0
- package/packages/core/tests/network-helpers.ts +121 -0
- package/packages/core/tests/network.test-d.ts +78 -0
- package/packages/core/tests/network.test.ts +1051 -0
- package/packages/core/tests/options.test.ts +1594 -0
- package/packages/core/tests/redirect-sign-in.test.ts +393 -0
- package/packages/core/tests/resend.test-d.ts +81 -0
- package/packages/core/tests/resend.test.ts +723 -0
- package/packages/core/tests/skip.test-d.ts +125 -0
- package/packages/core/tests/testing-entry.test.ts +73 -0
- package/packages/core/tests/testing-fake-replica.test.ts +1242 -0
- package/packages/core/tests/testing-test-auth.test-d.ts +84 -0
- package/packages/core/tests/testing-test-auth.test.ts +483 -0
- package/packages/core/tests/testing-test-client.test-d.ts +184 -0
- package/packages/core/tests/testing-test-client.test.ts +1272 -0
- package/packages/core/tests/time-realm.test.ts +63 -0
- package/packages/core/tests/time.test.ts +238 -0
- package/packages/core/tests/traps/README.md +39 -0
- package/packages/core/tests/traps/anonymous-write.test.ts +145 -0
- package/packages/core/tests/traps/classification-table.test.ts +256 -0
- package/packages/core/tests/traps/err-arm.test.ts +144 -0
- package/packages/core/tests/traps/fetch-spy.ts +39 -0
- package/packages/core/tests/traps/invalidation-after-write.test.ts +178 -0
- package/packages/core/tests/traps/ledger.ts +248 -0
- package/packages/core/tests/traps/root-key-off-local.test.ts +130 -0
- package/packages/core/tests/traps/stale-data-across-users.test.ts +173 -0
- package/packages/core/tests/traps/unresolved-name.test.ts +155 -0
- package/packages/core/tests/traps/update-as-query.test.ts +244 -0
- package/packages/core/tests/traps/update-not-resent.test.ts +126 -0
- package/packages/core/tests/traps/update-resent-when-never-delivered.test.ts +159 -0
- package/packages/core/tests/traps.test-d.ts +476 -0
- package/packages/core/tests/units.test-d.ts +118 -0
- package/packages/core/tests/units.test.ts +634 -0
- package/packages/core/tsconfig.json +19 -0
- package/packages/core/tsconfig.typecheck.json +16 -0
- package/packages/core/vitest.config.ts +13 -0
- package/packages/mcp/LICENSE +21 -0
- package/packages/mcp/README.md +189 -0
- package/packages/mcp/package.json +62 -0
- package/packages/mcp/src/candid/candid-text.test.ts +455 -0
- package/packages/mcp/src/candid/candid-text.ts +501 -0
- package/packages/mcp/src/candid/contract.test.ts +398 -0
- package/packages/mcp/src/candid/formats.ts +155 -0
- package/packages/mcp/src/candid/hex.ts +29 -0
- package/packages/mcp/src/candid/json-schema.test.ts +758 -0
- package/packages/mcp/src/candid/json-schema.ts +454 -0
- package/packages/mcp/src/candid/json.test.ts +1207 -0
- package/packages/mcp/src/candid/json.ts +1053 -0
- package/packages/mcp/src/candid/schema-walk.ts +189 -0
- package/packages/mcp/src/candid/type-text.test.ts +179 -0
- package/packages/mcp/src/candid/type-text.ts +238 -0
- package/packages/mcp/src/cli.ts +134 -0
- package/packages/mcp/src/identity.ts +188 -0
- package/packages/mcp/src/interface/cache.test.ts +48 -0
- package/packages/mcp/src/interface/cache.ts +68 -0
- package/packages/mcp/src/interface/cli-cache.test.ts +150 -0
- package/packages/mcp/src/interface/cli-cache.ts +122 -0
- package/packages/mcp/src/interface/compile-worker.test.ts +246 -0
- package/packages/mcp/src/interface/compile-worker.ts +290 -0
- package/packages/mcp/src/interface/compile.test.ts +155 -0
- package/packages/mcp/src/interface/compile.ts +281 -0
- package/packages/mcp/src/interface/docs.test.ts +105 -0
- package/packages/mcp/src/interface/docs.ts +86 -0
- package/packages/mcp/src/interface/fixtures/icrc1.did +88 -0
- package/packages/mcp/src/interface/hex.ts +8 -0
- package/packages/mcp/src/interface/ids.test.ts +71 -0
- package/packages/mcp/src/interface/ids.ts +87 -0
- package/packages/mcp/src/interface/loader.test.ts +804 -0
- package/packages/mcp/src/interface/loader.ts +519 -0
- package/packages/mcp/src/interface/read-candid.test.ts +300 -0
- package/packages/mcp/src/interface/read-candid.ts +259 -0
- package/packages/mcp/src/interface/types.ts +113 -0
- package/packages/mcp/src/network.ts +122 -0
- package/packages/mcp/src/options.ts +149 -0
- package/packages/mcp/src/server/approval.ts +159 -0
- package/packages/mcp/src/server/naming.ts +43 -0
- package/packages/mcp/src/server/results.ts +102 -0
- package/packages/mcp/src/server/server.ts +797 -0
- package/packages/mcp/src/server/tools.ts +116 -0
- package/packages/mcp/src/usage.ts +40 -0
- package/packages/mcp/tests/approval.test.ts +60 -0
- package/packages/mcp/tests/identity.test.ts +234 -0
- package/packages/mcp/tests/naming.test.ts +62 -0
- package/packages/mcp/tests/options.test.ts +140 -0
- package/packages/mcp/tests/server.test.ts +997 -0
- package/packages/mcp/tsconfig.json +19 -0
- package/packages/mcp/tsconfig.typecheck.json +10 -0
- package/packages/mcp/vitest.config.ts +10 -0
- package/packages/react/LICENSE +21 -0
- package/packages/react/README.md +328 -0
- package/packages/react/llms.txt +95 -0
- package/packages/react/package.json +95 -0
- package/packages/react/src/index.tsx +678 -0
- package/packages/react/tests/abandoned-render.test.tsx +816 -0
- package/packages/react/tests/auth.test.tsx +315 -0
- package/packages/react/tests/caller-keys.test.tsx +2334 -0
- package/packages/react/tests/client-time.test.ts +40 -0
- package/packages/react/tests/entry.test.ts +52 -0
- package/packages/react/tests/helpers.tsx +291 -0
- package/packages/react/tests/hydration.test.tsx +262 -0
- package/packages/react/tests/ownership.test.tsx +260 -0
- package/packages/react/tests/provider.server.test.tsx +169 -0
- package/packages/react/tests/query-client.test.tsx +107 -0
- package/packages/react/tests/strict-mode.test.tsx +288 -0
- package/packages/react/tests/suspense.test-d.tsx +357 -0
- package/packages/react/tests/two-query-cores.test.tsx +135 -0
- package/packages/react/tests/types.test-d.tsx +63 -0
- package/packages/react/tsconfig.json +23 -0
- package/packages/react/tsconfig.test.json +8 -0
- package/packages/react/tsconfig.typecheck.json +16 -0
- package/packages/react/vitest.config.ts +39 -0
- package/packages/vite-plugin/LICENSE +21 -0
- package/packages/vite-plugin/README.md +532 -0
- package/packages/vite-plugin/package.json +76 -0
- package/packages/vite-plugin/src/describe-value.test.ts +43 -0
- package/packages/vite-plugin/src/describe-value.ts +167 -0
- package/packages/vite-plugin/src/dev-environment.test.ts +747 -0
- package/packages/vite-plugin/src/dev-environment.ts +510 -0
- package/packages/vite-plugin/src/env.ts +431 -0
- package/packages/vite-plugin/src/fetch.ts +348 -0
- package/packages/vite-plugin/src/file-identity.ts +106 -0
- package/packages/vite-plugin/src/generate.ts +691 -0
- package/packages/vite-plugin/src/index.test.ts +1243 -0
- package/packages/vite-plugin/src/index.ts +2565 -0
- package/packages/vite-plugin/src/interface.ts +339 -0
- package/packages/vite-plugin/src/local-host.ts +34 -0
- package/packages/vite-plugin/src/options.ts +641 -0
- package/packages/vite-plugin/src/principal-text.test.ts +87 -0
- package/packages/vite-plugin/src/principal-text.ts +98 -0
- package/packages/vite-plugin/tests/close.test.ts +141 -0
- package/packages/vite-plugin/tests/environment-mode.test.ts +136 -0
- package/packages/vite-plugin/tests/fake-ic.ts +214 -0
- package/packages/vite-plugin/tests/fetch-sdk.test.ts +27 -0
- package/packages/vite-plugin/tests/fetch.test.ts +1196 -0
- package/packages/vite-plugin/tests/fixtures/fake-cli/bin.js +90 -0
- package/packages/vite-plugin/tests/fixtures/fake-cli/package.json +8 -0
- package/packages/vite-plugin/tests/fixtures/icrc1.did +88 -0
- package/packages/vite-plugin/tests/generation.test.ts +1036 -0
- package/packages/vite-plugin/tests/icp-command.test.ts +194 -0
- package/packages/vite-plugin/tests/icp-timeout.test.ts +83 -0
- package/packages/vite-plugin/tests/no-process-exit.test.ts +83 -0
- package/packages/vite-plugin/tests/on-generated.test.ts +323 -0
- package/packages/vite-plugin/tests/output-collision.test.ts +329 -0
- package/packages/vite-plugin/tests/package.test.ts +62 -0
- package/packages/vite-plugin/tests/project.test.ts +2993 -0
- package/packages/vite-plugin/tests/support.ts +339 -0
- package/packages/vite-plugin/tests/timeout.test.ts +107 -0
- package/packages/vite-plugin/tsconfig.json +23 -0
- package/packages/vite-plugin/tsconfig.typecheck.json +16 -0
- package/packages/vite-plugin/vitest.config.ts +9 -0
- package/pnpm-workspace.yaml +23 -0
- package/scripts/ai-context-files.js +72 -0
- package/scripts/assemble-docs-site.mjs +485 -0
- package/scripts/assemble-docs-site.test.mjs +568 -0
- package/scripts/build-examples.js +58 -0
- package/scripts/check-ai-context.js +963 -0
- package/scripts/check-ai-context.test.mjs +811 -0
- package/scripts/check-exports.mjs +767 -0
- package/scripts/check-exports.test.mjs +1136 -0
- package/scripts/check-snippets/ambient.d.ts +428 -0
- package/scripts/check-snippets/app/generated/backend.did +7 -0
- package/scripts/check-snippets/app/generated/backend.ts +15 -0
- package/scripts/check-snippets/app/generated/icrc1.did +88 -0
- package/scripts/check-snippets/app/generated/icrc1.ts +78 -0
- package/scripts/check-snippets/app/globals.ts +26 -0
- package/scripts/check-snippets/docs/guides/App.tsx +21 -0
- package/scripts/check-snippets/docs/guides/app/providers.tsx +23 -0
- package/scripts/check-snippets/docs/guides/auth-client.ts +47 -0
- package/scripts/check-snippets/docs/guides/canisters/backend.ts +3 -0
- package/scripts/check-snippets/docs/guides/canisters/icrc1.ts +3 -0
- package/scripts/check-snippets/docs/guides/components/LedgerCard.tsx +26 -0
- package/scripts/check-snippets/docs/guides/components/shell.tsx +11 -0
- package/scripts/check-snippets/docs/guides/components/sign-in-page.tsx +29 -0
- package/scripts/check-snippets/docs/guides/components/slow-section.tsx +5 -0
- package/scripts/check-snippets/docs/guides/generated/accounts.ts +95 -0
- package/scripts/check-snippets/docs/guides/generated/ckbtc_minter.ts +40 -0
- package/scripts/check-snippets/docs/guides/generated/icp_ledger.ts +267 -0
- package/scripts/check-snippets/docs/guides/ledger.ts +10 -0
- package/scripts/check-snippets/docs/guides/server/request-client.ts +8 -0
- package/scripts/check-snippets.mjs +993 -0
- package/scripts/check-snippets.test.mjs +338 -0
- package/scripts/check-stack.mjs +501 -0
- package/scripts/check-stack.test.mjs +800 -0
- package/scripts/clean-node-modules.js +67 -0
- package/scripts/example-projects.js +58 -0
- package/scripts/export-budget.mjs +145 -0
- package/scripts/faults.json +6749 -0
- package/scripts/lib/fault-workspace.mjs +210 -0
- package/scripts/lib/io.mjs +29 -0
- package/scripts/lib/io.test.mjs +38 -0
- package/scripts/lib/markdown-fences.mjs +56 -0
- package/scripts/lib/markdown-fences.test.mjs +84 -0
- package/scripts/lib/package-exports.mjs +54 -0
- package/scripts/lib/package-exports.test.mjs +66 -0
- package/scripts/lib/release-pr-steps.mjs +47 -0
- package/scripts/release-tag.mjs +95 -0
- package/scripts/release-tag.test.mjs +278 -0
- package/scripts/release-workflow.test.mjs +98 -0
- package/scripts/release.js +167 -0
- package/scripts/release.test.mjs +347 -0
- package/scripts/removed-v3-names.js +125 -0
- package/scripts/size-app/.size-limit.js +90 -0
- package/scripts/size-app/core.js +3 -0
- package/scripts/size-app/package.json +24 -0
- package/scripts/size-app/react.js +4 -0
- package/scripts/size-app.test.mjs +73 -0
- package/scripts/sync-ai-context-versions.js +102 -0
- package/scripts/sync-example-versions.js +151 -0
- package/scripts/test-examples-published.mjs +1585 -0
- package/scripts/test-examples-published.test.mjs +1586 -0
- package/scripts/traps/any-method-vars-not-a-list.json +5 -0
- package/scripts/traps/canister-method-unknown.json +5 -0
- package/scripts/traps/client-says-who-calls-once.json +5 -0
- package/scripts/traps/client-says-who-calls.json +5 -0
- package/scripts/traps/err-only-on-canister-err.json +14 -0
- package/scripts/traps/format-units-refuses-missing-value.json +5 -0
- package/scripts/traps/format-units-refuses-number.json +5 -0
- package/scripts/traps/format-units-unknown-option.json +5 -0
- package/scripts/traps/guard-err-is-the-methods.json +5 -0
- package/scripts/traps/guard-false-keeps-every-kind.json +5 -0
- package/scripts/traps/internals-not-exported.json +9 -0
- package/scripts/traps/network-refuses-unknown-name.json +5 -0
- package/scripts/traps/never-err-has-no-type.json +5 -0
- package/scripts/traps/options-method-unknown.json +5 -0
- package/scripts/traps/options-vars-wrong-type.json +5 -0
- package/scripts/traps/parse-units-refuses-number.json +5 -0
- package/scripts/traps/parse-units-unknown-option.json +5 -0
- package/scripts/traps/principal-is-not-plain-text.json +14 -0
- package/scripts/traps/query-options-refuses-oneway.json +5 -0
- package/scripts/traps/query-options-refuses-update.json +5 -0
- package/scripts/traps/refuse-next-unknown-option.json +5 -0
- package/scripts/traps/resend-key-reads-the-methods-arg.json +5 -0
- package/scripts/traps/resend-states-its-dedupe-key.json +5 -0
- package/scripts/traps/suspense-refuses-argument-skip.json +5 -0
- package/scripts/traps/suspense-refuses-skippable-read.json +5 -0
- package/scripts/traps/suspense-refuses-vars-skip-fits.json +5 -0
- package/scripts/traps/test-handler-method-unknown.json +5 -0
- package/scripts/traps/test-handler-nat-is-bigint.json +5 -0
- package/scripts/traps/test-handler-takes-the-domain-value.json +5 -0
- package/scripts/traps/vars-of-two-arguments-are-the-tuple.json +5 -0
- package/scripts/typecheck-examples.js +122 -0
- package/scripts/verify-faults.mjs +375 -0
- package/scripts/verify-faults.test.mjs +402 -0
- package/scripts/verify-package-artifacts.mjs +590 -0
- package/scripts/verify-peer-floors.js +399 -0
- package/scripts/verify-peer-floors.test.mjs +422 -0
- package/scripts/verify-test-fails-rules.mjs +104 -0
- package/scripts/verify-test-fails-rules.test.mjs +215 -0
- package/scripts/verify-test-fails.js +371 -0
- package/scripts/verify-traps.mjs +505 -0
- package/scripts/verify-traps.test.mjs +521 -0
- package/scripts/verify-typescript-floor.js +239 -0
- package/skill-packages/ic-reactor/SKILL.md +103 -0
- package/stack.json +8 -0
- package/tsconfig.base.json +23 -0
- package/tsconfig.json +8 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
# The 4.x release lane: @ic-reactor/core, @ic-reactor/react,
|
|
4
|
+
# @ic-reactor/vite-plugin and @ic-reactor/mcp in lockstep, from main. Every
|
|
5
|
+
# list of them below names the lane of scripts/release-tag.mjs
|
|
6
|
+
# (LANE_PACKAGES), in its order; scripts/release-workflow.test.mjs checks
|
|
7
|
+
# that. A stable 4.x tag publishes under npm's `latest` dist-tag and becomes
|
|
8
|
+
# the latest GitHub Release; a 4.x prerelease publishes under `beta`
|
|
9
|
+
# (scripts/release-tag.mjs decides, for this workflow and scripts/release.js
|
|
10
|
+
# alike). A tag push runs the workflow file of the tagged commit, so 3.x tags
|
|
11
|
+
# (`v3.*`, `tools-v*`, `parser-v*`) on the v3 branch run v3's own lanes, which
|
|
12
|
+
# never touch `latest` for core, react or vite-plugin.
|
|
13
|
+
on:
|
|
14
|
+
push:
|
|
15
|
+
tags:
|
|
16
|
+
- "v4.*"
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: read
|
|
20
|
+
|
|
21
|
+
concurrency:
|
|
22
|
+
# Keyed per tag, NOT per lane. A shared group serialises publishes, but GitHub
|
|
23
|
+
# keeps only ONE run pending per group: when a third run arrives, the run that
|
|
24
|
+
# was already waiting is cancelled outright, silently dropping a release.
|
|
25
|
+
group: release-${{ github.ref_name }}
|
|
26
|
+
cancel-in-progress: false
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
# Nothing verified the commit a tag points at: ci.yml and e2e.yml have no `tags:`
|
|
30
|
+
# trigger, so a tag could publish code that never passed a single check. This job
|
|
31
|
+
# gates the publish, and packs the tarballs it publishes.
|
|
32
|
+
preflight:
|
|
33
|
+
name: Preflight
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
timeout-minutes: 30
|
|
36
|
+
outputs:
|
|
37
|
+
dist_tag: ${{ steps.tag.outputs.dist_tag }}
|
|
38
|
+
prerelease: ${{ steps.tag.outputs.prerelease }}
|
|
39
|
+
make_latest: ${{ steps.tag.outputs.make_latest }}
|
|
40
|
+
steps:
|
|
41
|
+
- name: Checkout
|
|
42
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
|
|
46
|
+
- name: Setup Node.js
|
|
47
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
|
|
48
|
+
with:
|
|
49
|
+
node-version: 24
|
|
50
|
+
|
|
51
|
+
- name: Setup pnpm
|
|
52
|
+
run: |
|
|
53
|
+
corepack enable
|
|
54
|
+
corepack prepare pnpm@10.30.3 --activate
|
|
55
|
+
|
|
56
|
+
- name: Tag must be an ancestor of main
|
|
57
|
+
run: |
|
|
58
|
+
set -euo pipefail
|
|
59
|
+
git fetch --no-tags origin main
|
|
60
|
+
if ! git merge-base --is-ancestor "$GITHUB_SHA" origin/main; then
|
|
61
|
+
echo "::error::$GITHUB_SHA is not an ancestor of origin/main. Refusing to publish."
|
|
62
|
+
exit 1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
# A 4.x version only: a stable one goes to `latest`, a prerelease to
|
|
66
|
+
# `beta`. Anything else (a 3.x or 5.x tag, a tag that is not semver)
|
|
67
|
+
# fails here, before the build, and publishes nothing.
|
|
68
|
+
- name: Tag must be a 4.x version
|
|
69
|
+
id: tag
|
|
70
|
+
run: |
|
|
71
|
+
set -euo pipefail
|
|
72
|
+
node scripts/release-tag.mjs "$GITHUB_REF_NAME" | tee -a "$GITHUB_OUTPUT"
|
|
73
|
+
|
|
74
|
+
- name: Tag version must match package manifests
|
|
75
|
+
env:
|
|
76
|
+
EXPECTED: ${{ steps.tag.outputs.version }}
|
|
77
|
+
run: |
|
|
78
|
+
set -euo pipefail
|
|
79
|
+
echo "Tag version: $EXPECTED"
|
|
80
|
+
for pkg in packages/core packages/react packages/vite-plugin packages/mcp; do
|
|
81
|
+
ACTUAL="$(node -p "require('./$pkg/package.json').version")"
|
|
82
|
+
if [ "$ACTUAL" != "$EXPECTED" ]; then
|
|
83
|
+
echo "::error::$pkg is at $ACTUAL but the tag says $EXPECTED."
|
|
84
|
+
exit 1
|
|
85
|
+
fi
|
|
86
|
+
done
|
|
87
|
+
|
|
88
|
+
- name: Install dependencies
|
|
89
|
+
run: pnpm install --frozen-lockfile --filter '!./examples/**'
|
|
90
|
+
|
|
91
|
+
- name: Build, type check and test
|
|
92
|
+
run: |
|
|
93
|
+
set -euo pipefail
|
|
94
|
+
pnpm build
|
|
95
|
+
pnpm typecheck
|
|
96
|
+
pnpm test
|
|
97
|
+
|
|
98
|
+
- name: Verify published artifacts
|
|
99
|
+
run: pnpm verify:packages
|
|
100
|
+
|
|
101
|
+
# The tarballs the publish job publishes, packed from the build this job
|
|
102
|
+
# just tested. Nothing is built or tested between here and the publish,
|
|
103
|
+
# so a test cannot fail half-way through a release, after core is out and
|
|
104
|
+
# before react is (#909). pnpm pack turns workspace:* into the version.
|
|
105
|
+
- name: Pack the release
|
|
106
|
+
run: |
|
|
107
|
+
set -euo pipefail
|
|
108
|
+
VERSION="${GITHUB_REF_NAME#v}"
|
|
109
|
+
mkdir -p "$RUNNER_TEMP/tarballs"
|
|
110
|
+
for name in core react vite-plugin mcp; do
|
|
111
|
+
(cd "packages/$name" && pnpm pack --pack-destination "$RUNNER_TEMP/tarballs")
|
|
112
|
+
if [ ! -s "$RUNNER_TEMP/tarballs/ic-reactor-$name-$VERSION.tgz" ]; then
|
|
113
|
+
echo "::error::pnpm pack made no ic-reactor-$name-$VERSION.tgz."
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
done
|
|
117
|
+
ls -l "$RUNNER_TEMP/tarballs"
|
|
118
|
+
|
|
119
|
+
- name: Upload the release tarballs
|
|
120
|
+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
|
|
121
|
+
with:
|
|
122
|
+
name: release-tarballs
|
|
123
|
+
path: ${{ runner.temp }}/tarballs/*.tgz
|
|
124
|
+
if-no-files-found: error
|
|
125
|
+
retention-days: 7
|
|
126
|
+
|
|
127
|
+
# ci.yml and e2e.yml never run for the tag itself. The tagged commit is the
|
|
128
|
+
# release pull request's merge into main, and that push ran both: this job
|
|
129
|
+
# waits for those two runs and fails unless both succeeded. That brings
|
|
130
|
+
# every gate they hold to the publish, beside preflight's own: lint, the
|
|
131
|
+
# export budget, the trap and fault checks, the snippets, the peer floors,
|
|
132
|
+
# the examples and the e2e suite (#909).
|
|
133
|
+
ci-passed:
|
|
134
|
+
name: CI passed on the tagged commit
|
|
135
|
+
runs-on: ubuntu-latest
|
|
136
|
+
timeout-minutes: 60
|
|
137
|
+
permissions:
|
|
138
|
+
actions: read
|
|
139
|
+
steps:
|
|
140
|
+
- name: Wait for ci.yml and e2e.yml on the tagged commit
|
|
141
|
+
env:
|
|
142
|
+
GH_TOKEN: ${{ github.token }}
|
|
143
|
+
run: |
|
|
144
|
+
set -euo pipefail
|
|
145
|
+
start=$(date +%s)
|
|
146
|
+
while :; do
|
|
147
|
+
waiting=""
|
|
148
|
+
missing=""
|
|
149
|
+
for workflow in ci.yml e2e.yml; do
|
|
150
|
+
# The newest run of the workflow for a push of this commit.
|
|
151
|
+
run="$(gh api "repos/$GITHUB_REPOSITORY/actions/workflows/$workflow/runs?head_sha=$GITHUB_SHA&event=push&per_page=1" \
|
|
152
|
+
--jq '.workflow_runs[0] | if . == null then "none" else "\(.status) \(.conclusion) \(.html_url)" end')"
|
|
153
|
+
read -r status conclusion url <<< "$run"
|
|
154
|
+
if [ "$status" = "none" ]; then
|
|
155
|
+
missing="$missing $workflow"
|
|
156
|
+
elif [ "$status" != "completed" ]; then
|
|
157
|
+
waiting="$waiting $workflow"
|
|
158
|
+
elif [ "$conclusion" != "success" ]; then
|
|
159
|
+
echo "::error::$workflow ended $conclusion on $GITHUB_SHA: $url. Re-run its failed jobs until it succeeds, then re-run the failed jobs of this run."
|
|
160
|
+
exit 1
|
|
161
|
+
else
|
|
162
|
+
echo "$workflow succeeded on $GITHUB_SHA: $url"
|
|
163
|
+
fi
|
|
164
|
+
done
|
|
165
|
+
if [ -z "$waiting$missing" ]; then
|
|
166
|
+
exit 0
|
|
167
|
+
fi
|
|
168
|
+
elapsed=$(( $(date +%s) - start ))
|
|
169
|
+
if [ -n "$missing" ] && [ "$elapsed" -ge 600 ]; then
|
|
170
|
+
echo "::error::No push run of$missing on $GITHUB_SHA after 10 minutes. Tag the merge commit of the release pull request, which a push to main tested."
|
|
171
|
+
exit 1
|
|
172
|
+
fi
|
|
173
|
+
if [ "$elapsed" -ge 3000 ]; then
|
|
174
|
+
echo "::error::Still running on $GITHUB_SHA after 50 minutes:$waiting$missing."
|
|
175
|
+
exit 1
|
|
176
|
+
fi
|
|
177
|
+
echo "Waiting for$waiting$missing on $GITHUB_SHA"
|
|
178
|
+
sleep 30
|
|
179
|
+
done
|
|
180
|
+
|
|
181
|
+
# One approval for the whole release. The `npm-publish` environment carries a
|
|
182
|
+
# required reviewer and a deployment tag policy (v*, tools-v*, parser-v*) in
|
|
183
|
+
# repo settings. Preflight gates correctness and the `Release tags` ruleset
|
|
184
|
+
# gates who can create the tag; this is the only gate on the publish itself.
|
|
185
|
+
# npm versions are immutable, so a wrong publish can only be superseded.
|
|
186
|
+
# Self-approval is allowed, so for a solo maintainer it is a confirmation
|
|
187
|
+
# step, not a second-person requirement. Like preflight, it is read from the
|
|
188
|
+
# tagged revision: the tag policy is the part that holds regardless.
|
|
189
|
+
#
|
|
190
|
+
# It is its own job rather than a key on `publish`, which runs in
|
|
191
|
+
# `npm-release` (below). It asks for approval only once preflight and CI
|
|
192
|
+
# have passed.
|
|
193
|
+
approve:
|
|
194
|
+
name: Approve publish
|
|
195
|
+
needs: [preflight, ci-passed]
|
|
196
|
+
runs-on: ubuntu-latest
|
|
197
|
+
timeout-minutes: 5
|
|
198
|
+
environment: npm-publish
|
|
199
|
+
steps:
|
|
200
|
+
- name: Approved
|
|
201
|
+
run: echo "Publishing ${GITHUB_REF_NAME} was approved."
|
|
202
|
+
|
|
203
|
+
# The publish holds the OIDC token, so it does only that: no checkout, no
|
|
204
|
+
# install, no cache and no build, and the one package it installs is npm,
|
|
205
|
+
# pinned exactly. It publishes the tarballs preflight packed and tested,
|
|
206
|
+
# back to back, core first and mcp last, and stops at the first that
|
|
207
|
+
# fails. Run again (Re-run failed jobs), it publishes the same tarballs and
|
|
208
|
+
# skips one npm already has with the same integrity, so a release that
|
|
209
|
+
# stopped half-way is finished, not superseded (#909).
|
|
210
|
+
#
|
|
211
|
+
# `npm-release` has no reviewer, so it adds no prompt. It carries the same
|
|
212
|
+
# deployment tag policy as `npm-publish` (v*, tools-v*, parser-v*), and the
|
|
213
|
+
# trusted publishers of the lane's packages name it, so npm accepts
|
|
214
|
+
# an OIDC token only from a job in this environment, which only a release
|
|
215
|
+
# tag can reach. That holds where the approval above cannot: a run from any
|
|
216
|
+
# other ref cannot deploy here, whatever its workflow file says, and the
|
|
217
|
+
# publish job of an older commit names no environment (a tag runs the
|
|
218
|
+
# workflow file of the commit it points at, and main's history holds 3.x
|
|
219
|
+
# commits whose release.yml publishes a stable version under `latest`).
|
|
220
|
+
publish:
|
|
221
|
+
name: Publish to npm
|
|
222
|
+
needs: [preflight, ci-passed, approve]
|
|
223
|
+
runs-on: ubuntu-latest
|
|
224
|
+
timeout-minutes: 15
|
|
225
|
+
environment: npm-release
|
|
226
|
+
permissions:
|
|
227
|
+
id-token: write
|
|
228
|
+
steps:
|
|
229
|
+
- name: Download the tarballs preflight tested
|
|
230
|
+
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
|
|
231
|
+
with:
|
|
232
|
+
name: release-tarballs
|
|
233
|
+
path: tarballs
|
|
234
|
+
|
|
235
|
+
- name: Setup Node.js
|
|
236
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7
|
|
237
|
+
with:
|
|
238
|
+
node-version: 24
|
|
239
|
+
registry-url: "https://registry.npmjs.org"
|
|
240
|
+
|
|
241
|
+
# Trusted publishing (OIDC) needs npm 11.5.1 or later.
|
|
242
|
+
- name: Install npm
|
|
243
|
+
run: npm install -g npm@11.21.0 && npm --version
|
|
244
|
+
|
|
245
|
+
- name: Publish core, react, vite-plugin and mcp
|
|
246
|
+
shell: bash
|
|
247
|
+
env:
|
|
248
|
+
# Decided once, by preflight (scripts/release-tag.mjs).
|
|
249
|
+
TAG: ${{ needs.preflight.outputs.dist_tag }}
|
|
250
|
+
run: |
|
|
251
|
+
set -euo pipefail
|
|
252
|
+
# Always an explicit --tag: an empty one would let npm fall back to
|
|
253
|
+
# `latest` for any version.
|
|
254
|
+
case "$TAG" in
|
|
255
|
+
latest | beta) echo "Publishing under the $TAG dist-tag." ;;
|
|
256
|
+
*)
|
|
257
|
+
echo "::error::Preflight gave no dist-tag ('$TAG'); refusing to publish."
|
|
258
|
+
exit 1
|
|
259
|
+
;;
|
|
260
|
+
esac
|
|
261
|
+
VERSION="${GITHUB_REF_NAME#v}"
|
|
262
|
+
for name in core react vite-plugin mcp; do
|
|
263
|
+
if [ ! -s "tarballs/ic-reactor-$name-$VERSION.tgz" ]; then
|
|
264
|
+
echo "::error::tarballs/ic-reactor-$name-$VERSION.tgz is missing or empty; publishing nothing."
|
|
265
|
+
exit 1
|
|
266
|
+
fi
|
|
267
|
+
done
|
|
268
|
+
for name in core react vite-plugin mcp; do
|
|
269
|
+
# The leading ./ makes npm read a file: without it, npm reads
|
|
270
|
+
# `tarballs/<file>.tgz` as a GitHub repository and runs git.
|
|
271
|
+
TARBALL="./tarballs/ic-reactor-$name-$VERSION.tgz"
|
|
272
|
+
# npm's dist.integrity is the sha512 of the tarball it was given.
|
|
273
|
+
INTEGRITY="sha512-$(openssl dgst -sha512 -binary "$TARBALL" | base64 -w0)"
|
|
274
|
+
PUBLISHED="$(npm view "@ic-reactor/$name@$VERSION" dist.integrity 2>/dev/null || true)"
|
|
275
|
+
if [ "$PUBLISHED" = "$INTEGRITY" ]; then
|
|
276
|
+
echo "@ic-reactor/$name@$VERSION is already published from this tarball; skipping it."
|
|
277
|
+
continue
|
|
278
|
+
fi
|
|
279
|
+
if [ -n "$PUBLISHED" ]; then
|
|
280
|
+
echo "::error::@ic-reactor/$name@$VERSION is already published, from another tarball ($PUBLISHED, not $INTEGRITY)."
|
|
281
|
+
exit 1
|
|
282
|
+
fi
|
|
283
|
+
echo "Publishing $TARBALL"
|
|
284
|
+
npm publish "$TARBALL" --access public --tag "$TAG"
|
|
285
|
+
done
|
|
286
|
+
|
|
287
|
+
# The one job that can write to the repository, once every package is out:
|
|
288
|
+
# a stable tag's release is marked Latest only after the last of them has
|
|
289
|
+
# published too, never while one of them may still fail.
|
|
290
|
+
release-notes:
|
|
291
|
+
name: GitHub release
|
|
292
|
+
needs: [preflight, publish]
|
|
293
|
+
runs-on: ubuntu-latest
|
|
294
|
+
timeout-minutes: 10
|
|
295
|
+
permissions:
|
|
296
|
+
contents: write
|
|
297
|
+
steps:
|
|
298
|
+
- name: Create GitHub Release
|
|
299
|
+
uses: softprops/action-gh-release@efb35369e0ad2afab669f228072c1b0d510eae64 # v3
|
|
300
|
+
with:
|
|
301
|
+
generate_release_notes: true
|
|
302
|
+
draft: false
|
|
303
|
+
prerelease: ${{ needs.preflight.outputs.prerelease == 'true' }}
|
|
304
|
+
# The "Latest" badge goes to a stable 4.x release only, never to a
|
|
305
|
+
# prerelease (and v3's lanes set it to false).
|
|
306
|
+
make_latest: ${{ needs.preflight.outputs.make_latest }}
|
|
307
|
+
env:
|
|
308
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
309
|
+
|
|
310
|
+
# The examples against the packages this run just published, from the tagged
|
|
311
|
+
# commit: the green run of examples-published.yml that counts for a release.
|
|
312
|
+
# The release PR's own run of that workflow, and the push that merges it,
|
|
313
|
+
# defer while the examples pin only this unpublished version (awaitsRelease
|
|
314
|
+
# in scripts/test-examples-published.mjs): this run is the one that tests them.
|
|
315
|
+
# The publish job publishes every package of the lane before it ends, and
|
|
316
|
+
# --wait-for waits for each one the examples install, not only core.
|
|
317
|
+
# The script tests the dist-tag the tag's version publishes under: `beta`
|
|
318
|
+
# for a prerelease, `latest` for a stable version.
|
|
319
|
+
examples-published:
|
|
320
|
+
name: Examples on the published packages
|
|
321
|
+
needs: publish
|
|
322
|
+
permissions:
|
|
323
|
+
contents: read
|
|
324
|
+
uses: ./.github/workflows/examples-published.yml
|
|
325
|
+
with:
|
|
326
|
+
wait-for: ${{ github.ref_name }}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
# Format staged files and run lint-staged
|
|
4
|
+
if command -v pnpm >/dev/null 2>&1; then
|
|
5
|
+
pnpm -s exec -- lint-staged
|
|
6
|
+
elif command -v corepack >/dev/null 2>&1; then
|
|
7
|
+
corepack pnpm -s exec -- lint-staged
|
|
8
|
+
else
|
|
9
|
+
echo "Error: pnpm not found in PATH (and corepack unavailable)." >&2
|
|
10
|
+
echo "Install pnpm or run commits from a shell where pnpm is available." >&2
|
|
11
|
+
exit 1
|
|
12
|
+
fi
|
package/.prettierignore
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
node_modules/
|
|
2
|
+
dist/
|
|
3
|
+
build/
|
|
4
|
+
coverage/
|
|
5
|
+
.docs/
|
|
6
|
+
.docusaurus/
|
|
7
|
+
.cache/
|
|
8
|
+
**/dist
|
|
9
|
+
**/target
|
|
10
|
+
docs/dist
|
|
11
|
+
.e2e/
|
|
12
|
+
docs/public/
|
|
13
|
+
.husky/
|
|
14
|
+
.pnpm-debug.log
|
|
15
|
+
.env
|
|
16
|
+
.env.*
|
|
17
|
+
|
|
18
|
+
# Generated by `next build` on every run, and it says so at the top. Prettier
|
|
19
|
+
# strips the semicolons Next writes, so formatting it means a one-line diff
|
|
20
|
+
# after every build.
|
|
21
|
+
**/next-env.d.ts
|
|
22
|
+
|
|
23
|
+
# `pnpm format:check` now walks the whole repo, and Prettier reads only the root
|
|
24
|
+
# .gitignore plus this file -- never a nested .gitignore. Every build directory
|
|
25
|
+
# that only a nested .gitignore covers has to be repeated here, or the check
|
|
26
|
+
# fails in any working tree that has been built: `.next/` and `examples/*/out/`
|
|
27
|
+
# alone accounted for 205 of the 249 files a repo-wide check flagged.
|
|
28
|
+
.next/
|
|
29
|
+
examples/*/out/
|
|
30
|
+
dist-ssr/
|
|
31
|
+
.tanstack/
|
|
32
|
+
.nitro/
|
|
33
|
+
.wrangler/
|
|
34
|
+
.yarn/
|
|
35
|
+
canister_ids.json
|
|
36
|
+
|
|
37
|
+
# Editor state. Listed in several nested .gitignore files, which Prettier does
|
|
38
|
+
# not read, so an untracked settings file would otherwise be rewritten in place.
|
|
39
|
+
.vscode/
|
|
40
|
+
.idea/
|
|
41
|
+
|
|
42
|
+
# Claude Code worktrees and machine-local settings. Not covered by the root
|
|
43
|
+
# .gitignore, so a repo-wide walk would format files on other agents' branches.
|
|
44
|
+
.claude/
|
|
45
|
+
|
|
46
|
+
# TypeDoc output, rewritten by `pnpm docs:build`. Also in the root .gitignore;
|
|
47
|
+
# repeated here so the Prettier set does not silently depend on it.
|
|
48
|
+
docs/src/content/docs/libs/
|
|
49
|
+
|
|
50
|
+
# Rewritten by the TanStack Router plugin on every dev/build run; its own header
|
|
51
|
+
# tells you to exclude it from linters and formatters.
|
|
52
|
+
examples/canister-studio/src/routeTree.gen.ts
|
|
53
|
+
|
|
54
|
+
# pnpm rewrites the lockfile on every install.
|
|
55
|
+
pnpm-lock.yaml
|
|
56
|
+
|
|
57
|
+
# evals/: inputs kept byte-identical to what produced them (evals/setup.mjs
|
|
58
|
+
# regenerates them) — candid-core-cli output, the docs copied from the published
|
|
59
|
+
# @candid-core and @ic-reactor packages, the vendored fake replica — plus
|
|
60
|
+
# agent-run results.
|
|
61
|
+
evals/conditions/*/starter/src/generated/icrc1.ts
|
|
62
|
+
evals/conditions/*/docs/
|
|
63
|
+
evals/harness/public/support/fake-replica.js
|
|
64
|
+
evals/runs/
|
|
65
|
+
# The pilots' aggregated results, kept byte for byte as evals/drive.mjs wrote
|
|
66
|
+
# them: they are the record PREREGISTRATION.md cites.
|
|
67
|
+
evals/results/
|
|
68
|
+
|
|
69
|
+
# packages/core/tests/fixtures/: modules and a Contract envelope written by
|
|
70
|
+
# `meant gen`, kept byte for byte (see the README there).
|
|
71
|
+
packages/core/tests/fixtures/*.ts
|
|
72
|
+
packages/core/tests/fixtures/*.envelope.json
|
|
73
|
+
|
|
74
|
+
# scripts/check-snippets/app/generated/: the modules `meant gen` writes
|
|
75
|
+
# for the `.did` files next to them, kept byte for byte. They are what a guide
|
|
76
|
+
# snippet's `./generated/<name>` import resolves to.
|
|
77
|
+
scripts/check-snippets/app/generated/*.ts
|
|
78
|
+
|
|
79
|
+
# The modules and Contract envelopes `meant gen` (run by
|
|
80
|
+
# @ic-reactor/vite-plugin or an example's `gen` script) writes from an example's
|
|
81
|
+
# .did, kept byte for byte so that `gen:check` passes. Listed by name, not by a
|
|
82
|
+
# glob over src/canisters/: a hand-written module put next to them (a stable
|
|
83
|
+
# index.ts) must still be formatted and checked. Each example adds its own.
|
|
84
|
+
examples/icrc-ledger/src/canisters/icrc1.ts
|
|
85
|
+
examples/icrc-ledger/src/canisters/icrc1.envelope.json
|
|
86
|
+
examples/icrc-ledger/src/canisters/icp_ledger.ts
|
|
87
|
+
examples/icrc-ledger/src/canisters/icp_ledger.envelope.json
|
|
88
|
+
examples/icrc-ledger/src/canisters/ckbtc_minter.ts
|
|
89
|
+
examples/icrc-ledger/src/canisters/ckbtc_minter.envelope.json
|
|
90
|
+
examples/next-ssr/src/canisters/icrc1.ts
|
|
91
|
+
examples/next-ssr/src/canisters/icrc1.envelope.json
|
|
92
|
+
examples/vite-wallet/src/canisters/backend.ts
|
|
93
|
+
examples/vite-wallet/src/canisters/backend.envelope.json
|
|
94
|
+
examples/vite-wallet/src/canisters/ledger.ts
|
|
95
|
+
examples/vite-wallet/src/canisters/ledger.envelope.json
|
|
96
|
+
examples/node-agent-tool/src/canisters/icrc1.ts
|
|
97
|
+
examples/node-agent-tool/src/canisters/icrc1.envelope.json
|
|
98
|
+
examples/canister-studio/src/canisters/icrc1.ts
|
|
99
|
+
examples/canister-studio/src/canisters/icrc1.envelope.json
|
|
100
|
+
examples/canister-studio/src/canisters/icp_ledger.ts
|
|
101
|
+
examples/canister-studio/src/canisters/icp_ledger.envelope.json
|
|
102
|
+
examples/canister-studio/src/canisters/ckbtc_minter.ts
|
|
103
|
+
examples/canister-studio/src/canisters/ckbtc_minter.envelope.json
|
|
104
|
+
|
|
105
|
+
# e2e/src/declarations/: the module and Contract envelope `meant gen`
|
|
106
|
+
# writes from e2e/src/actor/hello_actor.did (`pnpm gen` in e2e/), kept byte for
|
|
107
|
+
# byte so that `pnpm gen:check` passes.
|
|
108
|
+
e2e/src/declarations/hello_actor.ts
|
|
109
|
+
e2e/src/declarations/hello_actor.envelope.json
|
package/.prettierrc
ADDED
package/AGENTS.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# AGENTS.md instructions for @ic-reactor
|
|
2
|
+
|
|
3
|
+
## Project snapshot
|
|
4
|
+
|
|
5
|
+
This is `main`, the line of ic-reactor 4. `v3` is the 3.x line and takes
|
|
6
|
+
security fixes only, until 90 days after the 4.0 release. Open pull requests
|
|
7
|
+
for ic-reactor 4 against `main`, and 3.x security fixes against `v3`.
|
|
8
|
+
|
|
9
|
+
ic-reactor 4 is a thin layer over a module that `meant gen` generates, plus one
|
|
10
|
+
consumer guide. Its packages are written against the published stable Meant
|
|
11
|
+
releases, `@meantjs/schema` and `@meantjs/cli`, each pinned exactly.
|
|
12
|
+
|
|
13
|
+
### Packages
|
|
14
|
+
|
|
15
|
+
- `@ic-reactor/core` (`packages/core`, `4.1.1`) — the 4 API of milestone 1: `createClient`, `ReactorError` and `isReactorError`, `parseUnits` and `formatUnits`, and their types (13 names, `scripts/export-budget.mjs`). `src/testing/` is the `@ic-reactor/core/testing` entry: `createTestClient` (a real client over the fake replica, with typed `TestHandlers` and a controllable sign-in) is its only export; the fake replica and the test auth behind it are internal.
|
|
16
|
+
- `@ic-reactor/react` (`packages/react`, `4.1.1`) — `'use client'` bindings over a core client: `ReactorProvider`, `useClient`, `useAuth` and the type `ReactorProviderProps`. It never re-exports core.
|
|
17
|
+
- `@ic-reactor/vite-plugin` (`packages/vite-plugin`, `4.1.1`) — generates the module by running `@meantjs/cli` (`meant gen`) in a child process, and sets the `ic_env` cookie and `/api` proxy.
|
|
18
|
+
- `@ic-reactor/mcp` (`packages/mcp`, `4.1.1`) — the `ic-reactor-mcp` command, an MCP server that gives an AI agent any canister's methods as tools and sends an update only after the person approves the exact call in the MCP client's form. It exports nothing to import (`COMMANDS` in `scripts/export-budget.mjs`).
|
|
19
|
+
|
|
20
|
+
`@ic-reactor/parser`, `@ic-reactor/codegen`, `@ic-reactor/cli` and
|
|
21
|
+
`@ic-reactor/candid` are not in this tree (the last stays at 3.x on `v3`).
|
|
22
|
+
|
|
23
|
+
## Where to start for a task
|
|
24
|
+
|
|
25
|
+
| Task | Start here |
|
|
26
|
+
| ----------------------------- | ------------------------------------------------------------------------------------------- |
|
|
27
|
+
| Core runtime | `packages/core/src/`, `packages/core/tests/` |
|
|
28
|
+
| React bindings | `packages/react/src/`, `packages/react/tests/` |
|
|
29
|
+
| Vite plugin generation | `packages/vite-plugin/src/generate.ts`, `src/index.ts` |
|
|
30
|
+
| `ic_env` cookie and dev proxy | `packages/vite-plugin/src/dev-environment.ts`, `src/env.ts`, `src/index.ts` |
|
|
31
|
+
| MCP server | `packages/mcp/src/server/` (tools, approval), `src/interface/` (loader), `src/candid/` |
|
|
32
|
+
| Test client, fake replica | `packages/core/src/testing/` (`test-client.ts` is the entry's only export) |
|
|
33
|
+
| Real-replica e2e | `e2e/` (Rust `hello_actor` canister, `e2e/test.sh`) |
|
|
34
|
+
| Example apps | `examples/<name>/` (own tests and `gen:check`; a page in `docs/src/content/docs/examples/`) |
|
|
35
|
+
| Docs site (`/v4/`) | `docs/`, `.github/workflows/docs.yml`, `scripts/assemble-docs-site.mjs` |
|
|
36
|
+
| Docs on b3pay.net | `b3pay-module.json`, `.github/workflows/b3pay-site.yml`, `docs/scripts/b3pay-static.mjs` |
|
|
37
|
+
| Consumer guide and skill | `packages/core/llms.txt`, `skill-packages/ic-reactor/SKILL.md` |
|
|
38
|
+
| Release lane | `scripts/release.js`, `scripts/release-tag.mjs`, `.github/workflows/release.yml` |
|
|
39
|
+
| Meant pins | `stack.json`, `scripts/check-stack.mjs` |
|
|
40
|
+
| CI gates and their tests | `scripts/` (`check-exports.mjs`, `verify-traps.mjs`, `verify-faults.mjs`) |
|
|
41
|
+
|
|
42
|
+
## Verification commands
|
|
43
|
+
|
|
44
|
+
- Build and test: `pnpm build`, `pnpm test`
|
|
45
|
+
- Type check (CI gate): `pnpm typecheck` — each package's `typecheck` script plus `e2e/`'s.
|
|
46
|
+
- Lint (CI gate): `pnpm lint`. Run `pnpm build` first: the type-aware rules read core's emitted `.d.ts`.
|
|
47
|
+
- Format (CI gate): `pnpm format:check`
|
|
48
|
+
- AI context (CI gate): `pnpm check:ai-context` — version stamps, and docs links limited to the published bases (`/v2/`, `/v3/`, `/v4/`), with `/v4/` links resolved against `docs/src/content/docs/`.
|
|
49
|
+
- Stack pins (CI gate): `pnpm check:stack` — each Meant pin in a tracked `package.json`, each `@meantjs/<name>@<version>` in a `package.json` value or a `.md`, `.mdx` or `.txt` file, each docs peer-table row that says exactly `<version>`, and the two pins in code (`MEANT_CLI_VERSION`, the export budget's schema pin) must be exactly the version `stack.json` gives, outside the changelogs and the manifest's `frozen` paths; each listed package must be pinned by some `package.json` outside them, and each frozen path must hold a tracked file. Other files (`.ts`, `.yml`) are not read. A repin changes `stack.json`, moves the examples with the rest of the tree, and runs `pnpm sync:stack` (CONTRIBUTING.md, "The Meant pins"); prose that says what one release does is checked by hand.
|
|
50
|
+
- Snippets (CI gate; build first): `pnpm check:snippets`, and `pnpm check:snippets:docs` for the docs pages.
|
|
51
|
+
- Size (CI gate; build first): `pnpm size` — gzipped size-limit checks, each limit just above its measured size. `packages/core/.size-limit.js` and react's `size-limit` field measure each package's own code: size-limit leaves out every peer of the package it runs in. `scripts/size-app/` (a private workspace package that declares no peers, so nothing is left out) measures what an app pays with the peers included: `{ createClient }` from core, and `createClient` with `ReactorProvider` and `useClient` without React itself. A change that moves a number, a dependency bump included, states the delta in its pull request and raises that limit in the same change.
|
|
52
|
+
- Published artifacts: `pnpm verify:packages`
|
|
53
|
+
- Examples on the published packages: `pnpm test:examples:published` (needs only Node, npm and git) — each example's tracked files copied outside the repository and installed from npm with npm; it refuses a `workspace:` range, checks every installed @ic-reactor/* package is a real directory at the version of one npm dist-tag (with `--wait-for <version>`, as `release.yml` runs it after publishing, the tag that version publishes under; otherwise the tag of the branch's version in `packages/core/package.json`: `beta` for a prerelease and `latest` for a stable version), then runs the example's `typecheck`, `test` and `build` scripts, and its `.stackblitzrc` start command under a model of what StackBlitz's WebContainer lacks (no global `Iterator`; an `AsyncLocalStorage` that keeps no store across an await). Its own workflow, `.github/workflows/examples-published.yml`, runs it on pushes and pull requests to `main`. An example change that needs an unpublished API lands with the release that publishes it. A run without `--wait-for` whose examples all pin `^<the branch's own version>` while npm has no such version yet (a release pull request, or its merge before the tag), and no dependency uses a local protocol, runs the checks that need no registry (tracked config files, required scripts, and the `.stackblitzrc` start command, which must be a plain npm script command, `npm run <script>` with arguments after a bare `--`, naming a defined script), then defers to the release's run and passes, saying so; once that version is published, the same run tests its dist-tag.
|
|
54
|
+
- Peer and TypeScript floors (CI gate; build first): `pnpm verify:peer-floors`
|
|
55
|
+
- Docs: `pnpm docs:build`, `pnpm docs:check-links`. The site links to Candid Core's pages at `/candid-core/`, built from B3Pay/Meant (`node website/build.mjs`); with `CANDID_CORE_SITE` set to that build's `website/dist`, the link check checks the links into it and crawls its pages, as CI does. Without it those links are skipped, and in CI the check fails. `.github/workflows/docs.yml` deploys ic-reactor.b3pay.net, which keeps the 3.x and 2.x docs: each page there under `/v4/` and `/candid-core/` sends readers to the same page on b3pay.net (`/docs/ic-reactor/`, `/docs/meant/`), and the deploy stops when b3pay.net does not serve IC Reactor's docs, with the API reference, or Meant's.
|
|
56
|
+
- Docs on b3pay.net: the same pages, the API reference and `packages/core/llms.txt` are a module of b3pay.net, served at `/docs/ic-reactor/`, as `b3pay-module.json` describes. Its sidebar is kept by hand beside the one in `docs/astro.config.mjs`: a page added to one goes in the other, and so does a new folder of the API reference, such as `libs/classes` for a first class (b3pay.net fails a listed folder that has no pages). The `Docs on b3pay.net` workflow builds and checks the module with b3pay.net's reusable workflow and builds that site with it, warning about a page missing from the sidebar and failing on a link that breaks there; on `main` it commits the module to the `b3pay-site` branch, which b3pay.net serves. Locally, from a b3pay.net checkout, after `pnpm -C docs run api` here: `npm run module:build -- --source ../ic-reactor --out ../ic-reactor-module`.
|
|
57
|
+
- Export budget (CI gate; build first): `pnpm check:exports` — the built declarations of core, `core/testing`, react and the Vite plugin against the plan in `scripts/export-budget.mjs`: no unplanned name, no more than the cap, no name exported twice or also exported by `@meantjs/schema` or TanStack Query (D35), no `exports` subpath or publishable package the file does not list, and the schema declared only at the pinned version. Adding a public name or subpath means adding it to that file in the same change.
|
|
58
|
+
- Trap types (CI gate): `pnpm verify:traps` — every `@ts-expect-error` of `packages/core/tests/traps.test-d.ts` must be reported as unused (TS2578) once its fault fixture in `scripts/traps/` removes it. How to add a trap is in that file's header.
|
|
59
|
+
- Fault-proof runtime tests (CI gate): `pnpm verify:faults` — every test listed in `scripts/faults.json` must fail with its fault applied to a copy of its package. A test that guards a regression somebody could reintroduce gets an entry.
|
|
60
|
+
- Script tests (CI gate; build first): `pnpm test:scripts` — the gates above, `check:ai-context` and `check:snippets`, each run against repositories built for the purpose.
|
|
61
|
+
- A bug fix: `pnpm verify:test-fails <test file> --package <pkg>` on the new test, and a `scripts/faults.json` entry if it should stay proven
|
|
62
|
+
|
|
63
|
+
## Generated files
|
|
64
|
+
|
|
65
|
+
Outputs under `dist`, `.icp`, `target`, `.astro` and `*.tsbuildinfo` are build
|
|
66
|
+
artifacts. `docs/src/content/docs/libs/` is TypeDoc output written by
|
|
67
|
+
`pnpm docs:build`, or by `pnpm -C docs run api` alone, each file named in
|
|
68
|
+
lowercase as its route is. `e2e/src/declarations/` is committed: the module
|
|
69
|
+
`meant gen` writes from `e2e/src/actor/hello_actor.did` (`pnpm gen` in
|
|
70
|
+
`e2e/`; `e2e/test.sh` fails a stale copy with `pnpm gen:check`).
|
|
71
|
+
|
|
72
|
+
## AI context files
|
|
73
|
+
|
|
74
|
+
`scripts/ai-context-files.js` lists them: `packages/core/llms.txt`, this file
|
|
75
|
+
and `CLAUDE.md`, plus `packages/react/llms.txt` (a pointer to the guide) and
|
|
76
|
+
the consumer skill `skill-packages/ic-reactor/`. The consumer guide is
|
|
77
|
+
`packages/core/llms.txt`, shipped in core's tarball; it opens with an
|
|
78
|
+
`Applies to` line naming core's version. Keep repo paths and contributor
|
|
79
|
+
workflow out of it, and keep it free of the eval's hidden-test names and
|
|
80
|
+
literals (`node evals/harness/check-docs.mjs "$PWD/packages/core/llms.txt"`).
|
|
81
|
+
Its snippets import the generated modules in
|
|
82
|
+
`scripts/check-snippets/app/generated/`.
|
|
83
|
+
|
|
84
|
+
`check:ai-context` also fails on any of the 34 removed 3.x names
|
|
85
|
+
(`scripts/removed-v3-names.js`) outside a section headed "Removed in 4.0", and
|
|
86
|
+
`check:snippets` compiles every `ts`/`tsx` fence of these files against the
|
|
87
|
+
built packages.
|
|
88
|
+
|
|
89
|
+
Every skill under `skill-packages/` is one an app installs, so a contributor
|
|
90
|
+
skill does not go there. `check:ai-context` wants its `SKILL.md` to list
|
|
91
|
+
`@ic-reactor/react`'s version, and any other package's it lists, at the
|
|
92
|
+
current version (`` - `@ic-reactor/react`: `<version>` ``), and its `SKILL.md`
|
|
93
|
+
and `references/` to name no path that exists only in this repository
|
|
94
|
+
(`packages/`, `examples/`, `scripts/` and the like).
|
|
95
|
+
|
|
96
|
+
The hand-written docs pages (`docs/src/content/docs/`, not `libs/`) are not
|
|
97
|
+
AI-context files, but `check:ai-context` holds them to the removed-names rule
|
|
98
|
+
too, lets only `migrating-from-3.mdx` link `/v3/`, refuses an `@ic-reactor`
|
|
99
|
+
version on a page (the site follows the branch) and any prerelease version
|
|
100
|
+
that is not an exact pin of a `packages/*/package.json`, and wants each
|
|
101
|
+
package's `homepage` to be its page under `/v4/packages/`.
|
|
102
|
+
`pnpm check:snippets:docs` compiles the pages' fences; their fixtures are in
|
|
103
|
+
`scripts/check-snippets/docs/<section>/`.
|