@sayknow-cli/coding-agent 0.3.5 → 0.3.7
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 +76 -0
- package/dist/types/capability/mcp.d.ts +2 -0
- package/dist/types/cli/local-provider-smoke.d.ts +59 -0
- package/dist/types/cli/notify-cli.d.ts +1 -1
- package/dist/types/cli/telegram-cli.d.ts +13 -0
- package/dist/types/cli/update-cli.d.ts +24 -1
- package/dist/types/commands/local-provider.d.ts +34 -0
- package/dist/types/commands/telegram.d.ts +22 -0
- package/dist/types/config/keybindings.d.ts +12 -6
- package/dist/types/config/model-registry.d.ts +5 -0
- package/dist/types/config/models-config-schema.d.ts +5 -0
- package/dist/types/config/settings-schema.d.ts +284 -4
- package/dist/types/config/settings.d.ts +7 -0
- package/dist/types/config/telegram-autostart.d.ts +14 -0
- package/dist/types/config/telegram-env-bridge.d.ts +18 -0
- package/dist/types/coordinator-mcp/server.d.ts +8 -0
- package/dist/types/defaults/skc-defaults.d.ts +7 -0
- package/dist/types/discovery/cursor.d.ts +4 -1
- package/dist/types/discovery/index.d.ts +0 -1
- package/dist/types/discovery/windsurf.d.ts +3 -1
- package/dist/types/extensibility/extensions/types.d.ts +11 -0
- package/dist/types/i18n/messages/en.d.ts +1 -0
- package/dist/types/modes/components/custom-editor.d.ts +6 -1
- package/dist/types/modes/components/custom-model-preset-wizard.d.ts +1 -1
- package/dist/types/modes/components/hook-selector.d.ts +5 -0
- package/dist/types/modes/components/model-selector.d.ts +2 -0
- package/dist/types/modes/components/settings-selector.d.ts +5 -1
- package/dist/types/modes/components/skill-message.d.ts +1 -0
- package/dist/types/modes/components/status-line/types.d.ts +5 -7
- package/dist/types/modes/components/status-line.d.ts +15 -3
- package/dist/types/modes/components/two-column-body.d.ts +9 -0
- package/dist/types/modes/components/welcome.d.ts +9 -1
- package/dist/types/modes/controllers/command-controller.d.ts +1 -0
- package/dist/types/modes/controllers/input-controller.d.ts +6 -1
- package/dist/types/modes/controllers/selector-controller.d.ts +10 -1
- package/dist/types/modes/interactive-mode.d.ts +2 -0
- package/dist/types/modes/prompt-action-autocomplete.d.ts +3 -0
- package/dist/types/modes/rpc/rpc-types.d.ts +1 -0
- package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +41 -7
- package/dist/types/modes/slash-command-visibility.d.ts +1 -0
- package/dist/types/modes/theme/theme.d.ts +1 -1
- package/dist/types/modes/tmux-scroll.d.ts +18 -0
- package/dist/types/modes/types.d.ts +5 -1
- package/dist/types/modes/utils/terminal-bell.d.ts +3 -0
- package/dist/types/notifications/daemon-paths.d.ts +9 -0
- package/dist/types/notifications/html-format.d.ts +2 -0
- package/dist/types/notifications/recent-activity.d.ts +5 -1
- package/dist/types/notifications/telegram-daemon-cli.d.ts +21 -4
- package/dist/types/notifications/telegram-daemon-control.d.ts +8 -0
- package/dist/types/notifications/telegram-daemon.d.ts +4 -10
- package/dist/types/notifications/telegram-reference.d.ts +4 -0
- package/dist/types/notifications/threaded-render.d.ts +1 -0
- package/dist/types/runtime-mcp/config-writer.d.ts +9 -0
- package/dist/types/runtime-mcp/config.d.ts +2 -0
- package/dist/types/runtime-mcp/loader.d.ts +2 -0
- package/dist/types/runtime-mcp/manager.d.ts +2 -0
- package/dist/types/runtime-mcp/types.d.ts +6 -0
- package/dist/types/sdk.d.ts +1 -1
- package/dist/types/skc-runtime/launch-tmux.d.ts +2 -2
- package/dist/types/skc-runtime/ralplan-runtime.d.ts +3 -2
- package/dist/types/skc-runtime/restricted-role-agent-bash.d.ts +1 -0
- package/dist/types/skc-runtime/session-state-sidecar.d.ts +5 -0
- package/dist/types/skc-runtime/state-writer.d.ts +1 -0
- package/dist/types/skc-runtime/team-runtime.d.ts +1 -1
- package/dist/types/skc-runtime/tmux-common.d.ts +12 -0
- package/dist/types/skc-runtime/ultragoal-guard.d.ts +7 -1
- package/dist/types/skc-runtime/ultragoal-runtime.d.ts +0 -4
- package/dist/types/slash-commands/types.d.ts +2 -0
- package/dist/types/system-prompt.d.ts +7 -0
- package/dist/types/tools/skill.d.ts +1 -1
- package/dist/types/utils/cmux-workspace.d.ts +52 -0
- package/dist/types/web/search/index.d.ts +4 -2
- package/dist/types/web/search/provider.d.ts +14 -0
- package/dist/types/web/search/providers/utils.d.ts +42 -13
- package/dist/types/web/search/render.d.ts +1 -0
- package/dist/types/workflow/workflow-intent-diff.d.ts +19 -0
- package/package.json +8 -8
- package/scripts/build-binary.ts +3 -0
- package/scripts/verify-insane-vendor.ts +0 -5
- package/src/capability/mcp.ts +2 -0
- package/src/cli/local-provider-smoke.ts +632 -0
- package/src/cli/notify-cli.ts +4 -2
- package/src/cli/telegram-cli.ts +156 -0
- package/src/cli/update-cli.ts +179 -13
- package/src/cli/web-search-cli.ts +5 -7
- package/src/cli.ts +20 -1
- package/src/commands/launch.ts +47 -2
- package/src/commands/local-provider.ts +62 -0
- package/src/commands/notify.ts +1 -1
- package/src/commands/ralplan.ts +1 -0
- package/src/commands/telegram.ts +47 -0
- package/src/config/keybindings.ts +15 -6
- package/src/config/mcp-schema.json +4 -0
- package/src/config/model-registry.ts +55 -1
- package/src/config/models-config-schema.ts +9 -0
- package/src/config/settings-schema.ts +256 -4
- package/src/config/settings.ts +11 -0
- package/src/config/telegram-autostart.ts +107 -0
- package/src/config/telegram-env-bridge.ts +92 -0
- package/src/coordinator-mcp/server.ts +276 -34
- package/src/defaults/skc/skills/ralplan/SKILL.md +29 -20
- package/src/defaults/skc/skills/ultragoal/SKILL.md +37 -112
- package/src/defaults/skc-defaults.ts +16 -0
- package/src/discovery/builtin.ts +12 -0
- package/src/discovery/cursor.ts +5 -84
- package/src/discovery/gemini.ts +3 -89
- package/src/discovery/index.ts +4 -1
- package/src/discovery/mcp-json.ts +11 -0
- package/src/discovery/opencode.ts +5 -122
- package/src/discovery/windsurf.ts +4 -82
- package/src/edit/read-file.ts +9 -1
- package/src/extensibility/extensions/runner.ts +2 -1
- package/src/extensibility/extensions/types.ts +11 -0
- package/src/extensibility/skills.ts +30 -2
- package/src/hooks/skill-state.ts +33 -73
- package/src/i18n/messages/de.ts +1 -0
- package/src/i18n/messages/en.ts +1 -0
- package/src/i18n/messages/es.ts +1 -0
- package/src/i18n/messages/fr.ts +1 -0
- package/src/i18n/messages/ja.settings.ts +28 -0
- package/src/i18n/messages/ja.ts +1 -0
- package/src/i18n/messages/ko.settings.ts +28 -0
- package/src/i18n/messages/ko.ts +1 -0
- package/src/i18n/messages/zh.settings.ts +28 -0
- package/src/i18n/messages/zh.ts +1 -0
- package/src/internal-urls/docs-index.generated.ts +12 -7
- package/src/main.ts +5 -2
- package/src/migrate/executor.ts +23 -6
- package/src/modes/acp/acp-agent.ts +7 -6
- package/src/modes/components/agent-dashboard.ts +3 -35
- package/src/modes/components/custom-editor.ts +26 -0
- package/src/modes/components/custom-model-preset-wizard.ts +30 -189
- package/src/modes/components/extensions/extension-dashboard.ts +2 -48
- package/src/modes/components/hook-selector.ts +21 -3
- package/src/modes/components/model-selector.ts +246 -11
- package/src/modes/components/session-observer-overlay.ts +3 -3
- package/src/modes/components/session-selector.ts +19 -9
- package/src/modes/components/settings-selector.ts +551 -11
- package/src/modes/components/skill-message.ts +18 -10
- package/src/modes/components/status-line/presets.ts +11 -0
- package/src/modes/components/status-line/segments.ts +16 -19
- package/src/modes/components/status-line/types.ts +6 -2
- package/src/modes/components/status-line.ts +281 -117
- package/src/modes/components/tree-selector.ts +28 -8
- package/src/modes/components/two-column-body.ts +36 -0
- package/src/modes/components/welcome.ts +165 -30
- package/src/modes/controllers/command-controller.ts +26 -2
- package/src/modes/controllers/event-controller.ts +102 -4
- package/src/modes/controllers/extension-ui-controller.ts +21 -2
- package/src/modes/controllers/input-controller.ts +214 -47
- package/src/modes/controllers/selector-controller.ts +35 -33
- package/src/modes/interactive-mode.ts +36 -30
- package/src/modes/prompt-action-autocomplete.ts +48 -8
- package/src/modes/rpc/rpc-types.ts +1 -0
- package/src/modes/shared/agent-wire/deep-interview-gate.ts +72 -15
- package/src/modes/shared/agent-wire/workflow-gate-schema.ts +20 -0
- package/src/modes/slash-command-visibility.ts +9 -0
- package/src/modes/theme/theme.ts +5 -1
- package/src/modes/tmux-scroll.ts +92 -0
- package/src/modes/types.ts +8 -1
- package/src/modes/utils/hotkeys-markdown.ts +5 -2
- package/src/modes/utils/terminal-bell.ts +48 -0
- package/src/modes/utils/ui-helpers.ts +76 -3
- package/src/notifications/daemon-paths.ts +22 -0
- package/src/notifications/html-format.ts +75 -1
- package/src/notifications/index.ts +32 -2
- package/src/notifications/lifecycle-control-runtime.ts +12 -3
- package/src/notifications/recent-activity.ts +32 -8
- package/src/notifications/telegram-daemon-cli.ts +125 -13
- package/src/notifications/telegram-daemon-control.ts +9 -0
- package/src/notifications/telegram-daemon.ts +88 -46
- package/src/notifications/telegram-reference.ts +36 -14
- package/src/notifications/threaded-render.ts +14 -6
- package/src/prompts/agents/architect.md +7 -4
- package/src/prompts/agents/critic.md +15 -6
- package/src/prompts/agents/planner.md +8 -3
- package/src/prompts/system/system-prompt.md +20 -2
- package/src/prompts/tools/bash.md +1 -1
- package/src/runtime-mcp/config-writer.ts +28 -0
- package/src/runtime-mcp/config.ts +7 -0
- package/src/runtime-mcp/loader.ts +3 -0
- package/src/runtime-mcp/manager.ts +3 -0
- package/src/runtime-mcp/types.ts +6 -0
- package/src/sdk.ts +10 -11
- package/src/session/agent-session.ts +103 -13
- package/src/session/session-manager.ts +58 -18
- package/src/skc-runtime/launch-tmux.ts +34 -8
- package/src/skc-runtime/launch-worktree.ts +16 -2
- package/src/skc-runtime/ralplan-runtime.ts +22 -6
- package/src/skc-runtime/restricted-role-agent-bash.ts +1 -0
- package/src/skc-runtime/session-state-sidecar.ts +167 -24
- package/src/skc-runtime/state-runtime.ts +8 -5
- package/src/skc-runtime/state-writer.ts +5 -5
- package/src/skc-runtime/team-runtime.ts +21 -6
- package/src/skc-runtime/tmux-common.ts +16 -0
- package/src/skc-runtime/tmux-sessions.ts +13 -9
- package/src/skc-runtime/ultragoal-guard.ts +150 -24
- package/src/skc-runtime/ultragoal-runtime.ts +16 -124
- package/src/skc-runtime/workflow-manifest.generated.json +0 -8
- package/src/skc-runtime/workflow-manifest.ts +0 -1
- package/src/slash-commands/builtin-registry.ts +136 -23
- package/src/slash-commands/types.ts +2 -0
- package/src/system-prompt.ts +8 -0
- package/src/task/executor.ts +5 -0
- package/src/tools/ast-grep.ts +10 -7
- package/src/tools/bash.ts +39 -14
- package/src/tools/index.ts +8 -1
- package/src/tools/skill.ts +1 -1
- package/src/utils/cmux-workspace.ts +233 -0
- package/src/utils/title-generator.ts +2 -0
- package/src/web/kagi.ts +1 -1
- package/src/web/parallel.ts +2 -2
- package/src/web/search/index.ts +137 -52
- package/src/web/search/provider.ts +80 -0
- package/src/web/search/providers/anthropic.ts +1 -1
- package/src/web/search/providers/brave.ts +1 -1
- package/src/web/search/providers/codex.ts +1 -1
- package/src/web/search/providers/duckduckgo.ts +1 -1
- package/src/web/search/providers/exa.ts +1 -1
- package/src/web/search/providers/gemini.ts +7 -3
- package/src/web/search/providers/jina.ts +1 -1
- package/src/web/search/providers/kimi.ts +6 -1
- package/src/web/search/providers/openai-compatible.ts +1 -1
- package/src/web/search/providers/parallel.ts +1 -1
- package/src/web/search/providers/perplexity.ts +2 -2
- package/src/web/search/providers/searxng.ts +1 -1
- package/src/web/search/providers/synthetic.ts +1 -1
- package/src/web/search/providers/tavily.ts +1 -1
- package/src/web/search/providers/utils.ts +67 -17
- package/src/web/search/providers/xai.ts +1 -1
- package/src/web/search/providers/zai.ts +1 -1
- package/src/web/search/render.ts +3 -0
- package/src/workflow/workflow-intent-diff.ts +199 -0
- package/vendor/insane-search/MANIFEST.json +1 -3
- package/vendor/insane-search/engine/tests/test_u1.py +0 -28
- package/vendor/insane-search/engine/transport.py +2 -3
- package/vendor/insane-search/engine/validators.py +0 -14
- package/src/defaults/skc/rules/ponytail.md +0 -68
package/src/hooks/skill-state.ts
CHANGED
|
@@ -12,8 +12,7 @@ import {
|
|
|
12
12
|
writeGuardedJsonAtomic,
|
|
13
13
|
writeGuardedWorkflowEnvelopeAtomic,
|
|
14
14
|
} from "../skc-runtime/state-writer";
|
|
15
|
-
import { isUltragoalBypassPrompt,
|
|
16
|
-
import { getUltragoalRunCompletionState, readUltragoalPlan } from "../skc-runtime/ultragoal-runtime";
|
|
15
|
+
import { isUltragoalBypassPrompt, verifyUltragoalDurableCompletionState } from "../skc-runtime/ultragoal-guard";
|
|
17
16
|
import {
|
|
18
17
|
readVisibleSkillActiveState as readCanonicalVisibleSkillActiveState,
|
|
19
18
|
type SkillActiveEntry,
|
|
@@ -565,6 +564,10 @@ function modeStateReleasesStop(state: ModeState | null, handoffRequired: boolean
|
|
|
565
564
|
return false;
|
|
566
565
|
}
|
|
567
566
|
|
|
567
|
+
function ultragoalDurableCompletionReleasesStop(state: string): boolean {
|
|
568
|
+
return state === "inactive" || state === "active_verified_complete";
|
|
569
|
+
}
|
|
570
|
+
|
|
568
571
|
/**
|
|
569
572
|
* Cross-file coherence guard for a mode-state that claims it releases the Stop
|
|
570
573
|
* block. `modeStateReleasesStop` trusts a single mode-state file; if any writer
|
|
@@ -577,18 +580,15 @@ function modeStateReleasesStop(state: ModeState | null, handoffRequired: boolean
|
|
|
577
580
|
* cheap and read-only — ultragoal reads the durable plan; skills without an
|
|
578
581
|
* independent durable source release as before.
|
|
579
582
|
*/
|
|
580
|
-
async function detectStaleModeStateRelease(
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
}
|
|
590
|
-
}
|
|
591
|
-
return null;
|
|
583
|
+
async function detectStaleModeStateRelease(
|
|
584
|
+
skill: SkcWorkflowSkill,
|
|
585
|
+
cwd: string,
|
|
586
|
+
sessionId?: string | null,
|
|
587
|
+
): Promise<string | null> {
|
|
588
|
+
if (skill !== "ultragoal") return null;
|
|
589
|
+
const diagnostic = await verifyUltragoalDurableCompletionState({ cwd, sessionId });
|
|
590
|
+
if (ultragoalDurableCompletionReleasesStop(diagnostic.state)) return null;
|
|
591
|
+
return `${diagnostic.message} Run \`skc ultragoal complete-goals\` to continue, or checkpoint a finished story with \`skc ultragoal checkpoint --status complete --quality-gate-json <file>\`, before stopping`;
|
|
592
592
|
}
|
|
593
593
|
|
|
594
594
|
/**
|
|
@@ -663,19 +663,6 @@ function stateMatchesContext(state: ModeState, sessionId?: string, threadId?: st
|
|
|
663
663
|
return true;
|
|
664
664
|
}
|
|
665
665
|
|
|
666
|
-
async function readCurrentGoalObjectiveFromSessionFile(sessionFile: string | undefined): Promise<string | null> {
|
|
667
|
-
const trimmed = sessionFile?.trim();
|
|
668
|
-
if (!trimmed) return null;
|
|
669
|
-
const entries = (await loadEntriesFromFile(trimmed)).filter(
|
|
670
|
-
(entry): entry is SessionEntry => entry.type !== "session",
|
|
671
|
-
);
|
|
672
|
-
const context = buildSessionContext(entries);
|
|
673
|
-
const goal = context.modeData?.goal;
|
|
674
|
-
if (typeof goal !== "object" || goal === null) return null;
|
|
675
|
-
const objective = (goal as { objective?: unknown }).objective;
|
|
676
|
-
return typeof objective === "string" && objective.trim().length > 0 ? objective.trim() : null;
|
|
677
|
-
}
|
|
678
|
-
|
|
679
666
|
async function readLatestAssistantTextFromSessionFile(sessionFile: string | undefined): Promise<string | null> {
|
|
680
667
|
const trimmed = sessionFile?.trim();
|
|
681
668
|
if (!trimmed) return null;
|
|
@@ -730,34 +717,18 @@ export async function buildActiveUltragoalPromptContext(input: UserPromptSubmitS
|
|
|
730
717
|
if (!stateMatchesContext(visibleModeState.state, resolvedSessionId, input.threadId)) return null;
|
|
731
718
|
|
|
732
719
|
const phase = String(visibleModeState.state.current_phase ?? "active");
|
|
733
|
-
const stateObjective =
|
|
734
|
-
typeof visibleModeState.state.objective === "string"
|
|
735
|
-
? visibleModeState.state.objective
|
|
736
|
-
: typeof visibleModeState.state.skcObjective === "string"
|
|
737
|
-
? visibleModeState.state.skcObjective
|
|
738
|
-
: "";
|
|
739
|
-
const sessionObjective = await readCurrentGoalObjectiveFromSessionFile(input.sessionFile);
|
|
740
720
|
const normalizedPrompt = input.prompt?.replace(/\\?"/g, '"');
|
|
741
721
|
const isBypassPrompt = Boolean(
|
|
742
722
|
(normalizedPrompt && isUltragoalBypassPrompt(normalizedPrompt)) ||
|
|
743
723
|
(input.prompt && /goal[\s\S]{0,80}complete/i.test(input.prompt)),
|
|
744
724
|
);
|
|
745
725
|
if (isBypassPrompt) {
|
|
746
|
-
const
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
for (const objective of objectives) {
|
|
753
|
-
const diagnostic = await readUltragoalVerificationState({
|
|
754
|
-
cwd: input.cwd,
|
|
755
|
-
currentGoal: { objective },
|
|
756
|
-
});
|
|
757
|
-
if (diagnostic.state === "unrelated_goal") continue;
|
|
758
|
-
if (!["inactive", "active_verified_complete"].includes(diagnostic.state)) {
|
|
759
|
-
return `BLOCK_ULTRAGOAL_COMPLETION: ${diagnostic.message} Use durable blocker work or run strict \`skc ultragoal checkpoint --status complete --quality-gate-json <file> --skc-goal-json <file>\` before completion.`;
|
|
760
|
-
}
|
|
726
|
+
const diagnostic = await verifyUltragoalDurableCompletionState({
|
|
727
|
+
cwd: input.cwd,
|
|
728
|
+
sessionId: resolvedSessionId,
|
|
729
|
+
});
|
|
730
|
+
if (!ultragoalDurableCompletionReleasesStop(diagnostic.state)) {
|
|
731
|
+
return `BLOCK_ULTRAGOAL_COMPLETION: ${diagnostic.message} Use durable blocker work or run strict \`skc ultragoal checkpoint --status complete --quality-gate-json <file>\` before completion.`;
|
|
761
732
|
}
|
|
762
733
|
}
|
|
763
734
|
return `Ultragoal is active (phase: ${phase}; state: ${visibleModeState.statePath}). If the user prompt is a steering request, use \`skc ultragoal steer\` to add or steer subgoals. Normal prose should not mutate Ultragoal state.`;
|
|
@@ -818,7 +789,7 @@ export async function buildSkillStopOutput(input: StopHookInput): Promise<Record
|
|
|
818
789
|
// authoritative durable state. If a stale/incoherent mode-state would
|
|
819
790
|
// release while the plan/ledger still shows pending work, block instead
|
|
820
791
|
// of trusting the single file (see #659).
|
|
821
|
-
const staleRelease = await detectStaleModeStateRelease(entry.skill, input.cwd);
|
|
792
|
+
const staleRelease = await detectStaleModeStateRelease(entry.skill, input.cwd, resolvedSessionId);
|
|
822
793
|
if (staleRelease) {
|
|
823
794
|
const coherenceMessage = `SKC skill "${entry.skill}" mode-state reports it released the Stop block (${modeStatePath(input.cwd, entry.skill, resolvedSessionId)}), but ${staleRelease}. The mode-state is incoherent with authoritative durable state; finish or explicitly clear the pending work before stopping.`;
|
|
824
795
|
return {
|
|
@@ -847,29 +818,18 @@ export async function buildSkillStopOutput(input: StopHookInput): Promise<Record
|
|
|
847
818
|
const phase = String(modeState?.current_phase ?? entry.phase ?? skillState.phase ?? "active");
|
|
848
819
|
const statePath = modeStatePath(input.cwd, entry.skill, resolvedSessionId);
|
|
849
820
|
if (entry.skill === "ultragoal") {
|
|
850
|
-
const
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
if (diagnostic.state === "active_verified_complete") continue;
|
|
863
|
-
if (!["inactive", "unrelated_goal"].includes(diagnostic.state)) {
|
|
864
|
-
const ultragoalMessage = `SKC ultragoal verification is blocking stop: ${diagnostic.message} Run strict checkpoint verification or record review blockers before stopping.`;
|
|
865
|
-
return {
|
|
866
|
-
decision: "block",
|
|
867
|
-
reason: ultragoalMessage,
|
|
868
|
-
stopReason: `skc_ultragoal_verification_${diagnostic.state}`,
|
|
869
|
-
systemMessage: ultragoalMessage,
|
|
870
|
-
};
|
|
871
|
-
}
|
|
872
|
-
}
|
|
821
|
+
const diagnostic = await verifyUltragoalDurableCompletionState({
|
|
822
|
+
cwd: input.cwd,
|
|
823
|
+
sessionId: resolvedSessionId,
|
|
824
|
+
});
|
|
825
|
+
if (ultragoalDurableCompletionReleasesStop(diagnostic.state)) continue;
|
|
826
|
+
const ultragoalMessage = `SKC ultragoal verification is blocking stop: ${diagnostic.message} Run \`skc ultragoal checkpoint --status complete --quality-gate-json <file>\` or record review blockers before stopping.`;
|
|
827
|
+
return {
|
|
828
|
+
decision: "block",
|
|
829
|
+
reason: ultragoalMessage,
|
|
830
|
+
stopReason: `skc_ultragoal_verification_${diagnostic.state}`,
|
|
831
|
+
systemMessage: ultragoalMessage,
|
|
832
|
+
};
|
|
873
833
|
}
|
|
874
834
|
const systemMessage = handoffRequired
|
|
875
835
|
? buildHandoffForceAskMessage(entry.skill, phase, statePath)
|
package/src/i18n/messages/de.ts
CHANGED
|
@@ -36,6 +36,7 @@ export const de: Partial<Record<MsgKey, string>> = {
|
|
|
36
36
|
"settings.tab.tools": "Werkzeuge",
|
|
37
37
|
"settings.tab.tasks": "Aufgaben",
|
|
38
38
|
"settings.tab.providers": "Anbieter",
|
|
39
|
+
"settings.tab.integrations": "Integrationen",
|
|
39
40
|
"settings.language.label": "Sprache",
|
|
40
41
|
"settings.language.desc": "Sprache der Oberfläche. Automatisch folgt der Systemsprache.",
|
|
41
42
|
"help.usage": "VERWENDUNG",
|
package/src/i18n/messages/en.ts
CHANGED
package/src/i18n/messages/es.ts
CHANGED
|
@@ -36,6 +36,7 @@ export const es: Partial<Record<MsgKey, string>> = {
|
|
|
36
36
|
"settings.tab.tools": "Herramientas",
|
|
37
37
|
"settings.tab.tasks": "Tareas",
|
|
38
38
|
"settings.tab.providers": "Proveedores",
|
|
39
|
+
"settings.tab.integrations": "Integraciones",
|
|
39
40
|
"settings.language.label": "Idioma",
|
|
40
41
|
"settings.language.desc": "Idioma de la interfaz. Automático sigue la configuración regional del sistema.",
|
|
41
42
|
"help.usage": "USO",
|
package/src/i18n/messages/fr.ts
CHANGED
|
@@ -36,6 +36,7 @@ export const fr: Partial<Record<MsgKey, string>> = {
|
|
|
36
36
|
"settings.tab.tools": "Outils",
|
|
37
37
|
"settings.tab.tasks": "Tâches",
|
|
38
38
|
"settings.tab.providers": "Fournisseurs",
|
|
39
|
+
"settings.tab.integrations": "Intégrations",
|
|
39
40
|
"settings.language.label": "Langue",
|
|
40
41
|
"settings.language.desc": "Langue de l'interface. Auto suit les paramètres régionaux du système.",
|
|
41
42
|
"help.usage": "UTILISATION",
|
|
@@ -806,4 +806,32 @@ export const jaSettings: Record<string, string> = {
|
|
|
806
806
|
"cmd:move:d": "セッションを別の作業ディレクトリに移動",
|
|
807
807
|
"cmd:exit:d": "アプリケーションを終了",
|
|
808
808
|
"set:edit.fuzzyThreshold:d": "あいまい一致の類似度しきい値",
|
|
809
|
+
"set:telegram.enabled:l": "Telegramリモート",
|
|
810
|
+
"set:telegram.enabled:d": "skcセッションを双方向Telegramボットで制御",
|
|
811
|
+
"set:telegram.botToken:l": "ボットトークン",
|
|
812
|
+
"set:telegram.botToken:d": "@BotFatherから取得したTelegramボットトークン(有効化時に必須)",
|
|
813
|
+
"set:telegram.allowedUserIds:l": "許可されたユーザーID",
|
|
814
|
+
"set:telegram.allowedUserIds:d": "コマンドを送信できるTelegramユーザーID(カンマ区切り)",
|
|
815
|
+
"set:telegram.allowedChatIds:l": "許可されたチャットID",
|
|
816
|
+
"set:telegram.allowedChatIds:d": "コマンドを送信できるTelegramチャットID(カンマ区切り)",
|
|
817
|
+
"set:telegram.backend:l": "バックエンド",
|
|
818
|
+
"set:telegram.backend:d": "コーディネーター(マルチセッション)またはRPC(単一永続セッション)",
|
|
819
|
+
"set:telegram.backend:o:coordinator:l": "コーディネーター",
|
|
820
|
+
"set:telegram.backend:o:coordinator:d": "マルチセッションライフサイクル + 監視",
|
|
821
|
+
"set:telegram.backend:o:rpc:l": "RPC",
|
|
822
|
+
"set:telegram.backend:o:rpc:d": "単一永続セッションソケットにアタッチ/デタッチ",
|
|
823
|
+
"set:telegram.enableStop:l": "/stopを有効化",
|
|
824
|
+
"set:telegram.enableStop:d": "停止リクエストを許可(reportsミューテーションクラスを追加)",
|
|
825
|
+
"set:telegram.enableRich:l": "リッチメッセージ",
|
|
826
|
+
"set:telegram.enableRich:d": "HTMLフォーマット + インラインキーボード",
|
|
827
|
+
"set:telegram.enablePush:l": "プッシュ通知",
|
|
828
|
+
"set:telegram.enablePush:d": "コーディネーターイベント監視によるフォロー/ミュート購読",
|
|
829
|
+
"set:telegram.registerCommands:l": "ボットメニュー登録",
|
|
830
|
+
"set:telegram.registerCommands:d": "起動時にボットコマンドメニューを登録",
|
|
831
|
+
"set:telegram.presets:l": "セッションプリセット",
|
|
832
|
+
"set:telegram.presets:d": "{id, workdir, sessionCommand, taskTemplate?, taskMaxLen?} JSON配列",
|
|
833
|
+
"set:telegram.rpcSocket:l": "RPCソケット",
|
|
834
|
+
"set:telegram.rpcSocket:d": "skc launch --output rpc UNIXソケットパス(RPCバックエンド専用)",
|
|
835
|
+
"set:telegram.stateDir:l": "状態ディレクトリ",
|
|
836
|
+
"set:telegram.stateDir:d": "再接続/再同期用ゲートウェイ状態ディレクトリ(RPCバックエンド必須)",
|
|
809
837
|
};
|
package/src/i18n/messages/ja.ts
CHANGED
|
@@ -34,6 +34,7 @@ export const ja: Partial<Record<MsgKey, string>> = {
|
|
|
34
34
|
"settings.tab.tools": "ツール",
|
|
35
35
|
"settings.tab.tasks": "タスク",
|
|
36
36
|
"settings.tab.providers": "プロバイダー",
|
|
37
|
+
"settings.tab.integrations": "統合",
|
|
37
38
|
|
|
38
39
|
"settings.language.label": "言語",
|
|
39
40
|
"settings.language.desc": "インターフェース言語。自動はシステムのロケールに従います。",
|
|
@@ -795,4 +795,32 @@ export const koSettings: Record<string, string> = {
|
|
|
795
795
|
"cmd:move:d": "세션을 다른 작업 디렉터리로 이동",
|
|
796
796
|
"cmd:exit:d": "애플리케이션 종료",
|
|
797
797
|
"set:edit.fuzzyThreshold:d": "퍼지 매칭의 유사도 임계값",
|
|
798
|
+
"set:telegram.enabled:l": "텔레그램 리모트",
|
|
799
|
+
"set:telegram.enabled:d": "skc 세션을 양방향 텔레그램 봇으로 제어",
|
|
800
|
+
"set:telegram.botToken:l": "봇 토큰",
|
|
801
|
+
"set:telegram.botToken:d": "@BotFather에서 받은 텔레그램 봇 토큰 (활성화 시 필수)",
|
|
802
|
+
"set:telegram.allowedUserIds:l": "허용된 사용자 ID",
|
|
803
|
+
"set:telegram.allowedUserIds:d": "명령을 보낼 수 있는 텔레그램 사용자 ID (쉼표 구분)",
|
|
804
|
+
"set:telegram.allowedChatIds:l": "허용된 채팅 ID",
|
|
805
|
+
"set:telegram.allowedChatIds:d": "명령을 보낼 수 있는 텔레그램 채팅 ID (쉼표 구분)",
|
|
806
|
+
"set:telegram.backend:l": "백엔드",
|
|
807
|
+
"set:telegram.backend:d": "코디네이터 (다중 세션 수명주기) 또는 RPC (단일 영구 세션)",
|
|
808
|
+
"set:telegram.backend:o:coordinator:l": "코디네이터",
|
|
809
|
+
"set:telegram.backend:o:coordinator:d": "다중 세션 수명주기 + 관찰",
|
|
810
|
+
"set:telegram.backend:o:rpc:l": "RPC",
|
|
811
|
+
"set:telegram.backend:o:rpc:d": "단일 영구 세션 소켓에 연결/분리",
|
|
812
|
+
"set:telegram.enableStop:l": "/stop 활성화",
|
|
813
|
+
"set:telegram.enableStop:d": "정지 요청 허용 (reports 변경 클래스 추가)",
|
|
814
|
+
"set:telegram.enableRich:l": "리치 메시지",
|
|
815
|
+
"set:telegram.enableRich:d": "HTML 포맷팅 + 인라인 키보드",
|
|
816
|
+
"set:telegram.enablePush:l": "푸시 알림",
|
|
817
|
+
"set:telegram.enablePush:d": "코디네이터 이벤트 감시를 통한 팔로우/뮤트 구독",
|
|
818
|
+
"set:telegram.registerCommands:l": "봇 메뉴 등록",
|
|
819
|
+
"set:telegram.registerCommands:d": "시작 시 봇 명령 메뉴 등록",
|
|
820
|
+
"set:telegram.presets:l": "세션 프리셋",
|
|
821
|
+
"set:telegram.presets:d": "{id, workdir, sessionCommand, taskTemplate?, taskMaxLen?} JSON 배열",
|
|
822
|
+
"set:telegram.rpcSocket:l": "RPC 소켓",
|
|
823
|
+
"set:telegram.rpcSocket:d": "skc launch --output rpc UNIX 소켓 경로 (RPC 백엔드 전용)",
|
|
824
|
+
"set:telegram.stateDir:l": "상태 디렉터리",
|
|
825
|
+
"set:telegram.stateDir:d": "재연결/동기화용 게이트웨이 상태 디렉터리 (RPC 백엔드 필수)",
|
|
798
826
|
};
|
package/src/i18n/messages/ko.ts
CHANGED
|
@@ -34,6 +34,7 @@ export const ko: Partial<Record<MsgKey, string>> = {
|
|
|
34
34
|
"settings.tab.tools": "도구",
|
|
35
35
|
"settings.tab.tasks": "작업",
|
|
36
36
|
"settings.tab.providers": "공급자",
|
|
37
|
+
"settings.tab.integrations": "연동",
|
|
37
38
|
|
|
38
39
|
"settings.language.label": "언어",
|
|
39
40
|
"settings.language.desc": "인터페이스 언어. 자동은 시스템 로케일을 따릅니다.",
|
|
@@ -776,4 +776,32 @@ export const zhSettings: Record<string, string> = {
|
|
|
776
776
|
"cmd:move:d": "将会话移动到其他工作目录",
|
|
777
777
|
"cmd:exit:d": "退出应用程序",
|
|
778
778
|
"set:edit.fuzzyThreshold:d": "模糊匹配的相似度阈值",
|
|
779
|
+
"set:telegram.enabled:l": "Telegram远程",
|
|
780
|
+
"set:telegram.enabled:d": "通过双向Telegram机器人控制skc会话",
|
|
781
|
+
"set:telegram.botToken:l": "机器人令牌",
|
|
782
|
+
"set:telegram.botToken:d": "从@BotFather获取的Telegram机器人令牌(启用时必填)",
|
|
783
|
+
"set:telegram.allowedUserIds:l": "允许的用户ID",
|
|
784
|
+
"set:telegram.allowedUserIds:d": "可发送命令的Telegram用户ID(逗号分隔)",
|
|
785
|
+
"set:telegram.allowedChatIds:l": "允许的聊天ID",
|
|
786
|
+
"set:telegram.allowedChatIds:d": "可发送命令的Telegram聊天ID(逗号分隔)",
|
|
787
|
+
"set:telegram.backend:l": "后端",
|
|
788
|
+
"set:telegram.backend:d": "协调器(多会话生命周期)或RPC(单个持久会话)",
|
|
789
|
+
"set:telegram.backend:o:coordinator:l": "协调器",
|
|
790
|
+
"set:telegram.backend:o:coordinator:d": "多会话生命周期 + 观察",
|
|
791
|
+
"set:telegram.backend:o:rpc:l": "RPC",
|
|
792
|
+
"set:telegram.backend:o:rpc:d": "连接/断开单个持久会话套接字",
|
|
793
|
+
"set:telegram.enableStop:l": "启用/stop",
|
|
794
|
+
"set:telegram.enableStop:d": "允许停止请求(添加reports变更类)",
|
|
795
|
+
"set:telegram.enableRich:l": "富文本消息",
|
|
796
|
+
"set:telegram.enableRich:d": "HTML格式 + 内联键盘",
|
|
797
|
+
"set:telegram.enablePush:l": "推送通知",
|
|
798
|
+
"set:telegram.enablePush:d": "通过协调器事件监视的关注/静音订阅",
|
|
799
|
+
"set:telegram.registerCommands:l": "注册机器人菜单",
|
|
800
|
+
"set:telegram.registerCommands:d": "启动时注册机器人命令菜单",
|
|
801
|
+
"set:telegram.presets:l": "会话预设",
|
|
802
|
+
"set:telegram.presets:d": "{id, workdir, sessionCommand, taskTemplate?, taskMaxLen?} JSON数组",
|
|
803
|
+
"set:telegram.rpcSocket:l": "RPC套接字",
|
|
804
|
+
"set:telegram.rpcSocket:d": "skc launch --output rpc UNIX套接字路径(仅RPC后端)",
|
|
805
|
+
"set:telegram.stateDir:l": "状态目录",
|
|
806
|
+
"set:telegram.stateDir:d": "用于重连/重同步的网关状态目录(RPC后端必填)",
|
|
779
807
|
};
|
package/src/i18n/messages/zh.ts
CHANGED
|
@@ -34,6 +34,7 @@ export const zh: Partial<Record<MsgKey, string>> = {
|
|
|
34
34
|
"settings.tab.tools": "工具",
|
|
35
35
|
"settings.tab.tasks": "任务",
|
|
36
36
|
"settings.tab.providers": "提供商",
|
|
37
|
+
"settings.tab.integrations": "集成",
|
|
37
38
|
|
|
38
39
|
"settings.language.label": "语言",
|
|
39
40
|
"settings.language.desc": "界面语言。自动模式跟随系统区域设置。",
|