@nghyane/arcane 0.1.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/CHANGELOG.md +3 -0
- package/README.md +12 -0
- package/examples/README.md +21 -0
- package/examples/custom-tools/README.md +109 -0
- package/examples/custom-tools/hello/index.ts +20 -0
- package/examples/custom-tools/todo/index.ts +206 -0
- package/examples/extensions/README.md +143 -0
- package/examples/extensions/api-demo.ts +89 -0
- package/examples/extensions/chalk-logger.ts +25 -0
- package/examples/extensions/hello.ts +32 -0
- package/examples/extensions/pirate.ts +43 -0
- package/examples/extensions/plan-mode.ts +550 -0
- package/examples/extensions/reload-runtime.ts +37 -0
- package/examples/extensions/todo.ts +296 -0
- package/examples/extensions/tools.ts +144 -0
- package/examples/extensions/with-deps/index.ts +35 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +16 -0
- package/examples/hooks/README.md +56 -0
- package/examples/hooks/auto-commit-on-exit.ts +48 -0
- package/examples/hooks/confirm-destructive.ts +58 -0
- package/examples/hooks/custom-compaction.ts +116 -0
- package/examples/hooks/dirty-repo-guard.ts +51 -0
- package/examples/hooks/file-trigger.ts +40 -0
- package/examples/hooks/git-checkpoint.ts +52 -0
- package/examples/hooks/handoff.ts +150 -0
- package/examples/hooks/permission-gate.ts +33 -0
- package/examples/hooks/protected-paths.ts +29 -0
- package/examples/hooks/qna.ts +119 -0
- package/examples/hooks/status-line.ts +39 -0
- package/examples/sdk/01-minimal.ts +21 -0
- package/examples/sdk/02-custom-model.ts +49 -0
- package/examples/sdk/03-custom-prompt.ts +43 -0
- package/examples/sdk/04-skills.ts +43 -0
- package/examples/sdk/06-extensions.ts +80 -0
- package/examples/sdk/06-hooks.ts +61 -0
- package/examples/sdk/07-context-files.ts +35 -0
- package/examples/sdk/08-prompt-templates.ts +36 -0
- package/examples/sdk/08-slash-commands.ts +41 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +54 -0
- package/examples/sdk/11-sessions.ts +47 -0
- package/examples/sdk/README.md +150 -0
- package/package.json +464 -0
- package/scripts/format-prompts.ts +184 -0
- package/scripts/generate-docs-index.ts +40 -0
- package/scripts/generate-template.ts +32 -0
- package/src/bun-imports.d.ts +22 -0
- package/src/capability/context-file.ts +39 -0
- package/src/capability/extension-module.ts +33 -0
- package/src/capability/extension.ts +47 -0
- package/src/capability/fs.ts +89 -0
- package/src/capability/hook.ts +39 -0
- package/src/capability/index.ts +432 -0
- package/src/capability/instruction.ts +36 -0
- package/src/capability/mcp.ts +60 -0
- package/src/capability/prompt.ts +34 -0
- package/src/capability/rule.ts +223 -0
- package/src/capability/settings.ts +34 -0
- package/src/capability/skill.ts +48 -0
- package/src/capability/slash-command.ts +39 -0
- package/src/capability/ssh.ts +41 -0
- package/src/capability/system-prompt.ts +34 -0
- package/src/capability/tool.ts +37 -0
- package/src/capability/types.ts +156 -0
- package/src/cli/args.ts +259 -0
- package/src/cli/config-cli.ts +357 -0
- package/src/cli/file-processor.ts +124 -0
- package/src/cli/grep-cli.ts +152 -0
- package/src/cli/jupyter-cli.ts +106 -0
- package/src/cli/list-models.ts +103 -0
- package/src/cli/plugin-cli.ts +661 -0
- package/src/cli/session-picker.ts +42 -0
- package/src/cli/setup-cli.ts +376 -0
- package/src/cli/shell-cli.ts +174 -0
- package/src/cli/ssh-cli.ts +179 -0
- package/src/cli/stats-cli.ts +197 -0
- package/src/cli/update-cli.ts +286 -0
- package/src/cli/web-search-cli.ts +143 -0
- package/src/cli.ts +65 -0
- package/src/commands/commit.ts +36 -0
- package/src/commands/config.ts +51 -0
- package/src/commands/grep.ts +41 -0
- package/src/commands/jupyter.ts +32 -0
- package/src/commands/launch.ts +139 -0
- package/src/commands/plugin.ts +70 -0
- package/src/commands/setup.ts +42 -0
- package/src/commands/shell.ts +29 -0
- package/src/commands/ssh.ts +60 -0
- package/src/commands/stats.ts +29 -0
- package/src/commands/update.ts +21 -0
- package/src/commands/web-search.ts +42 -0
- package/src/commit/agentic/agent.ts +311 -0
- package/src/commit/agentic/fallback.ts +96 -0
- package/src/commit/agentic/index.ts +359 -0
- package/src/commit/agentic/prompts/analyze-file.md +22 -0
- package/src/commit/agentic/prompts/session-user.md +25 -0
- package/src/commit/agentic/prompts/split-confirm.md +1 -0
- package/src/commit/agentic/prompts/system.md +38 -0
- package/src/commit/agentic/state.ts +69 -0
- package/src/commit/agentic/tools/analyze-file.ts +118 -0
- package/src/commit/agentic/tools/git-file-diff.ts +194 -0
- package/src/commit/agentic/tools/git-hunk.ts +50 -0
- package/src/commit/agentic/tools/git-overview.ts +84 -0
- package/src/commit/agentic/tools/index.ts +56 -0
- package/src/commit/agentic/tools/propose-changelog.ts +128 -0
- package/src/commit/agentic/tools/propose-commit.ts +154 -0
- package/src/commit/agentic/tools/recent-commits.ts +81 -0
- package/src/commit/agentic/tools/split-commit.ts +280 -0
- package/src/commit/agentic/topo-sort.ts +44 -0
- package/src/commit/agentic/trivial.ts +51 -0
- package/src/commit/agentic/validation.ts +200 -0
- package/src/commit/analysis/conventional.ts +165 -0
- package/src/commit/analysis/index.ts +4 -0
- package/src/commit/analysis/scope.ts +242 -0
- package/src/commit/analysis/summary.ts +112 -0
- package/src/commit/analysis/validation.ts +66 -0
- package/src/commit/changelog/detect.ts +37 -0
- package/src/commit/changelog/generate.ts +110 -0
- package/src/commit/changelog/index.ts +234 -0
- package/src/commit/changelog/parse.ts +44 -0
- package/src/commit/cli.ts +93 -0
- package/src/commit/git/diff.ts +148 -0
- package/src/commit/git/errors.ts +9 -0
- package/src/commit/git/index.ts +211 -0
- package/src/commit/git/operations.ts +54 -0
- package/src/commit/index.ts +5 -0
- package/src/commit/map-reduce/index.ts +64 -0
- package/src/commit/map-reduce/map-phase.ts +178 -0
- package/src/commit/map-reduce/reduce-phase.ts +145 -0
- package/src/commit/map-reduce/utils.ts +9 -0
- package/src/commit/message.ts +11 -0
- package/src/commit/model-selection.ts +69 -0
- package/src/commit/pipeline.ts +243 -0
- package/src/commit/prompts/analysis-system.md +148 -0
- package/src/commit/prompts/analysis-user.md +38 -0
- package/src/commit/prompts/changelog-system.md +50 -0
- package/src/commit/prompts/changelog-user.md +18 -0
- package/src/commit/prompts/file-observer-system.md +24 -0
- package/src/commit/prompts/file-observer-user.md +8 -0
- package/src/commit/prompts/reduce-system.md +50 -0
- package/src/commit/prompts/reduce-user.md +17 -0
- package/src/commit/prompts/summary-retry.md +3 -0
- package/src/commit/prompts/summary-system.md +38 -0
- package/src/commit/prompts/summary-user.md +13 -0
- package/src/commit/prompts/types-description.md +2 -0
- package/src/commit/types.ts +109 -0
- package/src/commit/utils/exclusions.ts +42 -0
- package/src/config/file-lock.ts +121 -0
- package/src/config/keybindings.ts +280 -0
- package/src/config/model-registry.ts +1140 -0
- package/src/config/model-resolver.ts +812 -0
- package/src/config/prompt-templates.ts +526 -0
- package/src/config/resolve-config-value.ts +92 -0
- package/src/config/settings-schema.ts +1236 -0
- package/src/config/settings.ts +706 -0
- package/src/config.ts +414 -0
- package/src/cursor.ts +239 -0
- package/src/debug/index.ts +431 -0
- package/src/debug/log-formatting.ts +60 -0
- package/src/debug/log-viewer.ts +903 -0
- package/src/debug/profiler.ts +158 -0
- package/src/debug/report-bundle.ts +366 -0
- package/src/debug/system-info.ts +112 -0
- package/src/discovery/agents-md.ts +68 -0
- package/src/discovery/agents.ts +199 -0
- package/src/discovery/builtin.ts +815 -0
- package/src/discovery/claude-plugins.ts +205 -0
- package/src/discovery/claude.ts +506 -0
- package/src/discovery/cline.ts +83 -0
- package/src/discovery/codex.ts +532 -0
- package/src/discovery/cursor.ts +218 -0
- package/src/discovery/gemini.ts +395 -0
- package/src/discovery/github.ts +117 -0
- package/src/discovery/helpers.ts +698 -0
- package/src/discovery/index.ts +89 -0
- package/src/discovery/mcp-json.ts +156 -0
- package/src/discovery/opencode.ts +394 -0
- package/src/discovery/ssh.ts +160 -0
- package/src/discovery/vscode.ts +103 -0
- package/src/discovery/windsurf.ts +145 -0
- package/src/exa/company.ts +57 -0
- package/src/exa/index.ts +62 -0
- package/src/exa/linkedin.ts +57 -0
- package/src/exa/mcp-client.ts +289 -0
- package/src/exa/render.ts +244 -0
- package/src/exa/researcher.ts +89 -0
- package/src/exa/search.ts +330 -0
- package/src/exa/types.ts +166 -0
- package/src/exa/websets.ts +247 -0
- package/src/exec/bash-executor.ts +184 -0
- package/src/exec/exec.ts +53 -0
- package/src/export/custom-share.ts +65 -0
- package/src/export/html/index.ts +162 -0
- package/src/export/html/template.css +889 -0
- package/src/export/html/template.generated.ts +2 -0
- package/src/export/html/template.html +45 -0
- package/src/export/html/template.js +1329 -0
- package/src/export/html/template.macro.ts +24 -0
- package/src/export/html/vendor/highlight.min.js +1213 -0
- package/src/export/html/vendor/marked.min.js +6 -0
- package/src/export/ttsr.ts +434 -0
- package/src/extensibility/custom-commands/bundled/review/index.ts +433 -0
- package/src/extensibility/custom-commands/index.ts +15 -0
- package/src/extensibility/custom-commands/loader.ts +231 -0
- package/src/extensibility/custom-commands/types.ts +111 -0
- package/src/extensibility/custom-tools/index.ts +22 -0
- package/src/extensibility/custom-tools/loader.ts +235 -0
- package/src/extensibility/custom-tools/types.ts +226 -0
- package/src/extensibility/custom-tools/wrapper.ts +45 -0
- package/src/extensibility/extensions/index.ts +136 -0
- package/src/extensibility/extensions/loader.ts +520 -0
- package/src/extensibility/extensions/runner.ts +774 -0
- package/src/extensibility/extensions/types.ts +1293 -0
- package/src/extensibility/extensions/wrapper.ts +188 -0
- package/src/extensibility/hooks/index.ts +16 -0
- package/src/extensibility/hooks/loader.ts +273 -0
- package/src/extensibility/hooks/runner.ts +441 -0
- package/src/extensibility/hooks/tool-wrapper.ts +106 -0
- package/src/extensibility/hooks/types.ts +817 -0
- package/src/extensibility/plugins/doctor.ts +65 -0
- package/src/extensibility/plugins/git-url.ts +281 -0
- package/src/extensibility/plugins/index.ts +33 -0
- package/src/extensibility/plugins/installer.ts +192 -0
- package/src/extensibility/plugins/loader.ts +338 -0
- package/src/extensibility/plugins/manager.ts +716 -0
- package/src/extensibility/plugins/parser.ts +105 -0
- package/src/extensibility/plugins/types.ts +190 -0
- package/src/extensibility/skills.ts +385 -0
- package/src/extensibility/slash-commands.ts +287 -0
- package/src/extensibility/tool-proxy.ts +25 -0
- package/src/index.ts +275 -0
- package/src/internal-urls/agent-protocol.ts +136 -0
- package/src/internal-urls/artifact-protocol.ts +97 -0
- package/src/internal-urls/docs-index.generated.ts +54 -0
- package/src/internal-urls/docs-protocol.ts +84 -0
- package/src/internal-urls/index.ts +31 -0
- package/src/internal-urls/json-query.ts +126 -0
- package/src/internal-urls/memory-protocol.ts +133 -0
- package/src/internal-urls/router.ts +70 -0
- package/src/internal-urls/rule-protocol.ts +55 -0
- package/src/internal-urls/skill-protocol.ts +111 -0
- package/src/internal-urls/types.ts +52 -0
- package/src/ipy/executor.ts +556 -0
- package/src/ipy/gateway-coordinator.ts +426 -0
- package/src/ipy/kernel.ts +892 -0
- package/src/ipy/modules.ts +109 -0
- package/src/ipy/prelude.py +831 -0
- package/src/ipy/prelude.ts +3 -0
- package/src/ipy/runtime.ts +222 -0
- package/src/lsp/client.ts +867 -0
- package/src/lsp/clients/biome-client.ts +202 -0
- package/src/lsp/clients/index.ts +50 -0
- package/src/lsp/clients/lsp-linter-client.ts +93 -0
- package/src/lsp/clients/swiftlint-client.ts +120 -0
- package/src/lsp/config.ts +397 -0
- package/src/lsp/defaults.json +464 -0
- package/src/lsp/edits.ts +109 -0
- package/src/lsp/index.ts +1268 -0
- package/src/lsp/lspmux.ts +250 -0
- package/src/lsp/render.ts +689 -0
- package/src/lsp/types.ts +414 -0
- package/src/lsp/utils.ts +549 -0
- package/src/main.ts +773 -0
- package/src/mcp/client.ts +239 -0
- package/src/mcp/config-writer.ts +215 -0
- package/src/mcp/config.ts +363 -0
- package/src/mcp/index.ts +55 -0
- package/src/mcp/json-rpc.ts +84 -0
- package/src/mcp/loader.ts +124 -0
- package/src/mcp/manager.ts +490 -0
- package/src/mcp/oauth-discovery.ts +274 -0
- package/src/mcp/oauth-flow.ts +229 -0
- package/src/mcp/render.ts +123 -0
- package/src/mcp/tool-bridge.ts +372 -0
- package/src/mcp/tool-cache.ts +121 -0
- package/src/mcp/transports/http.ts +332 -0
- package/src/mcp/transports/index.ts +6 -0
- package/src/mcp/transports/stdio.ts +281 -0
- package/src/mcp/types.ts +248 -0
- package/src/memories/index.ts +1099 -0
- package/src/memories/storage.ts +563 -0
- package/src/modes/components/agent-dashboard.ts +1130 -0
- package/src/modes/components/assistant-message.ts +144 -0
- package/src/modes/components/bash-execution.ts +218 -0
- package/src/modes/components/bordered-loader.ts +41 -0
- package/src/modes/components/branch-summary-message.ts +45 -0
- package/src/modes/components/codemode-group.ts +369 -0
- package/src/modes/components/compaction-summary-message.ts +51 -0
- package/src/modes/components/countdown-timer.ts +46 -0
- package/src/modes/components/custom-editor.ts +181 -0
- package/src/modes/components/custom-message.ts +91 -0
- package/src/modes/components/diff.ts +186 -0
- package/src/modes/components/dynamic-border.ts +25 -0
- package/src/modes/components/extensions/extension-dashboard.ts +325 -0
- package/src/modes/components/extensions/extension-list.ts +484 -0
- package/src/modes/components/extensions/index.ts +9 -0
- package/src/modes/components/extensions/inspector-panel.ts +321 -0
- package/src/modes/components/extensions/state-manager.ts +586 -0
- package/src/modes/components/extensions/types.ts +191 -0
- package/src/modes/components/footer.ts +315 -0
- package/src/modes/components/history-search.ts +157 -0
- package/src/modes/components/hook-editor.ts +101 -0
- package/src/modes/components/hook-input.ts +72 -0
- package/src/modes/components/hook-message.ts +100 -0
- package/src/modes/components/hook-selector.ts +155 -0
- package/src/modes/components/index.ts +41 -0
- package/src/modes/components/keybinding-hints.ts +65 -0
- package/src/modes/components/login-dialog.ts +164 -0
- package/src/modes/components/mcp-add-wizard.ts +1295 -0
- package/src/modes/components/model-selector.ts +625 -0
- package/src/modes/components/oauth-selector.ts +210 -0
- package/src/modes/components/plugin-settings.ts +477 -0
- package/src/modes/components/python-execution.ts +196 -0
- package/src/modes/components/queue-mode-selector.ts +56 -0
- package/src/modes/components/read-tool-group.ts +119 -0
- package/src/modes/components/session-selector.ts +242 -0
- package/src/modes/components/settings-defs.ts +340 -0
- package/src/modes/components/settings-selector.ts +529 -0
- package/src/modes/components/show-images-selector.ts +45 -0
- package/src/modes/components/skill-message.ts +90 -0
- package/src/modes/components/status-line/index.ts +4 -0
- package/src/modes/components/status-line/presets.ts +94 -0
- package/src/modes/components/status-line/segments.ts +352 -0
- package/src/modes/components/status-line/separators.ts +55 -0
- package/src/modes/components/status-line/types.ts +75 -0
- package/src/modes/components/status-line-segment-editor.ts +354 -0
- package/src/modes/components/status-line.ts +421 -0
- package/src/modes/components/theme-selector.ts +63 -0
- package/src/modes/components/thinking-selector.ts +64 -0
- package/src/modes/components/todo-display.ts +115 -0
- package/src/modes/components/todo-reminder.ts +40 -0
- package/src/modes/components/tool-execution.ts +703 -0
- package/src/modes/components/tree-selector.ts +904 -0
- package/src/modes/components/ttsr-notification.ts +80 -0
- package/src/modes/components/user-message-selector.ts +146 -0
- package/src/modes/components/user-message.ts +22 -0
- package/src/modes/components/visual-truncate.ts +63 -0
- package/src/modes/components/welcome.ts +247 -0
- package/src/modes/controllers/command-controller.ts +1120 -0
- package/src/modes/controllers/event-controller.ts +479 -0
- package/src/modes/controllers/extension-ui-controller.ts +778 -0
- package/src/modes/controllers/input-controller.ts +671 -0
- package/src/modes/controllers/mcp-command-controller.ts +1315 -0
- package/src/modes/controllers/selector-controller.ts +712 -0
- package/src/modes/controllers/ssh-command-controller.ts +452 -0
- package/src/modes/index.ts +15 -0
- package/src/modes/interactive-mode.ts +1027 -0
- package/src/modes/print-mode.ts +191 -0
- package/src/modes/rpc/rpc-client.ts +583 -0
- package/src/modes/rpc/rpc-mode.ts +700 -0
- package/src/modes/rpc/rpc-types.ts +236 -0
- package/src/modes/theme/dark.json +95 -0
- package/src/modes/theme/defaults/alabaster.json +93 -0
- package/src/modes/theme/defaults/amethyst.json +96 -0
- package/src/modes/theme/defaults/anthracite.json +93 -0
- package/src/modes/theme/defaults/basalt.json +91 -0
- package/src/modes/theme/defaults/birch.json +95 -0
- package/src/modes/theme/defaults/dark-abyss.json +91 -0
- package/src/modes/theme/defaults/dark-arctic.json +104 -0
- package/src/modes/theme/defaults/dark-aurora.json +95 -0
- package/src/modes/theme/defaults/dark-catppuccin.json +107 -0
- package/src/modes/theme/defaults/dark-cavern.json +91 -0
- package/src/modes/theme/defaults/dark-copper.json +95 -0
- package/src/modes/theme/defaults/dark-cosmos.json +90 -0
- package/src/modes/theme/defaults/dark-cyberpunk.json +102 -0
- package/src/modes/theme/defaults/dark-dracula.json +98 -0
- package/src/modes/theme/defaults/dark-eclipse.json +91 -0
- package/src/modes/theme/defaults/dark-ember.json +95 -0
- package/src/modes/theme/defaults/dark-equinox.json +90 -0
- package/src/modes/theme/defaults/dark-forest.json +96 -0
- package/src/modes/theme/defaults/dark-github.json +105 -0
- package/src/modes/theme/defaults/dark-gruvbox.json +112 -0
- package/src/modes/theme/defaults/dark-lavender.json +95 -0
- package/src/modes/theme/defaults/dark-lunar.json +89 -0
- package/src/modes/theme/defaults/dark-midnight.json +95 -0
- package/src/modes/theme/defaults/dark-monochrome.json +94 -0
- package/src/modes/theme/defaults/dark-monokai.json +98 -0
- package/src/modes/theme/defaults/dark-nebula.json +90 -0
- package/src/modes/theme/defaults/dark-nord.json +97 -0
- package/src/modes/theme/defaults/dark-ocean.json +101 -0
- package/src/modes/theme/defaults/dark-one.json +100 -0
- package/src/modes/theme/defaults/dark-rainforest.json +91 -0
- package/src/modes/theme/defaults/dark-reef.json +91 -0
- package/src/modes/theme/defaults/dark-retro.json +92 -0
- package/src/modes/theme/defaults/dark-rose-pine.json +96 -0
- package/src/modes/theme/defaults/dark-sakura.json +95 -0
- package/src/modes/theme/defaults/dark-slate.json +95 -0
- package/src/modes/theme/defaults/dark-solarized.json +97 -0
- package/src/modes/theme/defaults/dark-solstice.json +90 -0
- package/src/modes/theme/defaults/dark-starfall.json +91 -0
- package/src/modes/theme/defaults/dark-sunset.json +99 -0
- package/src/modes/theme/defaults/dark-swamp.json +90 -0
- package/src/modes/theme/defaults/dark-synthwave.json +103 -0
- package/src/modes/theme/defaults/dark-taiga.json +91 -0
- package/src/modes/theme/defaults/dark-terminal.json +95 -0
- package/src/modes/theme/defaults/dark-tokyo-night.json +101 -0
- package/src/modes/theme/defaults/dark-tundra.json +91 -0
- package/src/modes/theme/defaults/dark-twilight.json +91 -0
- package/src/modes/theme/defaults/dark-volcanic.json +91 -0
- package/src/modes/theme/defaults/graphite.json +92 -0
- package/src/modes/theme/defaults/index.ts +195 -0
- package/src/modes/theme/defaults/light-arctic.json +107 -0
- package/src/modes/theme/defaults/light-aurora-day.json +91 -0
- package/src/modes/theme/defaults/light-canyon.json +91 -0
- package/src/modes/theme/defaults/light-catppuccin.json +106 -0
- package/src/modes/theme/defaults/light-cirrus.json +90 -0
- package/src/modes/theme/defaults/light-coral.json +95 -0
- package/src/modes/theme/defaults/light-cyberpunk.json +96 -0
- package/src/modes/theme/defaults/light-dawn.json +90 -0
- package/src/modes/theme/defaults/light-dunes.json +91 -0
- package/src/modes/theme/defaults/light-eucalyptus.json +95 -0
- package/src/modes/theme/defaults/light-forest.json +100 -0
- package/src/modes/theme/defaults/light-frost.json +95 -0
- package/src/modes/theme/defaults/light-github.json +115 -0
- package/src/modes/theme/defaults/light-glacier.json +91 -0
- package/src/modes/theme/defaults/light-gruvbox.json +108 -0
- package/src/modes/theme/defaults/light-haze.json +90 -0
- package/src/modes/theme/defaults/light-honeycomb.json +95 -0
- package/src/modes/theme/defaults/light-lagoon.json +91 -0
- package/src/modes/theme/defaults/light-lavender.json +95 -0
- package/src/modes/theme/defaults/light-meadow.json +91 -0
- package/src/modes/theme/defaults/light-mint.json +95 -0
- package/src/modes/theme/defaults/light-monochrome.json +101 -0
- package/src/modes/theme/defaults/light-ocean.json +99 -0
- package/src/modes/theme/defaults/light-one.json +99 -0
- package/src/modes/theme/defaults/light-opal.json +91 -0
- package/src/modes/theme/defaults/light-orchard.json +91 -0
- package/src/modes/theme/defaults/light-paper.json +95 -0
- package/src/modes/theme/defaults/light-prism.json +90 -0
- package/src/modes/theme/defaults/light-retro.json +98 -0
- package/src/modes/theme/defaults/light-sand.json +95 -0
- package/src/modes/theme/defaults/light-savanna.json +91 -0
- package/src/modes/theme/defaults/light-solarized.json +102 -0
- package/src/modes/theme/defaults/light-soleil.json +90 -0
- package/src/modes/theme/defaults/light-sunset.json +99 -0
- package/src/modes/theme/defaults/light-synthwave.json +98 -0
- package/src/modes/theme/defaults/light-tokyo-night.json +111 -0
- package/src/modes/theme/defaults/light-wetland.json +91 -0
- package/src/modes/theme/defaults/light-zenith.json +89 -0
- package/src/modes/theme/defaults/limestone.json +94 -0
- package/src/modes/theme/defaults/mahogany.json +97 -0
- package/src/modes/theme/defaults/marble.json +93 -0
- package/src/modes/theme/defaults/obsidian.json +91 -0
- package/src/modes/theme/defaults/onyx.json +91 -0
- package/src/modes/theme/defaults/pearl.json +93 -0
- package/src/modes/theme/defaults/porcelain.json +91 -0
- package/src/modes/theme/defaults/quartz.json +96 -0
- package/src/modes/theme/defaults/sandstone.json +95 -0
- package/src/modes/theme/defaults/titanium.json +90 -0
- package/src/modes/theme/light.json +93 -0
- package/src/modes/theme/mermaid-cache.ts +111 -0
- package/src/modes/theme/theme-schema.json +429 -0
- package/src/modes/theme/theme.ts +2333 -0
- package/src/modes/types.ts +216 -0
- package/src/modes/utils/ui-helpers.ts +529 -0
- package/src/patch/applicator.ts +1482 -0
- package/src/patch/diff.ts +425 -0
- package/src/patch/fuzzy.ts +784 -0
- package/src/patch/hashline.ts +972 -0
- package/src/patch/index.ts +964 -0
- package/src/patch/normalize.ts +397 -0
- package/src/patch/normative.ts +72 -0
- package/src/patch/parser.ts +532 -0
- package/src/patch/shared.ts +400 -0
- package/src/patch/types.ts +292 -0
- package/src/priority.json +35 -0
- package/src/prompts/agents/explore.md +48 -0
- package/src/prompts/agents/frontmatter.md +9 -0
- package/src/prompts/agents/init.md +36 -0
- package/src/prompts/agents/librarian.md +53 -0
- package/src/prompts/agents/oracle.md +51 -0
- package/src/prompts/agents/reviewer.md +70 -0
- package/src/prompts/agents/task.md +14 -0
- package/src/prompts/compaction/branch-summary-context.md +5 -0
- package/src/prompts/compaction/branch-summary-preamble.md +2 -0
- package/src/prompts/compaction/branch-summary.md +30 -0
- package/src/prompts/compaction/compaction-short-summary.md +9 -0
- package/src/prompts/compaction/compaction-summary-context.md +5 -0
- package/src/prompts/compaction/compaction-summary.md +38 -0
- package/src/prompts/compaction/compaction-turn-prefix.md +17 -0
- package/src/prompts/compaction/compaction-update-summary.md +45 -0
- package/src/prompts/memories/consolidation.md +30 -0
- package/src/prompts/memories/read_path.md +11 -0
- package/src/prompts/memories/stage_one_input.md +6 -0
- package/src/prompts/memories/stage_one_system.md +21 -0
- package/src/prompts/review-request.md +64 -0
- package/src/prompts/system/agent-creation-architect.md +65 -0
- package/src/prompts/system/agent-creation-user.md +6 -0
- package/src/prompts/system/custom-system-prompt.md +68 -0
- package/src/prompts/system/file-operations.md +10 -0
- package/src/prompts/system/subagent-submit-reminder.md +11 -0
- package/src/prompts/system/subagent-system-prompt.md +31 -0
- package/src/prompts/system/subagent-user-prompt.md +8 -0
- package/src/prompts/system/summarization-system.md +3 -0
- package/src/prompts/system/system-prompt.md +300 -0
- package/src/prompts/system/title-system.md +2 -0
- package/src/prompts/system/ttsr-interrupt.md +7 -0
- package/src/prompts/system/web-search.md +28 -0
- package/src/prompts/tools/ask.md +44 -0
- package/src/prompts/tools/bash.md +24 -0
- package/src/prompts/tools/browser.md +33 -0
- package/src/prompts/tools/calculator.md +12 -0
- package/src/prompts/tools/explore.md +29 -0
- package/src/prompts/tools/fetch.md +16 -0
- package/src/prompts/tools/find.md +18 -0
- package/src/prompts/tools/gemini-image.md +23 -0
- package/src/prompts/tools/grep.md +28 -0
- package/src/prompts/tools/hashline.md +232 -0
- package/src/prompts/tools/librarian.md +24 -0
- package/src/prompts/tools/lsp.md +28 -0
- package/src/prompts/tools/oracle.md +26 -0
- package/src/prompts/tools/patch.md +74 -0
- package/src/prompts/tools/python.md +66 -0
- package/src/prompts/tools/read.md +36 -0
- package/src/prompts/tools/replace.md +38 -0
- package/src/prompts/tools/reviewer.md +41 -0
- package/src/prompts/tools/ssh.md +51 -0
- package/src/prompts/tools/task-summary.md +28 -0
- package/src/prompts/tools/task.md +275 -0
- package/src/prompts/tools/todo-write.md +65 -0
- package/src/prompts/tools/undo-edit.md +7 -0
- package/src/prompts/tools/web-search.md +19 -0
- package/src/prompts/tools/write.md +18 -0
- package/src/sdk.ts +1287 -0
- package/src/secrets/index.ts +116 -0
- package/src/secrets/obfuscator.ts +269 -0
- package/src/secrets/regex.ts +21 -0
- package/src/session/agent-session.ts +4669 -0
- package/src/session/agent-storage.ts +621 -0
- package/src/session/artifacts.ts +132 -0
- package/src/session/auth-storage.ts +1433 -0
- package/src/session/blob-store.ts +103 -0
- package/src/session/compaction/branch-summarization.ts +315 -0
- package/src/session/compaction/compaction.ts +864 -0
- package/src/session/compaction/index.ts +7 -0
- package/src/session/compaction/pruning.ts +91 -0
- package/src/session/compaction/utils.ts +171 -0
- package/src/session/history-storage.ts +170 -0
- package/src/session/messages.ts +317 -0
- package/src/session/session-manager.ts +2276 -0
- package/src/session/session-storage.ts +342 -0
- package/src/session/streaming-output.ts +565 -0
- package/src/slash-commands/builtin-registry.ts +439 -0
- package/src/ssh/config-writer.ts +183 -0
- package/src/ssh/connection-manager.ts +444 -0
- package/src/ssh/ssh-executor.ts +127 -0
- package/src/ssh/sshfs-mount.ts +135 -0
- package/src/stt/downloader.ts +71 -0
- package/src/stt/index.ts +3 -0
- package/src/stt/recorder.ts +351 -0
- package/src/stt/setup.ts +52 -0
- package/src/stt/stt-controller.ts +160 -0
- package/src/stt/transcribe.py +70 -0
- package/src/stt/transcriber.ts +91 -0
- package/src/system-prompt.ts +685 -0
- package/src/task/agents.ts +155 -0
- package/src/task/batch.ts +102 -0
- package/src/task/commands.ts +134 -0
- package/src/task/discovery.ts +126 -0
- package/src/task/executor.ts +908 -0
- package/src/task/index.ts +223 -0
- package/src/task/output-manager.ts +107 -0
- package/src/task/parallel.ts +84 -0
- package/src/task/render.ts +326 -0
- package/src/task/subprocess-tool-registry.ts +88 -0
- package/src/task/template.ts +32 -0
- package/src/task/types.ts +144 -0
- package/src/tools/ask.ts +523 -0
- package/src/tools/bash-interactive.ts +419 -0
- package/src/tools/bash-interceptor.ts +105 -0
- package/src/tools/bash-normalize.ts +107 -0
- package/src/tools/bash-skill-urls.ts +177 -0
- package/src/tools/bash.ts +347 -0
- package/src/tools/browser.ts +1374 -0
- package/src/tools/calculator.ts +537 -0
- package/src/tools/context.ts +39 -0
- package/src/tools/explore.ts +23 -0
- package/src/tools/fetch.ts +1091 -0
- package/src/tools/find.ts +540 -0
- package/src/tools/fs-cache-invalidation.ts +28 -0
- package/src/tools/gemini-image.ts +907 -0
- package/src/tools/grep.ts +489 -0
- package/src/tools/index.ts +337 -0
- package/src/tools/json-tree.ts +231 -0
- package/src/tools/jtd-to-json-schema.ts +247 -0
- package/src/tools/jtd-to-typescript.ts +198 -0
- package/src/tools/librarian.ts +33 -0
- package/src/tools/list-limit.ts +40 -0
- package/src/tools/notebook.ts +287 -0
- package/src/tools/oracle.ts +40 -0
- package/src/tools/output-meta.ts +459 -0
- package/src/tools/output-utils.ts +63 -0
- package/src/tools/path-utils.ts +116 -0
- package/src/tools/puppeteer/00_stealth_tampering.txt +63 -0
- package/src/tools/puppeteer/01_stealth_activity.txt +20 -0
- package/src/tools/puppeteer/02_stealth_hairline.txt +11 -0
- package/src/tools/puppeteer/03_stealth_botd.txt +384 -0
- package/src/tools/puppeteer/04_stealth_iframe.txt +81 -0
- package/src/tools/puppeteer/05_stealth_webgl.txt +75 -0
- package/src/tools/puppeteer/06_stealth_screen.txt +72 -0
- package/src/tools/puppeteer/07_stealth_fonts.txt +97 -0
- package/src/tools/puppeteer/08_stealth_audio.txt +51 -0
- package/src/tools/puppeteer/09_stealth_locale.txt +46 -0
- package/src/tools/puppeteer/10_stealth_plugins.txt +206 -0
- package/src/tools/puppeteer/11_stealth_hardware.txt +8 -0
- package/src/tools/puppeteer/12_stealth_codecs.txt +40 -0
- package/src/tools/puppeteer/13_stealth_worker.txt +74 -0
- package/src/tools/python.ts +1118 -0
- package/src/tools/read.ts +1193 -0
- package/src/tools/render-utils.ts +680 -0
- package/src/tools/renderers.ts +60 -0
- package/src/tools/reviewer-tool.ts +41 -0
- package/src/tools/ssh.ts +326 -0
- package/src/tools/subagent-tool.ts +169 -0
- package/src/tools/submit-result.ts +152 -0
- package/src/tools/todo-write.ts +255 -0
- package/src/tools/tool-errors.ts +92 -0
- package/src/tools/tool-result.ts +86 -0
- package/src/tools/undo-edit.ts +145 -0
- package/src/tools/undo-history.ts +22 -0
- package/src/tools/write.ts +274 -0
- package/src/tui/code-cell.ts +108 -0
- package/src/tui/file-list.ts +47 -0
- package/src/tui/index.ts +11 -0
- package/src/tui/output-block.ts +144 -0
- package/src/tui/status-line.ts +39 -0
- package/src/tui/tree-list.ts +53 -0
- package/src/tui/types.ts +16 -0
- package/src/tui/utils.ts +116 -0
- package/src/utils/changelog.ts +98 -0
- package/src/utils/event-bus.ts +33 -0
- package/src/utils/external-editor.ts +59 -0
- package/src/utils/file-display-mode.ts +36 -0
- package/src/utils/file-mentions.ts +384 -0
- package/src/utils/frontmatter.ts +101 -0
- package/src/utils/fuzzy.ts +108 -0
- package/src/utils/ignore-files.ts +119 -0
- package/src/utils/image-convert.ts +27 -0
- package/src/utils/image-resize.ts +236 -0
- package/src/utils/mime.ts +30 -0
- package/src/utils/open.ts +20 -0
- package/src/utils/shell-snapshot.ts +199 -0
- package/src/utils/timings.ts +26 -0
- package/src/utils/title-generator.ts +167 -0
- package/src/utils/tools-manager.ts +362 -0
- package/src/web/scrapers/artifacthub.ts +215 -0
- package/src/web/scrapers/arxiv.ts +88 -0
- package/src/web/scrapers/aur.ts +175 -0
- package/src/web/scrapers/biorxiv.ts +141 -0
- package/src/web/scrapers/bluesky.ts +284 -0
- package/src/web/scrapers/brew.ts +177 -0
- package/src/web/scrapers/cheatsh.ts +78 -0
- package/src/web/scrapers/chocolatey.ts +158 -0
- package/src/web/scrapers/choosealicense.ts +110 -0
- package/src/web/scrapers/cisa-kev.ts +100 -0
- package/src/web/scrapers/clojars.ts +180 -0
- package/src/web/scrapers/coingecko.ts +184 -0
- package/src/web/scrapers/crates-io.ts +128 -0
- package/src/web/scrapers/crossref.ts +149 -0
- package/src/web/scrapers/devto.ts +177 -0
- package/src/web/scrapers/discogs.ts +307 -0
- package/src/web/scrapers/discourse.ts +221 -0
- package/src/web/scrapers/dockerhub.ts +160 -0
- package/src/web/scrapers/fdroid.ts +158 -0
- package/src/web/scrapers/firefox-addons.ts +214 -0
- package/src/web/scrapers/flathub.ts +239 -0
- package/src/web/scrapers/github-gist.ts +68 -0
- package/src/web/scrapers/github.ts +490 -0
- package/src/web/scrapers/gitlab.ts +456 -0
- package/src/web/scrapers/go-pkg.ts +275 -0
- package/src/web/scrapers/hackage.ts +94 -0
- package/src/web/scrapers/hackernews.ts +208 -0
- package/src/web/scrapers/hex.ts +121 -0
- package/src/web/scrapers/huggingface.ts +385 -0
- package/src/web/scrapers/iacr.ts +86 -0
- package/src/web/scrapers/index.ts +249 -0
- package/src/web/scrapers/jetbrains-marketplace.ts +169 -0
- package/src/web/scrapers/lemmy.ts +220 -0
- package/src/web/scrapers/lobsters.ts +186 -0
- package/src/web/scrapers/mastodon.ts +310 -0
- package/src/web/scrapers/maven.ts +152 -0
- package/src/web/scrapers/mdn.ts +172 -0
- package/src/web/scrapers/metacpan.ts +253 -0
- package/src/web/scrapers/musicbrainz.ts +272 -0
- package/src/web/scrapers/npm.ts +114 -0
- package/src/web/scrapers/nuget.ts +205 -0
- package/src/web/scrapers/nvd.ts +243 -0
- package/src/web/scrapers/ollama.ts +265 -0
- package/src/web/scrapers/open-vsx.ts +119 -0
- package/src/web/scrapers/opencorporates.ts +275 -0
- package/src/web/scrapers/openlibrary.ts +319 -0
- package/src/web/scrapers/orcid.ts +298 -0
- package/src/web/scrapers/osv.ts +192 -0
- package/src/web/scrapers/packagist.ts +174 -0
- package/src/web/scrapers/pub-dev.ts +185 -0
- package/src/web/scrapers/pubmed.ts +177 -0
- package/src/web/scrapers/pypi.ts +129 -0
- package/src/web/scrapers/rawg.ts +124 -0
- package/src/web/scrapers/readthedocs.ts +125 -0
- package/src/web/scrapers/reddit.ts +104 -0
- package/src/web/scrapers/repology.ts +262 -0
- package/src/web/scrapers/rfc.ts +209 -0
- package/src/web/scrapers/rubygems.ts +117 -0
- package/src/web/scrapers/searchcode.ts +217 -0
- package/src/web/scrapers/sec-edgar.ts +274 -0
- package/src/web/scrapers/semantic-scholar.ts +190 -0
- package/src/web/scrapers/snapcraft.ts +200 -0
- package/src/web/scrapers/sourcegraph.ts +373 -0
- package/src/web/scrapers/spdx.ts +121 -0
- package/src/web/scrapers/spotify.ts +217 -0
- package/src/web/scrapers/stackoverflow.ts +124 -0
- package/src/web/scrapers/terraform.ts +304 -0
- package/src/web/scrapers/tldr.ts +51 -0
- package/src/web/scrapers/twitter.ts +97 -0
- package/src/web/scrapers/types.ts +200 -0
- package/src/web/scrapers/utils.ts +142 -0
- package/src/web/scrapers/vimeo.ts +152 -0
- package/src/web/scrapers/vscode-marketplace.ts +195 -0
- package/src/web/scrapers/w3c.ts +163 -0
- package/src/web/scrapers/wikidata.ts +357 -0
- package/src/web/scrapers/wikipedia.ts +95 -0
- package/src/web/scrapers/youtube.ts +312 -0
- package/src/web/search/auth.ts +178 -0
- package/src/web/search/index.ts +598 -0
- package/src/web/search/provider.ts +77 -0
- package/src/web/search/providers/anthropic.ts +284 -0
- package/src/web/search/providers/base.ts +22 -0
- package/src/web/search/providers/brave.ts +165 -0
- package/src/web/search/providers/codex.ts +377 -0
- package/src/web/search/providers/exa.ts +158 -0
- package/src/web/search/providers/gemini.ts +437 -0
- package/src/web/search/providers/jina.ts +99 -0
- package/src/web/search/providers/kimi.ts +196 -0
- package/src/web/search/providers/perplexity.ts +546 -0
- package/src/web/search/providers/synthetic.ts +136 -0
- package/src/web/search/providers/zai.ts +352 -0
- package/src/web/search/render.ts +299 -0
- package/src/web/search/types.ts +437 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Api, Model } from "@nghyane/arcane-ai";
|
|
2
|
+
import { MODEL_ROLE_IDS } from "../config/model-registry";
|
|
3
|
+
import {
|
|
4
|
+
expandRoleAlias,
|
|
5
|
+
parseModelPattern,
|
|
6
|
+
resolveModelFromSettings,
|
|
7
|
+
resolveModelFromString,
|
|
8
|
+
} from "../config/model-resolver";
|
|
9
|
+
import type { Settings } from "../config/settings";
|
|
10
|
+
import MODEL_PRIO from "../priority.json" with { type: "json" };
|
|
11
|
+
|
|
12
|
+
export async function resolvePrimaryModel(
|
|
13
|
+
override: string | undefined,
|
|
14
|
+
settings: Settings,
|
|
15
|
+
modelRegistry: {
|
|
16
|
+
getAvailable: () => Model<Api>[];
|
|
17
|
+
getApiKey: (model: Model<Api>) => Promise<string | undefined>;
|
|
18
|
+
},
|
|
19
|
+
): Promise<{ model: Model<Api>; apiKey: string }> {
|
|
20
|
+
const available = modelRegistry.getAvailable();
|
|
21
|
+
const matchPreferences = { usageOrder: settings.getStorage()?.getModelUsageOrder() };
|
|
22
|
+
const roleOrder = ["commit", "fast", ...MODEL_ROLE_IDS] as const;
|
|
23
|
+
const model = override
|
|
24
|
+
? resolveModelFromString(expandRoleAlias(override, settings), available, matchPreferences)
|
|
25
|
+
: resolveModelFromSettings({
|
|
26
|
+
settings,
|
|
27
|
+
availableModels: available,
|
|
28
|
+
matchPreferences,
|
|
29
|
+
roleOrder,
|
|
30
|
+
});
|
|
31
|
+
if (!model) {
|
|
32
|
+
throw new Error("No model available for commit generation");
|
|
33
|
+
}
|
|
34
|
+
const apiKey = await modelRegistry.getApiKey(model);
|
|
35
|
+
if (!apiKey) {
|
|
36
|
+
throw new Error(`No API key available for model ${model.provider}/${model.id}`);
|
|
37
|
+
}
|
|
38
|
+
return { model, apiKey };
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export async function resolveFastModel(
|
|
42
|
+
settings: Settings,
|
|
43
|
+
modelRegistry: {
|
|
44
|
+
getAvailable: () => Model<Api>[];
|
|
45
|
+
getApiKey: (model: Model<Api>) => Promise<string | undefined>;
|
|
46
|
+
},
|
|
47
|
+
fallbackModel: Model<Api>,
|
|
48
|
+
fallbackApiKey: string,
|
|
49
|
+
): Promise<{ model: Model<Api>; apiKey: string }> {
|
|
50
|
+
const available = modelRegistry.getAvailable();
|
|
51
|
+
const matchPreferences = { usageOrder: settings.getStorage()?.getModelUsageOrder() };
|
|
52
|
+
const role = settings.getModelRole("fast");
|
|
53
|
+
const roleModel = role
|
|
54
|
+
? resolveModelFromString(expandRoleAlias(role, settings), available, matchPreferences)
|
|
55
|
+
: undefined;
|
|
56
|
+
if (roleModel) {
|
|
57
|
+
const apiKey = await modelRegistry.getApiKey(roleModel);
|
|
58
|
+
if (apiKey) return { model: roleModel, apiKey };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
for (const pattern of MODEL_PRIO.fast) {
|
|
62
|
+
const candidate = parseModelPattern(pattern, available, matchPreferences).model;
|
|
63
|
+
if (!candidate) continue;
|
|
64
|
+
const apiKey = await modelRegistry.getApiKey(candidate);
|
|
65
|
+
if (apiKey) return { model: candidate, apiKey };
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return { model: fallbackModel, apiKey: fallbackApiKey };
|
|
69
|
+
}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import type { Api, Model } from "@nghyane/arcane-ai";
|
|
3
|
+
import { logger } from "@nghyane/arcane-utils";
|
|
4
|
+
import { getProjectDir } from "@nghyane/arcane-utils/dirs";
|
|
5
|
+
import { ModelRegistry } from "../config/model-registry";
|
|
6
|
+
import { renderPromptTemplate } from "../config/prompt-templates";
|
|
7
|
+
import { Settings } from "../config/settings";
|
|
8
|
+
import { discoverAuthStorage } from "../sdk";
|
|
9
|
+
import { loadProjectContextFiles } from "../system-prompt";
|
|
10
|
+
import { runAgenticCommit } from "./agentic";
|
|
11
|
+
import {
|
|
12
|
+
extractScopeCandidates,
|
|
13
|
+
generateConventionalAnalysis,
|
|
14
|
+
generateSummary,
|
|
15
|
+
validateAnalysis,
|
|
16
|
+
validateSummary,
|
|
17
|
+
} from "./analysis";
|
|
18
|
+
import { runChangelogFlow } from "./changelog";
|
|
19
|
+
import { ControlledGit } from "./git";
|
|
20
|
+
import { runMapReduceAnalysis, shouldUseMapReduce } from "./map-reduce";
|
|
21
|
+
import { formatCommitMessage } from "./message";
|
|
22
|
+
import { resolveFastModel, resolvePrimaryModel } from "./model-selection";
|
|
23
|
+
import summaryRetryPrompt from "./prompts/summary-retry.md" with { type: "text" };
|
|
24
|
+
import typesDescriptionPrompt from "./prompts/types-description.md" with { type: "text" };
|
|
25
|
+
import type { CommitCommandArgs, ConventionalAnalysis } from "./types";
|
|
26
|
+
|
|
27
|
+
const SUMMARY_MAX_CHARS = 72;
|
|
28
|
+
const RECENT_COMMITS_COUNT = 8;
|
|
29
|
+
const TYPES_DESCRIPTION = renderPromptTemplate(typesDescriptionPrompt);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Execute the arcane commit pipeline for staged changes.
|
|
33
|
+
*/
|
|
34
|
+
export async function runCommitCommand(args: CommitCommandArgs): Promise<void> {
|
|
35
|
+
if (args.legacy) {
|
|
36
|
+
return runLegacyCommitCommand(args);
|
|
37
|
+
}
|
|
38
|
+
return runAgenticCommit(args);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async function runLegacyCommitCommand(args: CommitCommandArgs): Promise<void> {
|
|
42
|
+
const cwd = getProjectDir();
|
|
43
|
+
const settings = await Settings.init();
|
|
44
|
+
const commitSettings = settings.getGroup("commit");
|
|
45
|
+
const authStorage = await discoverAuthStorage();
|
|
46
|
+
const modelRegistry = new ModelRegistry(authStorage);
|
|
47
|
+
await modelRegistry.refresh();
|
|
48
|
+
|
|
49
|
+
const { model: primaryModel, apiKey: primaryApiKey } = await resolvePrimaryModel(
|
|
50
|
+
args.model,
|
|
51
|
+
settings,
|
|
52
|
+
modelRegistry,
|
|
53
|
+
);
|
|
54
|
+
const { model: fastModel, apiKey: fastApiKey } = await resolveFastModel(
|
|
55
|
+
settings,
|
|
56
|
+
modelRegistry,
|
|
57
|
+
primaryModel,
|
|
58
|
+
primaryApiKey,
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
const git = new ControlledGit(cwd);
|
|
62
|
+
let stagedFiles = await git.getStagedFiles();
|
|
63
|
+
if (stagedFiles.length === 0) {
|
|
64
|
+
writeStdout("No staged changes detected, staging all changes...");
|
|
65
|
+
await git.stageAll();
|
|
66
|
+
stagedFiles = await git.getStagedFiles();
|
|
67
|
+
}
|
|
68
|
+
if (stagedFiles.length === 0) {
|
|
69
|
+
writeStderr("No changes to commit.");
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!args.noChangelog) {
|
|
74
|
+
await runChangelogFlow({
|
|
75
|
+
git,
|
|
76
|
+
cwd,
|
|
77
|
+
model: primaryModel,
|
|
78
|
+
apiKey: primaryApiKey,
|
|
79
|
+
stagedFiles,
|
|
80
|
+
dryRun: args.dryRun,
|
|
81
|
+
maxDiffChars: commitSettings.changelogMaxDiffChars,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const diff = await git.getDiff(true);
|
|
86
|
+
const stat = await git.getStat(true);
|
|
87
|
+
const numstat = await git.getNumstat(true);
|
|
88
|
+
const scopeCandidates = extractScopeCandidates(numstat).scopeCandidates;
|
|
89
|
+
const recentCommits = await git.getRecentCommits(RECENT_COMMITS_COUNT);
|
|
90
|
+
const contextFiles = await loadProjectContextFiles({ cwd });
|
|
91
|
+
const formattedContextFiles = contextFiles.map(file => ({
|
|
92
|
+
path: path.relative(cwd, file.path),
|
|
93
|
+
content: file.content,
|
|
94
|
+
}));
|
|
95
|
+
|
|
96
|
+
const analysis = await generateAnalysis({
|
|
97
|
+
diff,
|
|
98
|
+
stat,
|
|
99
|
+
scopeCandidates,
|
|
100
|
+
recentCommits,
|
|
101
|
+
contextFiles: formattedContextFiles,
|
|
102
|
+
userContext: args.context,
|
|
103
|
+
primaryModel,
|
|
104
|
+
primaryApiKey,
|
|
105
|
+
fastModel,
|
|
106
|
+
fastApiKey,
|
|
107
|
+
commitSettings,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const analysisValidation = validateAnalysis(analysis);
|
|
111
|
+
if (!analysisValidation.valid) {
|
|
112
|
+
logger.warn("commit analysis validation failed", { errors: analysisValidation.errors });
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const summary = await generateSummaryWithRetry({
|
|
116
|
+
analysis,
|
|
117
|
+
stat,
|
|
118
|
+
model: primaryModel,
|
|
119
|
+
apiKey: primaryApiKey,
|
|
120
|
+
userContext: args.context,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const commitMessage = formatCommitMessage(analysis, summary.summary);
|
|
124
|
+
|
|
125
|
+
if (args.dryRun) {
|
|
126
|
+
writeStdout("\nGenerated commit message:\n");
|
|
127
|
+
writeStdout(commitMessage);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
await git.commit(commitMessage);
|
|
132
|
+
writeStdout("Commit created.");
|
|
133
|
+
if (args.push) {
|
|
134
|
+
await git.push();
|
|
135
|
+
writeStdout("Pushed to remote.");
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async function generateAnalysis(input: {
|
|
140
|
+
diff: string;
|
|
141
|
+
stat: string;
|
|
142
|
+
scopeCandidates: string;
|
|
143
|
+
recentCommits: string[];
|
|
144
|
+
contextFiles: Array<{ path: string; content: string }>;
|
|
145
|
+
userContext?: string;
|
|
146
|
+
primaryModel: Model<Api>;
|
|
147
|
+
primaryApiKey: string;
|
|
148
|
+
fastModel: Model<Api>;
|
|
149
|
+
fastApiKey: string;
|
|
150
|
+
commitSettings: {
|
|
151
|
+
mapReduceEnabled: boolean;
|
|
152
|
+
mapReduceMinFiles: number;
|
|
153
|
+
mapReduceMaxFileTokens: number;
|
|
154
|
+
mapReduceTimeoutMs: number;
|
|
155
|
+
mapReduceMaxConcurrency: number;
|
|
156
|
+
changelogMaxDiffChars: number;
|
|
157
|
+
};
|
|
158
|
+
}): Promise<ConventionalAnalysis> {
|
|
159
|
+
if (
|
|
160
|
+
shouldUseMapReduce(input.diff, {
|
|
161
|
+
enabled: input.commitSettings.mapReduceEnabled,
|
|
162
|
+
minFiles: input.commitSettings.mapReduceMinFiles,
|
|
163
|
+
maxFileTokens: input.commitSettings.mapReduceMaxFileTokens,
|
|
164
|
+
})
|
|
165
|
+
) {
|
|
166
|
+
writeStdout("Large diff detected, using map-reduce analysis...");
|
|
167
|
+
return runMapReduceAnalysis({
|
|
168
|
+
model: input.primaryModel,
|
|
169
|
+
apiKey: input.primaryApiKey,
|
|
170
|
+
fastModel: input.fastModel,
|
|
171
|
+
fastApiKey: input.fastApiKey,
|
|
172
|
+
diff: input.diff,
|
|
173
|
+
stat: input.stat,
|
|
174
|
+
scopeCandidates: input.scopeCandidates,
|
|
175
|
+
typesDescription: TYPES_DESCRIPTION,
|
|
176
|
+
settings: {
|
|
177
|
+
enabled: input.commitSettings.mapReduceEnabled,
|
|
178
|
+
minFiles: input.commitSettings.mapReduceMinFiles,
|
|
179
|
+
maxFileTokens: input.commitSettings.mapReduceMaxFileTokens,
|
|
180
|
+
maxConcurrency: input.commitSettings.mapReduceMaxConcurrency,
|
|
181
|
+
timeoutMs: input.commitSettings.mapReduceTimeoutMs,
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return generateConventionalAnalysis({
|
|
187
|
+
model: input.primaryModel,
|
|
188
|
+
apiKey: input.primaryApiKey,
|
|
189
|
+
contextFiles: input.contextFiles,
|
|
190
|
+
userContext: input.userContext,
|
|
191
|
+
typesDescription: TYPES_DESCRIPTION,
|
|
192
|
+
recentCommits: input.recentCommits,
|
|
193
|
+
scopeCandidates: input.scopeCandidates,
|
|
194
|
+
stat: input.stat,
|
|
195
|
+
diff: input.diff,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
async function generateSummaryWithRetry(input: {
|
|
200
|
+
analysis: ConventionalAnalysis;
|
|
201
|
+
stat: string;
|
|
202
|
+
model: Model<Api>;
|
|
203
|
+
apiKey: string;
|
|
204
|
+
userContext?: string;
|
|
205
|
+
}): Promise<{ summary: string }> {
|
|
206
|
+
let context = input.userContext;
|
|
207
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
208
|
+
const result = await generateSummary({
|
|
209
|
+
model: input.model,
|
|
210
|
+
apiKey: input.apiKey,
|
|
211
|
+
commitType: input.analysis.type,
|
|
212
|
+
scope: input.analysis.scope,
|
|
213
|
+
details: input.analysis.details.map(detail => detail.text),
|
|
214
|
+
stat: input.stat,
|
|
215
|
+
maxChars: SUMMARY_MAX_CHARS,
|
|
216
|
+
userContext: context,
|
|
217
|
+
});
|
|
218
|
+
const validation = validateSummary(result.summary, SUMMARY_MAX_CHARS);
|
|
219
|
+
if (validation.valid) {
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
222
|
+
if (attempt === 2) {
|
|
223
|
+
return result;
|
|
224
|
+
}
|
|
225
|
+
context = buildRetryContext(input.userContext, validation.errors);
|
|
226
|
+
}
|
|
227
|
+
throw new Error("Summary generation failed");
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function buildRetryContext(base: string | undefined, errors: string[]): string {
|
|
231
|
+
return renderPromptTemplate(summaryRetryPrompt, {
|
|
232
|
+
base_context: base,
|
|
233
|
+
errors: errors.join("; "),
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function writeStdout(message: string): void {
|
|
238
|
+
process.stdout.write(`${message}\n`);
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function writeStderr(message: string): void {
|
|
242
|
+
process.stderr.write(`${message}\n`);
|
|
243
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
<context>
|
|
2
|
+
Senior release engineer writing precise, changelog-ready commit classifications.
|
|
3
|
+
</context>
|
|
4
|
+
|
|
5
|
+
<instructions>
|
|
6
|
+
Classify git diff into conventional commit format.
|
|
7
|
+
## 1. Determine Scope
|
|
8
|
+
|
|
9
|
+
Apply scope when 60%+ line changes target single component:
|
|
10
|
+
- 150 lines in src/api/, 30 in src/lib.rs -> "api"
|
|
11
|
+
- 50 lines in src/api/, 50 in src/types/ -> null (50/50 split)
|
|
12
|
+
|
|
13
|
+
Use null for: cross-cutting changes, project-wide refactoring.
|
|
14
|
+
|
|
15
|
+
Forbidden scopes (use null): src, lib, include, tests, benches, examples, docs, project name, app, main, entire, all, misc.
|
|
16
|
+
|
|
17
|
+
Prefer scopes from <common_scopes> over inventing new.
|
|
18
|
+
## 2. Generate Details (0-6 items)
|
|
19
|
+
|
|
20
|
+
Each detail:
|
|
21
|
+
1. Past-tense verb, ends with period
|
|
22
|
+
2. Explains impact/rationale (skip trivial what-changed)
|
|
23
|
+
3. Uses precise names (modules, APIs, files)
|
|
24
|
+
4. Under 120 characters
|
|
25
|
+
|
|
26
|
+
Abstraction preference:
|
|
27
|
+
- BEST: "Replaced polling with event-driven model for 10x throughput."
|
|
28
|
+
- GOOD: "Consolidated three HTTP builders into unified API."
|
|
29
|
+
- SKIP: "Renamed workspacePath to locate."
|
|
30
|
+
|
|
31
|
+
Group 3+ similar changes: "Updated 5 test files for new API." (not five bullets).
|
|
32
|
+
|
|
33
|
+
Issue references inline: (#123), (#123, #456), (#123-#125).
|
|
34
|
+
|
|
35
|
+
Priority: user-visible -> perf/security -> architecture -> internal.
|
|
36
|
+
|
|
37
|
+
Exclude: import changes, whitespace, formatting, trivial renames, debug prints, comment-only, file moves without modification.
|
|
38
|
+
|
|
39
|
+
State only visible rationale. If unclear, use neutral: "Updated logic for correctness."
|
|
40
|
+
## 3. Assign Changelog Metadata
|
|
41
|
+
|
|
42
|
+
|Condition|changelog_category|
|
|
43
|
+
|---|---|
|
|
44
|
+
|New public API, feature, capability|"Added"|
|
|
45
|
+
|Modified existing behavior|"Changed"|
|
|
46
|
+
|Bug fix, correction|"Fixed"|
|
|
47
|
+
|Feature marked for removal|"Deprecated"|
|
|
48
|
+
|Feature/API removed|"Removed"|
|
|
49
|
+
|Security fix or improvement|"Security"|
|
|
50
|
+
|
|
51
|
+
user_visible: true for: new features, APIs, breaking changes, user-affecting bug fixes, user-facing docs, security fixes.
|
|
52
|
+
|
|
53
|
+
user_visible: false for: internal refactoring, performance optimizations (unless documented), test/build/CI, code style.
|
|
54
|
+
|
|
55
|
+
Omit changelog_category when user_visible false.
|
|
56
|
+
</instructions>
|
|
57
|
+
|
|
58
|
+
<output_format>
|
|
59
|
+
Call create_conventional_analysis with:
|
|
60
|
+
|
|
61
|
+
{
|
|
62
|
+
"type": "feat|fix|refactor|docs|test|chore|style|perf|build|ci|revert",
|
|
63
|
+
"scope": "component-name" | null,
|
|
64
|
+
"details": [
|
|
65
|
+
{
|
|
66
|
+
"text": "Past-tense description ending with period.",
|
|
67
|
+
"changelog_category": "Added|Changed|Fixed|Deprecated|Removed|Security",
|
|
68
|
+
"user_visible": true
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"text": "Internal change description.",
|
|
72
|
+
"user_visible": false
|
|
73
|
+
}
|
|
74
|
+
],
|
|
75
|
+
"issue_refs": []
|
|
76
|
+
}
|
|
77
|
+
</output_format>
|
|
78
|
+
|
|
79
|
+
<example name="feature-with-api">
|
|
80
|
+
{
|
|
81
|
+
"type": "feat",
|
|
82
|
+
"scope": "api",
|
|
83
|
+
"details": [
|
|
84
|
+
{
|
|
85
|
+
"text": "Added TLS mutual authentication to prevent man-in-the-middle attacks (#100).",
|
|
86
|
+
"changelog_category": "Added",
|
|
87
|
+
"user_visible": true
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"text": "Implemented builder pattern to simplify transport configuration (#101).",
|
|
91
|
+
"changelog_category": "Added",
|
|
92
|
+
"user_visible": true
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"text": "Migrated 6 integration tests to exercise new security features.",
|
|
96
|
+
"user_visible": false
|
|
97
|
+
}
|
|
98
|
+
],
|
|
99
|
+
"issue_refs": []
|
|
100
|
+
}
|
|
101
|
+
</example>
|
|
102
|
+
|
|
103
|
+
<example name="internal-refactor">
|
|
104
|
+
{
|
|
105
|
+
"type": "refactor",
|
|
106
|
+
"scope": "parser",
|
|
107
|
+
"details": [
|
|
108
|
+
{
|
|
109
|
+
"text": "Extracted validation logic into separate module for reusability.",
|
|
110
|
+
"user_visible": false
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"text": "Consolidated error handling across 12 functions to reduce duplication.",
|
|
114
|
+
"user_visible": false
|
|
115
|
+
}
|
|
116
|
+
],
|
|
117
|
+
"issue_refs": []
|
|
118
|
+
}
|
|
119
|
+
</example>
|
|
120
|
+
|
|
121
|
+
<example name="bug-fix">
|
|
122
|
+
{
|
|
123
|
+
"type": "fix",
|
|
124
|
+
"scope": "parser",
|
|
125
|
+
"details": [
|
|
126
|
+
{
|
|
127
|
+
"text": "Corrected off-by-one error causing buffer overflow on large inputs (#456).",
|
|
128
|
+
"changelog_category": "Fixed",
|
|
129
|
+
"user_visible": true
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"text": "Added bounds checking to prevent panic on empty files (#457).",
|
|
133
|
+
"changelog_category": "Fixed",
|
|
134
|
+
"user_visible": true
|
|
135
|
+
}
|
|
136
|
+
],
|
|
137
|
+
"issue_refs": []
|
|
138
|
+
}
|
|
139
|
+
</example>
|
|
140
|
+
|
|
141
|
+
<example name="minimal-chore">
|
|
142
|
+
{
|
|
143
|
+
"type": "chore",
|
|
144
|
+
"scope": "deps",
|
|
145
|
+
"details": [],
|
|
146
|
+
"issue_refs": []
|
|
147
|
+
}
|
|
148
|
+
</example>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{{#if context_files}}
|
|
2
|
+
<project_context>
|
|
3
|
+
{{#each context_files}}
|
|
4
|
+
<file path="{{ path }}">
|
|
5
|
+
{{ content }}
|
|
6
|
+
</file>
|
|
7
|
+
{{/each}}
|
|
8
|
+
</project_context>
|
|
9
|
+
{{/if}}
|
|
10
|
+
{{#if user_context}}
|
|
11
|
+
<user_context>
|
|
12
|
+
{{ user_context }}
|
|
13
|
+
</user_context>
|
|
14
|
+
{{/if}}
|
|
15
|
+
{{#if types_description}}
|
|
16
|
+
<commit_types>
|
|
17
|
+
{{ types_description }}
|
|
18
|
+
</commit_types>
|
|
19
|
+
{{/if}}
|
|
20
|
+
<diff_statistics>
|
|
21
|
+
{{ stat }}
|
|
22
|
+
</diff_statistics>
|
|
23
|
+
<scope_candidates>
|
|
24
|
+
{{ scope_candidates }}
|
|
25
|
+
</scope_candidates>
|
|
26
|
+
{{#if common_scopes}}
|
|
27
|
+
<common_scopes>
|
|
28
|
+
{{ common_scopes }}
|
|
29
|
+
</common_scopes>
|
|
30
|
+
{{/if}}
|
|
31
|
+
{{#if recent_commits}}
|
|
32
|
+
<style_patterns>
|
|
33
|
+
{{ recent_commits }}
|
|
34
|
+
</style_patterns>
|
|
35
|
+
{{/if}}
|
|
36
|
+
<diff>
|
|
37
|
+
{{ diff }}
|
|
38
|
+
</diff>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
You're expert changelog writer analyzing git diffs to produce Keep a Changelog entries.
|
|
2
|
+
|
|
3
|
+
<instructions>
|
|
4
|
+
1. Identify only user-visible changes
|
|
5
|
+
2. Categorize each change (use categories below)
|
|
6
|
+
3. Omit categories with no entries
|
|
7
|
+
</instructions>
|
|
8
|
+
|
|
9
|
+
<categories>
|
|
10
|
+
- Added: New features, public APIs, user-facing capabilities
|
|
11
|
+
- Changed: Modified behavior
|
|
12
|
+
- Deprecated: Features scheduled for removal
|
|
13
|
+
- Removed: Deleted features or APIs
|
|
14
|
+
- Fixed: Bug fixes with observable impact
|
|
15
|
+
- Security: Vulnerability fixes
|
|
16
|
+
- Breaking Changes: API-incompatible changes (use sparingly)
|
|
17
|
+
</categories>
|
|
18
|
+
|
|
19
|
+
<entry_format>
|
|
20
|
+
- Start with past-tense verb (Added, Fixed, Implemented, Updated)
|
|
21
|
+
- Describe user-visible impact, not implementation
|
|
22
|
+
- Name specific feature, option, or behavior
|
|
23
|
+
- Keep 1-2 lines, no trailing periods
|
|
24
|
+
</entry_format>
|
|
25
|
+
|
|
26
|
+
<examples>
|
|
27
|
+
Good:
|
|
28
|
+
- Added --dry-run flag to preview changes without applying them
|
|
29
|
+
- Fixed memory leak when processing large files
|
|
30
|
+
- Changed default timeout from 30s to 60s for slow connections
|
|
31
|
+
|
|
32
|
+
Bad:
|
|
33
|
+
- **cli**: Added dry-run flag -> redundant scope prefix
|
|
34
|
+
- Added new feature. -> vague, trailing period
|
|
35
|
+
- Refactored parser internals -> not user-visible
|
|
36
|
+
|
|
37
|
+
Breaking Changes:
|
|
38
|
+
- Removed legacy auth flow; users must re-authenticate with OAuth tokens
|
|
39
|
+
</examples>
|
|
40
|
+
|
|
41
|
+
<exclude>
|
|
42
|
+
Internal refactoring, code style changes, test-only modifications, minor doc updates.
|
|
43
|
+
</exclude>
|
|
44
|
+
|
|
45
|
+
<output_format>
|
|
46
|
+
Return ONLY valid JSON; no markdown fences or explanation.
|
|
47
|
+
|
|
48
|
+
With entries: {"entries": {"Added": ["entry 1"], "Fixed": ["entry 2"]}}
|
|
49
|
+
No changelog-worthy changes: {"entries": {}}
|
|
50
|
+
</output_format>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<context>
|
|
2
|
+
Changelog: {{ changelog_path }}
|
|
3
|
+
{{#if is_package_changelog}}Scope: Package-level changelog. Omit package name prefix from entries.{{/if}}
|
|
4
|
+
</context>
|
|
5
|
+
{{#if existing_entries}}
|
|
6
|
+
<existing_entries>
|
|
7
|
+
Already documented—skip these:
|
|
8
|
+
{{ existing_entries }}
|
|
9
|
+
</existing_entries>
|
|
10
|
+
{{/if}}
|
|
11
|
+
|
|
12
|
+
<diff_summary>
|
|
13
|
+
{{ stat }}
|
|
14
|
+
</diff_summary>
|
|
15
|
+
|
|
16
|
+
<diff>
|
|
17
|
+
{{ diff }}
|
|
18
|
+
</diff>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<role>Expert code analyst extracting structured observations from diffs.</role>
|
|
2
|
+
|
|
3
|
+
<instructions>
|
|
4
|
+
Extract factual observations from diff. This matters—be precise.
|
|
5
|
+
1. Use past-tense verb + specific target + optional purpose
|
|
6
|
+
2. Max 100 characters per observation
|
|
7
|
+
3. Consolidate related changes (e.g., "renamed 5 helper functions")
|
|
8
|
+
4. Return 1-5 observations only
|
|
9
|
+
</instructions>
|
|
10
|
+
|
|
11
|
+
<scope>
|
|
12
|
+
Include: functions, methods, types, API changes, behavior/logic changes, error handling, performance, security.
|
|
13
|
+
|
|
14
|
+
Exclude: import reordering, whitespace/formatting, comment-only changes, debug statements.
|
|
15
|
+
</scope>
|
|
16
|
+
|
|
17
|
+
<output_format>
|
|
18
|
+
Plain list, no preamble, no summary, no markdown formatting.
|
|
19
|
+
- added 'parse_config()' function for TOML configuration loading
|
|
20
|
+
- removed deprecated 'legacy_init()' and all callers
|
|
21
|
+
- changed 'Connection::new()' to accept '&Config' instead of individual params
|
|
22
|
+
</output_format>
|
|
23
|
+
|
|
24
|
+
Observations only. Classification in reduce phase.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Senior engineer synthesizing file-level observations into conventional commit analysis.
|
|
2
|
+
<context>
|
|
3
|
+
Given map-phase observations, produce unified commit classification with changelog metadata.
|
|
4
|
+
</context>
|
|
5
|
+
<instructions>
|
|
6
|
+
Determine:
|
|
7
|
+
1. TYPE: Single classification
|
|
8
|
+
2. SCOPE: Primary component
|
|
9
|
+
3. DETAILS: 3–4 summary points (max 6)
|
|
10
|
+
4. CHANGELOG: Metadata for user-visible changes
|
|
11
|
+
</instructions>
|
|
12
|
+
<scope_rules>
|
|
13
|
+
- Component name if >=60% changes target it
|
|
14
|
+
- null if spread across multiple components
|
|
15
|
+
- scope_candidates as primary source
|
|
16
|
+
- Valid: specific component names (api, parser, config, etc.)
|
|
17
|
+
</scope_rules>
|
|
18
|
+
<output_format>
|
|
19
|
+
Each detail point:
|
|
20
|
+
- Start with past-tense verb (added, fixed, moved, extracted)
|
|
21
|
+
- Under 120 chars, ends with period
|
|
22
|
+
- Group related cross-file changes
|
|
23
|
+
Priority: user-visible behavior > performance/security > architecture > internal implementation
|
|
24
|
+
changelog_category: Added|Changed|Fixed|Deprecated|Removed|Security
|
|
25
|
+
user_visible: true for features, user-facing bugs, breaking changes, security
|
|
26
|
+
</output_format>
|
|
27
|
+
<example>
|
|
28
|
+
Input observations:
|
|
29
|
+
- api/client.ts: added token refresh guard to prevent duplicate refreshes
|
|
30
|
+
- api/http.ts: introduced retry wrapper for 429 responses
|
|
31
|
+
- api/index.ts: updated exports for retry helper
|
|
32
|
+
Output:
|
|
33
|
+
{
|
|
34
|
+
"type": "fix",
|
|
35
|
+
"scope": "api",
|
|
36
|
+
"details": [
|
|
37
|
+
{
|
|
38
|
+
"text": "Added token refresh guard to prevent duplicate refreshes.",
|
|
39
|
+
"changelog_category": "Fixed",
|
|
40
|
+
"user_visible": true
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"text": "Introduced retry wrapper for 429 responses.",
|
|
44
|
+
"changelog_category": "Fixed",
|
|
45
|
+
"user_visible": true
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"issue_refs": []
|
|
49
|
+
}
|
|
50
|
+
</example>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{{#if types_description}}
|
|
2
|
+
<type_definitions>
|
|
3
|
+
{{ types_description }}
|
|
4
|
+
</type_definitions>
|
|
5
|
+
{{/if}}
|
|
6
|
+
|
|
7
|
+
<observations>
|
|
8
|
+
{{ observations }}
|
|
9
|
+
</observations>
|
|
10
|
+
|
|
11
|
+
<diff_statistics>
|
|
12
|
+
{{ stat }}
|
|
13
|
+
</diff_statistics>
|
|
14
|
+
|
|
15
|
+
<scope_candidates>
|
|
16
|
+
{{ scope_candidates }}
|
|
17
|
+
</scope_candidates>
|