@pi-unipi/unipi 3.0.0-alpha.2 → 3.0.0-alpha.21
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 +292 -0
- package/README.md +8 -11
- package/docs/prefix-cache-architecture.md +14 -0
- package/package.json +22 -24
- package/packages/ask-user/README.md +55 -107
- package/packages/ask-user/ask-ui.ts +306 -732
- package/packages/ask-user/clipboard.ts +50 -0
- package/packages/ask-user/config.ts +74 -78
- package/packages/ask-user/package.json +2 -2
- package/packages/ask-user/questions.ts +151 -0
- package/packages/ask-user/skills/ask-user/SKILL.md +59 -133
- package/packages/ask-user/tools.ts +198 -432
- package/packages/autocomplete/package.json +1 -1
- package/packages/autocomplete/src/constants.ts +38 -43
- package/packages/autocomplete/src/sorting.ts +8 -0
- package/packages/background-tasks/package.json +2 -2
- package/packages/background-tasks/src/config.ts +0 -73
- package/packages/background-tasks/src/index.ts +20 -16
- package/packages/background-tasks/src/registry.ts +1 -171
- package/packages/background-tasks/src/types.ts +0 -32
- package/packages/btw/README.md +13 -56
- package/packages/btw/extensions/btw.ts +403 -1796
- package/packages/btw/package.json +5 -2
- package/packages/btw/skills/btw/SKILL.md +7 -143
- package/packages/compactor/README.md +56 -287
- package/packages/compactor/package.json +5 -9
- package/packages/compactor/skills/compactor/SKILL.md +13 -20
- package/packages/compactor/src/card.ts +90 -0
- package/packages/compactor/src/commands/index.ts +73 -130
- package/packages/compactor/src/compaction/compact-args.ts +5 -3
- package/packages/compactor/src/compaction/filter-noise.ts +1 -1
- package/packages/compactor/src/compaction/hooks.ts +487 -311
- package/packages/compactor/src/compaction/source.ts +178 -0
- package/packages/compactor/src/compaction/summarize.ts +586 -52
- package/packages/compactor/src/config/manager.ts +130 -127
- package/packages/compactor/src/config/schema.ts +32 -48
- package/packages/compactor/src/index.ts +40 -431
- package/packages/compactor/src/info-screen.ts +44 -190
- package/packages/compactor/src/session/recall-blocks.ts +1 -1
- package/packages/compactor/src/stats.ts +76 -0
- package/packages/compactor/src/tools/context-budget.ts +17 -34
- package/packages/compactor/src/tools/ctx-doctor.ts +45 -36
- package/packages/compactor/src/tools/register.ts +29 -269
- package/packages/compactor/src/types.ts +47 -186
- package/packages/core/README.md +25 -0
- package/packages/core/child-agent.ts +1 -0
- package/packages/core/command-echo.ts +63 -0
- package/packages/core/compaction-context.ts +41 -0
- package/packages/core/constants.ts +8 -38
- package/packages/core/events.ts +0 -53
- package/packages/core/fusion-status.ts +4 -0
- package/packages/core/global.d.ts +10 -0
- package/packages/core/harness-messages.ts +392 -0
- package/packages/core/index.ts +14 -0
- package/packages/core/kanboard-status.ts +49 -0
- package/packages/core/long-horizon-owner-status.ts +46 -0
- package/packages/core/model-cache.ts +81 -7
- package/packages/core/package.json +6 -3
- package/packages/core/src/attach/detect.ts +163 -0
- package/packages/core/src/child-agent/child-args.ts +31 -0
- package/packages/core/src/child-agent/delivery.ts +41 -0
- package/packages/core/src/child-agent/index.ts +5 -0
- package/packages/core/src/child-agent/readers.ts +203 -0
- package/packages/core/src/child-agent/runtime.ts +584 -0
- package/packages/core/src/evidence.ts +78 -0
- package/packages/core/src/hints/browser.ts +278 -0
- package/packages/core/src/hints/crab-data.ts +19 -0
- package/packages/core/src/hints/index.ts +865 -0
- package/packages/core/src/hints/lines.ts +607 -0
- package/packages/core/src/hints/store.ts +120 -0
- package/packages/core/src/jev/chatter.ts +24 -0
- package/packages/core/src/jev/settings.ts +177 -14
- package/packages/core/src/package-colors.ts +2 -0
- package/packages/core/src/settings/catalog.ts +39 -15
- package/packages/core/src/settings/engine.ts +48 -2
- package/packages/core/src/settings/hub.ts +83 -20
- package/packages/core/src/settings/open.ts +49 -0
- package/packages/core/src/settings/schema.ts +27 -7
- package/packages/core/src/tui/hub-kit.ts +18 -5
- package/packages/core/src/tui/kit.ts +198 -0
- package/packages/core/src/tui/progress.ts +73 -0
- package/packages/core/src/turn/arbiter.ts +290 -0
- package/packages/footer/README.md +4 -6
- package/packages/footer/package.json +3 -3
- package/packages/footer/src/glance-editor.ts +19 -11
- package/packages/footer/src/help.ts +1 -1
- package/packages/footer/src/index.ts +36 -3
- package/packages/footer/src/presets.ts +3 -4
- package/packages/footer/src/rendering/icons.ts +0 -20
- package/packages/footer/src/segments/compactor.ts +52 -142
- package/packages/footer/src/segments/status-ext.ts +0 -1
- package/packages/fusion/README.md +14 -4
- package/packages/fusion/package.json +4 -3
- package/packages/fusion/src/child-args.ts +1 -0
- package/packages/fusion/src/index.ts +161 -8
- package/packages/fusion/src/pi-settings.ts +57 -0
- package/packages/fusion/src/picker.ts +186 -51
- package/packages/fusion/src/preset.ts +56 -2
- package/packages/fusion/src/prompts.ts +1 -1
- package/packages/fusion/src/sidekick-runtime.ts +1 -420
- package/packages/fusion/src/tools.ts +107 -128
- package/packages/fusion/src/transcript.ts +27 -85
- package/packages/info-screen/package.json +2 -2
- package/packages/input-shortcuts/README.md +18 -30
- package/packages/input-shortcuts/package.json +2 -2
- package/packages/input-shortcuts/src/burst.ts +88 -0
- package/packages/input-shortcuts/src/chord-overlay.ts +20 -70
- package/packages/input-shortcuts/src/cleared-input.ts +97 -0
- package/packages/input-shortcuts/src/index.ts +99 -193
- package/packages/input-shortcuts/src/last-response.ts +40 -0
- package/packages/input-shortcuts/src/registers.ts +8 -23
- package/packages/input-shortcuts/src/types.ts +4 -16
- package/packages/input-shortcuts/src/undo-redo.ts +59 -47
- package/packages/kanboard/README.md +51 -47
- package/packages/kanboard/index.ts +293 -55
- package/packages/kanboard/package.json +8 -8
- package/packages/kanboard/skills/kanboard/SKILL.md +61 -27
- package/packages/kanboard/src/badges.ts +93 -0
- package/packages/kanboard/src/bin.ts +4 -2
- package/packages/kanboard/src/commands.ts +218 -84
- package/packages/kanboard/src/debug.ts +20 -0
- package/packages/kanboard/src/guard.ts +267 -109
- package/packages/kanboard/src/monitor.ts +330 -0
- package/packages/kanboard/src/notice-buffer.ts +74 -0
- package/packages/kanboard/src/progress.ts +27 -0
- package/packages/kanboard/src/reminders.ts +234 -0
- package/packages/kanboard/src/settings.ts +69 -15
- package/packages/kanboard/src/shapes.ts +5 -0
- package/packages/long-horizon/index.ts +190 -13
- package/packages/long-horizon/package.json +3 -3
- package/packages/long-horizon/src/commands.ts +103 -7
- package/packages/long-horizon/src/compaction-brief.ts +35 -0
- package/packages/long-horizon/src/engine/continuation.ts +84 -15
- package/packages/long-horizon/src/engine/goal-state.ts +64 -13
- package/packages/long-horizon/src/engine/nudge-stash.ts +71 -0
- package/packages/long-horizon/src/engine/ralph.ts +3 -2
- package/packages/long-horizon/src/engine/runaway.ts +68 -11
- package/packages/long-horizon/src/engine/verifier.ts +19 -0
- package/packages/long-horizon/src/gate.ts +37 -12
- package/packages/long-horizon/src/judge/resolve.ts +1 -0
- package/packages/long-horizon/src/owner.ts +35 -2
- package/packages/long-horizon/src/progress.ts +87 -0
- package/packages/long-horizon/src/prompts/goal.ts +1 -1
- package/packages/long-horizon/src/runtime.ts +172 -18
- package/packages/long-horizon/src/settings.ts +54 -39
- package/packages/long-horizon/src/tools/goal.ts +6 -0
- package/packages/long-horizon/src/tools/graph.ts +1 -1
- package/packages/long-horizon/src/tools/swarm.ts +3 -3
- package/packages/mcp/package.json +2 -2
- package/packages/memory/commands.ts +7 -2
- package/packages/memory/index.ts +210 -32
- package/packages/memory/package.json +3 -3
- package/packages/memory/save-session.ts +264 -0
- package/packages/memory/settings.ts +17 -0
- package/packages/memory/tools.ts +253 -203
- package/packages/notify/package.json +2 -2
- package/packages/skill-registry/README.md +53 -16
- package/packages/skill-registry/index.ts +230 -0
- package/packages/skill-registry/package.json +19 -8
- package/packages/skill-registry/src/editor.ts +206 -0
- package/packages/skill-registry/src/judge.ts +289 -0
- package/packages/skill-registry/src/registry.ts +87 -0
- package/packages/skill-registry/src/settings.ts +259 -0
- package/packages/skill-registry/src/vault.ts +80 -0
- package/packages/subagents/README.md +39 -119
- package/packages/subagents/package.json +6 -13
- package/packages/subagents/skills/subagents/SKILL.md +18 -42
- package/packages/subagents/src/agents.ts +213 -0
- package/packages/subagents/src/cards.ts +182 -0
- package/packages/subagents/src/index.ts +609 -1084
- package/packages/subagents/src/manager.ts +429 -0
- package/packages/subagents/src/profiles.ts +130 -0
- package/packages/subagents/src/transcript.ts +154 -0
- package/packages/subagents/src/ui.ts +389 -0
- package/packages/unipi/bundled.js +39756 -45569
- package/packages/unipi/index.ts +55 -10
- package/packages/updater/package.json +2 -2
- package/packages/utility/README.md +76 -69
- package/packages/utility/package.json +2 -2
- package/packages/utility/skills/image/SKILL.md +37 -0
- package/packages/utility/skills/utility/SKILL.md +17 -60
- package/packages/utility/src/answer/extract.ts +128 -0
- package/packages/utility/src/answer/index.ts +213 -0
- package/packages/utility/src/answer/reply.ts +133 -0
- package/packages/utility/src/answer/web.ts +167 -0
- package/packages/utility/src/attach/index.ts +205 -0
- package/packages/utility/src/commands.ts +38 -142
- package/packages/utility/src/diagnostics/engine.ts +50 -5
- package/packages/utility/src/image/index.ts +33 -0
- package/packages/utility/src/image/models.ts +221 -0
- package/packages/{image/src → utility/src/image}/recognize.ts +2 -2
- package/packages/utility/src/image/settings.ts +178 -0
- package/packages/{image/src/image-source.ts → utility/src/image/source.ts} +1 -1
- package/packages/utility/src/image/tools.ts +168 -0
- package/packages/utility/src/image/transports.ts +186 -0
- package/packages/utility/src/index.ts +68 -389
- package/packages/utility/src/lifecycle/cleanup.ts +116 -311
- package/packages/utility/src/rename/gate.ts +102 -0
- package/packages/utility/src/rename/index.ts +191 -0
- package/packages/utility/src/rename/session.ts +170 -0
- package/packages/utility/src/render/delegated.ts +285 -0
- package/packages/utility/src/render/harness.ts +683 -0
- package/packages/utility/src/render/parse.ts +156 -0
- package/packages/utility/src/render/pi-settings.ts +38 -0
- package/packages/utility/src/render/reply-bg.ts +307 -0
- package/packages/utility/src/render/simple.ts +724 -0
- package/packages/utility/src/render/spacing.ts +235 -0
- package/packages/utility/src/render/styled.ts +251 -0
- package/packages/utility/src/render/tools.ts +353 -0
- package/packages/utility/src/settings.ts +166 -233
- package/packages/utility/src/types.ts +1 -222
- package/packages/watchdog/index.ts +17 -6
- package/packages/watchdog/package.json +3 -3
- package/packages/watchdog/src/config.ts +3 -2
- package/packages/web-api/package.json +2 -2
- package/packages/workflow/README.md +3 -0
- package/packages/workflow/index.ts +0 -2
- package/packages/workflow/package.json +2 -2
- package/packages/workflow/src/permission/decide.ts +6 -4
- package/packages/workflow/src/permission/index.ts +17 -7
- package/packages/workflow/src/permission/settings.ts +39 -4
- package/packages/workflow/src/plan/index.ts +19 -4
- package/packages/background-tasks/extensions/delegate-child.ts +0 -1
- package/packages/background-tasks/src/context-parent-snapshot.ts +0 -142
- package/packages/background-tasks/src/context-token-budget.ts +0 -903
- package/packages/background-tasks/src/context-visible-conversation-v2.ts +0 -551
- package/packages/background-tasks/src/delegate/artifacts.ts +0 -487
- package/packages/background-tasks/src/delegate/budget.ts +0 -415
- package/packages/background-tasks/src/delegate/hook-contract-evidence.json +0 -18
- package/packages/background-tasks/src/delegate/hook-contract.ts +0 -154
- package/packages/background-tasks/src/delegate/launch.ts +0 -484
- package/packages/background-tasks/src/delegate/result-package.ts +0 -459
- package/packages/background-tasks/src/delegate/runner.ts +0 -430
- package/packages/background-tasks/src/delegate/seed.ts +0 -423
- package/packages/background-tasks/src/delegate/types.ts +0 -323
- package/packages/background-tasks/src/delegate-child-extension.ts +0 -978
- package/packages/background-tasks/src/delegate-extension.ts +0 -654
- package/packages/background-tasks/src/fixtures/delegate-context-incident.json +0 -17
- package/packages/compactor/skills/compactor-detail/SKILL.md +0 -116
- package/packages/compactor/skills/compactor-doctor/SKILL.md +0 -71
- package/packages/compactor/skills/compactor-stats/SKILL.md +0 -51
- package/packages/compactor/src/compaction/build-sections.ts +0 -76
- package/packages/compactor/src/compaction/extract/goals.ts +0 -36
- package/packages/compactor/src/compaction/extract/preferences.ts +0 -40
- package/packages/compactor/src/compaction/format.ts +0 -53
- package/packages/compactor/src/compaction/merge.ts +0 -143
- package/packages/compactor/src/config/presets.ts +0 -160
- package/packages/compactor/src/executor/executor.ts +0 -233
- package/packages/compactor/src/executor/runtime.ts +0 -115
- package/packages/compactor/src/security/evaluator.ts +0 -89
- package/packages/compactor/src/security/policy.ts +0 -96
- package/packages/compactor/src/security/scanner.ts +0 -65
- package/packages/compactor/src/session/auto-inject.ts +0 -60
- package/packages/compactor/src/session/db.ts +0 -325
- package/packages/compactor/src/session/extract.ts +0 -144
- package/packages/compactor/src/session/resume-inject.ts +0 -64
- package/packages/compactor/src/session/snapshot.ts +0 -327
- package/packages/compactor/src/tools/ctx-batch-execute.ts +0 -41
- package/packages/compactor/src/tools/ctx-execute-file.ts +0 -23
- package/packages/compactor/src/tools/ctx-execute.ts +0 -23
- package/packages/compactor/src/tools/ctx-stats.ts +0 -96
- package/packages/image/README.md +0 -99
- package/packages/image/package.json +0 -61
- package/packages/image/skills/image/SKILL.md +0 -76
- package/packages/image/src/generate.ts +0 -256
- package/packages/image/src/index.ts +0 -135
- package/packages/image/src/models.ts +0 -519
- package/packages/image/src/openai-images-api.ts +0 -282
- package/packages/image/src/register-providers.ts +0 -209
- package/packages/image/src/settings.ts +0 -173
- package/packages/image/src/tools.ts +0 -326
- package/packages/input-shortcuts/src/clipboard.ts +0 -119
- package/packages/kanboard/src/runner.ts +0 -817
- package/packages/skill-registry/skills/auto/SKILL.md +0 -465
- package/packages/skill-registry/skills/brainstorm/SKILL.md +0 -219
- package/packages/skill-registry/skills/chore-create/SKILL.md +0 -315
- package/packages/skill-registry/skills/chore-execute/SKILL.md +0 -314
- package/packages/skill-registry/skills/consolidate/SKILL.md +0 -142
- package/packages/skill-registry/skills/consultant/SKILL.md +0 -97
- package/packages/skill-registry/skills/debug/SKILL.md +0 -228
- package/packages/skill-registry/skills/document/SKILL.md +0 -120
- package/packages/skill-registry/skills/fix/SKILL.md +0 -212
- package/packages/skill-registry/skills/gather-context/SKILL.md +0 -145
- package/packages/skill-registry/skills/plan/SKILL.md +0 -231
- package/packages/skill-registry/skills/quick-fix/SKILL.md +0 -135
- package/packages/skill-registry/skills/quick-work/SKILL.md +0 -110
- package/packages/skill-registry/skills/research/SKILL.md +0 -251
- package/packages/skill-registry/skills/review-work/SKILL.md +0 -187
- package/packages/skill-registry/skills/scan-issues/SKILL.md +0 -195
- package/packages/skill-registry/skills/work/SKILL.md +0 -218
- package/packages/skill-registry/skills/worktree-create/SKILL.md +0 -69
- package/packages/skill-registry/skills/worktree-list/SKILL.md +0 -78
- package/packages/skill-registry/skills/worktree-merge/SKILL.md +0 -89
- package/packages/subagents/agents/delegate.md +0 -14
- package/packages/subagents/agents/oracle.md +0 -78
- package/packages/subagents/agents/researcher.md +0 -52
- package/packages/subagents/agents/reviewer.md +0 -80
- package/packages/subagents/agents/scout.md +0 -50
- package/packages/subagents/agents/worker.md +0 -59
- package/packages/subagents/prompts/council.md +0 -48
- package/packages/subagents/prompts/gather-context-and-clarify.md +0 -13
- package/packages/subagents/prompts/parallel-cleanup.md +0 -59
- package/packages/subagents/prompts/parallel-research.md +0 -50
- package/packages/subagents/prompts/parallel-review.md +0 -54
- package/packages/subagents/prompts/review-loop.md +0 -43
- package/packages/subagents/skills/council-mode/SKILL.md +0 -230
- package/packages/subagents/skills/subagents/references/constraints-and-recipes.md +0 -259
- package/packages/subagents/skills/subagents/references/execution-controls.md +0 -454
- package/packages/subagents/skills/subagents/references/management-authoring-rpc.md +0 -161
- package/packages/subagents/skills/subagents/references/multi-lane-orchestration.md +0 -39
- package/packages/subagents/skills/subagents/references/prompting-and-roles.md +0 -267
- package/packages/subagents/src/acceptance.ts +0 -331
- package/packages/subagents/src/agent-manager.ts +0 -405
- package/packages/subagents/src/agent-memory.ts +0 -300
- package/packages/subagents/src/agent-overrides.ts +0 -183
- package/packages/subagents/src/agent-runner.ts +0 -271
- package/packages/subagents/src/async-runner.ts +0 -422
- package/packages/subagents/src/authority-policy.ts +0 -47
- package/packages/subagents/src/budgets.ts +0 -285
- package/packages/subagents/src/child-safety.ts +0 -140
- package/packages/subagents/src/config.ts +0 -249
- package/packages/subagents/src/conversation-viewer.ts +0 -281
- package/packages/subagents/src/core-compat.ts +0 -94
- package/packages/subagents/src/custom-agents.ts +0 -343
- package/packages/subagents/src/file-system-retry.ts +0 -50
- package/packages/subagents/src/fleet-data.ts +0 -105
- package/packages/subagents/src/fleet-view.ts +0 -322
- package/packages/subagents/src/foreground-detach.ts +0 -59
- package/packages/subagents/src/fork-context.ts +0 -285
- package/packages/subagents/src/global.d.ts +0 -7
- package/packages/subagents/src/guide.ts +0 -129
- package/packages/subagents/src/mission-state.ts +0 -133
- package/packages/subagents/src/mission-store.ts +0 -436
- package/packages/subagents/src/output-limits.ts +0 -142
- package/packages/subagents/src/parity-types.ts +0 -315
- package/packages/subagents/src/pi-args.ts +0 -167
- package/packages/subagents/src/result-files.ts +0 -232
- package/packages/subagents/src/result-watcher.ts +0 -221
- package/packages/subagents/src/retained-children.ts +0 -176
- package/packages/subagents/src/run-fanout-budget.ts +0 -356
- package/packages/subagents/src/scheduled-runs.ts +0 -349
- package/packages/subagents/src/schemas.ts +0 -263
- package/packages/subagents/src/slash-commands.ts +0 -80
- package/packages/subagents/src/supervisor-channel.ts +0 -249
- package/packages/subagents/src/tool-handler.ts +0 -1144
- package/packages/subagents/src/types.ts +0 -238
- package/packages/subagents/src/widget.ts +0 -457
- package/packages/subagents/src/workflow-script.ts +0 -737
- package/packages/subagents/src/workflow-worker.ts +0 -384
- package/packages/subagents/src/worktree.ts +0 -614
- package/packages/utility/src/analytics/collector.ts +0 -293
- package/packages/utility/src/info-screen.ts +0 -80
- package/packages/utility/src/lifecycle/process.ts +0 -162
- package/packages/utility/src/prefix-cache.ts +0 -263
- package/packages/utility/src/skill-discovery.ts +0 -542
- package/packages/utility/src/tools/env.ts +0 -113
- package/packages/utility/src/tui/name-badge-state.ts +0 -315
- package/packages/utility/src/tui/name-badge.ts +0 -109
- /package/packages/{subagents/src → core/src/child-agent}/pi-spawn.ts +0 -0
|
@@ -1,305 +1,238 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @pi-unipi/utility — Settings
|
|
2
|
+
* @pi-unipi/utility — Settings
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Namespace `utility` in the settings hub. Sections:
|
|
5
|
+
* rename — automatic session naming (jev-gated, isolated one-tool session)
|
|
6
|
+
* decisionModel — inherit | custom Decision Model override
|
|
7
|
+
* (Skill exposure moved to @pi-unipi/skill-registry, namespace `skills`.)
|
|
8
|
+
*
|
|
9
|
+
* Legacy inputs migrated on read: `badge.*` (v2/v3-alpha badge overlay),
|
|
10
|
+
* `<cwd>/.unipi/config/util-settings.json` and `.unipi/config/badge.json`.
|
|
6
11
|
*/
|
|
7
12
|
|
|
8
13
|
import * as fs from "node:fs";
|
|
9
|
-
import * as os from "node:os";
|
|
10
14
|
import * as path from "node:path";
|
|
11
|
-
import { getSettings, globalSettingsPath, projectSettingsPath, registerSettings, setSettings, settingsLayers } from "@pi-unipi/core";
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
export interface
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/**
|
|
15
|
+
import { getSettings, globalSettingsPath, projectSettingsPath, registerSettings, setSettings, settingsLayers, decisionModelSection, DEFAULT_DECISION_OVERRIDE } from "@pi-unipi/core";
|
|
16
|
+
|
|
17
|
+
/** Automatic session naming. */
|
|
18
|
+
export interface RenameSettings {
|
|
19
|
+
/** Rename after confirmed rounds that start or change the topic. */
|
|
20
|
+
auto: boolean;
|
|
21
|
+
/** Model for the rename session; "" / "inherit" = the session model. */
|
|
22
|
+
model: string;
|
|
23
|
+
/** Mirror the session name to the Herdr pane title / tab label. */
|
|
20
24
|
herdrSync: boolean;
|
|
21
25
|
}
|
|
22
26
|
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
/** /unipi:answer defaults. */
|
|
28
|
+
export interface AnswerSettings {
|
|
29
|
+
/** reply = fixed input under the scrollable reply; questions = Q/A template; web = browser form. */
|
|
30
|
+
method: "reply" | "questions" | "web";
|
|
31
|
+
/** Show "N questions in the reply — /unipi:answer questions…" above the editor. */
|
|
32
|
+
hint: boolean;
|
|
33
|
+
/** Web form port; 0 = any free port (47321 is tried first over SSH). */
|
|
34
|
+
port: number;
|
|
35
|
+
}
|
|
30
36
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
/** Pasted / dropped file handling. */
|
|
38
|
+
export interface AttachmentSettings {
|
|
39
|
+
/** Turn pasted image/file paths into [Image #N] / [File #N] attachments. */
|
|
40
|
+
enabled: boolean;
|
|
41
|
+
/** Small inline previews where the terminal can draw images. */
|
|
42
|
+
preview: boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** How pi's built-in read/bash/edit/write results are drawn. */
|
|
46
|
+
export interface RenderSettings {
|
|
47
|
+
style: "simple" | "regular" | "advanced";
|
|
39
48
|
}
|
|
40
49
|
|
|
41
|
-
/** Unified utility settings */
|
|
42
50
|
export interface UtilSettings {
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
rename: RenameSettings;
|
|
52
|
+
answer: AnswerSettings;
|
|
53
|
+
attachments: AttachmentSettings;
|
|
54
|
+
render: RenderSettings;
|
|
45
55
|
}
|
|
46
56
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
badgeEnabled: true,
|
|
51
|
-
agentTool: true,
|
|
52
|
-
generationModel: "inherit",
|
|
57
|
+
export const DEFAULT_RENAME_SETTINGS: RenameSettings = {
|
|
58
|
+
auto: true,
|
|
59
|
+
model: "",
|
|
53
60
|
herdrSync: true,
|
|
54
61
|
};
|
|
55
62
|
|
|
56
|
-
/** Default skill discovery settings */
|
|
57
|
-
const DEFAULT_SKILL_DISCOVERY: SkillDiscoverySection = {
|
|
58
|
-
mode: "judged",
|
|
59
|
-
threshold: 0.3,
|
|
60
|
-
maxSkills: 12,
|
|
61
|
-
recheck: true,
|
|
62
|
-
};
|
|
63
63
|
|
|
64
|
-
|
|
64
|
+
export const DEFAULT_ANSWER_SETTINGS: AnswerSettings = { method: "reply", hint: true, port: 0 };
|
|
65
|
+
|
|
66
|
+
export const DEFAULT_ATTACHMENT_SETTINGS: AttachmentSettings = { enabled: true, preview: true };
|
|
67
|
+
|
|
68
|
+
export const DEFAULT_RENDER_SETTINGS: RenderSettings = { style: "regular" };
|
|
69
|
+
|
|
65
70
|
const DEFAULT_SETTINGS: UtilSettings = {
|
|
66
|
-
|
|
67
|
-
|
|
71
|
+
rename: { ...DEFAULT_RENAME_SETTINGS },
|
|
72
|
+
answer: { ...DEFAULT_ANSWER_SETTINGS },
|
|
73
|
+
attachments: { ...DEFAULT_ATTACHMENT_SETTINGS },
|
|
74
|
+
render: { ...DEFAULT_RENDER_SETTINGS },
|
|
68
75
|
};
|
|
69
76
|
|
|
70
|
-
/** Config file paths */
|
|
71
77
|
const UTIL_SETTINGS_FILE = ".unipi/config/util-settings.json";
|
|
72
78
|
const BADGE_CONFIG_FILE = ".unipi/config/badge.json";
|
|
73
79
|
|
|
74
|
-
function getConfigPath(file: string): string {
|
|
75
|
-
return path.resolve(process.cwd(), file);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Read badge.json for migration purposes.
|
|
80
|
-
* Returns null if file doesn't exist or is malformed.
|
|
81
|
-
*/
|
|
82
|
-
function readLegacyBadgeSettings(): BadgeSettingsSection | null {
|
|
83
|
-
try {
|
|
84
|
-
const configPath = getConfigPath(BADGE_CONFIG_FILE);
|
|
85
|
-
if (!fs.existsSync(configPath)) return null;
|
|
86
|
-
const parsed = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
87
|
-
return {
|
|
88
|
-
autoGen: typeof parsed.autoGen === "boolean" ? parsed.autoGen : DEFAULT_BADGE_SETTINGS.autoGen,
|
|
89
|
-
badgeEnabled: typeof parsed.badgeEnabled === "boolean" ? parsed.badgeEnabled : DEFAULT_BADGE_SETTINGS.badgeEnabled,
|
|
90
|
-
agentTool: typeof parsed.agentTool === "boolean" ? parsed.agentTool : DEFAULT_BADGE_SETTINGS.agentTool,
|
|
91
|
-
generationModel: typeof parsed.generationModel === "string" ? parsed.generationModel : DEFAULT_BADGE_SETTINGS.generationModel,
|
|
92
|
-
herdrSync: typeof parsed.herdrSync === "boolean" ? parsed.herdrSync : DEFAULT_BADGE_SETTINGS.herdrSync,
|
|
93
|
-
};
|
|
94
|
-
} catch {
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
function atomicWrite(filePath: string, data: string): void {
|
|
100
|
-
const tmpPath = filePath + ".tmp";
|
|
101
|
-
fs.writeFileSync(tmpPath, data, "utf-8");
|
|
102
|
-
fs.renameSync(tmpPath, filePath);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
// Registered with the unified settings hub. Badge settings are project-scoped
|
|
106
|
-
// (they live with the repo), so the hub's project scope is the primary target.
|
|
107
80
|
registerSettings({
|
|
108
81
|
namespace: "utility",
|
|
109
82
|
label: "Utility",
|
|
110
|
-
defaults: DEFAULT_SETTINGS as unknown as Record<string, unknown>,
|
|
83
|
+
defaults: { ...DEFAULT_SETTINGS, decisionModel: DEFAULT_DECISION_OVERRIDE } as unknown as Record<string, unknown>,
|
|
111
84
|
schema: [
|
|
112
85
|
{
|
|
113
|
-
title: "
|
|
114
|
-
description: "
|
|
86
|
+
title: "Session name",
|
|
87
|
+
description: "Automatic naming after rounds that start or change the topic",
|
|
115
88
|
fields: [
|
|
116
|
-
{ key: "
|
|
117
|
-
{ key: "
|
|
118
|
-
{ key: "
|
|
119
|
-
{ key: "
|
|
120
|
-
{ key: "badge.generationModel", type: "model", label: "Generation model", emptyLabel: "inherit (session model)", capability: "text", emptyOption: "inherit (session model)" },
|
|
121
|
-
{ key: "badge.setName", type: "action", label: "Set session name…", description: "Prompt for a name and show the badge", command: "unipi:badge-set-name" },
|
|
122
|
-
{ key: "badge.generate", type: "action", label: "Generate session name", description: "Invent a name via the generation model", command: "unipi:badge-generate" },
|
|
89
|
+
{ key: "rename.auto", type: "boolean", label: "Auto-rename", description: "Name the session when a real request starts or changes the topic (greetings and short replies are skipped)" },
|
|
90
|
+
{ key: "rename.model", type: "model", label: "Naming model", capability: "text", emptyLabel: "inherit (session model)", emptyOption: "inherit (session model)" },
|
|
91
|
+
{ key: "rename.herdrSync", type: "boolean", label: "Herdr sync", description: "Show the session name as the Herdr pane title and tab label" },
|
|
92
|
+
{ key: "rename.now", type: "action", label: "Rename now", description: "Name the session from the recent requests", command: "unipi:rename-now" },
|
|
123
93
|
],
|
|
124
94
|
},
|
|
125
95
|
{
|
|
126
|
-
title: "
|
|
127
|
-
description: "
|
|
96
|
+
title: "Answer",
|
|
97
|
+
description: "/unipi:answer — answer the last reply's questions without scrolling",
|
|
128
98
|
fields: [
|
|
129
99
|
{
|
|
130
|
-
key: "
|
|
100
|
+
key: "answer.method",
|
|
131
101
|
type: "enum",
|
|
132
|
-
label: "
|
|
102
|
+
label: "Default method",
|
|
133
103
|
options: [
|
|
134
|
-
{ value: "
|
|
135
|
-
{ value: "
|
|
136
|
-
{ value: "
|
|
104
|
+
{ value: "reply", label: "reply (fixed input under the scrollable reply)" },
|
|
105
|
+
{ value: "questions", label: "questions (one answer per question)" },
|
|
106
|
+
{ value: "web", label: "web form (browser)" },
|
|
137
107
|
],
|
|
138
|
-
description: "
|
|
108
|
+
description: "/unipi:answer reply|questions|web overrides it per use",
|
|
139
109
|
},
|
|
140
|
-
{ key: "
|
|
141
|
-
{ key: "
|
|
142
|
-
|
|
110
|
+
{ key: "answer.hint", type: "boolean", label: "Questions hint", description: "After a reply that asks questions, show a hint above the editor" },
|
|
111
|
+
{ key: "answer.port", type: "number", label: "Web form port", min: 0, max: 65535, zeroLabel: "any free port (47321 over SSH)", description: "Fix it to keep one ssh -L forward working" },
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
title: "Response formatting",
|
|
116
|
+
description: "How tool calls look in the transcript (applies after /reload)",
|
|
117
|
+
fields: [
|
|
118
|
+
{
|
|
119
|
+
key: "render.style",
|
|
120
|
+
type: "enum",
|
|
121
|
+
label: "Style",
|
|
122
|
+
options: [
|
|
123
|
+
{ value: "simple", label: "simple (one collapsed line per tool)" },
|
|
124
|
+
{ value: "regular", label: "regular (pi's own)" },
|
|
125
|
+
{ value: "advanced", label: "advanced (highlighted commands, diffs, test summaries)" },
|
|
126
|
+
],
|
|
127
|
+
description: "Ctrl+O expands collapsed output in every style",
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
title: "Attachments",
|
|
133
|
+
description: "Pasted, dropped or Ctrl+V'd files",
|
|
134
|
+
fields: [
|
|
135
|
+
{ key: "attachments.enabled", type: "boolean", label: "Attach pasted files", description: "Turn pasted image/file paths into [Image #N] / [File #N]; images are sent as images" },
|
|
136
|
+
{ key: "attachments.preview", type: "boolean", label: "Inline previews", description: "Small previews above the editor and in the transcript (Kitty, Ghostty, iTerm2, WezTerm)" },
|
|
143
137
|
],
|
|
144
138
|
},
|
|
139
|
+
decisionModelSection({ title: "Session name — Decision model" }),
|
|
145
140
|
],
|
|
146
141
|
});
|
|
147
142
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
143
|
+
function atomicWrite(filePath: string, data: string): void {
|
|
144
|
+
const tmpPath = filePath + ".tmp";
|
|
145
|
+
fs.writeFileSync(tmpPath, data, "utf-8");
|
|
146
|
+
fs.renameSync(tmpPath, filePath);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
function readJson(file: string): Record<string, unknown> | null {
|
|
153
150
|
try {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
unipi?: { skills?: { discovery?: unknown } };
|
|
157
|
-
};
|
|
158
|
-
const discovery = raw?.unipi?.skills?.discovery;
|
|
159
|
-
if (typeof discovery !== "boolean") return;
|
|
160
|
-
if (settingsLayers("utility", process.cwd()).global) return; // engine value wins
|
|
161
|
-
setSettings("utility", { skills: { mode: discovery ? "judged" : "off" } } as unknown as Record<string, unknown>, "global", process.cwd());
|
|
151
|
+
if (!fs.existsSync(file)) return null;
|
|
152
|
+
return JSON.parse(fs.readFileSync(file, "utf-8")) as Record<string, unknown>;
|
|
162
153
|
} catch {
|
|
163
|
-
|
|
154
|
+
return null;
|
|
164
155
|
}
|
|
165
156
|
}
|
|
166
157
|
|
|
158
|
+
|
|
167
159
|
/**
|
|
168
|
-
* One-time in-file migration:
|
|
169
|
-
*
|
|
170
|
-
*
|
|
160
|
+
* One-time in-file migration: `badge.*` (removed badge overlay) → `rename.*`
|
|
161
|
+
* per layer, so an explicit old choice (e.g. autoGen: false) survives the new
|
|
162
|
+
* defaults merge. badgeEnabled/agentTool have no successor and are dropped.
|
|
171
163
|
*/
|
|
172
|
-
export function
|
|
164
|
+
export function migrateBadgeToRename(cwd: string): void {
|
|
173
165
|
for (const file of [globalSettingsPath("utility"), projectSettingsPath(cwd, "utility")]) {
|
|
174
166
|
try {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
if (
|
|
181
|
-
|
|
182
|
-
}
|
|
183
|
-
const mode = skills.discovery === false ? "off" : "judged";
|
|
184
|
-
const { discovery: _dropped, ...rest } = skills;
|
|
185
|
-
atomicWrite(file, JSON.stringify({ ...raw, skills: { ...rest, mode } }, null, 2));
|
|
167
|
+
const raw = readJson(file) as { badge?: Record<string, unknown>; rename?: unknown } | null;
|
|
168
|
+
if (!raw?.badge || typeof raw.badge !== "object") continue;
|
|
169
|
+
const { badge, ...rest } = raw;
|
|
170
|
+
const rename: Record<string, unknown> = { ...(typeof raw.rename === "object" && raw.rename ? raw.rename as Record<string, unknown> : {}) };
|
|
171
|
+
if (rename.auto === undefined && typeof badge.autoGen === "boolean") rename.auto = badge.autoGen;
|
|
172
|
+
if (rename.herdrSync === undefined && typeof badge.herdrSync === "boolean") rename.herdrSync = badge.herdrSync;
|
|
173
|
+
if (rename.model === undefined && typeof badge.generationModel === "string" && badge.generationModel !== "inherit") rename.model = badge.generationModel;
|
|
174
|
+
atomicWrite(file, JSON.stringify(Object.keys(rename).length ? { ...rest, rename } : rest, null, 2));
|
|
186
175
|
} catch {
|
|
187
176
|
// Corrupt layer — defaults apply.
|
|
188
177
|
}
|
|
189
178
|
}
|
|
190
179
|
}
|
|
191
180
|
|
|
192
|
-
/** One-time import from the legacy
|
|
181
|
+
/** One-time import from the legacy in-repo util-settings.json / badge.json. */
|
|
193
182
|
function importLegacyUtilSettings(): void {
|
|
194
183
|
const layers = settingsLayers("utility", process.cwd());
|
|
195
184
|
if (layers.global || layers.project) return;
|
|
196
|
-
const legacy = (()
|
|
197
|
-
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
}
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
export function readUtilSettings(): UtilSettings {
|
|
216
|
-
try {
|
|
217
|
-
importLegacyUtilSettings();
|
|
218
|
-
importLegacySkillDiscovery();
|
|
219
|
-
const raw = getSettings("utility", process.cwd());
|
|
220
|
-
const normalized = normalizeSettings(raw);
|
|
221
|
-
if (normalized) return normalized;
|
|
222
|
-
return { ...DEFAULT_SETTINGS, badge: { ...DEFAULT_BADGE_SETTINGS } };
|
|
223
|
-
} catch {
|
|
224
|
-
return { ...DEFAULT_SETTINGS, badge: { ...DEFAULT_BADGE_SETTINGS } };
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
export function writeUtilSettings(settings: UtilSettings): void {
|
|
229
|
-
try {
|
|
230
|
-
// Badge settings are project-scoped — they travel with the repo.
|
|
231
|
-
setSettings("utility", settings as unknown as Record<string, unknown>, "project", process.cwd());
|
|
232
|
-
} catch {
|
|
233
|
-
// Best effort
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
function normalizeSettings(parsed: any): UtilSettings {
|
|
185
|
+
const legacy = readJson(path.resolve(process.cwd(), UTIL_SETTINGS_FILE))
|
|
186
|
+
?? (() => {
|
|
187
|
+
const badge = readJson(path.resolve(process.cwd(), BADGE_CONFIG_FILE));
|
|
188
|
+
return badge ? { badge } : null;
|
|
189
|
+
})();
|
|
190
|
+
if (legacy) setSettings("utility", normalizeSettings(legacy) as unknown as Record<string, unknown>, "project", process.cwd());
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** Pure normalizer; maps legacy `badge.*` onto `rename.*` when rename is unset. */
|
|
194
|
+
export function normalizeSettings(parsed: unknown): UtilSettings {
|
|
195
|
+
const p = (parsed ?? {}) as { rename?: Record<string, unknown>; badge?: Record<string, unknown>; answer?: Record<string, unknown> };
|
|
196
|
+
const answer = p.answer ?? {};
|
|
197
|
+
const att = (p as { attachments?: Record<string, unknown> }).attachments ?? {};
|
|
198
|
+
const render = (p as { render?: Record<string, unknown> }).render ?? {};
|
|
199
|
+
const rename = p.rename ?? {};
|
|
200
|
+
const badge = p.badge ?? {};
|
|
201
|
+
const bool = (v: unknown, legacy: unknown, d: boolean) => typeof v === "boolean" ? v : typeof legacy === "boolean" ? legacy : d;
|
|
202
|
+
const legacyModel = typeof badge.generationModel === "string" && badge.generationModel !== "inherit" ? badge.generationModel : undefined;
|
|
203
|
+
const model = typeof rename.model === "string" ? rename.model : legacyModel ?? DEFAULT_RENAME_SETTINGS.model;
|
|
238
204
|
return {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
205
|
+
rename: {
|
|
206
|
+
auto: bool(rename.auto, badge.autoGen, DEFAULT_RENAME_SETTINGS.auto),
|
|
207
|
+
model: model === "inherit" ? "" : model,
|
|
208
|
+
herdrSync: bool(rename.herdrSync, badge.herdrSync, DEFAULT_RENAME_SETTINGS.herdrSync),
|
|
209
|
+
},
|
|
210
|
+
answer: {
|
|
211
|
+
// "editor" was the old name of the questions template.
|
|
212
|
+
method: answer.method === "web" ? "web" : answer.method === "questions" || answer.method === "editor" ? "questions" : "reply",
|
|
213
|
+
hint: typeof answer.hint === "boolean" ? answer.hint : DEFAULT_ANSWER_SETTINGS.hint,
|
|
214
|
+
port: typeof answer.port === "number" && answer.port >= 0 && answer.port <= 65535 ? Math.floor(answer.port) : DEFAULT_ANSWER_SETTINGS.port,
|
|
245
215
|
},
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
: "judged",
|
|
253
|
-
threshold:
|
|
254
|
-
typeof parsed?.skills?.threshold === "number" && parsed.skills.threshold >= 0 && parsed.skills.threshold <= 1
|
|
255
|
-
? parsed.skills.threshold
|
|
256
|
-
: DEFAULT_SKILL_DISCOVERY.threshold,
|
|
257
|
-
maxSkills:
|
|
258
|
-
typeof parsed?.skills?.maxSkills === "number" && parsed.skills.maxSkills >= 1
|
|
259
|
-
? parsed.skills.maxSkills
|
|
260
|
-
: DEFAULT_SKILL_DISCOVERY.maxSkills,
|
|
261
|
-
recheck: typeof parsed?.skills?.recheck === "boolean" ? parsed.skills.recheck : DEFAULT_SKILL_DISCOVERY.recheck,
|
|
216
|
+
attachments: {
|
|
217
|
+
enabled: typeof att.enabled === "boolean" ? att.enabled : DEFAULT_ATTACHMENT_SETTINGS.enabled,
|
|
218
|
+
preview: typeof att.preview === "boolean" ? att.preview : DEFAULT_ATTACHMENT_SETTINGS.preview,
|
|
219
|
+
},
|
|
220
|
+
render: {
|
|
221
|
+
style: render.style === "simple" || render.style === "advanced" ? render.style : "regular",
|
|
262
222
|
},
|
|
263
223
|
};
|
|
264
224
|
}
|
|
265
225
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
settings.badge = { ...settings.badge, ...partial };
|
|
275
|
-
writeUtilSettings(settings);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/** Update a single badge setting. */
|
|
279
|
-
export function updateBadgeSetting<K extends keyof BadgeSettingsSection>(
|
|
280
|
-
key: K,
|
|
281
|
-
value: BadgeSettingsSection[K],
|
|
282
|
-
): BadgeSettingsSection {
|
|
283
|
-
const settings = readBadgeSettings();
|
|
284
|
-
settings[key] = value;
|
|
285
|
-
writeBadgeSettings(settings);
|
|
286
|
-
return settings;
|
|
226
|
+
export function readUtilSettings(cwd: string = process.cwd()): UtilSettings {
|
|
227
|
+
try {
|
|
228
|
+
importLegacyUtilSettings();
|
|
229
|
+
migrateBadgeToRename(cwd);
|
|
230
|
+
return normalizeSettings(getSettings("utility", cwd));
|
|
231
|
+
} catch {
|
|
232
|
+
return normalizeSettings({});
|
|
233
|
+
}
|
|
287
234
|
}
|
|
288
235
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
const toggle = (v: boolean) => (v ? "✓ enabled" : "✗ disabled");
|
|
292
|
-
return [
|
|
293
|
-
"## Badge Settings",
|
|
294
|
-
"",
|
|
295
|
-
`| Setting | Status | Description |`,
|
|
296
|
-
`|---------|--------|-------------|`,
|
|
297
|
-
`| Auto Generate | ${toggle(settings.autoGen)} | Generate name on first message |`,
|
|
298
|
-
`| Badge Enabled | ${toggle(settings.badgeEnabled)} | Show badge overlay |`,
|
|
299
|
-
`| Agent Tool | ${toggle(settings.agentTool)} | Allow agents to call set_session_name |`,
|
|
300
|
-
`| Herdr Sync | ${toggle(settings.herdrSync)} | Sync session name to herdr tab/pane title |`,
|
|
301
|
-
`| Generation Model | ${settings.generationModel} | Model for badge name generation |`,
|
|
302
|
-
"",
|
|
303
|
-
`Config: .unipi/config/util-settings.json`,
|
|
304
|
-
].join("\n");
|
|
236
|
+
export function readRenameSettings(cwd: string = process.cwd()): RenameSettings {
|
|
237
|
+
return readUtilSettings(cwd).rename;
|
|
305
238
|
}
|