micro-models-agent 2.10.0 → 2.12.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 +33 -0
- package/dist/assets/app.js +22 -4
- package/dist/assets/index.html +29 -0
- package/dist/assets/js/dom.js +2 -1
- package/dist/assets/js/feed.js +38 -26
- package/dist/assets/js/format.js +1 -1
- package/dist/assets/js/rail.js +114 -0
- package/dist/assets/js/settings-controls.js +2 -2
- package/dist/assets/js/settings.js +246 -51
- package/dist/assets/js/store.js +3 -0
- package/dist/assets/js/tabs.js +104 -2
- package/dist/assets/styles.css +215 -66
- package/dist/cli/cache-line.js +1 -0
- package/dist/cli/command-suggest.js +5 -4
- package/dist/cli/commands.js +231 -122
- package/dist/cli/completer.js +132 -31
- package/dist/cli/index.js +1 -0
- package/dist/cli/json-payload.js +4 -4
- package/dist/cli/main.js +166 -61
- package/dist/cli/onboarding-commands.js +126 -0
- package/dist/cli/plugin-commands.js +2 -1
- package/dist/cli/relaunch.js +16 -13
- package/dist/cli/repl-commands-lsp.js +75 -0
- package/dist/cli/repl-commands-skills.js +105 -0
- package/dist/cli/repl-commands.js +589 -266
- package/dist/cli/repl.js +436 -177
- package/dist/cli/run-result.js +5 -6
- package/dist/cli/security-commands.js +37 -28
- package/dist/cli/setup-order.js +4 -55
- package/dist/cli/setup-prompt.js +3 -2
- package/dist/cli/setup.js +27 -107
- package/dist/cli/web-command.js +98 -0
- package/dist/config/budget.js +5 -5
- package/dist/config/config.js +103 -96
- package/dist/config/defaults.js +38 -8
- package/dist/config/domains.js +24 -27
- package/dist/config/env.js +46 -0
- package/dist/config/experts.js +2 -0
- package/dist/config/index.js +1 -0
- package/dist/config/paths.js +56 -0
- package/dist/config/redact.js +44 -0
- package/dist/config/registry-extra.js +334 -0
- package/dist/config/registry.js +584 -0
- package/dist/config/security.js +35 -36
- package/dist/config/timeouts.js +74 -0
- package/dist/config/utils.js +16 -15
- package/dist/core/agent/artifact-progress.js +59 -0
- package/dist/core/agent/artifact-resolve.js +79 -0
- package/dist/core/agent/audit-gate.js +7 -3
- package/dist/core/agent/compaction.js +2 -2
- package/dist/core/agent/constants.js +33 -4
- package/dist/core/agent/context-log.js +454 -0
- package/dist/core/agent/context-renderer.js +5 -0
- package/dist/core/agent/critic-gate.js +132 -0
- package/dist/core/agent/hallucination-gate.js +148 -38
- package/dist/core/agent/loop-state.js +15 -0
- package/dist/core/agent/prefix-monitor.js +1 -1
- package/dist/core/agent/reasoning-resolver.js +10 -1
- package/dist/core/agent/token-tracker.js +7 -4
- package/dist/core/agent/tool-batch.js +93 -18
- package/dist/core/agent/tool-images.js +18 -0
- package/dist/core/agent/tool-output.js +65 -11
- package/dist/core/agent/tool-pairing.js +60 -0
- package/dist/core/agent-moe.js +25 -24
- package/dist/core/agent.js +429 -108
- package/dist/core/bootstrap/agent-phase.js +66 -0
- package/dist/core/bootstrap/config-phase.js +86 -0
- package/dist/core/bootstrap/modules-phase.js +269 -0
- package/dist/core/bootstrap/provider-phase.js +183 -0
- package/dist/core/bootstrap/session-phase.js +204 -0
- package/dist/core/bootstrap/state.js +94 -0
- package/dist/core/bootstrap/workspace-phase.js +115 -0
- package/dist/core/bootstrap.js +92 -660
- package/dist/core/crash-handler.js +17 -7
- package/dist/core/environment.js +37 -12
- package/dist/core/host-plan.js +43 -0
- package/dist/core/host.js +23 -0
- package/dist/core/index.js +1 -0
- package/dist/core/prompt-builder.js +17 -1
- package/dist/core/prompt-overflow.js +42 -43
- package/dist/core/session-logger.js +122 -30
- package/dist/core/system-prompt.js +117 -0
- package/dist/core/version.js +6 -4
- package/dist/core/web-host.js +34 -0
- package/dist/core/workspace.js +19 -15
- package/dist/i18n/en.json +106 -21
- package/dist/i18n/index.js +37 -3
- package/dist/i18n/ru.json +109 -21
- package/dist/index.js +7 -3
- package/dist/llm/image-utils.js +55 -64
- package/dist/llm/llm-errors.js +9 -0
- package/dist/llm/model-loader.js +10 -32
- package/dist/llm/models-dev.js +121 -0
- package/dist/llm/openai-compat.js +146 -73
- package/dist/llm/orchestrator.js +33 -11
- package/dist/llm/provider-budget.js +2 -2
- package/dist/llm/provider-context.js +233 -0
- package/dist/llm/provider.js +1 -1
- package/dist/llm/response.js +5 -0
- package/dist/llm/token-counter.js +27 -11
- package/dist/logger/app-logger.js +48 -22
- package/dist/logger/file-log.js +28 -19
- package/dist/logger/index.js +1 -0
- package/dist/main.js +24285 -22447
- package/dist/migration/backup.js +14 -3
- package/dist/migration/detect.js +12 -3
- package/dist/migration/index.js +1 -0
- package/dist/modules/artifacts/store.js +9 -8
- package/dist/modules/browser/actions.js +6 -0
- package/dist/modules/browser/bridge-client.js +14 -12
- package/dist/modules/browser/bridge-path.js +4 -4
- package/dist/modules/browser/console-buffer.js +37 -0
- package/dist/modules/browser/cookie-store.js +5 -0
- package/dist/modules/browser/driver-types.js +1 -0
- package/dist/modules/browser/driver.js +19 -11
- package/dist/modules/browser/index.js +3 -1
- package/dist/modules/browser/module.js +2 -1
- package/dist/modules/browser/session.js +10 -30
- package/dist/modules/browser/snapshot.js +19 -13
- package/dist/modules/browser/types.js +1 -0
- package/dist/modules/certification/cli.js +28 -20
- package/dist/modules/certification/fact-checker.js +9 -1
- package/dist/modules/certification/loader.js +9 -2
- package/dist/modules/certification/manifest.js +83 -21
- package/dist/modules/certification/runner.js +23 -13
- package/dist/modules/certification/scenarios.js +20 -20
- package/dist/modules/certification/syntax-scenarios.js +1 -2
- package/dist/modules/context/chunk-query.js +11 -9
- package/dist/modules/context/fact-extractor.js +37 -39
- package/dist/modules/context/index.js +1 -0
- package/dist/modules/context/manager.js +106 -80
- package/dist/modules/critic/client.js +176 -0
- package/dist/modules/critic/evidence.js +81 -0
- package/dist/modules/critic/provider.js +45 -0
- package/dist/modules/critic/tools.js +78 -0
- package/dist/modules/critic/types.js +1 -0
- package/dist/modules/execution/audit-runners.js +28 -34
- package/dist/modules/execution/auditor.js +53 -49
- package/dist/modules/execution/execution-plugin.js +142 -102
- package/dist/modules/execution/index.js +1 -1
- package/dist/modules/execution/input-from.js +37 -13
- package/dist/modules/execution/module.js +368 -191
- package/dist/modules/execution/moe-executor.js +53 -26
- package/dist/modules/execution/plan-actions.js +320 -202
- package/dist/modules/execution/plan-checks.js +35 -0
- package/dist/modules/execution/plan-coverage.js +36 -33
- package/dist/modules/execution/plan-steps.js +11 -3
- package/dist/modules/execution/plan-store.js +83 -17
- package/dist/modules/execution/plan-tool.js +89 -35
- package/dist/modules/execution/plan-validator.js +30 -10
- package/dist/modules/execution/planner.js +22 -13
- package/dist/modules/execution/stuck-detector.js +196 -93
- package/dist/modules/execution/tracker.js +22 -8
- package/dist/modules/execution/verifier.js +69 -48
- package/dist/modules/execution/windows-commands.js +12 -12
- package/dist/modules/hallucination/artifact-claim.js +93 -0
- package/dist/modules/hallucination/confidence.js +13 -11
- package/dist/modules/hallucination/consistency.js +10 -2
- package/dist/modules/hallucination/detector.js +10 -5
- package/dist/modules/hallucination/factual.js +43 -26
- package/dist/modules/hallucination/index.js +1 -0
- package/dist/modules/hallucination/js-identifiers.js +44 -45
- package/dist/modules/hallucination/llm-judge.js +17 -12
- package/dist/modules/hallucination/success-claim.js +59 -0
- package/dist/modules/indexer/cache.js +52 -4
- package/dist/modules/indexer/index.js +1 -0
- package/dist/modules/indexer/map-command.js +2 -4
- package/dist/modules/indexer/map-select.js +16 -16
- package/dist/modules/indexer/module.js +47 -12
- package/dist/modules/indexer/project-profile.js +8 -7
- package/dist/modules/indexer/symbols.js +15 -15
- package/dist/modules/indexer/walker.js +159 -29
- package/dist/modules/lsp/check-tool.js +7 -5
- package/dist/modules/lsp/client.js +39 -39
- package/dist/modules/lsp/command.js +17 -24
- package/dist/modules/lsp/config.js +12 -11
- package/dist/modules/lsp/index.js +1 -0
- package/dist/modules/lsp/module.js +48 -46
- package/dist/modules/lsp/probe.js +13 -14
- package/dist/modules/lsp/project-root.js +14 -17
- package/dist/modules/lsp/startup-check.js +18 -16
- package/dist/modules/mcp/client.js +59 -62
- package/dist/modules/mcp/index.js +1 -0
- package/dist/modules/mcp/module.js +66 -37
- package/dist/modules/mcp/registry.js +5 -0
- package/dist/modules/memory/index.js +1 -0
- package/dist/modules/memory/module.js +12 -8
- package/dist/modules/memory/search.js +4 -1
- package/dist/modules/memory/store.js +40 -2
- package/dist/modules/onboarding/init.js +47 -0
- package/dist/modules/onboarding/meet.js +30 -0
- package/dist/modules/onboarding/mode.js +30 -0
- package/dist/modules/onboarding/prompts.js +43 -0
- package/dist/modules/pipelines/engine.js +10 -0
- package/dist/modules/pipelines/index.js +1 -0
- package/dist/modules/pipelines/parser.js +4 -1
- package/dist/modules/pipelines/template.js +4 -0
- package/dist/modules/plugins/builtin/lint-on-write.js +80 -67
- package/dist/modules/plugins/builtin/notify.js +2 -0
- package/dist/modules/plugins/index.js +1 -0
- package/dist/modules/plugins/loader.js +18 -3
- package/dist/modules/plugins/manager.js +37 -17
- package/dist/modules/pricing/index.js +10 -11
- package/dist/modules/pricing/prices.js +12 -12
- package/dist/modules/processes/index.js +1 -0
- package/dist/modules/processes/kill-tree.js +27 -31
- package/dist/modules/processes/registry.js +44 -25
- package/dist/modules/processes/runner.js +4 -4
- package/dist/modules/providers/capabilities.js +28 -0
- package/dist/modules/providers/create.js +3 -4
- package/dist/modules/providers/factory.js +7 -7
- package/dist/modules/providers/fallback.js +12 -12
- package/dist/modules/providers/health.js +4 -4
- package/dist/modules/providers/manager.js +50 -19
- package/dist/modules/providers/naming.js +15 -0
- package/dist/modules/providers/preflight.js +71 -0
- package/dist/modules/providers/presets.js +39 -8
- package/dist/modules/providers/registry.js +7 -2
- package/dist/modules/reasoning/policy.js +8 -6
- package/dist/modules/reasoning/probe.js +30 -25
- package/dist/modules/security/audit-log.js +19 -36
- package/dist/modules/security/audit-notifier.js +35 -75
- package/dist/modules/security/command-validator.js +99 -51
- package/dist/modules/security/content-scanner.js +8 -8
- package/dist/modules/security/data-sanitizer.js +9 -16
- package/dist/modules/security/encryption.js +32 -52
- package/dist/modules/security/index.js +2 -1
- package/dist/modules/security/network-validator.js +120 -43
- package/dist/modules/security/path-validator.js +61 -46
- package/dist/modules/security/protected-paths.js +73 -0
- package/dist/modules/security/rate-limiter.js +17 -49
- package/dist/modules/security/security-policies.js +25 -57
- package/dist/modules/security/session-encryption.js +32 -71
- package/dist/modules/security/session-isolation.js +15 -28
- package/dist/modules/session/auto-name.js +63 -0
- package/dist/modules/session/export.js +98 -0
- package/dist/modules/session/index.js +1 -0
- package/dist/modules/session/manager.js +79 -28
- package/dist/modules/session/module.js +4 -3
- package/dist/modules/session/store.js +57 -20
- package/dist/modules/setup/answers.js +35 -0
- package/dist/modules/setup/apply.js +79 -0
- package/dist/modules/setup/discovery.js +72 -0
- package/dist/modules/skills/index.js +1 -0
- package/dist/modules/skills/loader.js +9 -1
- package/dist/modules/skills/module.js +11 -0
- package/dist/modules/updater/changelog-reader.js +15 -16
- package/dist/modules/updater/checker.js +9 -4
- package/dist/modules/updater/dev-detect.js +7 -6
- package/dist/modules/updater/index.js +1 -0
- package/dist/modules/updater/module.js +17 -15
- package/dist/modules/user-profile/compressor.js +2 -0
- package/dist/modules/user-profile/index.js +1 -0
- package/dist/modules/user-profile/profile.js +10 -1
- package/dist/modules/webui/answer-api.js +29 -0
- package/dist/modules/webui/assets.js +50 -0
- package/dist/modules/webui/body.js +21 -0
- package/dist/modules/webui/commands-settings.js +209 -0
- package/dist/modules/webui/commands-shared.js +60 -0
- package/dist/modules/webui/commands.js +174 -0
- package/dist/modules/webui/config-api.js +134 -0
- package/dist/modules/webui/file-api.js +202 -0
- package/dist/modules/webui/forward.js +159 -0
- package/dist/modules/webui/history-api.js +112 -0
- package/dist/modules/webui/host-state.js +60 -0
- package/dist/modules/webui/i18n-api.js +9 -0
- package/dist/modules/webui/limits.js +6 -0
- package/dist/modules/webui/log-forward.js +20 -0
- package/dist/modules/webui/memory-commands.js +64 -0
- package/dist/modules/webui/model-cache.js +18 -0
- package/dist/modules/webui/module.js +148 -0
- package/dist/modules/webui/persist.js +24 -0
- package/dist/modules/webui/prompt-io.js +97 -0
- package/dist/modules/webui/providers-api.js +337 -0
- package/dist/modules/webui/providers-view.js +56 -0
- package/dist/modules/webui/reasoning-view.js +15 -0
- package/dist/modules/webui/run-agent.js +81 -0
- package/dist/modules/webui/server.js +284 -0
- package/dist/modules/webui/sessions-api.js +178 -0
- package/dist/modules/webui/settings-api.js +561 -0
- package/dist/modules/webui/setup-api.js +201 -0
- package/dist/modules/webui/state.js +74 -0
- package/dist/modules/webui/util.js +261 -0
- package/dist/output/bus.js +7 -2
- package/dist/output/channel.js +80 -28
- package/dist/output/format.js +2 -1
- package/dist/output/index.js +1 -0
- package/dist/output/json-sink.js +5 -3
- package/dist/output/machine.js +4 -3
- package/dist/output/session-sink.js +4 -4
- package/dist/tools/approve.js +4 -0
- package/dist/tools/attach-image.js +5 -4
- package/dist/tools/auto-fixer.js +26 -44
- package/dist/tools/auto-tags.js +83 -0
- package/dist/tools/bash.js +193 -116
- package/dist/tools/browser.js +76 -31
- package/dist/tools/chunk-query.js +14 -6
- package/dist/tools/create-dir.js +9 -5
- package/dist/tools/delete-file.js +9 -5
- package/dist/tools/download-file.js +32 -7
- package/dist/tools/edit-file.js +52 -14
- package/dist/tools/enable-tools.js +6 -6
- package/dist/tools/executor.js +132 -27
- package/dist/tools/file-info.js +3 -1
- package/dist/tools/filter-tools.js +3 -3
- package/dist/tools/glob-tool.js +4 -1
- package/dist/tools/grep-tool.js +13 -10
- package/dist/tools/hidden-tools-block.js +6 -6
- package/dist/tools/index.js +16 -8
- package/dist/tools/list-dir.js +4 -2
- package/dist/tools/load-skill.js +7 -0
- package/dist/tools/mcp-call.js +15 -4
- package/dist/tools/meet-done.js +14 -0
- package/dist/tools/move-file.js +14 -7
- package/dist/tools/path-utils.js +29 -29
- package/dist/tools/pipeline-run.js +29 -7
- package/dist/tools/preview.js +1 -1
- package/dist/tools/process-ids.js +31 -0
- package/dist/tools/process-kill.js +9 -16
- package/dist/tools/process-list.js +1 -0
- package/dist/tools/process-log.js +11 -16
- package/dist/tools/process-wait.js +63 -0
- package/dist/tools/prompt-io.js +4 -3
- package/dist/tools/question.js +172 -25
- package/dist/tools/read-file.js +55 -34
- package/dist/tools/recall.js +14 -8
- package/dist/tools/registry.js +6 -5
- package/dist/tools/remember.js +8 -4
- package/dist/tools/scope-request.js +11 -6
- package/dist/tools/search-history.js +5 -2
- package/dist/tools/session-info.js +2 -0
- package/dist/tools/set-thinking.js +8 -4
- package/dist/tools/subagent.js +59 -39
- package/dist/tools/syntax-validator.js +292 -90
- package/dist/tools/user-input.js +22 -18
- package/dist/tools/web-browse.js +9 -3
- package/dist/tools/web-fetch.js +12 -23
- package/dist/tools/web-search.js +7 -5
- package/dist/tools/write-file.js +45 -15
- package/dist/ui/action-log.js +13 -0
- package/dist/ui/box.js +4 -3
- package/dist/ui/colors.js +2 -0
- package/dist/ui/diff.js +6 -5
- package/dist/ui/index.js +1 -0
- package/dist/ui/line-editor.js +230 -122
- package/dist/ui/line-math.js +10 -2
- package/dist/ui/md-formatter.js +57 -37
- package/dist/ui/output.js +8 -3
- package/dist/ui/plan-view.js +21 -10
- package/dist/ui/renderer.js +393 -67
- package/dist/ui/spinner.js +16 -5
- package/dist/ui/table.js +15 -17
- package/dist/ui/theme.js +143 -0
- package/dist/utils/child-run.js +20 -0
- package/dist/utils/error.js +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/retry.js +2 -2
- package/dist/utils/truncate.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { normalizeInputFrom } from "./input-from";
|
|
2
|
+
/** Валидирует план: подзадачи, теги экспертов, циклы, пересечения, input_from. */
|
|
2
3
|
export function validatePlan(plan, config) {
|
|
3
4
|
const errors = [];
|
|
4
5
|
const warnings = [];
|
|
@@ -30,9 +31,10 @@ export function validatePlan(plan, config) {
|
|
|
30
31
|
};
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
34
|
+
* Каждая ссылка input_from обязана указывать на существующую подзадачу и
|
|
35
|
+
* подкрепляться ребром depends_on — иначе читатель стартует раньше продьюсера.
|
|
35
36
|
*/
|
|
37
|
+
/** Валидирует ссылки input_from: неизвестные — ошибки, недостающие depends_on — автофиксы. */
|
|
36
38
|
export function validateInputFromRefs(subtasks) {
|
|
37
39
|
const errors = [];
|
|
38
40
|
const autoFixes = [];
|
|
@@ -49,6 +51,7 @@ export function validateInputFromRefs(subtasks) {
|
|
|
49
51
|
}
|
|
50
52
|
return { errors, autoFixes };
|
|
51
53
|
}
|
|
54
|
+
/** Проверяет, что все expert_tag подзадач известны из конфига. Возвращает ошибки. */
|
|
52
55
|
export function expertTagsExist(subtasks, config) {
|
|
53
56
|
const errors = [];
|
|
54
57
|
const knownExperts = new Set(Object.keys(config.experts || {}));
|
|
@@ -59,6 +62,7 @@ export function expertTagsExist(subtasks, config) {
|
|
|
59
62
|
}
|
|
60
63
|
return errors;
|
|
61
64
|
}
|
|
65
|
+
/** Ищет циклы в графе depends_on (DFS). Возвращает ошибки. */
|
|
62
66
|
export function hasCycle(subtasks) {
|
|
63
67
|
const edges = new Map();
|
|
64
68
|
for (const s of subtasks) {
|
|
@@ -92,6 +96,7 @@ export function hasCycle(subtasks) {
|
|
|
92
96
|
}
|
|
93
97
|
return errors;
|
|
94
98
|
}
|
|
99
|
+
/** Ищет write-write пересечения allowed_files без цепочки зависимостей. Возвращает ошибки. */
|
|
95
100
|
export function hasAllowedFilesOverlap(subtasks) {
|
|
96
101
|
const errors = [];
|
|
97
102
|
const writeFiles = new Map();
|
|
@@ -116,6 +121,15 @@ export function hasAllowedFilesOverlap(subtasks) {
|
|
|
116
121
|
}
|
|
117
122
|
return errors;
|
|
118
123
|
}
|
|
124
|
+
/** Два спека путей пересекаются, если равны или один — каталог-предок другого. */
|
|
125
|
+
function pathsOverlap(a, b) {
|
|
126
|
+
const na = a.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
127
|
+
const nb = b.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
128
|
+
if (na === nb)
|
|
129
|
+
return true;
|
|
130
|
+
return na.startsWith(`${nb}/`) || nb.startsWith(`${na}/`);
|
|
131
|
+
}
|
|
132
|
+
/** Ищет read-after-write пересечения (писатель vs read_only читателя). Пустые depends_on — автофикс. */
|
|
119
133
|
export function deleteReadOverlap(subtasks) {
|
|
120
134
|
const results = [];
|
|
121
135
|
for (let i = 0; i < subtasks.length; i++) {
|
|
@@ -128,13 +142,10 @@ export function deleteReadOverlap(subtasks) {
|
|
|
128
142
|
continue;
|
|
129
143
|
const readFiles = new Set(reader.read_only_files);
|
|
130
144
|
const writeFiles = writer.allowed_files;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
}
|
|
136
|
-
return false;
|
|
137
|
-
});
|
|
145
|
+
// Точное совпадение или настоящий каталог-предок, НЕ строковый префикс:
|
|
146
|
+
// иначе сиблинги `src/main.ts` (писатель) vs `src/main.tsx` (читатель)
|
|
147
|
+
// ложно флаговались.
|
|
148
|
+
const overlapping = writeFiles.filter((f) => [...readFiles].some((rf) => pathsOverlap(f, rf)));
|
|
138
149
|
if (overlapping.length > 0 && !reader.depends_on?.includes(writer.id)) {
|
|
139
150
|
const canAutoFix = !reader.depends_on || reader.depends_on.length === 0;
|
|
140
151
|
if (canAutoFix) {
|
|
@@ -157,8 +168,17 @@ export function deleteReadOverlap(subtasks) {
|
|
|
157
168
|
}
|
|
158
169
|
return results;
|
|
159
170
|
}
|
|
171
|
+
/** Применяет автофиксы (добавление depends_on) к копии плана, оригинал не мутирует. */
|
|
160
172
|
export function applyAutoFixes(plan, autoFixes) {
|
|
161
|
-
|
|
173
|
+
// Глубокое-ish клонирование: копируем каждый массив `depends_on`, чтобы пуши
|
|
174
|
+
// ниже не мутировали план вызывающего (поверхностный `{...s}` делил массив).
|
|
175
|
+
const fixed = {
|
|
176
|
+
...plan,
|
|
177
|
+
subtasks: plan.subtasks.map((s) => ({
|
|
178
|
+
...s,
|
|
179
|
+
depends_on: [...(s.depends_on ?? [])],
|
|
180
|
+
})),
|
|
181
|
+
};
|
|
162
182
|
for (const fix of autoFixes) {
|
|
163
183
|
const sub = fixed.subtasks.find((s) => s.id === fix.subtaskId);
|
|
164
184
|
if (!sub)
|
|
@@ -7,10 +7,10 @@ function generatePlanId() {
|
|
|
7
7
|
return `plan_${id}`;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
10
|
+
* Единый источник правды подсчёта прогресса (ses_mt4fn58c: `show` говорил
|
|
11
|
+
* "6/7 done, complete", а `list` — "7/7" для того же плана: один считал только
|
|
12
|
+
* "done", другой done+skipped). Пропущенный шаг работы не требует, поэтому
|
|
13
|
+
* везде считается settled.
|
|
14
14
|
*/
|
|
15
15
|
export function getPlanProgress(plan) {
|
|
16
16
|
const done = plan.steps.filter((s) => s.status === "done").length;
|
|
@@ -19,8 +19,10 @@ export function getPlanProgress(plan) {
|
|
|
19
19
|
const settled = done + skipped;
|
|
20
20
|
return { done, skipped, total, settled, terminal: total > 0 && settled === total };
|
|
21
21
|
}
|
|
22
|
+
/** Создатель планов: create, re-plan, промпт-блок. */
|
|
22
23
|
export class PlanCreator {
|
|
23
|
-
|
|
24
|
+
/** Создаёт новый план из заголовка и описаний шагов. */
|
|
25
|
+
static createPlan(title, stepDescriptions, baseDir, kinds, checks) {
|
|
24
26
|
const stepCount = stepDescriptions.length;
|
|
25
27
|
return {
|
|
26
28
|
id: generatePlanId(),
|
|
@@ -30,26 +32,29 @@ export class PlanCreator {
|
|
|
30
32
|
description: desc,
|
|
31
33
|
status: "pending",
|
|
32
34
|
kind: kinds?.[i] ?? "create",
|
|
35
|
+
...(checks?.[i] ? { check: checks[i] } : {}),
|
|
33
36
|
})),
|
|
34
37
|
createdAt: new Date().toISOString(),
|
|
35
38
|
baseDir,
|
|
36
39
|
};
|
|
37
40
|
}
|
|
38
|
-
|
|
41
|
+
/** Re-plan: сохраняет done/skipped шаги, заменяет остальные новыми. */
|
|
42
|
+
static replan(plan, newSteps, title, newChecks) {
|
|
39
43
|
const kept = plan.steps.filter((s) => s.status === "done" || s.status === "skipped");
|
|
40
44
|
const baseTitle = plan.title.replace(/^\[\d+[^]]*\]\s*/, "");
|
|
41
45
|
const newTitle = title || baseTitle;
|
|
42
46
|
const totalSteps = kept.length + newSteps.length;
|
|
43
|
-
const added = newSteps.map((desc) => ({
|
|
44
|
-
id: -1, //
|
|
47
|
+
const added = newSteps.map((desc, i) => ({
|
|
48
|
+
id: -1, // перенумеруется ниже
|
|
45
49
|
description: desc,
|
|
46
50
|
status: "pending",
|
|
47
51
|
kind: "create",
|
|
52
|
+
...(newChecks?.[i] ? { check: newChecks[i] } : {}),
|
|
48
53
|
}));
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
//
|
|
52
|
-
// [1,3],
|
|
54
|
+
// Перенумеровываем все шаги (сохранённые + новые) подряд. Сохранённые держат
|
|
55
|
+
// статус и kind, но их id могут коллизить с новыми, если исходный план
|
|
56
|
+
// пропускал/пендил шаги в середине (напр. done 1, done 3 → сохранённые
|
|
57
|
+
// [1,3], новые [2…] коллизят с сохранённым id 3).
|
|
53
58
|
const steps = [...kept, ...added].map((s, i) => ({ ...s, id: i + 1 }));
|
|
54
59
|
return {
|
|
55
60
|
id: plan.id,
|
|
@@ -60,6 +65,7 @@ export class PlanCreator {
|
|
|
60
65
|
name: plan.name,
|
|
61
66
|
};
|
|
62
67
|
}
|
|
68
|
+
/** Рендерит план чеклистом для промпта (иконки статусов, checks, подзадачи). */
|
|
63
69
|
static toPromptBlock(plan, currentStepIndex) {
|
|
64
70
|
const date = plan.createdAt.slice(0, 10);
|
|
65
71
|
const p = getPlanProgress(plan);
|
|
@@ -85,8 +91,11 @@ export class PlanCreator {
|
|
|
85
91
|
: "[ ]";
|
|
86
92
|
const note = step.note ? ` — ${step.note}` : "";
|
|
87
93
|
lines.push(`${icon} ${step.id}. ${step.description}${note}`);
|
|
94
|
+
if (step.check) {
|
|
95
|
+
lines.push(` ↳ check: ${step.check}`);
|
|
96
|
+
}
|
|
88
97
|
for (const sub of step.subtasks ?? []) {
|
|
89
|
-
lines.push(` ${sub.done ? "[x]" : "[ ]"} ${sub.text}`);
|
|
98
|
+
lines.push(` [${sub.id}] ${sub.done ? "[x]" : "[ ]"} ${sub.text}`);
|
|
90
99
|
}
|
|
91
100
|
}
|
|
92
101
|
return lines.join("\n");
|