oh-my-opencode 4.5.1 → 4.5.12
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/README.ja.md +33 -18
- package/README.ko.md +33 -18
- package/README.md +82 -24
- package/README.ru.md +33 -18
- package/README.zh-cn.md +45 -24
- package/bin/oh-my-opencode.js +47 -2
- package/bin/oh-my-opencode.test.ts +174 -0
- package/bin/platform.d.ts +6 -0
- package/bin/platform.js +19 -0
- package/bin/platform.test.ts +66 -1
- package/dist/cli/cli-program.d.ts +18 -0
- package/dist/cli/index.js +28472 -26159
- package/dist/cli/install-codex/codex-cache-bundled-mcps.d.ts +5 -0
- package/dist/cli/install-codex/codex-cache-command-shim.d.ts +1 -0
- package/dist/cli/install-codex/codex-cache-legacy-bins.d.ts +3 -0
- package/dist/cli/install-codex/codex-cache-local-dependencies.d.ts +1 -0
- package/dist/cli/install-codex/codex-cache-paths.d.ts +2 -0
- package/dist/cli/install-codex/codex-cache.d.ts +31 -0
- package/dist/cli/install-codex/codex-config-toml.d.ts +11 -0
- package/dist/cli/install-codex/codex-hook-trust.d.ts +6 -0
- package/dist/cli/install-codex/codex-marketplace-snapshot.d.ts +15 -0
- package/dist/cli/install-codex/codex-marketplace.d.ts +9 -0
- package/dist/cli/install-codex/codex-multi-agent-v2-config.d.ts +1 -0
- package/dist/cli/install-codex/codex-process.d.ts +2 -0
- package/dist/cli/install-codex/index.d.ts +7 -0
- package/dist/cli/install-codex/install-codex.d.ts +17 -0
- package/dist/cli/install-codex/link-cached-plugin-agents.d.ts +12 -0
- package/dist/cli/install-codex/toml-section-editor.d.ts +9 -0
- package/dist/cli/install-codex/types.d.ts +56 -0
- package/dist/cli/star-request.d.ts +2 -0
- package/dist/cli/tui-install-prompts.d.ts +3 -2
- package/dist/cli/types.d.ts +8 -0
- package/dist/config/schema/agent-names.d.ts +4 -1
- package/dist/config/schema/commands.d.ts +1 -2
- package/dist/config/schema/oh-my-opencode-config.d.ts +5 -3
- package/dist/create-managers.d.ts +1 -0
- package/dist/features/background-agent/parent-wake-message-activity.d.ts +23 -0
- package/dist/features/background-agent/parent-wake-notifier.d.ts +0 -1
- package/dist/features/boulder-state/storage.d.ts +1 -1
- package/dist/features/builtin-commands/templates/refactor.d.ts +1 -1
- package/dist/features/builtin-commands/templates/remove-ai-slops.d.ts +2 -2
- package/dist/features/builtin-commands/types.d.ts +1 -1
- package/dist/features/builtin-skills/skill-file-loader.d.ts +4 -0
- package/dist/features/builtin-skills/skills/index.d.ts +4 -1
- package/dist/features/builtin-skills/skills/init-deep.d.ts +2 -0
- package/dist/features/builtin-skills/skills/remove-ai-slops.d.ts +2 -0
- package/dist/features/builtin-skills/skills/security-research.d.ts +2 -0
- package/dist/features/builtin-skills/skills/security-review.d.ts +2 -0
- package/dist/features/opencode-runtime-skills/index.d.ts +2 -0
- package/dist/features/opencode-runtime-skills/runtime-skill-config.d.ts +17 -0
- package/dist/features/opencode-runtime-skills/skill-markdown.d.ts +7 -0
- package/dist/features/opencode-runtime-skills/source-server.d.ts +8 -0
- package/dist/hooks/claude-code-hooks/hook-text.d.ts +2 -0
- package/dist/hooks/session-recovery/storage/latest-assistant-message.d.ts +5 -0
- package/dist/hooks/session-recovery/storage/thinking-prepend.d.ts +3 -0
- package/dist/hooks/thinking-block-validator/hook.d.ts +0 -18
- package/dist/hooks/todo-continuation-enforcer/pending-question-detection.d.ts +4 -0
- package/dist/index.js +1684 -1801
- package/dist/oh-my-opencode.schema.json +4 -2
- package/dist/plugin-handlers/config-handler.d.ts +2 -1
- package/dist/shared/external-plugin-detector.d.ts +8 -0
- package/dist/shared/prompt-async-gate/message-inspection-error.d.ts +1 -0
- package/dist/shared/prompt-async-gate/pending-tool-turn.d.ts +1 -0
- package/dist/shared/prompt-async-gate/prompt-message-state.d.ts +8 -0
- package/dist/shared/prompt-timeout-context.d.ts +2 -0
- package/dist/testing/create-plugin-module.d.ts +5 -1
- package/dist/tools/delegate-task/sync-prompt-sender.d.ts +2 -2
- package/package.json +31 -16
- package/packages/ast-grep-mcp/dist/cli.js +245 -40
- package/packages/lsp-tools-mcp/dist/cli.js +1 -1
- package/packages/omo-codex/marketplace.json +17 -0
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +35 -0
- package/packages/omo-codex/plugin/.mcp.json +14 -0
- package/packages/omo-codex/plugin/README.md +13 -0
- package/packages/omo-codex/plugin/components/comment-checker/.gitattributes +13 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/CODEOWNERS +12 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/ISSUE_TEMPLATE/bug.yml +40 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/ISSUE_TEMPLATE/feature.yml +27 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/branch-ruleset.json +45 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/dependabot.yml +16 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/pull_request_template.md +19 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/workflows/ci.yml +47 -0
- package/packages/omo-codex/plugin/components/comment-checker/.github/workflows/publish.yml +51 -0
- package/packages/omo-codex/plugin/components/comment-checker/AGENTS.md +35 -0
- package/packages/omo-codex/plugin/components/comment-checker/CHANGELOG.md +33 -0
- package/packages/omo-codex/plugin/components/comment-checker/LICENSE +21 -0
- package/packages/omo-codex/plugin/components/comment-checker/NOTICE +6 -0
- package/packages/omo-codex/plugin/components/comment-checker/README.md +87 -0
- package/packages/omo-codex/plugin/components/comment-checker/biome.json +48 -0
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +17 -0
- package/packages/omo-codex/plugin/components/comment-checker/package.json +57 -0
- package/packages/omo-codex/plugin/components/comment-checker/skills/comment-checker/SKILL.md +16 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/cli.ts +12 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/codex-hook.ts +205 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/core.ts +361 -0
- package/packages/omo-codex/plugin/components/comment-checker/src/runner.ts +195 -0
- package/packages/omo-codex/plugin/components/comment-checker/test/codex-hook-newline.test.ts +52 -0
- package/packages/omo-codex/plugin/components/comment-checker/test/codex-hook.test.ts +368 -0
- package/packages/omo-codex/plugin/components/comment-checker/test/fixtures/post-tool-use.json +15 -0
- package/packages/omo-codex/plugin/components/comment-checker/test/package-smoke.test.ts +93 -0
- package/packages/omo-codex/plugin/components/comment-checker/test/runner.test.ts +66 -0
- package/packages/omo-codex/plugin/components/comment-checker/tsconfig.build.json +12 -0
- package/packages/omo-codex/plugin/components/comment-checker/tsconfig.json +27 -0
- package/packages/omo-codex/plugin/components/comment-checker/vitest.config.ts +9 -0
- package/packages/omo-codex/plugin/components/lsp/.gitattributes +13 -0
- package/packages/omo-codex/plugin/components/lsp/.github/CODEOWNERS +1 -0
- package/packages/omo-codex/plugin/components/lsp/.github/ISSUE_TEMPLATE/bug.yml +26 -0
- package/packages/omo-codex/plugin/components/lsp/.github/ISSUE_TEMPLATE/feature.yml +19 -0
- package/packages/omo-codex/plugin/components/lsp/.github/branch-ruleset.json +45 -0
- package/packages/omo-codex/plugin/components/lsp/.github/dependabot.yml +11 -0
- package/packages/omo-codex/plugin/components/lsp/.github/pull_request_template.md +11 -0
- package/packages/omo-codex/plugin/components/lsp/.github/workflows/ci.yml +56 -0
- package/packages/omo-codex/plugin/components/lsp/.github/workflows/publish.yml +60 -0
- package/packages/omo-codex/plugin/components/lsp/.mcp.json +9 -0
- package/packages/omo-codex/plugin/components/lsp/AGENTS.md +25 -0
- package/packages/omo-codex/plugin/components/lsp/CHANGELOG.md +25 -0
- package/packages/omo-codex/plugin/components/lsp/LICENSE +21 -0
- package/packages/omo-codex/plugin/components/lsp/NOTICE +3 -0
- package/packages/omo-codex/plugin/components/lsp/README.md +148 -0
- package/packages/omo-codex/plugin/components/lsp/biome.json +48 -0
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +17 -0
- package/packages/omo-codex/plugin/components/lsp/package.json +64 -0
- package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-tools.mjs +46 -0
- package/packages/omo-codex/plugin/components/lsp/scripts/build-lsp-tools.test.mjs +104 -0
- package/packages/omo-codex/plugin/components/lsp/scripts/clean-dist.mjs +5 -0
- package/packages/omo-codex/plugin/components/lsp/scripts/test.mjs +8 -0
- package/packages/omo-codex/plugin/components/lsp/skills/lsp/SKILL.md +35 -0
- package/packages/omo-codex/plugin/components/lsp/src/cli.ts +44 -0
- package/packages/omo-codex/plugin/components/lsp/src/codex-hook.ts +285 -0
- package/packages/omo-codex/plugin/components/lsp/test/codex-hook.test.ts +358 -0
- package/packages/omo-codex/plugin/components/lsp/test/fixtures/broken.py +1 -0
- package/packages/omo-codex/plugin/components/lsp/test/fixtures/post-tool-use.json +15 -0
- package/packages/omo-codex/plugin/components/lsp/test/package-smoke.test.ts +153 -0
- package/packages/omo-codex/plugin/components/lsp/tsconfig.build.json +12 -0
- package/packages/omo-codex/plugin/components/lsp/tsconfig.json +27 -0
- package/packages/omo-codex/plugin/components/lsp/vitest.config.ts +9 -0
- package/packages/omo-codex/plugin/components/rules/.codex-plugin/plugin.json +3 -0
- package/packages/omo-codex/plugin/components/rules/.gitattributes +13 -0
- package/packages/omo-codex/plugin/components/rules/.github/CODEOWNERS +12 -0
- package/packages/omo-codex/plugin/components/rules/.github/ISSUE_TEMPLATE/bug.yml +49 -0
- package/packages/omo-codex/plugin/components/rules/.github/ISSUE_TEMPLATE/feature.yml +27 -0
- package/packages/omo-codex/plugin/components/rules/.github/branch-ruleset.json +45 -0
- package/packages/omo-codex/plugin/components/rules/.github/dependabot.yml +16 -0
- package/packages/omo-codex/plugin/components/rules/.github/pull_request_template.md +20 -0
- package/packages/omo-codex/plugin/components/rules/.github/workflows/ci.yml +47 -0
- package/packages/omo-codex/plugin/components/rules/.github/workflows/publish.yml +51 -0
- package/packages/omo-codex/plugin/components/rules/AGENTS.md +34 -0
- package/packages/omo-codex/plugin/components/rules/CHANGELOG.md +19 -0
- package/packages/omo-codex/plugin/components/rules/LICENSE +21 -0
- package/packages/omo-codex/plugin/components/rules/NOTICE +15 -0
- package/packages/omo-codex/plugin/components/rules/README.md +124 -0
- package/packages/omo-codex/plugin/components/rules/biome.json +48 -0
- package/packages/omo-codex/plugin/components/rules/bundled-rules/hephaestus.md +209 -0
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +54 -0
- package/packages/omo-codex/plugin/components/rules/package.json +62 -0
- package/packages/omo-codex/plugin/components/rules/scripts/bench-codex-rules.mjs +268 -0
- package/packages/omo-codex/plugin/components/rules/skills/rules/SKILL.md +34 -0
- package/packages/omo-codex/plugin/components/rules/src/cli.ts +143 -0
- package/packages/omo-codex/plugin/components/rules/src/codex-hook-options.ts +4 -0
- package/packages/omo-codex/plugin/components/rules/src/codex-hook.ts +238 -0
- package/packages/omo-codex/plugin/components/rules/src/config.ts +107 -0
- package/packages/omo-codex/plugin/components/rules/src/context-pressure.ts +26 -0
- package/packages/omo-codex/plugin/components/rules/src/debug-log.ts +65 -0
- package/packages/omo-codex/plugin/components/rules/src/dynamic-target-fingerprints.ts +98 -0
- package/packages/omo-codex/plugin/components/rules/src/hook-output.ts +19 -0
- package/packages/omo-codex/plugin/components/rules/src/path-utils.ts +29 -0
- package/packages/omo-codex/plugin/components/rules/src/persistent-cache.ts +234 -0
- package/packages/omo-codex/plugin/components/rules/src/post-compact-budget.ts +104 -0
- package/packages/omo-codex/plugin/components/rules/src/post-compact-claim.ts +13 -0
- package/packages/omo-codex/plugin/components/rules/src/post-compact-state.ts +45 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/cache.ts +64 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/constants.ts +115 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/engine.ts +535 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/errors.ts +13 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/finder-cache.ts +73 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/finder-paths.ts +47 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/finder-sources.ts +50 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/finder.ts +207 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/formatter.ts +123 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/matcher.ts +142 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/ordering.ts +33 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/parser.ts +326 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/plugin-root.ts +55 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/project-root.ts +30 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/scanner.ts +162 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/truncator.ts +67 -0
- package/packages/omo-codex/plugin/components/rules/src/rules/types.ts +141 -0
- package/packages/omo-codex/plugin/components/rules/src/rules-engine-factory.ts +24 -0
- package/packages/omo-codex/plugin/components/rules/src/session-state-lock.ts +47 -0
- package/packages/omo-codex/plugin/components/rules/src/static-injection.ts +56 -0
- package/packages/omo-codex/plugin/components/rules/src/tool-paths.ts +192 -0
- package/packages/omo-codex/plugin/components/rules/src/transcript-rule-filter.ts +44 -0
- package/packages/omo-codex/plugin/components/rules/src/transcript-search.ts +108 -0
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules-priority.test.ts +107 -0
- package/packages/omo-codex/plugin/components/rules/test/bundled-rules.test.ts +268 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-context-pressure.test.ts +243 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-performance.test.ts +99 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-budget.test.ts +132 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-context.test.ts +156 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-dedup.test.ts +299 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-lock.test.ts +46 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook-post-compact-process.test.ts +83 -0
- package/packages/omo-codex/plugin/components/rules/test/codex-hook.test.ts +667 -0
- package/packages/omo-codex/plugin/components/rules/test/engine.test.ts +192 -0
- package/packages/omo-codex/plugin/components/rules/test/finder.test.ts +102 -0
- package/packages/omo-codex/plugin/components/rules/test/formatter.test.ts +168 -0
- package/packages/omo-codex/plugin/components/rules/test/hook-output.test.ts +42 -0
- package/packages/omo-codex/plugin/components/rules/test/matcher.test.ts +206 -0
- package/packages/omo-codex/plugin/components/rules/test/package-smoke.test.ts +151 -0
- package/packages/omo-codex/plugin/components/rules/test/persistent-cache.test.ts +63 -0
- package/packages/omo-codex/plugin/components/rules/test/post-compact-budget.test.ts +172 -0
- package/packages/omo-codex/plugin/components/rules/test/post-compact-test-fixture.ts +196 -0
- package/packages/omo-codex/plugin/components/rules/test/scanner.test.ts +63 -0
- package/packages/omo-codex/plugin/components/rules/test/tool-paths.test.ts +198 -0
- package/packages/omo-codex/plugin/components/rules/tsconfig.build.json +12 -0
- package/packages/omo-codex/plugin/components/rules/tsconfig.json +27 -0
- package/packages/omo-codex/plugin/components/rules/vitest.config.ts +8 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/.gitattributes +13 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/AGENTS.md +43 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/CHANGELOG.md +5 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/LICENSE +21 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/NOTICE +5 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/README.md +55 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/biome.json +48 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/directive.md +51 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/hooks/hooks.json +28 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/package.json +53 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/src/boulder-reader.ts +167 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/src/cli.ts +52 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/src/codex-hook.ts +66 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/src/directive.ts +6 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/src/index.ts +5 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/src/types.ts +23 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/boulder-reader.test.ts +63 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/cli.test.ts +124 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/codex-hook.test.ts +160 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/boulder-completed.json +19 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/boulder-mixed-platforms.json +27 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/boulder-single-codex-work.json +19 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-all-done.md +5 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-with-nested-checkboxes.md +11 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/test/fixtures/plan-with-unchecked.md +6 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/tsconfig.build.json +12 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/tsconfig.json +27 -0
- package/packages/omo-codex/plugin/components/start-work-continuation/vitest.config.ts +10 -0
- package/packages/omo-codex/plugin/components/telemetry/AGENTS.md +37 -0
- package/packages/omo-codex/plugin/components/telemetry/README.md +102 -0
- package/packages/omo-codex/plugin/components/telemetry/biome.json +48 -0
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +16 -0
- package/packages/omo-codex/plugin/components/telemetry/package.json +56 -0
- package/packages/omo-codex/plugin/components/telemetry/src/atomic-write.ts +22 -0
- package/packages/omo-codex/plugin/components/telemetry/src/cli.ts +69 -0
- package/packages/omo-codex/plugin/components/telemetry/src/codex-hook.ts +49 -0
- package/packages/omo-codex/plugin/components/telemetry/src/data-path.ts +45 -0
- package/packages/omo-codex/plugin/components/telemetry/src/env-flags.ts +43 -0
- package/packages/omo-codex/plugin/components/telemetry/src/posthog-activity-state.ts +81 -0
- package/packages/omo-codex/plugin/components/telemetry/src/posthog.ts +165 -0
- package/packages/omo-codex/plugin/components/telemetry/src/product-identity.ts +35 -0
- package/packages/omo-codex/plugin/components/telemetry/test/codex-hook.test.ts +270 -0
- package/packages/omo-codex/plugin/components/telemetry/tsconfig.build.json +12 -0
- package/packages/omo-codex/plugin/components/telemetry/tsconfig.json +27 -0
- package/packages/omo-codex/plugin/components/telemetry/vitest.config.ts +8 -0
- package/packages/omo-codex/plugin/components/ultrawork/AGENTS.md +41 -0
- package/packages/omo-codex/plugin/components/ultrawork/CHANGELOG.md +25 -0
- package/packages/omo-codex/plugin/components/ultrawork/LICENSE +21 -0
- package/packages/omo-codex/plugin/components/ultrawork/NOTICE +5 -0
- package/packages/omo-codex/plugin/components/ultrawork/README.md +60 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/codex-ultrawork-reviewer.toml +17 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/explorer.toml +82 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/librarian.toml +221 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/metis.toml +65 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/momus.toml +69 -0
- package/packages/omo-codex/plugin/components/ultrawork/agents/plan.toml +163 -0
- package/packages/omo-codex/plugin/components/ultrawork/biome.json +48 -0
- package/packages/omo-codex/plugin/components/ultrawork/directive.md +264 -0
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +16 -0
- package/packages/omo-codex/plugin/components/ultrawork/package.json +54 -0
- package/packages/omo-codex/plugin/components/ultrawork/src/cli.ts +50 -0
- package/packages/omo-codex/plugin/components/ultrawork/src/codex-hook.ts +84 -0
- package/packages/omo-codex/plugin/components/ultrawork/src/directive.ts +3 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/codex-hook.test.ts +252 -0
- package/packages/omo-codex/plugin/components/ultrawork/test/package-smoke.test.ts +78 -0
- package/packages/omo-codex/plugin/components/ultrawork/tsconfig.build.json +12 -0
- package/packages/omo-codex/plugin/components/ultrawork/tsconfig.json +27 -0
- package/packages/omo-codex/plugin/components/ulw-loop/.gitattributes +13 -0
- package/packages/omo-codex/plugin/components/ulw-loop/AGENTS.md +48 -0
- package/packages/omo-codex/plugin/components/ulw-loop/CHANGELOG.md +7 -0
- package/packages/omo-codex/plugin/components/ulw-loop/LICENSE +21 -0
- package/packages/omo-codex/plugin/components/ulw-loop/NOTICE +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/README.md +74 -0
- package/packages/omo-codex/plugin/components/ulw-loop/biome.json +48 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +29 -0
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +55 -0
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/.gitkeep +0 -0
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/SKILL.md +222 -0
- package/packages/omo-codex/plugin/components/ulw-loop/skills/ulw-loop/agents/openai.yaml +6 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/.gitkeep +0 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/checkpoint.ts +155 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-arg-parser.ts +95 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-commands.ts +156 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-output.ts +63 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli-steering.ts +94 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/cli.ts +40 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-instruction.ts +129 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-goal-snapshot.ts +139 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/codex-hook.ts +177 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/evidence.ts +122 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/goal-status.ts +88 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/paths.ts +73 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-crud.ts +113 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/plan-io.ts +124 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/quality-gate.ts +102 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/review-blockers.ts +81 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/steering.ts +270 -0
- package/packages/omo-codex/plugin/components/ulw-loop/src/types.ts +277 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/checkpoint.test.ts +213 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-commands.test.ts +375 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-helpers.test.ts +250 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/cli-steering.test.ts +407 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-instruction.test.ts +169 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-goal-snapshot.test.ts +156 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/codex-hook.test.ts +275 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/evidence-criteria-gate.test.ts +100 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/evidence.test.ts +263 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/.gitkeep +0 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/codex-goal-snapshot.json +1 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-brief.md +5 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-plan.json +108 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/sample-quality-gate.json +18 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/steering-proposal.json +8 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/fixtures/user-prompt-submit.json +10 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/goal-status.test.ts +327 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/package-smoke.test.ts +164 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/paths.test.ts +62 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-crud.test.ts +256 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/plan-io.test.ts +239 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/quality-gate.test.ts +203 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/review-blockers.test.ts +180 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/steering.test.ts +353 -0
- package/packages/omo-codex/plugin/components/ulw-loop/test/types.test.ts +79 -0
- package/packages/omo-codex/plugin/components/ulw-loop/tsconfig.build.json +12 -0
- package/packages/omo-codex/plugin/components/ulw-loop/tsconfig.json +27 -0
- package/packages/omo-codex/plugin/components/ulw-loop/vitest.config.ts +10 -0
- package/packages/omo-codex/plugin/hooks/hooks.json +138 -0
- package/packages/omo-codex/plugin/package-lock.json +1750 -0
- package/packages/omo-codex/plugin/package.json +26 -0
- package/packages/omo-codex/plugin/scripts/build-bundled-mcp-runtimes.mjs +50 -0
- package/packages/omo-codex/plugin/scripts/build-components.mjs +23 -0
- package/packages/omo-codex/plugin/scripts/hook-status-message.mjs +46 -0
- package/packages/omo-codex/plugin/scripts/sync-skills.mjs +75 -0
- package/packages/omo-codex/plugin/skills/comment-checker/SKILL.md +16 -0
- package/packages/omo-codex/plugin/skills/debugging/SKILL.md +116 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/00-setup.md +108 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/02-investigate.md +130 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/04-oracle-triple.md +136 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/05-escalate.md +69 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/06-fix.md +116 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/08-qa.md +94 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/09-cleanup.md +164 -0
- package/packages/omo-codex/plugin/skills/debugging/references/methodology/partial-runtime-evidence.md +229 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/bundled-js-binary.md +415 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/go.md +252 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/native-binary.md +484 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/node.md +260 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/python.md +248 -0
- package/packages/omo-codex/plugin/skills/debugging/references/runtimes/rust.md +234 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/ghidra.md +212 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/playwright-cli.md +194 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/pwndbg.md +263 -0
- package/packages/omo-codex/plugin/skills/debugging/references/tools/pwntools.md +265 -0
- package/packages/omo-codex/plugin/skills/frontend-ui-ux/SKILL.md +77 -0
- package/packages/omo-codex/plugin/skills/init-deep/SKILL.md +325 -0
- package/packages/omo-codex/plugin/skills/lsp/SKILL.md +35 -0
- package/packages/omo-codex/plugin/skills/programming/SKILL.md +463 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/README.md +90 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/backend-stack.md +641 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/bootstrap.md +328 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/bubbletea-v2.md +360 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/cobra-stack.md +468 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/concurrency.md +362 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/data-modeling.md +329 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/error-handling.md +359 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/golangci-strict.md +236 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/grpc-connect.md +375 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/libraries.md +337 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/one-liners.md +202 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/sqlc-pgx.md +471 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/testing.md +467 -0
- package/packages/omo-codex/plugin/skills/programming/references/go/type-patterns.md +298 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/README.md +314 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/async-anyio.md +442 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/data-modeling.md +233 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/data-processing.md +133 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/error-handling.md +218 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/fastapi-stack.md +316 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/httpx2-optimization.md +360 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/libraries.md +307 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/one-liners.md +268 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/orjson-stack.md +378 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/pydantic-ai.md +285 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/pyproject-strict.md +232 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/textual-tui.md +201 -0
- package/packages/omo-codex/plugin/skills/programming/references/python/type-patterns.md +176 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/README.md +317 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/async-tokio.md +299 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/axum-stack.md +467 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/cargo-strict.md +317 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/clap-stack.md +409 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/concurrency.md +375 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/libraries.md +439 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/one-liners.md +291 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/proptest-insta.md +429 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/type-state.md +354 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/unsafe-discipline.md +250 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust/zero-cost-safety.md +527 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust-ub/README.md +289 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust-ub/miri-sanitizers-loom.md +411 -0
- package/packages/omo-codex/plugin/skills/programming/references/rust-ub/ub-taxonomy.md +269 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/README.md +195 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/backend-hono.md +672 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/bootstrap.md +199 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/data-modeling.md +202 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/error-handling.md +169 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/tsconfig-strict.md +152 -0
- package/packages/omo-codex/plugin/skills/programming/references/typescript/type-patterns.md +196 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/check-no-excuse-rules.sh +173 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/new-project.py +138 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/.editorconfig +13 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/.golangci.yml +95 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/AGENTS.md.tmpl +24 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/README.md.tmpl +12 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/Taskfile.yml +40 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/ci.yml +37 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/config.go +24 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/gitignore +15 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/main.go.tmpl +22 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/go/templates/run.go +15 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/python/check-no-excuse-rules.py +687 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/python/new-project.py +172 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/python/new-script.py +116 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.py +296 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/rust/check-no-excuse-rules.sh +158 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/rust/new-project.py +175 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/check-no-excuse-rules.ts +282 -0
- package/packages/omo-codex/plugin/skills/programming/scripts/typescript/new-project.ts +177 -0
- package/packages/omo-codex/plugin/skills/refactor/SKILL.md +779 -0
- package/packages/omo-codex/plugin/skills/remove-ai-slops/SKILL.md +333 -0
- package/packages/omo-codex/plugin/skills/review-work/SKILL.md +549 -0
- package/packages/omo-codex/plugin/skills/rules/SKILL.md +34 -0
- package/packages/omo-codex/plugin/skills/start-work/SKILL.md +129 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/.gitkeep +0 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/SKILL.md +222 -0
- package/packages/omo-codex/plugin/skills/ulw-loop/agents/openai.yaml +6 -0
- package/packages/omo-codex/plugin/skills/ulw-plan/SKILL.md +399 -0
- package/packages/omo-codex/plugin/test/aggregate.test.mjs +330 -0
- package/packages/omo-codex/plugin/test/component-bin-names.test.mjs +66 -0
- package/packages/omo-codex/plugin/test/hook-status-message.test.mjs +150 -0
- package/packages/omo-codex/plugin/test/sync-skills.test.mjs +199 -0
- package/packages/omo-codex/scripts/install/agents.mjs +84 -0
- package/packages/omo-codex/scripts/install/cache.mjs +245 -0
- package/packages/omo-codex/scripts/install/command-shim.mjs +1 -0
- package/packages/omo-codex/scripts/install/config.mjs +229 -0
- package/packages/omo-codex/scripts/install/hook-trust.mjs +84 -0
- package/packages/omo-codex/scripts/install/legacy-bins.mjs +57 -0
- package/packages/omo-codex/scripts/install/marketplace.mjs +104 -0
- package/packages/omo-codex/scripts/install/mcp-runtime-cache.mjs +77 -0
- package/packages/omo-codex/scripts/install/multi-agent-v2-config.mjs +32 -0
- package/packages/omo-codex/scripts/install/process.mjs +19 -0
- package/packages/omo-codex/scripts/install/snapshot.mjs +54 -0
- package/packages/omo-codex/scripts/install/toml-editor.mjs +47 -0
- package/packages/omo-codex/scripts/install/utils.mjs +15 -0
- package/packages/omo-codex/scripts/install-agent-links.test.mjs +104 -0
- package/packages/omo-codex/scripts/install-bin-links.test.mjs +123 -0
- package/packages/omo-codex/scripts/install-cache-copy.test.mjs +30 -0
- package/packages/omo-codex/scripts/install-config.test.mjs +118 -0
- package/packages/omo-codex/scripts/install-local.mjs +192 -0
- package/packages/omo-codex/scripts/install-local.test.mjs +379 -0
- package/packages/omo-codex/scripts/install-mcp-runtime.test.mjs +173 -0
- package/packages/omo-codex/scripts/install-test-fixtures.mjs +58 -0
- package/packages/omo-codex/scripts/sync-telemetry-component.mjs +115 -0
- package/packages/omo-codex/scripts/sync-telemetry-component.test.mjs +94 -0
- package/packages/shared-skills/index.mjs +5 -0
- package/packages/shared-skills/package.json +14 -0
- package/packages/shared-skills/skills/debugging/SKILL.md +116 -0
- package/packages/shared-skills/skills/debugging/references/methodology/00-setup.md +108 -0
- package/packages/shared-skills/skills/debugging/references/methodology/02-investigate.md +130 -0
- package/packages/shared-skills/skills/debugging/references/methodology/04-oracle-triple.md +136 -0
- package/packages/shared-skills/skills/debugging/references/methodology/05-escalate.md +69 -0
- package/packages/shared-skills/skills/debugging/references/methodology/06-fix.md +116 -0
- package/packages/shared-skills/skills/debugging/references/methodology/08-qa.md +94 -0
- package/packages/shared-skills/skills/debugging/references/methodology/09-cleanup.md +164 -0
- package/packages/shared-skills/skills/debugging/references/methodology/partial-runtime-evidence.md +229 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/bundled-js-binary.md +415 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/go.md +252 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/native-binary.md +484 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/node.md +260 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/python.md +248 -0
- package/packages/shared-skills/skills/debugging/references/runtimes/rust.md +234 -0
- package/packages/shared-skills/skills/debugging/references/tools/ghidra.md +212 -0
- package/packages/shared-skills/skills/debugging/references/tools/playwright-cli.md +194 -0
- package/packages/shared-skills/skills/debugging/references/tools/pwndbg.md +263 -0
- package/packages/shared-skills/skills/debugging/references/tools/pwntools.md +265 -0
- package/packages/shared-skills/skills/frontend-ui-ux/SKILL.md +77 -0
- package/packages/shared-skills/skills/init-deep/SKILL.md +309 -0
- package/packages/shared-skills/skills/programming/SKILL.md +463 -0
- package/packages/shared-skills/skills/programming/references/go/README.md +90 -0
- package/packages/shared-skills/skills/programming/references/go/backend-stack.md +641 -0
- package/packages/shared-skills/skills/programming/references/go/bootstrap.md +328 -0
- package/packages/shared-skills/skills/programming/references/go/bubbletea-v2.md +360 -0
- package/packages/shared-skills/skills/programming/references/go/cobra-stack.md +468 -0
- package/packages/shared-skills/skills/programming/references/go/concurrency.md +362 -0
- package/packages/shared-skills/skills/programming/references/go/data-modeling.md +329 -0
- package/packages/shared-skills/skills/programming/references/go/error-handling.md +359 -0
- package/packages/shared-skills/skills/programming/references/go/golangci-strict.md +236 -0
- package/packages/shared-skills/skills/programming/references/go/grpc-connect.md +375 -0
- package/packages/shared-skills/skills/programming/references/go/libraries.md +337 -0
- package/packages/shared-skills/skills/programming/references/go/one-liners.md +202 -0
- package/packages/shared-skills/skills/programming/references/go/sqlc-pgx.md +471 -0
- package/packages/shared-skills/skills/programming/references/go/testing.md +467 -0
- package/packages/shared-skills/skills/programming/references/go/type-patterns.md +298 -0
- package/packages/shared-skills/skills/programming/references/python/README.md +314 -0
- package/packages/shared-skills/skills/programming/references/python/async-anyio.md +442 -0
- package/packages/shared-skills/skills/programming/references/python/data-modeling.md +233 -0
- package/packages/shared-skills/skills/programming/references/python/data-processing.md +133 -0
- package/packages/shared-skills/skills/programming/references/python/error-handling.md +218 -0
- package/packages/shared-skills/skills/programming/references/python/fastapi-stack.md +316 -0
- package/packages/shared-skills/skills/programming/references/python/httpx2-optimization.md +360 -0
- package/packages/shared-skills/skills/programming/references/python/libraries.md +307 -0
- package/packages/shared-skills/skills/programming/references/python/one-liners.md +268 -0
- package/packages/shared-skills/skills/programming/references/python/orjson-stack.md +378 -0
- package/packages/shared-skills/skills/programming/references/python/pydantic-ai.md +285 -0
- package/packages/shared-skills/skills/programming/references/python/pyproject-strict.md +232 -0
- package/packages/shared-skills/skills/programming/references/python/textual-tui.md +201 -0
- package/packages/shared-skills/skills/programming/references/python/type-patterns.md +176 -0
- package/packages/shared-skills/skills/programming/references/rust/README.md +317 -0
- package/packages/shared-skills/skills/programming/references/rust/async-tokio.md +299 -0
- package/packages/shared-skills/skills/programming/references/rust/axum-stack.md +467 -0
- package/packages/shared-skills/skills/programming/references/rust/cargo-strict.md +317 -0
- package/packages/shared-skills/skills/programming/references/rust/clap-stack.md +409 -0
- package/packages/shared-skills/skills/programming/references/rust/concurrency.md +375 -0
- package/packages/shared-skills/skills/programming/references/rust/libraries.md +439 -0
- package/packages/shared-skills/skills/programming/references/rust/one-liners.md +291 -0
- package/packages/shared-skills/skills/programming/references/rust/proptest-insta.md +429 -0
- package/packages/shared-skills/skills/programming/references/rust/type-state.md +354 -0
- package/packages/shared-skills/skills/programming/references/rust/unsafe-discipline.md +250 -0
- package/packages/shared-skills/skills/programming/references/rust/zero-cost-safety.md +527 -0
- package/packages/shared-skills/skills/programming/references/rust-ub/README.md +289 -0
- package/packages/shared-skills/skills/programming/references/rust-ub/miri-sanitizers-loom.md +411 -0
- package/packages/shared-skills/skills/programming/references/rust-ub/ub-taxonomy.md +269 -0
- package/packages/shared-skills/skills/programming/references/typescript/README.md +195 -0
- package/packages/shared-skills/skills/programming/references/typescript/backend-hono.md +672 -0
- package/packages/shared-skills/skills/programming/references/typescript/bootstrap.md +199 -0
- package/packages/shared-skills/skills/programming/references/typescript/data-modeling.md +202 -0
- package/packages/shared-skills/skills/programming/references/typescript/error-handling.md +169 -0
- package/packages/shared-skills/skills/programming/references/typescript/tsconfig-strict.md +152 -0
- package/packages/shared-skills/skills/programming/references/typescript/type-patterns.md +196 -0
- package/packages/shared-skills/skills/programming/scripts/go/check-no-excuse-rules.sh +173 -0
- package/packages/shared-skills/skills/programming/scripts/go/new-project.py +138 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/.editorconfig +13 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/.golangci.yml +95 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/AGENTS.md.tmpl +24 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/README.md.tmpl +12 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/Taskfile.yml +40 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/ci.yml +37 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/config.go +24 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/gitignore +15 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/main.go.tmpl +22 -0
- package/packages/shared-skills/skills/programming/scripts/go/templates/run.go +15 -0
- package/packages/shared-skills/skills/programming/scripts/python/check-no-excuse-rules.py +687 -0
- package/packages/shared-skills/skills/programming/scripts/python/new-project.py +172 -0
- package/packages/shared-skills/skills/programming/scripts/python/new-script.py +116 -0
- package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.py +296 -0
- package/packages/shared-skills/skills/programming/scripts/rust/check-no-excuse-rules.sh +158 -0
- package/packages/shared-skills/skills/programming/scripts/rust/new-project.py +175 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/check-no-excuse-rules.ts +282 -0
- package/packages/shared-skills/skills/programming/scripts/typescript/new-project.ts +177 -0
- package/packages/shared-skills/skills/refactor/SKILL.md +763 -0
- package/packages/shared-skills/skills/remove-ai-slops/SKILL.md +317 -0
- package/packages/shared-skills/skills/review-work/SKILL.md +549 -0
- package/packages/shared-skills/skills/start-work/SKILL.md +129 -0
- package/packages/shared-skills/skills/ulw-plan/SKILL.md +383 -0
- package/postinstall.mjs +6 -2
- package/dist/features/builtin-commands/templates/init-deep.d.ts +0 -1
- package/dist/features/builtin-skills/skills/ai-slop-remover.d.ts +0 -2
package/packages/shared-skills/skills/debugging/references/methodology/partial-runtime-evidence.md
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Partial Runtime Evidence — When You Cannot Execute the Real Operation
|
|
2
|
+
|
|
3
|
+
Read this when **runtime truth beats code reading** is in conflict with **you cannot run the actual operation**.
|
|
4
|
+
|
|
5
|
+
The skill's first invariant is "runtime state is the only source of truth." But sometimes the only state you can produce is a *partial* observation — the real call requires paid credits, a hardware device you don't have, network access through a corporate proxy, a production secret, or a customer dataset.
|
|
6
|
+
|
|
7
|
+
**Partial runtime evidence is still runtime evidence.** This reference tells you which partial signals to harvest and how to combine them so the conclusion is defensible.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## When this applies
|
|
12
|
+
|
|
13
|
+
Use this reference when ALL are true:
|
|
14
|
+
|
|
15
|
+
1. The bug or extraction question requires runtime confirmation (per skill invariant #1).
|
|
16
|
+
2. You attempted the obvious "just run it" path and it failed for reasons unrelated to the bug:
|
|
17
|
+
- 401/402/403 from a paid API
|
|
18
|
+
- "device not found" / "permission denied" / SIP block
|
|
19
|
+
- Production-only credentials
|
|
20
|
+
- Network isolation (air-gapped, behind VPN you don't have)
|
|
21
|
+
- Time-of-day or quota limits
|
|
22
|
+
3. **Mocking the entire system** would defeat the verification — you specifically need evidence about how the *real* code behaves, not a stub.
|
|
23
|
+
|
|
24
|
+
If only #1 and #2 are true and you can mock cleanly, just mock and proceed. This file is for cases where mocking would invalidate the answer.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## The hierarchy of partial evidence (strongest first)
|
|
29
|
+
|
|
30
|
+
When you cannot capture the full outbound payload + full response, capture as much as possible from this list. **Evidence further down the list has more inference; evidence higher up is closer to ground truth.**
|
|
31
|
+
|
|
32
|
+
### Tier 1 — Pre-send / post-receive logs (best partial evidence)
|
|
33
|
+
|
|
34
|
+
The system you're investigating builds a request, then sends it. If the build step logs the assembled request **before** transmission, that log is ground truth for everything except the wire-level bytes (TLS, headers added by HTTP library, etc.).
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# Maximize debug logging
|
|
38
|
+
APP_DEBUG=1 APP_LOG_LEVEL=debug APP_LOG_FILE=/tmp/trace.log ./target -x "minimal valid input" 2>&1 | head -200
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Look for log lines like:
|
|
42
|
+
- `Building request: model=X, params={...}`
|
|
43
|
+
- `[provider] payload: {...}`
|
|
44
|
+
- `Sending to <url>: <serialized body>`
|
|
45
|
+
|
|
46
|
+
**Strength**: 95% of ground truth. Missing only wire-level transformations.
|
|
47
|
+
|
|
48
|
+
### Tier 2 — Local interception via proxy / shim
|
|
49
|
+
|
|
50
|
+
Run the real binary against a local proxy that records and (optionally) returns a canned response.
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# mitmproxy approach
|
|
54
|
+
mitmproxy --listen-host 127.0.0.1 --listen-port 8888 --mode regular &
|
|
55
|
+
HTTPS_PROXY=http://127.0.0.1:8888 SSL_CERT_FILE=~/.mitmproxy/mitmproxy-ca-cert.pem ./target ...
|
|
56
|
+
# Now mitmproxy logs the actual TLS-decrypted request
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# DYLD_INSERT_LIBRARIES / LD_PRELOAD shim approach
|
|
61
|
+
# Wrap the network call to log payload, return a fake 200
|
|
62
|
+
# See pwntools.md for shim examples
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Strength**: Wire-level ground truth, but requires the target to honor your proxy / preload.
|
|
66
|
+
|
|
67
|
+
### Tier 3 — Static extraction × runtime fingerprint cross-check
|
|
68
|
+
|
|
69
|
+
When you cannot send a request at all, you can still cross-check static analysis with whatever the binary does that *doesn't* require the real call:
|
|
70
|
+
|
|
71
|
+
- The binary builds the request — even if sending fails, the build step ran. Trace it (Tier 1).
|
|
72
|
+
- The binary writes a state file or cache — read it.
|
|
73
|
+
- The binary emits version-specific User-Agent strings; verify they match your static extraction.
|
|
74
|
+
- The binary's `--help` or `--version` output reveals build metadata; verify model lists / feature flags.
|
|
75
|
+
|
|
76
|
+
**Strength**: Disjoint evidence sources confirming the same fact. Two independent partial signals that agree are nearly as strong as one full observation.
|
|
77
|
+
|
|
78
|
+
### Tier 4 — Contrastive runtime under different inputs
|
|
79
|
+
|
|
80
|
+
If you can run with input variant A but not B, run A and reason about B from code:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# A: minimal trial input — works for free tier
|
|
84
|
+
./target --action=read --resource=local-file
|
|
85
|
+
# B: full inference call — paid tier required, blocked
|
|
86
|
+
# But the request-building code is shared between A and B!
|
|
87
|
+
# Capture A's logs, then inspect the code path for B and verify only the model/endpoint diff.
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**Strength**: Confirms shared code paths; remaining gap is only the difference between A and B.
|
|
91
|
+
|
|
92
|
+
### Tier 5 — Vendor-published API logs / dashboard
|
|
93
|
+
|
|
94
|
+
If the operation succeeded earlier (before quota ran out, before access was revoked), the vendor's dashboard / audit log may show the request. Lower fidelity but still observed behavior.
|
|
95
|
+
|
|
96
|
+
**Strength**: Real wire data, but often summarized — token counts, status codes, no payload bodies.
|
|
97
|
+
|
|
98
|
+
### Tier 6 — Pure code reading with peer review
|
|
99
|
+
|
|
100
|
+
If literally none of the above is available, read the code carefully and submit it to **one Oracle for skeptical review** (see "Verification Oracle" below). This is the weakest tier and you must explicitly mark conclusions as "unverified" in the journal.
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## How to combine partial signals
|
|
105
|
+
|
|
106
|
+
A defensible conclusion **prefers two independent signals from different tiers**, with one exception: a complete Tier 2 wire-level capture is wire-level ground truth and can stand alone for request-shape claims (because the wire bytes are exactly what the remote received). For *behavioral* claims (what the system does next, what state it stores, what side effects it produces), still combine with another signal.
|
|
107
|
+
|
|
108
|
+
| Available evidence | Defensibility |
|
|
109
|
+
|---|---|
|
|
110
|
+
| Tier 1 + Tier 1 (same log, different lines) | weak — single source |
|
|
111
|
+
| Tier 1 + Tier 2 (debug log + proxy capture) | **strong** — independent confirmation |
|
|
112
|
+
| Tier 1 + Tier 3 (debug log + version output cross-check) | **strong** — disjoint sources |
|
|
113
|
+
| Tier 2 alone (full proxy capture) | strong **for request-shape claims only** — stands alone for "what bytes were sent". Add a second signal for response-handling or state claims. |
|
|
114
|
+
| Tier 3 + Tier 4 (cross-check + contrastive run) | medium — both partial |
|
|
115
|
+
| Tier 6 alone (code reading only) | **insufficient** — escalate or mark unverified |
|
|
116
|
+
|
|
117
|
+
Record in the journal:
|
|
118
|
+
|
|
119
|
+
```markdown
|
|
120
|
+
## Partial runtime evidence
|
|
121
|
+
### Question being verified
|
|
122
|
+
<the specific claim, e.g. "Opus 4.7 default effort is 'high'">
|
|
123
|
+
|
|
124
|
+
### Available signals
|
|
125
|
+
- Tier 1: debug log /tmp/trace.log line 47-49 shows `effort: "high"` ✓
|
|
126
|
+
- Tier 3: static extraction of m5T() function returns "high" for smart mode ✓
|
|
127
|
+
- Tier 6: code path verified by reading prompt-builder.js ✓
|
|
128
|
+
|
|
129
|
+
### Independence assessment
|
|
130
|
+
Tier 1 and Tier 3 are independent — the log was emitted by a different
|
|
131
|
+
code path than m5T() and would diverge if the static reading were wrong.
|
|
132
|
+
|
|
133
|
+
### Conclusion
|
|
134
|
+
VERIFIED via Tier 1 + Tier 3 agreement. No need to escalate.
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
If you cannot achieve a complete Tier 2 capture **or** two independent non-Tier-6 signals from the table above, **write an explicit note in the deliverable**:
|
|
138
|
+
|
|
139
|
+
> ⚠️ Partial-evidence finding. The full outbound payload could not be captured because [reason]. The conclusion rests on:
|
|
140
|
+
> - [signal A — tier and source]
|
|
141
|
+
> - [signal B — tier and source]
|
|
142
|
+
> A future verification should attempt [the missing tier] when [condition].
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Verification Oracle pattern (for non-debug tasks)
|
|
147
|
+
|
|
148
|
+
The skill's main Oracle Triple (`04-oracle-triple.md`) is for **stuck debugging** — 2 failed rounds, mental box, three orthogonal framings to break out.
|
|
149
|
+
|
|
150
|
+
For tasks where the deliverable is an **artifact, not a bug fix** (reverse engineering, extraction, audit, compliance documentation), use a different pattern: **single Oracle, late, skeptical, with the deliverable in hand**.
|
|
151
|
+
|
|
152
|
+
### When to invoke
|
|
153
|
+
|
|
154
|
+
- Right before declaring an extraction/audit task "done"
|
|
155
|
+
- After every significant revision of the deliverable (not after every small edit)
|
|
156
|
+
- Maximum 3-4 iterations before escalating to user
|
|
157
|
+
|
|
158
|
+
### Pattern
|
|
159
|
+
|
|
160
|
+
```
|
|
161
|
+
task(subagent_type="oracle", load_skills=[], run_in_background=false,
|
|
162
|
+
prompt="""
|
|
163
|
+
SKEPTICAL FINAL VERIFICATION — be critical, look for reasons the task is incomplete or wrong.
|
|
164
|
+
|
|
165
|
+
## Original task
|
|
166
|
+
<verbatim user request>
|
|
167
|
+
|
|
168
|
+
## What I produced
|
|
169
|
+
<list of artifacts with paths and brief descriptions>
|
|
170
|
+
|
|
171
|
+
## Specific claims to verify
|
|
172
|
+
<bullet list of every concrete claim in the deliverable>
|
|
173
|
+
|
|
174
|
+
## Where to look
|
|
175
|
+
<paths the Oracle should Read / Bash to verify>
|
|
176
|
+
|
|
177
|
+
## Your job
|
|
178
|
+
1. Read the deliverables.
|
|
179
|
+
2. Spot-check each claim against the source/evidence the deliverable cites.
|
|
180
|
+
3. Identify any unsubstantiated claims, missing pieces, or factual errors.
|
|
181
|
+
4. End with PASS / FAIL / PARTIAL with specific gaps.
|
|
182
|
+
Be skeptical. Don't rubber-stamp.
|
|
183
|
+
""")
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Why this differs from the Oracle Triple
|
|
187
|
+
|
|
188
|
+
| | Oracle Triple (debug) | Verification Oracle (artifact) |
|
|
189
|
+
|---|---|---|
|
|
190
|
+
| Trigger | 2 failed hypothesis rounds | About to declare "done" |
|
|
191
|
+
| Count | 3 in parallel, orthogonal framings | 1 sequential, focused review |
|
|
192
|
+
| Goal | Break out of mental box | Catch unsubstantiated claims |
|
|
193
|
+
| Tone of prompt | Brainstorm wide alternatives | Skeptical audit |
|
|
194
|
+
| Iteration | Reset hypothesis set after | Fix gaps, re-invoke until PASS |
|
|
195
|
+
|
|
196
|
+
### Don't conflate them
|
|
197
|
+
|
|
198
|
+
If you're stuck debugging, do the Triple. If you have a deliverable and need it audited, do the Verification Oracle. Doing the Triple on a finished extraction will return three diverging "what if you tried…" tangents that are not what you need. Doing the Verification Oracle on a stuck debugging session will return a polite "the evidence is incomplete" that you already knew.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Common partial-evidence anti-patterns
|
|
203
|
+
|
|
204
|
+
| Anti-pattern | Why it fails | Replacement |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| "It looks right in the code, so it works" | Tier 6 alone, unverified | Add at least one Tier 1-3 signal |
|
|
207
|
+
| "I ran it once, didn't error, so it's correct" | Absence of error ≠ presence of correctness | Capture the actual output and verify content |
|
|
208
|
+
| "The mock returns the value I wrote, so the code is fine" | Tautology — mock loops back your assumption | Use Tier 2 (proxy) instead, or cross-check with Tier 3 |
|
|
209
|
+
| "The vendor's dashboard shows my call worked" | Dashboard often only shows status code, not behavior | Combine with Tier 1 if available |
|
|
210
|
+
| "I'll trust the most-recent stack overflow answer" | Code from a different version / context | Verify against the actual binary you have |
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Cleanup additions for partial-evidence work
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# Proxy artifacts
|
|
218
|
+
pkill -f mitmproxy 2>/dev/null
|
|
219
|
+
rm -f ~/.mitmproxy/cache_* 2>/dev/null
|
|
220
|
+
|
|
221
|
+
# Debug log files
|
|
222
|
+
rm -f /tmp/trace.log /tmp/*-debug-trace.log
|
|
223
|
+
|
|
224
|
+
# DYLD_INSERT / LD_PRELOAD shim libraries
|
|
225
|
+
rm -f /tmp/*.dylib /tmp/*.so
|
|
226
|
+
|
|
227
|
+
# Verify env vars set in your shell are not persisted
|
|
228
|
+
unset HTTPS_PROXY APP_DEBUG APP_LOG_LEVEL APP_LOG_FILE 2>/dev/null
|
|
229
|
+
```
|
|
@@ -0,0 +1,415 @@
|
|
|
1
|
+
# Bundled-JS / Embedded-Source Binaries (Bun SEA, Node SEA, Deno compile, pkg, Electron, PyInstaller)
|
|
2
|
+
|
|
3
|
+
A growing class of "binaries" are not stripped C/C++ at all — they are a runtime VM glued onto a high-level-language bundle. The bundle is **plaintext or trivially-decodable** inside the binary.
|
|
4
|
+
|
|
5
|
+
If you reach for `native-binary.md` workflow on these (Ghidra → pwndbg → hex), you will waste hours decompiling a runtime you don't care about while the actual logic sits exposed three megabytes away.
|
|
6
|
+
|
|
7
|
+
**This reference exists because the workflow is fundamentally different from stripped C.**
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## When to use this reference instead of `native-binary.md`
|
|
12
|
+
|
|
13
|
+
Open this if `file ./target` shows a generic Mach-O / ELF / PE BUT any of:
|
|
14
|
+
|
|
15
|
+
- Size is suspiciously large (50 MB+ for a "simple CLI")
|
|
16
|
+
- `strings -n 8 ./target | rg -i "node_modules|webpack|esbuild|bun|pkg/lib|electron|pyinstaller"` returns hits
|
|
17
|
+
- The binary's CLI flags include things like `--inspect`, `--unhandled-rejections`, npm-style help text
|
|
18
|
+
- Vendor docs say it's built with Bun / pkg / nexe / Deno compile / PyInstaller / Electron / Tauri (UI shell)
|
|
19
|
+
- `head -c 4 ./target | xxd` shows a known runtime magic for an embedded archive section
|
|
20
|
+
|
|
21
|
+
If yes → **stop following `native-binary.md` and follow this**. Triage and dynamic tracing are the same. Static analysis is completely different.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## The workflow
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
[1] Triage → identify the bundler (Bun? pkg? Deno? Electron? PyInstaller?)
|
|
29
|
+
[2] Locate the bundle → find where the embedded source archive starts
|
|
30
|
+
[3] Extract → dump source to disk so you can grep / read it
|
|
31
|
+
[4] Source-level static analysis (rg + Read, NOT Ghidra)
|
|
32
|
+
[5] Runtime verification → debug logs, --inspect, partial-evidence patterns
|
|
33
|
+
[6] Fix / report
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Step 3 is the unlock — once you have plaintext source on disk, the rest is normal codebase exploration.
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## [1] Identify the bundler — 30-second fingerprint
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Look for runtime-specific markers in plaintext strings
|
|
44
|
+
strings -n 12 ./target 2>/dev/null | rg -iE 'bun|node_modules|webpack|esbuild|deno|pkg/lib|electron|pyinstaller|nexe|NODE_SEA_FUSE|NODE_SEA_BLOB|tauri|ESZIP_V2|denort' | head -20
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
| Marker pattern | Bundler | Source format |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `@oven/bun-darwin`, `bun-lockfile-format-v`, `// @bun` | **Bun SEA** (compiled via `bun build --compile`) | Plaintext JS, single big bundle |
|
|
50
|
+
| `NODE_SEA_BLOB` + `NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2:1` | **Node SEA** (`node --build-sea` or `--experimental-sea-config`) | Plaintext JS, or V8 code cache (when `useCodeCache: true`), or startup snapshot (when `useSnapshot: true`) — the latter two are NOT plaintext |
|
|
51
|
+
| `pkg/lib/bootstrap.js`, `pkg/prelude`, `PAYLOAD_POSITION` | **pkg** (vercel/pkg) | Plaintext or v8 cached data |
|
|
52
|
+
| `ESZIP_V2`, `denort`, `deno_runtime` | **Deno compile** (`deno compile`) | TS/JS in eszip archive — readable but needs `eszip` crate to walk; not pure plaintext |
|
|
53
|
+
| `Electron`, `app.asar`, `chrome.dll`, `Squirrel.Mac` | **Electron** | `app.asar` archive (TAR-like with JSON header). Source is plaintext JS once extracted |
|
|
54
|
+
| `PyInstaller`, `pyz`, `_MEIPASS`, `pyi-os-utils` | **PyInstaller** | Compressed `.pyc` bytecode — needs `pyinstxtractor` + `decompyle3` to recover Python source |
|
|
55
|
+
| `nexe-`, `nexe_compile`, `:::nexe::` | **nexe** | Plaintext JS appended to node binary |
|
|
56
|
+
| `Tauri`, `tao`, `wry`, `tauri::generate_context` | **Tauri** (Rust shell + JS UI) | **Two worlds**: JS frontend in resource section is extractable here; Rust commands / core logic are native and require [native-binary.md](native-binary.md) |
|
|
57
|
+
|
|
58
|
+
If multiple match (e.g. Tauri + Bun): the outer shell is the first one (Tauri/Electron). The inner JS is the second one's format. **For Tauri specifically, expect to use both this reference (for the UI bundle) and `native-binary.md` (for the Rust binary side).**
|
|
59
|
+
|
|
60
|
+
> **Source-format reality check**: only Bun SEA, pkg (when not using `--public-packages`), nexe, and Electron `.asar` are reliably plaintext. Node SEA with code-cache or snapshot, PyInstaller `.pyc`, and Deno eszip require additional tooling. Don't assume `strings` will find readable code — verify the bundler first.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## [2] Locate the bundle
|
|
65
|
+
|
|
66
|
+
### Bun SEA — JS is just embedded plaintext
|
|
67
|
+
|
|
68
|
+
The JS source is concatenated into the binary as a giant template literal / string. No decoding needed.
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Verify by searching for typical JS bundle markers
|
|
72
|
+
strings -n 8 ./target | rg "function|var |let |const |async function" | head -5
|
|
73
|
+
|
|
74
|
+
# Find where the bundle starts (look for "use strict" or banner comment)
|
|
75
|
+
LC_ALL=C grep -aob '"use strict"' ./target | head -5
|
|
76
|
+
LC_ALL=C grep -aob '#!/usr/bin/env bun' ./target | head -5
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Node SEA — `NODE_SEA_BLOB` resource/segment + activated fuse
|
|
80
|
+
|
|
81
|
+
Per the [Node.js SEA docs](https://nodejs.org/api/single-executable-applications.html), a Node-built SEA contains:
|
|
82
|
+
- A resource (PE), section in `NODE_SEA` segment (Mach-O), or note (ELF) named `NODE_SEA_BLOB`
|
|
83
|
+
- The fuse string `NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2:1` (with trailing `:1` indicating injected; `:0` means a copy of the node binary that has not yet had a blob injected)
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Confirm it is a SEA at all
|
|
87
|
+
LC_ALL=C grep -aob 'NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2:1' ./target | head -1
|
|
88
|
+
|
|
89
|
+
# Find the blob resource/section
|
|
90
|
+
LC_ALL=C grep -aob 'NODE_SEA_BLOB' ./target | head
|
|
91
|
+
|
|
92
|
+
# On Mach-O, inspect the segment directly
|
|
93
|
+
otool -l ./target | grep -A4 'NODE_SEA'
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
The blob format is documented but non-trivial to walk by hand. For extraction, **use postject in reverse** (carve the section bytes) or read the blob via `node:sea` API from inside a debug build of the same binary. Plain `strings` will get you the embedded JS only when the SEA was built without `useCodeCache` and without `useSnapshot` — both of those replace plaintext with V8 cache data or startup snapshot bytes.
|
|
97
|
+
|
|
98
|
+
`node --build-sea sea-config.json` and `node --experimental-sea-config sea-config.json` *generate* SEA blobs; neither inspects an existing executable.
|
|
99
|
+
|
|
100
|
+
### Deno compile — eszip archive section
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
# Deno-compile binaries embed an eszip v2 archive
|
|
104
|
+
LC_ALL=C grep -aob 'ESZIP_V2' ./target | head -3
|
|
105
|
+
# Also confirm the runtime
|
|
106
|
+
LC_ALL=C grep -aob 'denort' ./target | head -1
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
To extract, use the `eszip` Rust crate (or the `@deno/eszip` JS port) to parse the archive after carving it out at the offset above. There is no stable Deno CLI flag that inspects compiled-executable eszip contents as of 2026-04 — `deno info` only works on source files.
|
|
110
|
+
|
|
111
|
+
### pkg — `PAYLOAD_POSITION` marker
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
LC_ALL=C grep -aob 'PAYLOAD_POSITION' ./target | head
|
|
115
|
+
LC_ALL=C grep -aob 'pkg/prelude' ./target | head
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
For source extraction, use the `pkg-extract` tooling community projects or carve based on the offset reported by the `PAYLOAD_POSITION:<n>` value.
|
|
119
|
+
|
|
120
|
+
### Electron — `app.asar` is usually a separate file
|
|
121
|
+
|
|
122
|
+
Most Electron apps ship `app.asar` next to the binary, not embedded inside. Extract it with the official tool:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# macOS layout
|
|
126
|
+
ls -la /Applications/MyApp.app/Contents/Resources/app.asar
|
|
127
|
+
npx @electron/asar extract app.asar ./extracted/
|
|
128
|
+
# or older:
|
|
129
|
+
npx asar extract app.asar ./extracted/
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
For single-file builds where the asar is embedded inside the executable, **do not pattern-match arbitrary 4-byte sequences** (the asar format starts with a Pickle-encoded uint32 header size + JSON metadata, and the same bytes appear elsewhere in any binary). Instead, use a Pickle-aware extractor that validates the JSON header before claiming a match — the `asar` npm package's programmatic `extractAll()` API does this. Carve the asar bytes by scanning for a candidate Pickle header (4-byte size + 4-byte payload size + `{"files":` prefix), validate the JSON parses, then feed the carved buffer to `extractAll()`.
|
|
133
|
+
|
|
134
|
+
### PyInstaller — use `pyinstxtractor`, NOT runtime self-extraction
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
# Recover the embedded archive without running the binary
|
|
138
|
+
python3 pyinstxtractor.py ./target
|
|
139
|
+
# Output: ./target_extracted/ with .pyc files
|
|
140
|
+
|
|
141
|
+
# Decompile the .pyc files back to Python source
|
|
142
|
+
decompyle3 ./target_extracted/main.pyc # Python 3.7+
|
|
143
|
+
uncompyle6 ./target_extracted/main.pyc # older Python
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
If `pyinstxtractor` cannot read the archive (e.g. non-standard PyInstaller version), use the official `pyi-archive_viewer` tool that ships with PyInstaller. Avoid the "run-the-binary-and-snoop-`/tmp/_MEI*`" approach: it only catches what runs in the time window between `_MEIPASS` extraction and cleanup, and it executes potentially untrusted code.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## [3] Extract source to disk — DO NOT skip this
|
|
151
|
+
|
|
152
|
+
**The single biggest mistake** with bundled-JS reverse engineering is trying to read the source out of `strings` output or `xxd` dumps. You will lose data. See "Gotchas" below.
|
|
153
|
+
|
|
154
|
+
### For Bun SEA / nexe / single-string-blob bundlers
|
|
155
|
+
|
|
156
|
+
Read the binary as bytes, find the JS section, save to a `.js` file:
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
# extract_bundled_js.py
|
|
160
|
+
import sys
|
|
161
|
+
|
|
162
|
+
if len(sys.argv) < 2:
|
|
163
|
+
raise SystemExit("usage: extract_bundled_js.py <target>")
|
|
164
|
+
|
|
165
|
+
with open(sys.argv[1], 'rb') as f:
|
|
166
|
+
data = f.read()
|
|
167
|
+
|
|
168
|
+
markers = [b'// @bun', b'"use strict"', b"'use strict'", b'#!/usr/bin/env']
|
|
169
|
+
start = -1
|
|
170
|
+
for m in markers:
|
|
171
|
+
p = data.find(m)
|
|
172
|
+
if p != -1 and (start == -1 or p < start):
|
|
173
|
+
start = p
|
|
174
|
+
|
|
175
|
+
if start == -1:
|
|
176
|
+
raise SystemExit(
|
|
177
|
+
"no bundle marker found — binary may not be Bun/nexe, "
|
|
178
|
+
"or markers were stripped. Try strings(1) for hints."
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# Heuristic end: look for a long null run AFTER start.
|
|
182
|
+
# This is a heuristic, NOT a guarantee. Verify the tail of the output
|
|
183
|
+
# looks like JS (closing braces, EOF) before trusting it.
|
|
184
|
+
end = data.find(b'\x00' * 1024, start)
|
|
185
|
+
if end == -1:
|
|
186
|
+
end = len(data)
|
|
187
|
+
|
|
188
|
+
bundle = data[start:end]
|
|
189
|
+
print(f'Extracted {len(bundle)} bytes from offset {start} to {end}', file=sys.stderr)
|
|
190
|
+
sys.stdout.buffer.write(bundle)
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
python3 extract_bundled_js.py ./target > extracted-bundle.js
|
|
195
|
+
wc -c extracted-bundle.js
|
|
196
|
+
# Sanity check the tail is JS, not random binary
|
|
197
|
+
tail -c 200 extracted-bundle.js
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### For PyInstaller
|
|
201
|
+
|
|
202
|
+
Use `pyinstxtractor` then `uncompyle6` / `decompyle3` on the `.pyc` files.
|
|
203
|
+
|
|
204
|
+
### For Electron .asar
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
npx asar extract app.asar ./extracted/
|
|
208
|
+
# Now ./extracted/ has a normal node_modules + your source layout
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### For Deno compile
|
|
212
|
+
|
|
213
|
+
Use the `eszip` Rust crate or the `@deno/eszip` JS port to walk the archive after carving the eszip section out at the offset reported by the `ESZIP_V2` magic search. There is no stable Deno CLI as of 2026-04 that inspects compiled-binary eszip contents directly.
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## [4] Source-level static analysis — `rg` + `Read`, not Ghidra
|
|
218
|
+
|
|
219
|
+
Once you have the source on disk, treat it as a normal codebase:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Find function definitions
|
|
223
|
+
rg -n "^function |^const \w+ = (function|\(.*\) =>)" extracted-bundle.js | head
|
|
224
|
+
|
|
225
|
+
# Find specific behavior
|
|
226
|
+
rg -n "claude-opus-4-7|reasoning_effort|api_key" extracted-bundle.js
|
|
227
|
+
|
|
228
|
+
# Resolve minified identifiers — they show up as `var XYZ="value"`
|
|
229
|
+
rg -aoP 'var \w+="[^"]+"' extracted-bundle.js | head -50
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
For minified bundles, use a template-literal-aware parser to extract specific functions or template strings. Example skeleton:
|
|
233
|
+
|
|
234
|
+
```python
|
|
235
|
+
def find_template_end(data, start):
|
|
236
|
+
"""Walk a JS template literal preserving ${...} interpolation depth.
|
|
237
|
+
Returns position of closing backtick."""
|
|
238
|
+
i = start
|
|
239
|
+
while i < len(data):
|
|
240
|
+
c = data[i:i+1]
|
|
241
|
+
if c == b'\\':
|
|
242
|
+
i += 2; continue
|
|
243
|
+
if c == b'$' and data[i+1:i+2] == b'{':
|
|
244
|
+
depth = 1; i += 2
|
|
245
|
+
while i < len(data) and depth > 0:
|
|
246
|
+
cc = data[i:i+1]
|
|
247
|
+
if cc == b'\\': i += 2; continue
|
|
248
|
+
if cc == b'`':
|
|
249
|
+
j = find_template_end(data, i+1)
|
|
250
|
+
i = j + 1; continue
|
|
251
|
+
if cc == b'{': depth += 1
|
|
252
|
+
elif cc == b'}': depth -= 1
|
|
253
|
+
elif cc in (b'"', b"'"):
|
|
254
|
+
q = cc; i += 1
|
|
255
|
+
while i < len(data) and data[i:i+1] != q:
|
|
256
|
+
if data[i:i+1] == b'\\': i += 2
|
|
257
|
+
else: i += 1
|
|
258
|
+
i += 1; continue
|
|
259
|
+
i += 1
|
|
260
|
+
continue
|
|
261
|
+
if c == b'`': return i
|
|
262
|
+
i += 1
|
|
263
|
+
return -1
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
For function-body extraction, **track the parameter list separately** before tracking body braces. The naive approach mis-counts destructuring `function f({a, b, ...c})` as the body `{` and exits early.
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
270
|
+
## [5] Runtime verification
|
|
271
|
+
|
|
272
|
+
You usually cannot single-step JS inside a Bun-compiled binary the way you would with `node --inspect`. Workarounds:
|
|
273
|
+
|
|
274
|
+
### Bun-compiled
|
|
275
|
+
|
|
276
|
+
Bun's inspector takes `--inspect[=<host>:<port>[/<prefix>]]` on the command line. For env-var control of compiled binaries, the form is the same minus the leading `--`:
|
|
277
|
+
|
|
278
|
+
```bash
|
|
279
|
+
# Default port (6499) auto-prefix
|
|
280
|
+
./target --inspect
|
|
281
|
+
# → ws://localhost:6499/<auto-prefix> (paste into https://debug.bun.sh)
|
|
282
|
+
|
|
283
|
+
# Explicit host:port[/prefix]
|
|
284
|
+
./target --inspect=localhost:9229/dbg
|
|
285
|
+
# Or via env var (if --inspect cannot be passed)
|
|
286
|
+
BUN_INSPECT=localhost:9229/dbg ./target
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
**For HTTP request tracing without an interactive debugger** (highest-value Bun-specific runtime evidence):
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
# Print every fetch() / node:http request as a curl command + full headers/body
|
|
293
|
+
BUN_CONFIG_VERBOSE_FETCH=curl ./target ...
|
|
294
|
+
|
|
295
|
+
# Or just print the request/response without curl-format
|
|
296
|
+
BUN_CONFIG_VERBOSE_FETCH=true ./target ...
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
Plus generic env-var-based debug logging if the app supports it:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
APP_DEBUG=1 APP_LOG_LEVEL=debug APP_LOG_FILE=/tmp/trace.log ./target
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### Node SEA / pkg / nexe
|
|
306
|
+
```bash
|
|
307
|
+
# These usually accept --inspect since they are real Node
|
|
308
|
+
./target --inspect
|
|
309
|
+
# Then chrome://inspect or node --inspect-brk
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### Electron
|
|
313
|
+
```bash
|
|
314
|
+
./target.app/Contents/MacOS/target --inspect=9229 --remote-debugging-port=9223
|
|
315
|
+
# Renderer process is at chrome://inspect, main process via the inspector port
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### When you cannot make a real call
|
|
319
|
+
The target's API may require credentials, network access, or paid quota you don't have. **You are not stuck** — see [methodology/partial-runtime-evidence.md](../methodology/partial-runtime-evidence.md) for the fallback patterns.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## ⚠️ Gotchas — read these before extracting
|
|
324
|
+
|
|
325
|
+
### G1. `strings -n N` silently drops short identifier interpolations
|
|
326
|
+
|
|
327
|
+
`strings` outputs runs of printable characters of length **≥ N**. Default is 4 on most systems; many references (including older versions of `native-binary.md`) recommend `-n 8` for less noise.
|
|
328
|
+
|
|
329
|
+
**With `-n 8`, short template-literal interpolations like `${x}`, `${i}`, `${R}` are silently dropped** because they are 4 chars surrounded by non-printable bytes (newlines or section padding). The result looks like:
|
|
330
|
+
|
|
331
|
+
```text
|
|
332
|
+
expected: <INSTRUCTIONS>\n${x}\n</INSTRUCTIONS>
|
|
333
|
+
strings: <INSTRUCTIONS>\n</INSTRUCTIONS> ← ${x} is gone, no warning
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
A consumer reading the strings output would conclude the template is empty.
|
|
337
|
+
|
|
338
|
+
**Mitigation**:
|
|
339
|
+
1. Use `strings` only for **fingerprinting** (Phase 1 triage), never as the source of extracted text.
|
|
340
|
+
2. For actual extraction, **read the binary as bytes** with `python3 -c "open('./target','rb').read()"` and grep / parse from there.
|
|
341
|
+
3. If you must use `strings`, try `strings -n 1 -t x ./target` and post-filter — but byte-level reads are still more reliable.
|
|
342
|
+
|
|
343
|
+
### G2. Stale cached binary ≠ latest features
|
|
344
|
+
|
|
345
|
+
Bundled-app installers often check a remote version and skip download if a cached binary exists. If you reverse-engineered an old version and the user reports behavior you don't see in the source, **re-run the installer** (or fetch the version manifest manually) before assuming the source is current.
|
|
346
|
+
|
|
347
|
+
```bash
|
|
348
|
+
# Example pattern - varies by tool
|
|
349
|
+
curl -fsSL https://example.com/install.sh | head -50 # find version-fetch URL
|
|
350
|
+
curl -fsSL https://static.example.com/cli/cli-version.txt
|
|
351
|
+
./your-tool --version
|
|
352
|
+
# Compare. If different, re-install.
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### G3. APFS / NTFS case-insensitivity silently overwrites files
|
|
356
|
+
|
|
357
|
+
When extracting many minified function bodies (`cVR`, `CVR`, `dpr`, `DPR`, …) and saving each to its own file, **macOS APFS and Windows NTFS treat `cVR.txt` and `CVR.txt` as the same file**. The second write silently overwrites the first.
|
|
358
|
+
|
|
359
|
+
**Mitigation**: prefix filenames with something case-distinguishing, e.g. `mode-cVR.txt`, `mode-CVR.txt`, or use a hash suffix.
|
|
360
|
+
|
|
361
|
+
### G4. Bun's runtime adds 30-50 MB of unrelated symbols
|
|
362
|
+
|
|
363
|
+
A 70 MB Bun-compiled binary is **mostly Bun runtime** (~50 MB) plus your app (~20 MB). When fingerprinting, you will see thousands of strings like `tree-sitter-typescript`, `react-native-stylex` etc. that the user's actual app doesn't use — these are package names baked into Bun's package-resolution data.
|
|
364
|
+
|
|
365
|
+
**Mitigation**: when grepping for "what does this app do?", filter out runtime noise:
|
|
366
|
+
```bash
|
|
367
|
+
strings -n 8 ./target | rg -v 'node_modules|@oven/bun|package-lock|tree-sitter|ffmpeg-installer' | head
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### G5. Source maps usually NOT shipped
|
|
371
|
+
|
|
372
|
+
Bundled apps strip source maps for production. Variable names are minified to `T`, `R`, `a`, `r`, etc. Treat the bundle like an obfuscated codebase: identify constants by tracing assignments (`var T="actual-name"`) and resolve interpolations manually.
|
|
373
|
+
|
|
374
|
+
### G6. The "extract" file is not legally redistributable
|
|
375
|
+
|
|
376
|
+
If reverse-engineering proprietary software, the extracted source is the vendor's IP. Use it for understanding behavior, **never commit it to git**, never post snippets in public issues. Cleanup your `extracted-bundle.js` files in Phase 9.
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## Silent-failure patterns specific to bundled JS
|
|
381
|
+
|
|
382
|
+
| Pattern | Why it's silent |
|
|
383
|
+
|---|---|
|
|
384
|
+
| Bundle includes unreachable dead code from tree-shaking failures | You read code that never runs — verify with runtime trace |
|
|
385
|
+
| `process.env.X` resolved at BUILD time, not RUNTIME | Setting the env var at runtime has no effect; the value is baked in |
|
|
386
|
+
| `import.meta.url` in compiled binary returns `bun://...` not a real path | File-relative resolution silently breaks |
|
|
387
|
+
| Worker threads spawn from embedded code, look for sub-bundle inside main bundle | Workers may have their own copy of dependencies |
|
|
388
|
+
| Minified identifiers with case variants used in same module | Easy to confuse `cVR` with `CVR` when reading fast |
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
392
|
+
## Phase 9 cleanup specifics for bundled-JS work
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
# Remove extracted bundles — they may contain proprietary source
|
|
396
|
+
rm -f /tmp/extracted-bundle.js /tmp/extracted-*.js
|
|
397
|
+
rm -rf /tmp/asar-extracted/
|
|
398
|
+
rm -rf /tmp/_MEI*
|
|
399
|
+
|
|
400
|
+
# Remove strings dumps
|
|
401
|
+
rm -f /tmp/*-strings.txt /tmp/*-strings-v*.txt
|
|
402
|
+
|
|
403
|
+
# Remove Python helper scripts created for parsing
|
|
404
|
+
rm -f /tmp/extract_bundled_js.py /tmp/parse_template.py
|
|
405
|
+
|
|
406
|
+
# Verify the extraction directory is gone (if you used a workspace dir)
|
|
407
|
+
ls /Users/$USER/local-workspaces/*-extracted/ 2>/dev/null
|
|
408
|
+
# rm -rf only after journal review confirms nothing important is there
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## When to escalate back to `native-binary.md`
|
|
414
|
+
|
|
415
|
+
If extraction reveals the "bundle" is actually compiled to v8 cached data (pkg with `--public-packages` or PyInstaller with bytecode-only mode), and decompilation is non-trivial, **switch back to `native-binary.md` workflow** (Ghidra against the runtime + careful tracing). Bundled-JS workflow only helps when the high-level source is recoverable as readable text.
|