@tea-agent/loop-agent 0.43.0-next.10 → 0.43.0-next.12
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 +18 -0
- package/dist/build-stamp.json +3 -3
- package/dist/commands/client-recovery.js +20 -55
- package/dist/executors/dag-pi-executor.js +27 -6
- package/dist/executors/shell-executor.js +3 -2
- package/dist/shared/pi-context-pressure/extension.js +26 -16
- package/dist/shared/pi-provider-recovery.js +182 -0
- package/dist/shared/pi-retry-settings.js +40 -0
- package/dist/worker/console/chat/browser-policy.js +6 -36
- package/dist/worker/console/chat/browser-routes.js +3 -11
- package/dist/worker/console/chat/pi-runtime/custom-tools/goal-tools.js +2 -1
- package/dist/worker/console/chat/pi-runtime.js +11 -12
- package/dist/worker/console/chat/routes.js +1 -5
- package/dist/worker/console/chat/session-mode-view.js +5 -4
- package/dist/worker/console/chat/session-mode.js +11 -10
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-D_fNbWc_.js → abnfDiagram-N423BO3Z-BEg5712w.js} +1 -1
- package/dist/worker/console/static/assets/{arc-_HuqLW6m.js → arc-CkQvaBGZ.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-Djy2qY1m.js → architectureDiagram-T3A2C74G-BrdwFNJ7.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-bB-1TSyY.js → blockDiagram-VBNYF7ZC-M_LjP2kx.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-C5Hmghrz.js → c4Diagram-5PPSVZJV-Bwr5Dtjc.js} +1 -1
- package/dist/worker/console/static/assets/channel-CKmyKgY-.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-Duyl39oy.js → chunk-2GRJ4B5K-CDc44stW.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-x6mdnSyf.js → chunk-2Q5K7J3B-DZELwsTt.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-WlBuFj7W.js → chunk-5RXB4S5H-D7YI6SWX.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-CTF429HX.js → chunk-5VM5RSS4-Bc46bEyj.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-Dwd6r-SF.js → chunk-6Q2QTUOP-Bj4vc-Dp.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-C-Br82D1.js → chunk-GF5L2VYU-DRi-0nDX.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-CuGp0DeE.js → chunk-JWPE2WC7-Dr-wFY60.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-CJhFX6Lh.js → chunk-KBJHAD2P-CqIHE_D7.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-DpGOa_jT.js → chunk-RYQCIY6F-C-Dl8wzk.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-DXJaTynd.js → chunk-XXDRQBXY-CV4Mydz3.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-D8Wc3jJP.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-D8Wc3jJP.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CRBZWjE4.js → cose-bilkent-JH36ORCC-C3MamSMJ.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BdXcxtlb.js → cynefin-VYW2F7L2-zo_Jy2sf.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-07UKsOts.js → cynefinDiagram-MW4NZA55-BB2PN1AG.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-D38p9__S.js → dagre-VZM6K2ZE-BimYueoi.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-nSiBNNjH.js → diagram-7IWD3JNH-Di1ObJRS.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-BFOTot5D.js → diagram-B4RE2ZJO-C83l-IJx.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-DypKaZ6k.js → diagram-LBJQPF4R-B3S3fOpm.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-B6yoOQeW.js → diagram-Q27KOJAE-urW_Zhe7.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-BHYS6viX.js → diagram-UB23O5K3-nvIbCwF6.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-D2VD5Snj.js → ebnfDiagram-BXEA7PRR-DG6O3KpP.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-E98mWxN1.js → erDiagram-JOGREHBK-DpXdtdsj.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-CT1zxhqP.js → flowDiagram-UKHOOZJN-DvXWHrND.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-6GcngNcy.js → ganttDiagram-PKOTCBZU-6F7SbvUS.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-DCL6NvKe.js → gitGraphDiagram-DS77QQ5N-D1tZnFec.js} +1 -1
- package/dist/worker/console/static/assets/{index-24jp3aBh.js → index-CWarwRqc.js} +94 -94
- package/dist/worker/console/static/assets/{index-CY6y6I8M.css → index-SAANIK8g.css} +1 -1
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-C0627e-9.js → infoDiagram-6WML65LV-HN4qwJ2M.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-C_u3P6Ik.js → ishikawaDiagram-WSZJBQD7-OJ4qwDRo.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-DPDPv9HL.js → journeyDiagram-NVQOT4AX-CJZ6giQk.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-D3OHdWiO.js → kanban-definition-27J2QSJJ-co60m19S.js} +1 -1
- package/dist/worker/console/static/assets/{linear-DI88zD7n.js → linear-D1KeFqZY.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-p2l8IrWY.js → mermaid.core-i7dDGqov.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-B1bAX-oS.js → mindmap-definition-FAOFIHXS-1SkQxBh1.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-DwOnWxdD.js → pegDiagram-VL7TDLO6-B10dhI-Y.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-xRkTXnJC.js → pieDiagram-7S7Q4E2Y-CiUKUo6j.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-_9UC5Zio.js → quadrantDiagram-CIZ2JOQS-C5vH4LXZ.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-CgEUirWJ.js → railroadDiagram-AXF67PYL-5nlWOCEj.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-Czbpwiyz.js → requirementDiagram-LRYGKXZP-CILd6QS3.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-_j7_KiqY.js → sankeyDiagram-W5VNT64P-Dfp18ZO2.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-BNJa6Hyi.js → sequenceDiagram-SI44F4Z6-B9pkswBi.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-DedpKtOc.js → sizeCapture-X5ZJPWSS-C1-eSgx4.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-BBvthr7c.js → stateDiagram-OKZ733FA-COJsOoAF.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-Bpfb0q5s.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Ds7umgEM.js → swimlanes-SLNWSIFB-Dv5NXJUM.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-BEwGGabW.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-CKa-p1nF.js → timeline-definition-Z64GVDOM-DRdrZ7eR.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-LoUNR56o.js → vennDiagram-T6HMQDX7-0-2TlwCj.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-Bqbl6ym7.js → wardleyDiagram-T6FBY63Y-3-o3q92P.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-B8dUg4lf.js → xychartDiagram-ELKLHX3M-DSgOgdUi.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/operator-chat/composer-session-ledger.js +192 -0
- package/dist/worker/console/static-src/operator-chat/pending-user-message.js +9 -1
- package/dist/worker/console/static-src/operator-chat/useChatSessions.js +78 -35
- package/dist/worker/console/static-src/operator-chat/useChatStream.js +145 -70
- package/dist/worker/console/static-src/operator-chat/useComposer.js +182 -69
- package/dist/workflows/dag/frontend-closeout.js +1 -1
- package/dist/workflows/dag/frontend-prewrite-gate.js +3 -3
- package/dist/workflows/dag/frontend-review-context.js +2 -1
- package/dist/workflows/dag/frontend-review-scopes.js +2 -2
- package/dist/workflows/dag/frontend-verification-trace.js +1 -1
- package/dist/workflows/dag/init-hybrid.js +51 -159
- package/docs/architecture/runtime-boundaries.md +3 -3
- package/docs/templates/frontend-implementation-dag.json +9 -8
- package/package.json +1 -1
- package/skills/frontend-bounded-implement/SKILL.md +3 -3
- package/skills/frontend-bounded-implement/references/code-standards.md +3 -3
- package/skills/frontend-contract/references/contract-protocol.md +3 -1
- package/skills/frontend-design-review/SKILL.md +12 -7
- package/skills/frontend-design-review/references/review-checklist.md +7 -7
- package/skills/frontend-plan/SKILL.md +12 -0
- package/skills/frontend-plan/references/decision-contract.md +25 -19
- package/skills/frontend-review/SKILL.md +12 -18
- package/skills/frontend-review/references/review-findings.md +24 -43
- package/dist/worker/console/static/assets/channel-C0A6UEIa.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DzguNppy.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DzguNppy.js +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BABVQnfM.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-D0qsLaxR.js +0 -8
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* endpoint the panel uses to explain an iframe refusal (X-Frame-Options /
|
|
4
4
|
* CSP frame-ancestors are exactly the signals the browser enforces when it
|
|
5
5
|
* refuses to embed a site). The probe is display-only (headers back to the
|
|
6
|
-
* caller), restricted to http(s)
|
|
6
|
+
* caller), restricted to http(s) URLs, with a hard timeout. Local addresses
|
|
7
|
+
* are allowed — the panel routinely browses local dev servers.
|
|
7
8
|
*/
|
|
8
|
-
import { embeddabilityOf, extractFrameAncestors,
|
|
9
|
+
import { embeddabilityOf, extractFrameAncestors, } from "./browser-policy.js";
|
|
9
10
|
function workspaceIdOf(req) {
|
|
10
11
|
try {
|
|
11
12
|
return new URL(req.url ?? "/", "http://localhost").searchParams.get("workspaceId") ?? undefined;
|
|
@@ -69,15 +70,6 @@ export async function handleBrowserRequest(req, res, deps, pathname) {
|
|
|
69
70
|
});
|
|
70
71
|
return true;
|
|
71
72
|
}
|
|
72
|
-
// Mirror the address-bar policy: loopback stays unreachable from
|
|
73
|
-
// the panel, so probing it would leak nothing the panel could use.
|
|
74
|
-
if (isLoopbackHostname(parsed.hostname)) {
|
|
75
|
-
sendJson(res, 400, {
|
|
76
|
-
ok: false,
|
|
77
|
-
error: { code: "LOOPBACK_REFUSED", message: "local addresses are not probed" },
|
|
78
|
-
});
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
73
|
const controller = new AbortController();
|
|
82
74
|
const timer = setTimeout(() => controller.abort(), 8000);
|
|
83
75
|
try {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Session-bound Goal tools (workflow
|
|
2
|
+
* Session-bound Goal tools (shared by workflow and Pi modes since
|
|
3
|
+
* 2026-09-10; see exec-plan 2026-09-10-console-chat-goal-for-pi-mode).
|
|
3
4
|
* create_goal still requires a consumed model-create grant from the registry.
|
|
4
5
|
*/
|
|
5
6
|
const GET_GOAL_DESCRIPTION = "Read the current session's durable cross-turn Goal, including revision, status, round limit, and whether this Console process is authorized to continue it.";
|
|
@@ -33,10 +33,11 @@ import { parseProviderError, } from "./provider-error.js";
|
|
|
33
33
|
import { projectCompactSnapshot, } from "./chat-event-store.js";
|
|
34
34
|
import { extractUsageSample } from "./usage.js";
|
|
35
35
|
import { OPERATOR_CHAT_ALLOWED_TOOLS, authorizeOperatorChatTool, assertNoWriteToolInList, } from "./tools.js";
|
|
36
|
-
import { authorizeChatSessionTool, DEFAULT_CONSOLE_CHAT_SESSION_MODE, chatActiveToolBaseline, composeChatSystemPrompt, composeChatSystemPromptParts, computeChatActiveToolNames,
|
|
36
|
+
import { authorizeChatSessionTool, DEFAULT_CONSOLE_CHAT_SESSION_MODE, chatActiveToolBaseline, composeChatSystemPrompt, composeChatSystemPromptParts, computeChatActiveToolNames, shouldLoadWorkflowBusinessTools, } from "./session-mode.js";
|
|
37
37
|
import { buildAgentCustomTool, ExploreOrchestrator, } from "./subagents/index.js";
|
|
38
38
|
import { createOperatorChatResourceLoader, } from "./resource-loader.js";
|
|
39
39
|
import { applySkillAutoInvocationPreferences, loadResourcePreferences, } from "./resource-preferences-store.js";
|
|
40
|
+
import { applyProcessRetryOverride, } from "../../../shared/pi-retry-settings.js";
|
|
40
41
|
import { applyProcessCompactionOverride, createCompactionController, createContextPressureExtension, createSiftBridgeState, housekeepSiftStash, isConsoleSiftEnabled, parseCompactionPolicy, parseSiftBridgeConfig, projectPromptPressure, deriveEffectiveWindow, projectSafeTelemetry, emptyContextPressureCounters, } from "../../../shared/pi-context-pressure/index.js";
|
|
41
42
|
import { incrementCounter as incrementPressureCounter } from "../../../shared/pi-context-pressure/telemetry.js";
|
|
42
43
|
import { resolveDefaultChatModel, resolveLowChatModel, } from "./model-resolver.js";
|
|
@@ -482,7 +483,6 @@ export class ConsolePiRuntime {
|
|
|
482
483
|
const inheritedFactories = Array.isArray(base.extensionFactories)
|
|
483
484
|
? base.extensionFactories
|
|
484
485
|
: [];
|
|
485
|
-
const sessionMode = this.sessionModeOf(sessionId);
|
|
486
486
|
const todoContextExtension = sessionId && this.options.todoRegistry
|
|
487
487
|
? createTodoCompactionContextExtension({
|
|
488
488
|
sessionId,
|
|
@@ -492,9 +492,7 @@ export class ConsolePiRuntime {
|
|
|
492
492
|
const pressureExtension = sessionId
|
|
493
493
|
? this.createContextPressureInlineExtension(sessionId)
|
|
494
494
|
: undefined;
|
|
495
|
-
const goalContextExtension = sessionId &&
|
|
496
|
-
this.options.goalRegistry &&
|
|
497
|
-
shouldInjectGoalContinuation(sessionMode)
|
|
495
|
+
const goalContextExtension = sessionId && this.options.goalRegistry
|
|
498
496
|
? createGoalCompactionContextExtension({
|
|
499
497
|
sessionId,
|
|
500
498
|
registry: this.options.goalRegistry,
|
|
@@ -580,9 +578,11 @@ export class ConsolePiRuntime {
|
|
|
580
578
|
policy,
|
|
581
579
|
controller: this.getCompactionController(sessionId),
|
|
582
580
|
sift,
|
|
581
|
+
normalizeTransientProviderErrors: true,
|
|
583
582
|
});
|
|
584
583
|
}
|
|
585
|
-
|
|
584
|
+
applySessionRecoveryOverrides(sessionId, services, session) {
|
|
585
|
+
applyProcessRetryOverride(services?.settingsManager);
|
|
586
586
|
const manager = services?.settingsManager;
|
|
587
587
|
const window = session?.getSessionStats?.()?.contextUsage?.contextWindow;
|
|
588
588
|
applyProcessCompactionOverride(manager, {
|
|
@@ -600,7 +600,7 @@ export class ConsolePiRuntime {
|
|
|
600
600
|
const window = stats?.contextUsage?.contextWindow;
|
|
601
601
|
const tokens = stats?.contextUsage?.tokens;
|
|
602
602
|
if (typeof window === "number" && window > 0) {
|
|
603
|
-
this.
|
|
603
|
+
this.applySessionRecoveryOverrides(sessionId, this.serviceScopes.get(sessionId) ?? {}, session);
|
|
604
604
|
}
|
|
605
605
|
const projection = projectPromptPressure({
|
|
606
606
|
currentContextTokens: tokens,
|
|
@@ -905,7 +905,7 @@ export class ConsolePiRuntime {
|
|
|
905
905
|
}
|
|
906
906
|
await bindSessionExtensions(session);
|
|
907
907
|
pinOperatorChatTools(session, init.sessionMode);
|
|
908
|
-
this.
|
|
908
|
+
this.applySessionRecoveryOverrides(init.sessionId, services, session);
|
|
909
909
|
return {
|
|
910
910
|
session,
|
|
911
911
|
modelRuntime,
|
|
@@ -985,7 +985,7 @@ export class ConsolePiRuntime {
|
|
|
985
985
|
sessionMode,
|
|
986
986
|
})
|
|
987
987
|
: undefined;
|
|
988
|
-
const goalTools =
|
|
988
|
+
const goalTools = this.options.goalRegistry
|
|
989
989
|
? await buildGoalTools({ sessionId, registry: this.options.goalRegistry })
|
|
990
990
|
: [];
|
|
991
991
|
const terminalTools = this.options.terminalRegistry
|
|
@@ -1380,7 +1380,7 @@ export class ConsolePiRuntime {
|
|
|
1380
1380
|
await session.reload();
|
|
1381
1381
|
const services = this.serviceScopes.get(sessionId);
|
|
1382
1382
|
if (services)
|
|
1383
|
-
this.
|
|
1383
|
+
this.applySessionRecoveryOverrides(sessionId, services, session);
|
|
1384
1384
|
await this.refreshModelConfiguration(sessionId, "force");
|
|
1385
1385
|
pinOperatorChatTools(session, this.sessionModeOf(sessionId));
|
|
1386
1386
|
}
|
|
@@ -1819,8 +1819,7 @@ export class ConsolePiRuntime {
|
|
|
1819
1819
|
if (options?.turnId && this.options.todoRegistry) {
|
|
1820
1820
|
this.options.todoRegistry.startTurn(sessionId, options.turnId);
|
|
1821
1821
|
}
|
|
1822
|
-
if (this.options.goalRegistry
|
|
1823
|
-
shouldInjectGoalContinuation(this.sessionModeOf(sessionId))) {
|
|
1822
|
+
if (this.options.goalRegistry) {
|
|
1824
1823
|
this.options.goalRegistry.startTurn(sessionId, text);
|
|
1825
1824
|
}
|
|
1826
1825
|
// AC-FIX-002: if Stop already fired before readiness, never start model work.
|
|
@@ -1327,7 +1327,7 @@ export async function handleChatGoal(req, res, deps, sessionId) {
|
|
|
1327
1327
|
});
|
|
1328
1328
|
return;
|
|
1329
1329
|
}
|
|
1330
|
-
if (!(await
|
|
1330
|
+
if (!(await requireChatSession(res, deps, sessionId)))
|
|
1331
1331
|
return;
|
|
1332
1332
|
if (req.method === "GET") {
|
|
1333
1333
|
sendJson(res, 200, { ok: true, goal: registry.get(sessionId) });
|
|
@@ -2256,10 +2256,6 @@ export async function driveGoalRound(deps, sessionId) {
|
|
|
2256
2256
|
registry.disarm(sessionId);
|
|
2257
2257
|
return "idle";
|
|
2258
2258
|
}
|
|
2259
|
-
if (!isWorkflowSessionMode(readStoredSessionMode(record.sessionMode))) {
|
|
2260
|
-
registry.disarm(sessionId);
|
|
2261
|
-
return "idle";
|
|
2262
|
-
}
|
|
2263
2259
|
const runtimeFacts = deps.runtime.getSessionBusyFacts(sessionId);
|
|
2264
2260
|
const operationStore = deps.runtime.actionContext?.operations;
|
|
2265
2261
|
const linkedOperationIds = linkedOperationIdsForGoal(deps.events.snapshot(sessionId));
|
|
@@ -27,21 +27,22 @@ export const SESSION_MODE_COPY = {
|
|
|
27
27
|
description: "保留压缩与 Explore,直接协作编码",
|
|
28
28
|
createLabel: "新建 Pi 会话",
|
|
29
29
|
bannerTitle: "Pi",
|
|
30
|
-
bannerBody: "保留 Console
|
|
30
|
+
bannerBody: "保留 Console 压缩、Explore 与持续目标,直接协作编码。不注入工作流业务指令与业务工具。",
|
|
31
31
|
landingTitle: "开始一段 Pi 协作",
|
|
32
|
-
landingBody: "Pi 模式保留压缩、Explore
|
|
32
|
+
landingBody: "Pi 模式保留压缩、Explore、持续目标、认证与 SDD 接入,取消工作流业务注入。适合有人监督的直接编码与调试。",
|
|
33
33
|
emptyTitle: "直接协作编码",
|
|
34
34
|
emptyBody: "会话已就绪。输入框上方可切换工作区或模式。使用 Pi 工具读写仓库;Explore 负责只读深挖。本会话不加载任务 / DAG 工作流工具。",
|
|
35
35
|
},
|
|
36
36
|
};
|
|
37
37
|
/** Slash actions that only exist in workflow sessions. Browser-safe: pure
|
|
38
|
-
* string constants, no runtime/tool policy imports.
|
|
38
|
+
* string constants, no runtime/tool policy imports. `/goal` was moved to
|
|
39
|
+
* shared on 2026-09-10 (exec-plan 2026-09-10-console-chat-goal-for-pi-mode);
|
|
40
|
+
* interview/panel navigation remain workflow-only. */
|
|
39
41
|
export const WORKFLOW_EXCLUSIVE_SLASH_ACTIONS = Object.freeze([
|
|
40
42
|
"focus-panel:task",
|
|
41
43
|
"focus-panel:contract",
|
|
42
44
|
"focus-panel:dag",
|
|
43
45
|
"focus:interview",
|
|
44
|
-
"goal",
|
|
45
46
|
]);
|
|
46
47
|
export function isWorkflowExclusiveSlashAction(action) {
|
|
47
48
|
return WORKFLOW_EXCLUSIVE_SLASH_ACTIONS.includes(action);
|
|
@@ -74,7 +74,8 @@ export const PI_CHAT_SYSTEM_PROMPT_BASE = [
|
|
|
74
74
|
"Use read/write/edit/bash/grep/find/ls to inspect and change the workspace. apply_patch, full-tools, shell and coding-chat are denied.",
|
|
75
75
|
"Agent (Explore) is a built-in read-only subagent for path-uncertain codebase search. Do not use it for a known single-file read. Prefer safe-read/safe-grep for secret-safe probes.",
|
|
76
76
|
"ask_user_question pauses for a real user answer. todo_write tracks the current work and is restored after compression; it is not a workflow auto-continue signal. The persistent terminal tool is available.",
|
|
77
|
-
"
|
|
77
|
+
"Goal tools (get_goal / create_goal / update_goal) track the session's durable cross-turn objective. Create a Goal only when the user explicitly asks to start one; iterate in bounded rounds until complete or blocked.",
|
|
78
|
+
"This session keeps Console compression (L0/L1/L2, sift, strict checkpoint) and existing Aimax / SDD access. Do not create tasks, run DAGs, or start requirement interviews from this session.",
|
|
78
79
|
"Obey repository AGENTS.md, skills and extensions when they apply. Choosing Pi mode is not extra write authorization and does not bypass Console access control or output scrubbing.",
|
|
79
80
|
].join("\n");
|
|
80
81
|
export const CHAT_SAFE_EXPLORE_TOOL_IDS = Object.freeze([
|
|
@@ -87,7 +88,11 @@ export const PI_CHAT_GENERIC_HELPER_TOOLS = Object.freeze([
|
|
|
87
88
|
"ask_user_question",
|
|
88
89
|
"todo_write",
|
|
89
90
|
]);
|
|
90
|
-
|
|
91
|
+
/** Durable cross-turn Goal tools. Shared by both session modes since
|
|
92
|
+
* 2026-09-10 (exec-plan 2026-09-10-console-chat-goal-for-pi-mode); they are
|
|
93
|
+
* NOT workflow business tools and are registered whenever a GoalRegistry
|
|
94
|
+
* is present. */
|
|
95
|
+
export const GOAL_TOOL_IDS = Object.freeze([
|
|
91
96
|
"get_goal",
|
|
92
97
|
"create_goal",
|
|
93
98
|
"update_goal",
|
|
@@ -102,7 +107,6 @@ const CHAT_EXTENSION_DENIED_TOOL_IDS = new Set([
|
|
|
102
107
|
"shell",
|
|
103
108
|
].map((name) => name.toLowerCase()));
|
|
104
109
|
const WORKFLOW_OPERATOR_TOOL_IDS = new Set(OPERATOR_CHAT_ALLOWED_TOOLS.map((name) => name.toLowerCase()));
|
|
105
|
-
const PI_GOAL_TOOL_IDS = new Set(PI_CHAT_WORKFLOW_TOOL_IDS.map((name) => name.toLowerCase()));
|
|
106
110
|
export function workflowActiveToolBaseline() {
|
|
107
111
|
return [
|
|
108
112
|
...OPERATOR_CHAT_ALLOWED_TOOLS,
|
|
@@ -117,6 +121,7 @@ export function piActiveToolBaseline() {
|
|
|
117
121
|
...CHAT_SAFE_EXPLORE_TOOL_IDS,
|
|
118
122
|
...OPERATOR_CHAT_BUILTIN_CUSTOM_TOOLS,
|
|
119
123
|
...PI_CHAT_GENERIC_HELPER_TOOLS,
|
|
124
|
+
...GOAL_TOOL_IDS,
|
|
120
125
|
];
|
|
121
126
|
}
|
|
122
127
|
export function chatActiveToolBaseline(sessionMode) {
|
|
@@ -126,7 +131,8 @@ export function chatActiveToolBaseline(sessionMode) {
|
|
|
126
131
|
}
|
|
127
132
|
/**
|
|
128
133
|
* Gate 2 pin: mode baseline plus user/project extension tools. Pi mode must
|
|
129
|
-
* not re-add operator actions
|
|
134
|
+
* not re-add operator actions via the extras pass (Goal tools are shared and
|
|
135
|
+
* part of the Pi baseline since 2026-09-10).
|
|
130
136
|
*/
|
|
131
137
|
export function computeChatActiveToolNames(session, sessionMode) {
|
|
132
138
|
const baseline = chatActiveToolBaseline(sessionMode);
|
|
@@ -145,8 +151,6 @@ export function computeChatActiveToolNames(session, sessionMode) {
|
|
|
145
151
|
continue;
|
|
146
152
|
if (sessionMode === "pi" && WORKFLOW_OPERATOR_TOOL_IDS.has(lower))
|
|
147
153
|
continue;
|
|
148
|
-
if (sessionMode === "pi" && PI_GOAL_TOOL_IDS.has(lower))
|
|
149
|
-
continue;
|
|
150
154
|
extras.push(name);
|
|
151
155
|
}
|
|
152
156
|
return extras.length > 0 ? [...baseline, ...extras] : baseline;
|
|
@@ -172,7 +176,7 @@ export function authorizeChatSessionTool(toolId, sessionMode) {
|
|
|
172
176
|
};
|
|
173
177
|
}
|
|
174
178
|
const lower = id.toLowerCase();
|
|
175
|
-
if (WORKFLOW_OPERATOR_TOOL_IDS.has(lower)
|
|
179
|
+
if (WORKFLOW_OPERATOR_TOOL_IDS.has(lower)) {
|
|
176
180
|
return {
|
|
177
181
|
ok: false,
|
|
178
182
|
code: "tool-denied",
|
|
@@ -207,9 +211,6 @@ export { WORKFLOW_EXCLUSIVE_SLASH_ACTIONS, isWorkflowExclusiveSlashAction, } fro
|
|
|
207
211
|
export function shouldLoadWorkflowBusinessTools(sessionMode) {
|
|
208
212
|
return sessionMode === "workflow";
|
|
209
213
|
}
|
|
210
|
-
export function shouldInjectGoalContinuation(sessionMode) {
|
|
211
|
-
return sessionMode === "workflow";
|
|
212
|
-
}
|
|
213
214
|
export function shouldAcceptOperatorSnapshot(sessionMode) {
|
|
214
215
|
return sessionMode === "workflow";
|
|
215
216
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-Bj4vc-Dp.js";import{p as f}from"./chunk-JWPE2WC7-Dr-wFY60.js";import{_ as n,l as o}from"./mermaid.core-i7dDGqov.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-zo_Jy2sf.js";import"./index-CWarwRqc.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-i7dDGqov.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|