@asterxsk/kiln 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/agent/version.txt +1 -1
- package/bin/kiln.js +10 -8
- package/package.json +1 -1
- package/agent.bak.20260905-190020/AGENTS.md +0 -67
- package/agent.bak.20260905-190020/README.md +0 -5
- package/agent.bak.20260905-190020/extensions/ask-user/index.ts +0 -418
- package/agent.bak.20260905-190020/extensions/ask-user/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/ask-user/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/ask-user/package-lock.json +0 -769
- package/agent.bak.20260905-190020/extensions/ask-user/package.json +0 -19
- package/agent.bak.20260905-190020/extensions/ask-user/prompt.ts +0 -45
- package/agent.bak.20260905-190020/extensions/ask-user/tsconfig.json +0 -7
- package/agent.bak.20260905-190020/extensions/background-terminals/docs/implementation-guide.md +0 -942
- package/agent.bak.20260905-190020/extensions/background-terminals/index.ts +0 -629
- package/agent.bak.20260905-190020/extensions/background-terminals/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/background-terminals/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/background-terminals/package-lock.json +0 -769
- package/agent.bak.20260905-190020/extensions/background-terminals/package.json +0 -17
- package/agent.bak.20260905-190020/extensions/background-terminals/src/domain.ts +0 -87
- package/agent.bak.20260905-190020/extensions/background-terminals/src/manager.ts +0 -907
- package/agent.bak.20260905-190020/extensions/background-terminals/src/output.ts +0 -84
- package/agent.bak.20260905-190020/extensions/background-terminals/src/prompt.ts +0 -142
- package/agent.bak.20260905-190020/extensions/background-terminals/src/result-delivery.ts +0 -27
- package/agent.bak.20260905-190020/extensions/background-terminals/src/runtime.ts +0 -36
- package/agent.bak.20260905-190020/extensions/background-terminals/src/ui/output-view.ts +0 -79
- package/agent.bak.20260905-190020/extensions/background-terminals/src/ui/ps.ts +0 -621
- package/agent.bak.20260905-190020/extensions/background-terminals/src/widget-order.ts +0 -121
- package/agent.bak.20260905-190020/extensions/background-terminals/test/manager.test.ts +0 -735
- package/agent.bak.20260905-190020/extensions/background-terminals/test/output.test.ts +0 -109
- package/agent.bak.20260905-190020/extensions/background-terminals/test/prompt.test.ts +0 -125
- package/agent.bak.20260905-190020/extensions/background-terminals/test/ps.test.ts +0 -82
- package/agent.bak.20260905-190020/extensions/background-terminals/test/result-delivery.test.ts +0 -44
- package/agent.bak.20260905-190020/extensions/background-terminals/tsconfig.json +0 -7
- package/agent.bak.20260905-190020/extensions/destructive/README.md +0 -34
- package/agent.bak.20260905-190020/extensions/destructive/index.ts +0 -124
- package/agent.bak.20260905-190020/extensions/destructive/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/destructive/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/file-search/index.ts +0 -459
- package/agent.bak.20260905-190020/extensions/file-search/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/file-search/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/file-search/package-lock.json +0 -2253
- package/agent.bak.20260905-190020/extensions/file-search/package.json +0 -23
- package/agent.bak.20260905-190020/extensions/file-search/src/args.ts +0 -122
- package/agent.bak.20260905-190020/extensions/file-search/src/binaries.ts +0 -422
- package/agent.bak.20260905-190020/extensions/file-search/src/output.ts +0 -126
- package/agent.bak.20260905-190020/extensions/file-search/src/process.ts +0 -146
- package/agent.bak.20260905-190020/extensions/file-search/src/prompt.ts +0 -52
- package/agent.bak.20260905-190020/extensions/file-search/test/index.spec.ts +0 -443
- package/agent.bak.20260905-190020/extensions/file-search/tsconfig.json +0 -7
- package/agent.bak.20260905-190020/extensions/goal/README.md +0 -50
- package/agent.bak.20260905-190020/extensions/goal/index.ts +0 -155
- package/agent.bak.20260905-190020/extensions/goal/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/goal/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/kiln-update/README.md +0 -25
- package/agent.bak.20260905-190020/extensions/kiln-update/index.ts +0 -99
- package/agent.bak.20260905-190020/extensions/kiln-update/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/kiln-update/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/modelconf/PLAN.md +0 -915
- package/agent.bak.20260905-190020/extensions/modelconf/README.md +0 -66
- package/agent.bak.20260905-190020/extensions/modelconf/index.ts +0 -296
- package/agent.bak.20260905-190020/extensions/modelconf/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/modelconf/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/modelconf/package-lock.json +0 -1809
- package/agent.bak.20260905-190020/extensions/modelconf/package.json +0 -13
- package/agent.bak.20260905-190020/extensions/modelconf/src/fuzzy.ts +0 -26
- package/agent.bak.20260905-190020/extensions/modelconf/src/glob.ts +0 -13
- package/agent.bak.20260905-190020/extensions/modelconf/src/persistence.test.ts +0 -46
- package/agent.bak.20260905-190020/extensions/modelconf/src/persistence.ts +0 -164
- package/agent.bak.20260905-190020/extensions/modelconf/src/ui/ModelConfView.test.ts +0 -75
- package/agent.bak.20260905-190020/extensions/modelconf/src/ui/ModelConfView.ts +0 -1101
- package/agent.bak.20260905-190020/extensions/modelconf/tsconfig.json +0 -15
- package/agent.bak.20260905-190020/extensions/pi-web-access/CHANGELOG.md +0 -690
- package/agent.bak.20260905-190020/extensions/pi-web-access/LICENSE +0 -21
- package/agent.bak.20260905-190020/extensions/pi-web-access/README.md +0 -470
- package/agent.bak.20260905-190020/extensions/pi-web-access/SECURITY.md +0 -5
- package/agent.bak.20260905-190020/extensions/pi-web-access/activity.ts +0 -101
- package/agent.bak.20260905-190020/extensions/pi-web-access/auth-fetch.ts +0 -148
- package/agent.bak.20260905-190020/extensions/pi-web-access/banner.png +0 -0
- package/agent.bak.20260905-190020/extensions/pi-web-access/brightdata-unlocker.ts +0 -272
- package/agent.bak.20260905-190020/extensions/pi-web-access/chrome-cookies.ts +0 -669
- package/agent.bak.20260905-190020/extensions/pi-web-access/content-find.ts +0 -139
- package/agent.bak.20260905-190020/extensions/pi-web-access/credential-source.ts +0 -191
- package/agent.bak.20260905-190020/extensions/pi-web-access/data-uri-sanitize.ts +0 -406
- package/agent.bak.20260905-190020/extensions/pi-web-access/datalab-pdf-extract.ts +0 -568
- package/agent.bak.20260905-190020/extensions/pi-web-access/declared-web-links.ts +0 -173
- package/agent.bak.20260905-190020/extensions/pi-web-access/evidence/CONTRACT-EVIDENCE.md +0 -496
- package/agent.bak.20260905-190020/extensions/pi-web-access/evidence/contract-probe.mjs +0 -140
- package/agent.bak.20260905-190020/extensions/pi-web-access/exa.ts +0 -526
- package/agent.bak.20260905-190020/extensions/pi-web-access/extract.ts +0 -1196
- package/agent.bak.20260905-190020/extensions/pi-web-access/feature-config.ts +0 -29
- package/agent.bak.20260905-190020/extensions/pi-web-access/fetch-params.ts +0 -111
- package/agent.bak.20260905-190020/extensions/pi-web-access/gemini-adc.ts +0 -298
- package/agent.bak.20260905-190020/extensions/pi-web-access/gemini-api.ts +0 -353
- package/agent.bak.20260905-190020/extensions/pi-web-access/gemini-pdf-extract.ts +0 -108
- package/agent.bak.20260905-190020/extensions/pi-web-access/gemini-search.ts +0 -21
- package/agent.bak.20260905-190020/extensions/pi-web-access/gemini-url-context.ts +0 -128
- package/agent.bak.20260905-190020/extensions/pi-web-access/gemini-web-config.ts +0 -101
- package/agent.bak.20260905-190020/extensions/pi-web-access/gemini-web.ts +0 -487
- package/agent.bak.20260905-190020/extensions/pi-web-access/github-api.ts +0 -197
- package/agent.bak.20260905-190020/extensions/pi-web-access/github-extract.ts +0 -746
- package/agent.bak.20260905-190020/extensions/pi-web-access/github-issue-pr.ts +0 -700
- package/agent.bak.20260905-190020/extensions/pi-web-access/index.ts +0 -1737
- package/agent.bak.20260905-190020/extensions/pi-web-access/package-lock.json +0 -5808
- package/agent.bak.20260905-190020/extensions/pi-web-access/package.json +0 -64
- package/agent.bak.20260905-190020/extensions/pi-web-access/page-query.ts +0 -96
- package/agent.bak.20260905-190020/extensions/pi-web-access/pdf-extract.ts +0 -409
- package/agent.bak.20260905-190020/extensions/pi-web-access/pi-web-fetch-demo.mp4 +0 -0
- package/agent.bak.20260905-190020/extensions/pi-web-access/promise-try.d.ts +0 -7
- package/agent.bak.20260905-190020/extensions/pi-web-access/query-rewrite.ts +0 -51
- package/agent.bak.20260905-190020/extensions/pi-web-access/render-search-error.ts +0 -170
- package/agent.bak.20260905-190020/extensions/pi-web-access/rsc-extract.ts +0 -338
- package/agent.bak.20260905-190020/extensions/pi-web-access/search-types.ts +0 -20
- package/agent.bak.20260905-190020/extensions/pi-web-access/source-check.ts +0 -282
- package/agent.bak.20260905-190020/extensions/pi-web-access/ssrf-protection.ts +0 -526
- package/agent.bak.20260905-190020/extensions/pi-web-access/storage.ts +0 -521
- package/agent.bak.20260905-190020/extensions/pi-web-access/summary-model-scope.ts +0 -125
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/auth-fetch.test.mjs +0 -208
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/brightdata-unlocker.test.mjs +0 -840
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/chrome-cookie-extraction.test.mjs +0 -441
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/config-path.test.mjs +0 -283
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/content-find.test.mjs +0 -25
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/credential-source.test.mjs +0 -118
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/data-uri-sanitize.test.mjs +0 -210
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/datalab-pdf-extract.test.mjs +0 -552
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/declared-web-links.test.mjs +0 -212
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-answer-storage.test.mjs +0 -40
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-cache-storage.test.mjs +0 -334
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-content-domain-policy.test.mjs +0 -95
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-modes.test.mjs +0 -53
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-not-found-guidance.test.mjs +0 -92
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-params.test.mjs +0 -86
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-render-call.test.mjs +0 -34
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/fetch-routing.test.mjs +0 -173
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/gemini-adc-auth.test.mjs +0 -257
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/gemini-api-transport.test.mjs +0 -170
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/gemini-pdf-extract.test.mjs +0 -133
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/gemini-web-cookie-opt-in.test.mjs +0 -178
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/gemini-web-header-overflow.test.mjs +0 -148
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/get-search-content.test.mjs +0 -223
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/github-extract.test.mjs +0 -378
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/github-issue-pr.test.mjs +0 -565
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/inline-content-config.test.mjs +0 -99
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/lazy-extract-load.test.mjs +0 -118
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/local-video-oversize.test.mjs +0 -52
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/package-typebox-dependency.test.mjs +0 -50
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/page-query.test.mjs +0 -51
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/pdf-config.test.mjs +0 -140
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/pdf-extract.test.mjs +0 -500
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/proxy-transport.test.mjs +0 -286
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/query-rewrite.test.mjs +0 -52
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/rsc-fallback.test.mjs +0 -102
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/search-error-render.test.mjs +0 -152
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/search-providers.test.mjs +0 -274
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/source-check.test.mjs +0 -179
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/ssrf-allow-ranges-config.test.mjs +0 -205
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/ssrf-protection.test.mjs +0 -456
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/summary-model-scope.test.mjs +0 -106
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/tool-registration-config.test.mjs +0 -182
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/web-search-answer-render.test.mjs +0 -66
- package/agent.bak.20260905-190020/extensions/pi-web-access/test/youtube-extract-errors.test.mjs +0 -64
- package/agent.bak.20260905-190020/extensions/pi-web-access/tsconfig.json +0 -11
- package/agent.bak.20260905-190020/extensions/pi-web-access/utils.ts +0 -451
- package/agent.bak.20260905-190020/extensions/pi-web-access/video-extract.ts +0 -392
- package/agent.bak.20260905-190020/extensions/pi-web-access/youtube-extract.ts +0 -328
- package/agent.bak.20260905-190020/extensions/shared/activity-status.ts +0 -31
- package/agent.bak.20260905-190020/extensions/shared/child-session.ts +0 -148
- package/agent.bak.20260905-190020/extensions/shared/context-utilization.ts +0 -47
- package/agent.bak.20260905-190020/extensions/shared/dashboard-state.ts +0 -99
- package/agent.bak.20260905-190020/extensions/shared/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/shared/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/shared/test/child-session.test.ts +0 -270
- package/agent.bak.20260905-190020/extensions/shared/test/context-utilization.test.ts +0 -48
- package/agent.bak.20260905-190020/extensions/shared/test/tool-call-timeout.test.ts +0 -117
- package/agent.bak.20260905-190020/extensions/shared/test/widget-order.test.ts +0 -167
- package/agent.bak.20260905-190020/extensions/shared/tool-call-timeout.ts +0 -104
- package/agent.bak.20260905-190020/extensions/skillsconf/README.md +0 -74
- package/agent.bak.20260905-190020/extensions/skillsconf/index.ts +0 -92
- package/agent.bak.20260905-190020/extensions/skillsconf/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/skillsconf/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/skillsconf/package-lock.json +0 -1809
- package/agent.bak.20260905-190020/extensions/skillsconf/package.json +0 -18
- package/agent.bak.20260905-190020/extensions/skillsconf/src/delete-skill.test.ts +0 -64
- package/agent.bak.20260905-190020/extensions/skillsconf/src/delete-skill.ts +0 -45
- package/agent.bak.20260905-190020/extensions/skillsconf/src/filter.test.ts +0 -80
- package/agent.bak.20260905-190020/extensions/skillsconf/src/filter.ts +0 -74
- package/agent.bak.20260905-190020/extensions/skillsconf/src/fuzzy.ts +0 -26
- package/agent.bak.20260905-190020/extensions/skillsconf/src/persistence.test.ts +0 -72
- package/agent.bak.20260905-190020/extensions/skillsconf/src/persistence.ts +0 -169
- package/agent.bak.20260905-190020/extensions/skillsconf/src/ui/SkillConfView.test.ts +0 -337
- package/agent.bak.20260905-190020/extensions/skillsconf/src/ui/SkillConfView.ts +0 -758
- package/agent.bak.20260905-190020/extensions/skillsconf/src/ui/text-input.ts +0 -91
- package/agent.bak.20260905-190020/extensions/skillsconf/src/ui/tui-helpers.ts +0 -144
- package/agent.bak.20260905-190020/extensions/skillsconf/tsconfig.json +0 -15
- package/agent.bak.20260905-190020/extensions/statusline/index.ts +0 -282
- package/agent.bak.20260905-190020/extensions/statusline/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/statusline/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/subagents/docs/design-plan.md +0 -568
- package/agent.bak.20260905-190020/extensions/subagents/docs/effect-v4-extension-guide.md +0 -354
- package/agent.bak.20260905-190020/extensions/subagents/docs/effect-v4-notes.md +0 -571
- package/agent.bak.20260905-190020/extensions/subagents/index.ts +0 -826
- package/agent.bak.20260905-190020/extensions/subagents/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/subagents/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/subagents/package-lock.json +0 -2244
- package/agent.bak.20260905-190020/extensions/subagents/package.json +0 -19
- package/agent.bak.20260905-190020/extensions/subagents/src/backend.ts +0 -73
- package/agent.bak.20260905-190020/extensions/subagents/src/backends/claude.ts +0 -701
- package/agent.bak.20260905-190020/extensions/subagents/src/backends/codex.ts +0 -1060
- package/agent.bak.20260905-190020/extensions/subagents/src/backends/pi.ts +0 -575
- package/agent.bak.20260905-190020/extensions/subagents/src/backends/stub.ts +0 -300
- package/agent.bak.20260905-190020/extensions/subagents/src/by-the-way.ts +0 -21
- package/agent.bak.20260905-190020/extensions/subagents/src/domain.ts +0 -253
- package/agent.bak.20260905-190020/extensions/subagents/src/format.ts +0 -74
- package/agent.bak.20260905-190020/extensions/subagents/src/manager.ts +0 -736
- package/agent.bak.20260905-190020/extensions/subagents/src/prompt.ts +0 -92
- package/agent.bak.20260905-190020/extensions/subagents/src/result-delivery.ts +0 -20
- package/agent.bak.20260905-190020/extensions/subagents/src/runtime.ts +0 -53
- package/agent.bak.20260905-190020/extensions/subagents/src/ui/takeover.ts +0 -583
- package/agent.bak.20260905-190020/extensions/subagents/src/ui/transcript.ts +0 -201
- package/agent.bak.20260905-190020/extensions/subagents/src/widget-order.ts +0 -121
- package/agent.bak.20260905-190020/extensions/subagents/test/by-the-way.test.ts +0 -29
- package/agent.bak.20260905-190020/extensions/subagents/test/claude.test.ts +0 -119
- package/agent.bak.20260905-190020/extensions/subagents/test/codex.test.ts +0 -102
- package/agent.bak.20260905-190020/extensions/subagents/test/context-usage.test.ts +0 -107
- package/agent.bak.20260905-190020/extensions/subagents/test/manager.test.ts +0 -276
- package/agent.bak.20260905-190020/extensions/subagents/test/result-delivery.test.ts +0 -27
- package/agent.bak.20260905-190020/extensions/subagents/test/takeover.test.ts +0 -29
- package/agent.bak.20260905-190020/extensions/subagents/tsconfig.json +0 -7
- package/agent.bak.20260905-190020/extensions/taste/index.ts +0 -443
- package/agent.bak.20260905-190020/extensions/taste/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/taste/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/todo/AGENTS.md +0 -38
- package/agent.bak.20260905-190020/extensions/todo/LICENSE +0 -21
- package/agent.bak.20260905-190020/extensions/todo/config.ts +0 -55
- package/agent.bak.20260905-190020/extensions/todo/index.ts +0 -151
- package/agent.bak.20260905-190020/extensions/todo/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/todo/install.sh +0 -21
- package/agent.bak.20260905-190020/extensions/todo/locales/de.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/locales/en.json +0 -15
- package/agent.bak.20260905-190020/extensions/todo/locales/es.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/locales/fr.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/locales/pt-BR.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/locales/pt.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/locales/ru.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/locales/uk.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/locales/zh.json +0 -17
- package/agent.bak.20260905-190020/extensions/todo/package-lock.json +0 -3358
- package/agent.bak.20260905-190020/extensions/todo/package.json +0 -67
- package/agent.bak.20260905-190020/extensions/todo/state/i18n-bridge.ts +0 -64
- package/agent.bak.20260905-190020/extensions/todo/state/invariants.ts +0 -20
- package/agent.bak.20260905-190020/extensions/todo/state/replay.ts +0 -38
- package/agent.bak.20260905-190020/extensions/todo/state/selectors.ts +0 -107
- package/agent.bak.20260905-190020/extensions/todo/state/state-reducer.ts +0 -326
- package/agent.bak.20260905-190020/extensions/todo/state/state.ts +0 -18
- package/agent.bak.20260905-190020/extensions/todo/state/store.ts +0 -82
- package/agent.bak.20260905-190020/extensions/todo/state/task-graph.ts +0 -57
- package/agent.bak.20260905-190020/extensions/todo/todo-overlay.ts +0 -204
- package/agent.bak.20260905-190020/extensions/todo/todo.ts +0 -155
- package/agent.bak.20260905-190020/extensions/todo/tool/response-envelope.ts +0 -109
- package/agent.bak.20260905-190020/extensions/todo/tool/types.ts +0 -206
- package/agent.bak.20260905-190020/extensions/todo/view/format.ts +0 -177
- package/agent.bak.20260905-190020/extensions/todo/widget-order.ts +0 -121
- package/agent.bak.20260905-190020/extensions/trim-context/README.md +0 -54
- package/agent.bak.20260905-190020/extensions/trim-context/index.ts +0 -487
- package/agent.bak.20260905-190020/extensions/trim-context/install.ps1 +0 -23
- package/agent.bak.20260905-190020/extensions/trim-context/install.sh +0 -21
- package/agent.bak.20260905-190020/keybindings.json +0 -7
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ What the installer does:
|
|
|
28
28
|
3. Clones `asterxsk/kiln` over plain HTTPS (no credential prompts, ever) and copies the managed files into `~/.pi/agent` — extensions and config get overwritten, your `settings.json`, `taste/`, sessions, and secrets are left alone
|
|
29
29
|
4. Runs each extension's `install.sh` / `install.ps1` (`npm ci`)
|
|
30
30
|
|
|
31
|
-
**Safe to re-run.** It back ups the extensions and config files it replaces, never touches per-user state, and accepts `--help` options (`--repo`, `--branch`, `--target`, `--local`, `--skip-pi`, `--skip-packages`, `--yes`) when you want control. The
|
|
31
|
+
**Safe to re-run.** It back ups the extensions and config files it replaces, never touches per-user state, and accepts `--help` options (`--repo`, `--branch`, `--target`, `--local`, `--skip-pi`, `--skip-packages`, `--yes`) when you want control. The installer always clones the repo over plain HTTPS — no credential prompts, ever — so every install starts from the latest GitHub code (`--repo`/`--branch` for forks, `--local` for a local checkout).
|
|
32
32
|
|
|
33
33
|
### Publishing the npm package
|
|
34
34
|
|
|
@@ -142,7 +142,7 @@ The house rules, merged into every session: *think before coding*, *simplicity f
|
|
|
142
142
|
```bash
|
|
143
143
|
git clone https://github.com/asterxsk/kiln.git
|
|
144
144
|
cd kiln
|
|
145
|
-
node bin/kiln.js --target /tmp/pi-test --skip-pi --skip-packages --yes
|
|
145
|
+
node bin/kiln.js --local --target /tmp/pi-test --skip-pi --skip-packages --yes
|
|
146
146
|
ls /tmp/pi-test/extensions
|
|
147
147
|
```
|
|
148
148
|
|
package/agent/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.4.0
|
package/bin/kiln.js
CHANGED
|
@@ -266,14 +266,18 @@ function resolveTarget(opt) {
|
|
|
266
266
|
return path.join(os.homedir(), ".pi", "agent");
|
|
267
267
|
}
|
|
268
268
|
|
|
269
|
-
// Source root:
|
|
269
|
+
// Source root: always a fresh GitHub clone (never the bundled tarball — it goes
|
|
270
|
+
// stale). --local builds from a local checkout instead (dev only).
|
|
270
271
|
function resolveSourceRoot(args) {
|
|
271
272
|
const pkgRoot = path.resolve(__dirname, ".."); // bin/ → package root
|
|
272
|
-
|
|
273
|
-
|
|
273
|
+
if (args.local) {
|
|
274
|
+
const cands = [path.join(pkgRoot, "agent"), pkgRoot, process.cwd(), path.join(process.cwd(), "agent")];
|
|
275
|
+
for (const r of cands) {
|
|
274
276
|
if (fs.existsSync(path.join(r, "extensions")) && fs.existsSync(path.join(r, "AGENTS.md"))) return r;
|
|
275
277
|
}
|
|
276
|
-
|
|
278
|
+
throw new Error(`local checkout not found (tried: ${cands.join(", ")})`);
|
|
279
|
+
}
|
|
280
|
+
if (!have("git")) throw new Error("git not found — kiln installs from GitHub (use --local for a local checkout)");
|
|
277
281
|
const base = path.join(os.homedir(), ".pi", "tmp");
|
|
278
282
|
fs.mkdirSync(base, { recursive: true });
|
|
279
283
|
const tmp = path.join(base, "kiln-" + crypto.randomBytes(4).toString("hex"));
|
|
@@ -322,10 +326,8 @@ async function main() {
|
|
|
322
326
|
if (!have("npm")) { line(`${C.red} ✖ npm not found (Node installed but npm missing)${C.reset}`); process.exit(1); }
|
|
323
327
|
line(`${C.dim} node ${nodeVer} · npm ${npmVer} · ${cmdOut("git", ["--version"]) || "git n/a"}${C.reset}\n`);
|
|
324
328
|
|
|
325
|
-
// git is
|
|
326
|
-
|
|
327
|
-
const haveSource = fs.existsSync(path.join(pkgAgent, "extensions")) && fs.existsSync(path.join(pkgAgent, "AGENTS.md"));
|
|
328
|
-
if (!have("git") && !haveSource && !args.local) { line(`${C.red} ✖ git not found — required to fetch config${C.reset}`); process.exit(1); }
|
|
329
|
+
// git is required unless --local (every install clones GitHub latest)
|
|
330
|
+
if (!have("git") && !args.local) { line(`${C.red} ✖ git not found — kiln installs from GitHub (or re-run with --local)${C.reset}`); process.exit(1); }
|
|
329
331
|
liveStart();
|
|
330
332
|
|
|
331
333
|
// ── [1/4] pi ──
|
package/package.json
CHANGED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
# AGENTS.md
|
|
2
|
-
|
|
3
|
-
Behavioral guidelines to reduce common LLM coding mistakes. Merge with project-specific instructions as needed.
|
|
4
|
-
|
|
5
|
-
## 1. Think Before Coding
|
|
6
|
-
|
|
7
|
-
**Don't assume. Don't hide confusion. Surface tradeoffs.**
|
|
8
|
-
|
|
9
|
-
Before implementing:
|
|
10
|
-
- State your assumptions explicitly. If uncertain, ask.
|
|
11
|
-
- If multiple interpretations exist, present them - don't pick silently.
|
|
12
|
-
- If a simpler approach exists, say so. Push back when warranted.
|
|
13
|
-
- If something is unclear, stop. Name what's confusing. Ask.
|
|
14
|
-
- If unsure or need info, websearch first. If that doesn't resolve it, ask the user to clarify.
|
|
15
|
-
|
|
16
|
-
## 2. Simplicity First
|
|
17
|
-
|
|
18
|
-
**Minimum code that solves the problem. Nothing speculative.**
|
|
19
|
-
|
|
20
|
-
- No features beyond what was asked.
|
|
21
|
-
- No abstractions for single-use code.
|
|
22
|
-
- No "flexibility" or "configurability" that wasn't requested.
|
|
23
|
-
- No error handling for impossible scenarios.
|
|
24
|
-
- If you write 200 lines and it could be 50, rewrite it.
|
|
25
|
-
|
|
26
|
-
Ask yourself: "Would a senior engineer say this is overcomplicated?" If yes, simplify.
|
|
27
|
-
|
|
28
|
-
## 3. Surgical Changes
|
|
29
|
-
|
|
30
|
-
**Touch only what you must. Clean up only your own mess.**
|
|
31
|
-
|
|
32
|
-
When editing existing code:
|
|
33
|
-
- Don't pollute ~/ (userprofile) directory. Make temp files in the project directory.
|
|
34
|
-
- Don't "improve" adjacent code, comments, or formatting.
|
|
35
|
-
- Don't refactor things that aren't broken.
|
|
36
|
-
- Match existing style, even if you'd do it differently.
|
|
37
|
-
- If you notice unrelated dead code, mention it - don't delete it.
|
|
38
|
-
|
|
39
|
-
When your changes create orphans:
|
|
40
|
-
- Remove imports/variables/functions that YOUR changes made unused.
|
|
41
|
-
- Don't remove pre-existing dead code unless asked.
|
|
42
|
-
|
|
43
|
-
The test: Every changed line should trace directly to the user's request.
|
|
44
|
-
|
|
45
|
-
## 4. Goal-Driven Execution
|
|
46
|
-
|
|
47
|
-
**Define success criteria. Loop until verified.**
|
|
48
|
-
|
|
49
|
-
Transform tasks into verifiable goals:
|
|
50
|
-
- "Add validation" → "Write tests for invalid inputs, then make them pass"
|
|
51
|
-
- "Fix the bug" → "Write a test that reproduces it, then make it pass"
|
|
52
|
-
- "Refactor X" → "Ensure tests pass before and after"
|
|
53
|
-
|
|
54
|
-
For multi-step tasks, state a brief plan:
|
|
55
|
-
```
|
|
56
|
-
1. [Step] → verify: [check]
|
|
57
|
-
2. [Step] → verify: [check]
|
|
58
|
-
3. [Step] → verify: [check]
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification.
|
|
62
|
-
|
|
63
|
-
When testing code, write dedicated tests dont run one-off tests in bash.
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
**These guidelines are working if:** fewer unnecessary changes in diffs, fewer rewrites due to overcomplication, and clarifying questions come before implementation rather than after mistakes.
|
|
@@ -1,418 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ask_user - Lets the model ask a single multiple-choice question.
|
|
3
|
-
*
|
|
4
|
-
* - 2 to 5 model-provided options, plus an always-present "Write my own answer" option
|
|
5
|
-
* - Popup UI: arrow keys or number keys to pick, Enter to confirm
|
|
6
|
-
* - "Write my own answer" opens an inline editor (Esc returns to the options)
|
|
7
|
-
* - Esc on the options dismisses the question (the model is told you declined)
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
11
|
-
import {
|
|
12
|
-
Editor,
|
|
13
|
-
type EditorTheme,
|
|
14
|
-
Key,
|
|
15
|
-
matchesKey,
|
|
16
|
-
Text,
|
|
17
|
-
truncateToWidth,
|
|
18
|
-
} from "@earendil-works/pi-tui";
|
|
19
|
-
import { Cause, Effect, Exit } from "effect";
|
|
20
|
-
import { Type, type Static } from "typebox";
|
|
21
|
-
import {
|
|
22
|
-
ASK_USER_PARAMETER_DESCRIPTIONS,
|
|
23
|
-
ASK_USER_PROMPT_GUIDELINES,
|
|
24
|
-
ASK_USER_PROMPT_SNIPPET,
|
|
25
|
-
ASK_USER_TOOL_DESCRIPTION,
|
|
26
|
-
buildAskUserResultMessage,
|
|
27
|
-
} from "./prompt.ts";
|
|
28
|
-
|
|
29
|
-
const MIN_OPTIONS = 2;
|
|
30
|
-
const MAX_OPTIONS = 5;
|
|
31
|
-
|
|
32
|
-
const OptionSchema = Type.Object({
|
|
33
|
-
label: Type.String({
|
|
34
|
-
description: ASK_USER_PARAMETER_DESCRIPTIONS.optionLabel,
|
|
35
|
-
}),
|
|
36
|
-
description: Type.Optional(
|
|
37
|
-
Type.String({
|
|
38
|
-
description: ASK_USER_PARAMETER_DESCRIPTIONS.optionDescription,
|
|
39
|
-
}),
|
|
40
|
-
),
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
const AskUserParams = Type.Object({
|
|
44
|
-
question: Type.String({
|
|
45
|
-
description: ASK_USER_PARAMETER_DESCRIPTIONS.question,
|
|
46
|
-
}),
|
|
47
|
-
options: Type.Array(OptionSchema, {
|
|
48
|
-
minItems: MIN_OPTIONS,
|
|
49
|
-
maxItems: MAX_OPTIONS,
|
|
50
|
-
description: ASK_USER_PARAMETER_DESCRIPTIONS.options,
|
|
51
|
-
}),
|
|
52
|
-
});
|
|
53
|
-
|
|
54
|
-
export type AskUserInput = Static<typeof AskUserParams>;
|
|
55
|
-
|
|
56
|
-
interface AskUserDetails {
|
|
57
|
-
question: string;
|
|
58
|
-
options: string[];
|
|
59
|
-
answer: string | null;
|
|
60
|
-
wasCustom: boolean;
|
|
61
|
-
cancelled: boolean;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
type SelectionResult = {
|
|
65
|
-
answer: string;
|
|
66
|
-
wasCustom: boolean;
|
|
67
|
-
index?: number;
|
|
68
|
-
} | null;
|
|
69
|
-
|
|
70
|
-
interface DisplayOption {
|
|
71
|
-
label: string;
|
|
72
|
-
description?: string;
|
|
73
|
-
isOther?: boolean;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function wrapText(text: string, width: number): string[] {
|
|
77
|
-
const lines: string[] = [];
|
|
78
|
-
for (const paragraph of text.split("\n")) {
|
|
79
|
-
const words = paragraph.split(/\s+/).filter(Boolean);
|
|
80
|
-
if (words.length === 0) {
|
|
81
|
-
lines.push("");
|
|
82
|
-
continue;
|
|
83
|
-
}
|
|
84
|
-
let current = "";
|
|
85
|
-
for (const word of words) {
|
|
86
|
-
const candidate = current ? `${current} ${word}` : word;
|
|
87
|
-
if (candidate.length > width && current) {
|
|
88
|
-
lines.push(current);
|
|
89
|
-
current = word;
|
|
90
|
-
} else {
|
|
91
|
-
current = candidate;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (current) lines.push(current);
|
|
95
|
-
}
|
|
96
|
-
return lines;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
export default function askUser(pi: ExtensionAPI) {
|
|
100
|
-
pi.registerTool({
|
|
101
|
-
name: "ask_user",
|
|
102
|
-
label: "Ask User",
|
|
103
|
-
description: ASK_USER_TOOL_DESCRIPTION,
|
|
104
|
-
promptSnippet: ASK_USER_PROMPT_SNIPPET,
|
|
105
|
-
promptGuidelines: ASK_USER_PROMPT_GUIDELINES,
|
|
106
|
-
parameters: AskUserParams,
|
|
107
|
-
|
|
108
|
-
async execute(_toolCallId, params, signal, _onUpdate, ctx) {
|
|
109
|
-
const reply = (
|
|
110
|
-
text: string,
|
|
111
|
-
answer: string | null = null,
|
|
112
|
-
wasCustom = false,
|
|
113
|
-
) => ({
|
|
114
|
-
content: [{ type: "text" as const, text }],
|
|
115
|
-
details: {
|
|
116
|
-
question: params.question,
|
|
117
|
-
options: params.options.map((o) => o.label),
|
|
118
|
-
answer,
|
|
119
|
-
wasCustom,
|
|
120
|
-
cancelled: answer === null,
|
|
121
|
-
} satisfies AskUserDetails,
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
if (
|
|
125
|
-
params.options.length < MIN_OPTIONS ||
|
|
126
|
-
params.options.length > MAX_OPTIONS
|
|
127
|
-
) {
|
|
128
|
-
throw new Error(
|
|
129
|
-
`ask_user requires between ${MIN_OPTIONS} and ${MAX_OPTIONS} options (got ${params.options.length}). Retry with a valid number of options.`,
|
|
130
|
-
);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (ctx.mode !== "tui") {
|
|
134
|
-
return reply(buildAskUserResultMessage({ kind: "no-ui" }));
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
if (signal?.aborted) {
|
|
138
|
-
return reply(buildAskUserResultMessage({ kind: "cancelled" }));
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
const allOptions: DisplayOption[] = [
|
|
142
|
-
...params.options,
|
|
143
|
-
{ label: "Write my own answer…", isOther: true },
|
|
144
|
-
];
|
|
145
|
-
|
|
146
|
-
const showQuestion = (uiSignal: AbortSignal) =>
|
|
147
|
-
ctx.ui.custom<SelectionResult>((tui, theme, _kb, done) => {
|
|
148
|
-
let optionIndex = 0;
|
|
149
|
-
let editMode = false;
|
|
150
|
-
let cachedLines: string[] | undefined;
|
|
151
|
-
|
|
152
|
-
let settled = false;
|
|
153
|
-
|
|
154
|
-
function finish(result: SelectionResult) {
|
|
155
|
-
if (settled) return;
|
|
156
|
-
settled = true;
|
|
157
|
-
uiSignal.removeEventListener("abort", cancel);
|
|
158
|
-
done(result);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
function cancel() {
|
|
162
|
-
finish(null);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
uiSignal.addEventListener("abort", cancel, { once: true });
|
|
166
|
-
if (uiSignal.aborted) queueMicrotask(cancel);
|
|
167
|
-
|
|
168
|
-
const editorTheme: EditorTheme = {
|
|
169
|
-
borderColor: (s) => theme.fg("accent", s),
|
|
170
|
-
selectList: {
|
|
171
|
-
selectedPrefix: (t) => theme.fg("accent", t),
|
|
172
|
-
selectedText: (t) => theme.fg("accent", t),
|
|
173
|
-
description: (t) => theme.fg("muted", t),
|
|
174
|
-
scrollInfo: (t) => theme.fg("dim", t),
|
|
175
|
-
noMatch: (t) => theme.fg("warning", t),
|
|
176
|
-
},
|
|
177
|
-
};
|
|
178
|
-
const editor = new Editor(tui, editorTheme);
|
|
179
|
-
|
|
180
|
-
editor.onSubmit = (value) => {
|
|
181
|
-
const trimmed = value.trim();
|
|
182
|
-
if (trimmed) {
|
|
183
|
-
finish({ answer: trimmed, wasCustom: true });
|
|
184
|
-
} else {
|
|
185
|
-
editMode = false;
|
|
186
|
-
editor.setText("");
|
|
187
|
-
refresh();
|
|
188
|
-
}
|
|
189
|
-
};
|
|
190
|
-
|
|
191
|
-
function refresh() {
|
|
192
|
-
cachedLines = undefined;
|
|
193
|
-
tui.requestRender();
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
function selectOption(index: number) {
|
|
197
|
-
const selected = allOptions[index];
|
|
198
|
-
if (selected.isOther) {
|
|
199
|
-
optionIndex = index;
|
|
200
|
-
editMode = true;
|
|
201
|
-
refresh();
|
|
202
|
-
} else {
|
|
203
|
-
finish({
|
|
204
|
-
answer: selected.label,
|
|
205
|
-
wasCustom: false,
|
|
206
|
-
index: index + 1,
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function handleInput(data: string) {
|
|
212
|
-
if (editMode) {
|
|
213
|
-
if (matchesKey(data, Key.escape)) {
|
|
214
|
-
editMode = false;
|
|
215
|
-
editor.setText("");
|
|
216
|
-
refresh();
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
editor.handleInput(data);
|
|
220
|
-
refresh();
|
|
221
|
-
return;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
if (matchesKey(data, Key.up)) {
|
|
225
|
-
optionIndex =
|
|
226
|
-
(optionIndex - 1 + allOptions.length) % allOptions.length;
|
|
227
|
-
refresh();
|
|
228
|
-
return;
|
|
229
|
-
}
|
|
230
|
-
if (matchesKey(data, Key.down)) {
|
|
231
|
-
optionIndex = (optionIndex + 1) % allOptions.length;
|
|
232
|
-
refresh();
|
|
233
|
-
return;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
// Number keys jump straight to an option
|
|
237
|
-
if (
|
|
238
|
-
data.length === 1 &&
|
|
239
|
-
data >= "1" &&
|
|
240
|
-
data <= String(allOptions.length)
|
|
241
|
-
) {
|
|
242
|
-
selectOption(Number(data) - 1);
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
if (matchesKey(data, Key.enter)) {
|
|
247
|
-
selectOption(optionIndex);
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
if (matchesKey(data, Key.escape)) {
|
|
252
|
-
finish(null);
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
function render(width: number): string[] {
|
|
257
|
-
if (cachedLines) return cachedLines;
|
|
258
|
-
|
|
259
|
-
const lines: string[] = [];
|
|
260
|
-
const add = (s: string) => lines.push(truncateToWidth(s, width));
|
|
261
|
-
|
|
262
|
-
const title = " Question ";
|
|
263
|
-
add(
|
|
264
|
-
theme.fg(
|
|
265
|
-
"accent",
|
|
266
|
-
`─${title}${"─".repeat(Math.max(0, width - title.length - 1))}`,
|
|
267
|
-
),
|
|
268
|
-
);
|
|
269
|
-
for (const line of wrapText(
|
|
270
|
-
params.question,
|
|
271
|
-
Math.max(10, width - 2),
|
|
272
|
-
)) {
|
|
273
|
-
add(` ${theme.fg("text", theme.bold(line))}`);
|
|
274
|
-
}
|
|
275
|
-
lines.push("");
|
|
276
|
-
|
|
277
|
-
for (let i = 0; i < allOptions.length; i++) {
|
|
278
|
-
const opt = allOptions[i];
|
|
279
|
-
const selected = i === optionIndex;
|
|
280
|
-
const prefix = selected ? theme.fg("accent", " ❯ ") : " ";
|
|
281
|
-
const marker = opt.isOther ? "✎" : `${i + 1}.`;
|
|
282
|
-
const label = `${marker} ${opt.label}`;
|
|
283
|
-
|
|
284
|
-
if (selected || (opt.isOther && editMode)) {
|
|
285
|
-
add(prefix + theme.fg("accent", label));
|
|
286
|
-
} else {
|
|
287
|
-
add(prefix + theme.fg(opt.isOther ? "muted" : "text", label));
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
if (opt.description) {
|
|
291
|
-
add(` ${theme.fg("muted", opt.description)}`);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
if (editMode) {
|
|
296
|
-
lines.push("");
|
|
297
|
-
add(theme.fg("muted", " Your answer:"));
|
|
298
|
-
for (const line of editor.render(width - 2)) {
|
|
299
|
-
add(` ${line}`);
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
lines.push("");
|
|
304
|
-
if (editMode) {
|
|
305
|
-
add(theme.fg("dim", " Enter submit • Esc back to options"));
|
|
306
|
-
} else {
|
|
307
|
-
add(
|
|
308
|
-
theme.fg(
|
|
309
|
-
"dim",
|
|
310
|
-
` ↑↓ or 1-${allOptions.length} select • Enter confirm • Esc dismiss`,
|
|
311
|
-
),
|
|
312
|
-
);
|
|
313
|
-
}
|
|
314
|
-
add(theme.fg("accent", "─".repeat(width)));
|
|
315
|
-
|
|
316
|
-
cachedLines = lines;
|
|
317
|
-
return lines;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
return {
|
|
321
|
-
render,
|
|
322
|
-
invalidate: () => {
|
|
323
|
-
cachedLines = undefined;
|
|
324
|
-
},
|
|
325
|
-
handleInput,
|
|
326
|
-
dispose: () => {
|
|
327
|
-
uiSignal.removeEventListener("abort", cancel);
|
|
328
|
-
},
|
|
329
|
-
};
|
|
330
|
-
});
|
|
331
|
-
|
|
332
|
-
const uiExit = await Effect.runPromiseExit(
|
|
333
|
-
Effect.tryPromise(showQuestion),
|
|
334
|
-
signal ? { signal } : undefined,
|
|
335
|
-
);
|
|
336
|
-
|
|
337
|
-
if (Exit.isFailure(uiExit)) {
|
|
338
|
-
if (Cause.hasInterruptsOnly(uiExit.cause)) {
|
|
339
|
-
return reply(buildAskUserResultMessage({ kind: "cancelled" }));
|
|
340
|
-
}
|
|
341
|
-
const [first] = Cause.prettyErrors(uiExit.cause);
|
|
342
|
-
throw new Error(first?.message ?? Cause.pretty(uiExit.cause));
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
const result = uiExit.value;
|
|
346
|
-
|
|
347
|
-
if (!result) {
|
|
348
|
-
return reply(buildAskUserResultMessage({ kind: "dismissed" }));
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
if (result.wasCustom) {
|
|
352
|
-
return reply(
|
|
353
|
-
buildAskUserResultMessage({
|
|
354
|
-
kind: "custom",
|
|
355
|
-
answer: result.answer,
|
|
356
|
-
}),
|
|
357
|
-
result.answer,
|
|
358
|
-
true,
|
|
359
|
-
);
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
return reply(
|
|
363
|
-
buildAskUserResultMessage({
|
|
364
|
-
kind: "selected",
|
|
365
|
-
answer: result.answer,
|
|
366
|
-
index: result.index,
|
|
367
|
-
}),
|
|
368
|
-
result.answer,
|
|
369
|
-
);
|
|
370
|
-
},
|
|
371
|
-
|
|
372
|
-
renderCall(args, theme, _context) {
|
|
373
|
-
let text = theme.fg("toolTitle", theme.bold("ask_user "));
|
|
374
|
-
text += theme.fg(
|
|
375
|
-
"muted",
|
|
376
|
-
typeof args.question === "string" ? args.question : "",
|
|
377
|
-
);
|
|
378
|
-
const opts = Array.isArray(args.options)
|
|
379
|
-
? (args.options as DisplayOption[])
|
|
380
|
-
: [];
|
|
381
|
-
if (opts.length > 0) {
|
|
382
|
-
const numbered = opts.map((o, i) => `${i + 1}. ${o.label}`);
|
|
383
|
-
text += `\n${theme.fg("dim", ` ${numbered.join(" ")}`)}`;
|
|
384
|
-
}
|
|
385
|
-
return new Text(text, 1, 0);
|
|
386
|
-
},
|
|
387
|
-
|
|
388
|
-
renderResult(result, _options, theme, _context) {
|
|
389
|
-
const details = result.details as AskUserDetails | undefined;
|
|
390
|
-
if (!details) {
|
|
391
|
-
const first = result.content[0];
|
|
392
|
-
return new Text(first?.type === "text" ? first.text : "", 1, 0);
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
if (details.cancelled || details.answer === null) {
|
|
396
|
-
return new Text(theme.fg("warning", "✗ dismissed"), 1, 0);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
if (details.wasCustom) {
|
|
400
|
-
return new Text(
|
|
401
|
-
theme.fg("success", "✓ ") +
|
|
402
|
-
theme.fg("muted", "(wrote) ") +
|
|
403
|
-
theme.fg("accent", details.answer),
|
|
404
|
-
1,
|
|
405
|
-
0,
|
|
406
|
-
);
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
const idx = details.options.indexOf(details.answer) + 1;
|
|
410
|
-
const display = idx > 0 ? `${idx}. ${details.answer}` : details.answer;
|
|
411
|
-
return new Text(
|
|
412
|
-
theme.fg("success", "✓ ") + theme.fg("accent", display),
|
|
413
|
-
1,
|
|
414
|
-
0,
|
|
415
|
-
);
|
|
416
|
-
},
|
|
417
|
-
});
|
|
418
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env pwsh
|
|
2
|
-
# Per-extension installer — Windows / PowerShell
|
|
3
|
-
# Installs npm dependencies for this extension. No-op if no package.json.
|
|
4
|
-
$ErrorActionPreference = "Stop"
|
|
5
|
-
$extDir = $PSScriptRoot
|
|
6
|
-
if (-not $extDir) { $extDir = Split-Path -Parent $MyInvocation.MyCommand.Path }
|
|
7
|
-
if (-not (Test-Path "$extDir/package.json")) {
|
|
8
|
-
Write-Host " - no package.json — skipping" -ForegroundColor DarkGray
|
|
9
|
-
exit 0
|
|
10
|
-
}
|
|
11
|
-
if (-not (Get-Command npm -ErrorAction SilentlyContinue)) {
|
|
12
|
-
Write-Host " x npm not found — install Node.js 22+" -ForegroundColor Red
|
|
13
|
-
exit 1
|
|
14
|
-
}
|
|
15
|
-
if (Test-Path "$extDir/package-lock.json") {
|
|
16
|
-
Write-Host " - npm ci" -ForegroundColor DarkGray
|
|
17
|
-
npm --prefix $extDir ci --no-audit --no-fund
|
|
18
|
-
} else {
|
|
19
|
-
Write-Host " - npm install" -ForegroundColor DarkGray
|
|
20
|
-
npm --prefix $extDir install --no-audit --no-fund
|
|
21
|
-
}
|
|
22
|
-
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
23
|
-
Write-Host " + done" -ForegroundColor Green
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
#!/bin/sh
|
|
2
|
-
# Per-extension installer — macOS / Linux
|
|
3
|
-
# Installs npm dependencies for this extension. No-op if no package.json.
|
|
4
|
-
set -eu
|
|
5
|
-
EXT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
6
|
-
if [ ! -f "$EXT_DIR/package.json" ]; then
|
|
7
|
-
echo " · no package.json — skipping"
|
|
8
|
-
exit 0
|
|
9
|
-
fi
|
|
10
|
-
if ! command -v npm >/dev/null 2>&1; then
|
|
11
|
-
echo " ✖ npm not found — install Node.js 22+" >&2
|
|
12
|
-
exit 1
|
|
13
|
-
fi
|
|
14
|
-
if [ -f "$EXT_DIR/package-lock.json" ]; then
|
|
15
|
-
echo " · npm ci"
|
|
16
|
-
npm --prefix "$EXT_DIR" ci --no-audit --no-fund
|
|
17
|
-
else
|
|
18
|
-
echo " · npm install"
|
|
19
|
-
npm --prefix "$EXT_DIR" install --no-audit --no-fund
|
|
20
|
-
fi
|
|
21
|
-
echo " ✓ done"
|