@imricci/zaker 0.1.2 → 0.1.3
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/dist/commands/app-server.d.ts +67 -0
- package/dist/commands/app-server.js +601 -0
- package/dist/commands/app-server.js.map +1 -0
- package/dist/commands/audit.js +2 -1
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/build.d.ts +3 -0
- package/dist/commands/build.js +22 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/confirm.d.ts +0 -2
- package/dist/commands/confirm.js +2 -16
- package/dist/commands/confirm.js.map +1 -1
- package/dist/commands/dialog-handlers/auth.d.ts +3 -0
- package/dist/commands/dialog-handlers/auth.js +174 -0
- package/dist/commands/dialog-handlers/auth.js.map +1 -0
- package/dist/commands/dialog-handlers/basic.d.ts +2 -2
- package/dist/commands/dialog-handlers/basic.js +8 -9
- package/dist/commands/dialog-handlers/basic.js.map +1 -1
- package/dist/commands/dialog-handlers/bootstrap.js +2 -2
- package/dist/commands/dialog-handlers/bootstrap.js.map +1 -1
- package/dist/commands/dialog-handlers/index.d.ts +1 -1
- package/dist/commands/dialog-handlers/message.js +94 -3
- package/dist/commands/dialog-handlers/message.js.map +1 -1
- package/dist/commands/dialog-handlers/model.d.ts +2 -0
- package/dist/commands/dialog-handlers/model.js +168 -0
- package/dist/commands/dialog-handlers/model.js.map +1 -0
- package/dist/commands/dialog-handlers/new.d.ts +2 -0
- package/dist/commands/dialog-handlers/new.js +53 -0
- package/dist/commands/dialog-handlers/new.js.map +1 -0
- package/dist/commands/dialog-handlers/router.js +39 -3
- package/dist/commands/dialog-handlers/router.js.map +1 -1
- package/dist/commands/dialog-handlers/run.js +44 -8
- package/dist/commands/dialog-handlers/run.js.map +1 -1
- package/dist/commands/dialog-handlers/types.d.ts +16 -17
- package/dist/commands/dialog.d.ts +92 -0
- package/dist/commands/dialog.js +1542 -422
- package/dist/commands/dialog.js.map +1 -1
- package/dist/commands/init.d.ts +3 -1
- package/dist/commands/init.js +6 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/plan.js +10 -6
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/run.js +8 -10
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/status.js +6 -12
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tui-launcher.d.ts +1 -0
- package/dist/commands/tui-launcher.js +8 -0
- package/dist/commands/tui-launcher.js.map +1 -0
- package/dist/core/alignment-reply.d.ts +1 -0
- package/dist/core/alignment-reply.js +44 -0
- package/dist/core/alignment-reply.js.map +1 -0
- package/dist/core/checkpoint.js +3 -1
- package/dist/core/checkpoint.js.map +1 -1
- package/dist/core/planner.d.ts +16 -16
- package/dist/core/planner.js +3 -1
- package/dist/core/planner.js.map +1 -1
- package/dist/core/planning-prep.d.ts +12 -0
- package/dist/core/planning-prep.js +26 -0
- package/dist/core/planning-prep.js.map +1 -0
- package/dist/core/preflight.js +1 -2
- package/dist/core/preflight.js.map +1 -1
- package/dist/core/provider-onboarding.js +6 -11
- package/dist/core/provider-onboarding.js.map +1 -1
- package/dist/core/readonly-checkpoint.d.ts +2 -0
- package/dist/core/readonly-checkpoint.js +35 -0
- package/dist/core/readonly-checkpoint.js.map +1 -0
- package/dist/core/run-loop.js +3 -1
- package/dist/core/run-loop.js.map +1 -1
- package/dist/core/types.d.ts +20 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/infra/artifact-schema.d.ts +25 -0
- package/dist/infra/artifact-schema.js +353 -0
- package/dist/infra/artifact-schema.js.map +1 -0
- package/dist/infra/config.d.ts +14 -1
- package/dist/infra/config.js +542 -22
- package/dist/infra/config.js.map +1 -1
- package/dist/infra/dependency-report.d.ts +5 -0
- package/dist/infra/dependency-report.js +22 -0
- package/dist/infra/dependency-report.js.map +1 -0
- package/dist/infra/dialog-session.d.ts +29 -0
- package/dist/infra/dialog-session.js +244 -0
- package/dist/infra/dialog-session.js.map +1 -0
- package/dist/infra/intent.d.ts +0 -1
- package/dist/infra/intent.js +62 -25
- package/dist/infra/intent.js.map +1 -1
- package/dist/infra/model-accounts.d.ts +22 -0
- package/dist/infra/model-accounts.js +172 -0
- package/dist/infra/model-accounts.js.map +1 -0
- package/dist/infra/model-catalog.d.ts +4 -1
- package/dist/infra/model-catalog.js +102 -27
- package/dist/infra/model-catalog.js.map +1 -1
- package/dist/infra/openai-codex-oauth.d.ts +18 -0
- package/dist/infra/openai-codex-oauth.js +267 -0
- package/dist/infra/openai-codex-oauth.js.map +1 -0
- package/dist/infra/provider-registry.d.ts +36 -0
- package/dist/infra/provider-registry.js +403 -0
- package/dist/infra/provider-registry.js.map +1 -0
- package/dist/infra/session-status.d.ts +6 -0
- package/dist/infra/session-status.js +34 -0
- package/dist/infra/session-status.js.map +1 -0
- package/dist/infra/tui-utils.d.ts +6 -0
- package/dist/infra/tui-utils.js +163 -0
- package/dist/infra/tui-utils.js.map +1 -0
- package/dist/infra/tui-view.d.ts +44 -0
- package/dist/infra/tui-view.js +314 -0
- package/dist/infra/tui-view.js.map +1 -0
- package/package.json +4 -1
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleModelCommand = handleModelCommand;
|
|
4
|
+
const model_catalog_1 = require("../../infra/model-catalog");
|
|
5
|
+
const model_accounts_1 = require("../../infra/model-accounts");
|
|
6
|
+
const config_1 = require("../../infra/config");
|
|
7
|
+
const provider_registry_1 = require("../../infra/provider-registry");
|
|
8
|
+
function modelUsage() {
|
|
9
|
+
return `Usage: /model | /model <model> | /model <provider> <model> | /model planner <model> | /model auditor <model> | /model execution <model> | /model provider <${(0, provider_registry_1.getModelProviderIds)().join("|")}> | /model execution-provider <local|cheap_cloud|ollama> | /model ollama-host <url> | /model selection-policy <strict|provider_default|first_available> | /model fallback-model <model|auto>`;
|
|
10
|
+
}
|
|
11
|
+
function applyProviderAccountAsActive(config, provider) {
|
|
12
|
+
const account = config.model.accounts?.[provider];
|
|
13
|
+
config.model.provider = provider;
|
|
14
|
+
if (!account) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const authMode = account.auth_mode || "api_key";
|
|
18
|
+
config.model.auth_mode = authMode;
|
|
19
|
+
config.model.api_key_env =
|
|
20
|
+
account.api_key_env || (0, provider_registry_1.resolveProviderApiKeyEnv)(provider, authMode);
|
|
21
|
+
config.model.api_key = account.api_key || "";
|
|
22
|
+
if (typeof account.default_model === "string") {
|
|
23
|
+
config.model.fallback_model = account.default_model;
|
|
24
|
+
}
|
|
25
|
+
if (typeof account.endpoint === "string") {
|
|
26
|
+
config.model.endpoint = account.endpoint;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function handleModelCommand(context) {
|
|
30
|
+
const { cwd, rest, services, logger } = context;
|
|
31
|
+
const config = await (0, config_1.readConfig)(cwd);
|
|
32
|
+
const args = rest.split(/\s+/).filter(Boolean);
|
|
33
|
+
if (args.length === 0) {
|
|
34
|
+
let catalogDetail = "catalog unavailable";
|
|
35
|
+
try {
|
|
36
|
+
const catalog = await (0, model_catalog_1.fetchModelCatalog)(config);
|
|
37
|
+
catalogDetail = `catalog planner=${catalog.role_models.planner.length} auditor=${catalog.role_models.auditor.length} execution=${catalog.role_models.execution.length}`;
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
41
|
+
catalogDetail = `catalog unavailable (${message})`;
|
|
42
|
+
}
|
|
43
|
+
const menu = (0, model_accounts_1.buildModelMenuSnapshot)(config);
|
|
44
|
+
const loggedProviders = menu.providers.length > 0 ? menu.providers.join(",") : "-";
|
|
45
|
+
const message = `model status: provider=${config.model.provider} execution_provider=${config.execution.provider} policy=${config.model.selection_policy} fallback=${config.model.fallback_model || "-"} planner=${config.model.planner_model} auditor=${config.model.auditor_model} execution=${config.execution.model}; logged_providers=${loggedProviders}; ${catalogDetail}`;
|
|
46
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
47
|
+
logger.info(message);
|
|
48
|
+
return { action: "continue", notice: "model status shown" };
|
|
49
|
+
}
|
|
50
|
+
const menu = (0, model_accounts_1.buildModelMenuSnapshot)(config);
|
|
51
|
+
const directProvider = args[0].toLowerCase();
|
|
52
|
+
if (menu.providers.includes(directProvider)) {
|
|
53
|
+
const provider = directProvider;
|
|
54
|
+
const selectedModel = args.slice(1).join(" ").trim();
|
|
55
|
+
const models = (0, model_accounts_1.providerModelsForMenu)(config, provider);
|
|
56
|
+
if (!selectedModel) {
|
|
57
|
+
const message = `model options(${provider}): ${models.join(", ") || "-"}`;
|
|
58
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
59
|
+
logger.info(message);
|
|
60
|
+
return { action: "continue", notice: `model options shown (${provider})` };
|
|
61
|
+
}
|
|
62
|
+
applyProviderAccountAsActive(config, provider);
|
|
63
|
+
config.model.planner_model = selectedModel;
|
|
64
|
+
config.model.auditor_model = selectedModel;
|
|
65
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
66
|
+
const message = `model updated: provider=${provider} planner=${selectedModel} auditor=${selectedModel}`;
|
|
67
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
68
|
+
logger.success(message);
|
|
69
|
+
return { action: "continue", notice: message };
|
|
70
|
+
}
|
|
71
|
+
if (menu.providers.length === 1) {
|
|
72
|
+
const provider = menu.providers[0];
|
|
73
|
+
const selectedModel = args.join(" ").trim();
|
|
74
|
+
if (selectedModel && !["planner", "auditor", "execution", "provider", "execution-provider", "ollama-host"].includes(args[0].toLowerCase())) {
|
|
75
|
+
applyProviderAccountAsActive(config, provider);
|
|
76
|
+
config.model.planner_model = selectedModel;
|
|
77
|
+
config.model.auditor_model = selectedModel;
|
|
78
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
79
|
+
const message = `model updated: provider=${provider} planner=${selectedModel} auditor=${selectedModel}`;
|
|
80
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
81
|
+
logger.success(message);
|
|
82
|
+
return { action: "continue", notice: message };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const field = args[0].toLowerCase();
|
|
86
|
+
if (field === "planner" || field === "auditor" || field === "execution") {
|
|
87
|
+
const nextModel = args.slice(1).join(" ").trim();
|
|
88
|
+
if (!nextModel) {
|
|
89
|
+
throw new Error(modelUsage());
|
|
90
|
+
}
|
|
91
|
+
if (field === "planner") {
|
|
92
|
+
config.model.planner_model = nextModel;
|
|
93
|
+
}
|
|
94
|
+
else if (field === "auditor") {
|
|
95
|
+
config.model.auditor_model = nextModel;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
config.execution.model = nextModel;
|
|
99
|
+
}
|
|
100
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
101
|
+
const message = `model updated: ${field}=${nextModel}`;
|
|
102
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
103
|
+
logger.success(message);
|
|
104
|
+
return { action: "continue", notice: message };
|
|
105
|
+
}
|
|
106
|
+
if (field === "provider") {
|
|
107
|
+
const provider = args[1]?.trim();
|
|
108
|
+
if (!provider) {
|
|
109
|
+
throw new Error(modelUsage());
|
|
110
|
+
}
|
|
111
|
+
config.model.provider = (0, provider_registry_1.toCanonicalModelProviderId)(provider);
|
|
112
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
113
|
+
const message = `model provider updated: ${config.model.provider}`;
|
|
114
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
115
|
+
logger.success(message);
|
|
116
|
+
return { action: "continue", notice: message };
|
|
117
|
+
}
|
|
118
|
+
if (field === "execution-provider") {
|
|
119
|
+
const provider = args[1]?.trim();
|
|
120
|
+
if (provider !== "local" && provider !== "cheap_cloud" && provider !== "ollama") {
|
|
121
|
+
throw new Error(modelUsage());
|
|
122
|
+
}
|
|
123
|
+
config.execution.provider = provider;
|
|
124
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
125
|
+
const message = `execution provider updated: ${provider}`;
|
|
126
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
127
|
+
logger.success(message);
|
|
128
|
+
return { action: "continue", notice: message };
|
|
129
|
+
}
|
|
130
|
+
if (field === "ollama-host") {
|
|
131
|
+
const host = args[1]?.trim();
|
|
132
|
+
if (!host) {
|
|
133
|
+
throw new Error(modelUsage());
|
|
134
|
+
}
|
|
135
|
+
config.execution.ollama_host = host;
|
|
136
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
137
|
+
const message = `ollama host updated: ${host}`;
|
|
138
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
139
|
+
logger.success(message);
|
|
140
|
+
return { action: "continue", notice: message };
|
|
141
|
+
}
|
|
142
|
+
if (field === "selection-policy") {
|
|
143
|
+
const nextPolicy = args[1]?.trim() || "";
|
|
144
|
+
if (nextPolicy !== "strict" && nextPolicy !== "provider_default" && nextPolicy !== "first_available") {
|
|
145
|
+
throw new Error(modelUsage());
|
|
146
|
+
}
|
|
147
|
+
config.model.selection_policy = nextPolicy;
|
|
148
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
149
|
+
const message = `model selection policy updated: ${nextPolicy}`;
|
|
150
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
151
|
+
logger.success(message);
|
|
152
|
+
return { action: "continue", notice: message };
|
|
153
|
+
}
|
|
154
|
+
if (field === "fallback-model") {
|
|
155
|
+
const nextFallback = args.slice(1).join(" ").trim();
|
|
156
|
+
if (!nextFallback) {
|
|
157
|
+
throw new Error(modelUsage());
|
|
158
|
+
}
|
|
159
|
+
config.model.fallback_model = nextFallback.toLowerCase() === "auto" ? "" : nextFallback;
|
|
160
|
+
await (0, config_1.writeZakerConfig)(config, cwd);
|
|
161
|
+
const message = `model fallback updated: ${config.model.fallback_model || "-"}`;
|
|
162
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
163
|
+
logger.success(message);
|
|
164
|
+
return { action: "continue", notice: message };
|
|
165
|
+
}
|
|
166
|
+
throw new Error(modelUsage());
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/commands/dialog-handlers/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.handleNewCommand = handleNewCommand;
|
|
4
|
+
const MAX_CONVERSATION_ID_LENGTH = 40;
|
|
5
|
+
function buildAutoConversationBase(nowIso) {
|
|
6
|
+
const digits = nowIso.replace(/[^0-9]/g, "");
|
|
7
|
+
const stamp = digits.slice(0, 14) || "new";
|
|
8
|
+
return `session_${stamp}`;
|
|
9
|
+
}
|
|
10
|
+
function allocateUniqueConversationId(base, existing) {
|
|
11
|
+
if (!existing.has(base)) {
|
|
12
|
+
return base;
|
|
13
|
+
}
|
|
14
|
+
let sequence = 2;
|
|
15
|
+
while (true) {
|
|
16
|
+
const suffix = `_${sequence}`;
|
|
17
|
+
const trimmedBase = base.slice(0, Math.max(1, MAX_CONVERSATION_ID_LENGTH - suffix.length));
|
|
18
|
+
const candidate = `${trimmedBase}${suffix}`;
|
|
19
|
+
if (!existing.has(candidate)) {
|
|
20
|
+
return candidate;
|
|
21
|
+
}
|
|
22
|
+
sequence += 1;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async function handleNewCommand(context) {
|
|
26
|
+
const { cwd, rest, options, services, logger } = context;
|
|
27
|
+
const args = rest.split(/\s+/).filter(Boolean);
|
|
28
|
+
if (args.length > 1) {
|
|
29
|
+
throw new Error("Usage: /new [session-id]");
|
|
30
|
+
}
|
|
31
|
+
const existingIds = await services.listConversationIds(options.conversations.index, cwd);
|
|
32
|
+
const existingSet = new Set(existingIds);
|
|
33
|
+
let targetId;
|
|
34
|
+
if (args.length === 1) {
|
|
35
|
+
targetId = services.normalizeConversationId(args[0] || "");
|
|
36
|
+
if (existingSet.has(targetId)) {
|
|
37
|
+
throw new Error(`Conversation "${targetId}" already exists. Use /resume ${targetId}.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
const base = buildAutoConversationBase(services.now());
|
|
42
|
+
targetId = allocateUniqueConversationId(base, existingSet);
|
|
43
|
+
}
|
|
44
|
+
const switched = await services.switchConversation(options.conversations, targetId, cwd);
|
|
45
|
+
services.resetBoard(options.board);
|
|
46
|
+
const switchedSession = await services.readSessionStore(cwd);
|
|
47
|
+
options.board.run_stage = switchedSession?.state ?? "ALIGN";
|
|
48
|
+
const message = `new conversation: ${switched.previous} -> ${switched.current}`;
|
|
49
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
50
|
+
logger.success(message);
|
|
51
|
+
return { action: "continue", notice: message };
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../../src/commands/dialog-handlers/new.ts"],"names":[],"mappings":";;AA2BA,4CAgCC;AAzDD,MAAM,0BAA0B,GAAG,EAAE,CAAC;AAEtC,SAAS,yBAAyB,CAAC,MAAc;IAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC;IAC3C,OAAO,WAAW,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,4BAA4B,CAAC,IAAY,EAAE,QAAqB;IACvE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3F,MAAM,SAAS,GAAG,GAAG,WAAW,GAAG,MAAM,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;IAEzC,IAAI,QAAgB,CAAC;IACrB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,QAAQ,GAAG,QAAQ,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iBAAiB,QAAQ,iCAAiC,QAAQ,GAAG,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,yBAAyB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACvD,QAAQ,GAAG,4BAA4B,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IACzF,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,eAAe,EAAE,KAAK,IAAI,OAAO,CAAC;IAE5D,MAAM,OAAO,GAAG,qBAAqB,QAAQ,CAAC,QAAQ,OAAO,QAAQ,CAAC,OAAO,EAAE,CAAC;IAChF,MAAM,QAAQ,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -3,20 +3,26 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.dispatchDialogInput = dispatchDialogInput;
|
|
4
4
|
const bootstrap_1 = require("./bootstrap");
|
|
5
5
|
const basic_1 = require("./basic");
|
|
6
|
+
const auth_1 = require("./auth");
|
|
6
7
|
const message_1 = require("./message");
|
|
8
|
+
const model_1 = require("./model");
|
|
9
|
+
const new_1 = require("./new");
|
|
7
10
|
const resume_1 = require("./resume");
|
|
8
11
|
const run_1 = require("./run");
|
|
9
12
|
const status_1 = require("./status");
|
|
10
13
|
const activeHandlers = {
|
|
11
14
|
"/exit": basic_1.handleExitCommand,
|
|
12
|
-
"/quit": basic_1.handleExitCommand,
|
|
13
15
|
"/help": basic_1.handleHelpCommand,
|
|
14
16
|
"/init": basic_1.handleInitCommand,
|
|
17
|
+
"/new": new_1.handleNewCommand,
|
|
15
18
|
"/resume": resume_1.handleResumeCommand,
|
|
19
|
+
"/model": model_1.handleModelCommand,
|
|
20
|
+
"/login": auth_1.handleLoginCommand,
|
|
21
|
+
"/logout": auth_1.handleLogoutCommand,
|
|
16
22
|
"/status": status_1.handleStatusCommand,
|
|
17
23
|
"/debug": basic_1.handleDebugCommand,
|
|
18
24
|
"/edit": basic_1.handleEditCommand,
|
|
19
|
-
"/
|
|
25
|
+
"/build": basic_1.handleBuildCommand,
|
|
20
26
|
"/run": run_1.handleRunCommand
|
|
21
27
|
};
|
|
22
28
|
function createCommandContext(params) {
|
|
@@ -45,6 +51,34 @@ async function dispatchDialogInput(params) {
|
|
|
45
51
|
});
|
|
46
52
|
}
|
|
47
53
|
const trimmed = input.trim();
|
|
54
|
+
const session = await services.requireSessionWithDialog(cwd);
|
|
55
|
+
const pendingBuildChoice = session.dialog?.pending_build_choice;
|
|
56
|
+
if ((trimmed === "1" || trimmed === "2") && pendingBuildChoice) {
|
|
57
|
+
await services.appendDialogEntry(cwd, "user", "command", trimmed);
|
|
58
|
+
if (trimmed === "1") {
|
|
59
|
+
const handler = activeHandlers["/build"];
|
|
60
|
+
if (!handler) {
|
|
61
|
+
throw new Error("Build handler is not registered.");
|
|
62
|
+
}
|
|
63
|
+
return await handler(createCommandContext({
|
|
64
|
+
cwd,
|
|
65
|
+
input: "/build",
|
|
66
|
+
command: "/build",
|
|
67
|
+
rest: "",
|
|
68
|
+
options,
|
|
69
|
+
services,
|
|
70
|
+
logger
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
await services.setPendingBuildChoice(cwd, null);
|
|
74
|
+
const message = "继续调整:直接输入补充需求,我会更新 intent.card。";
|
|
75
|
+
await services.appendDialogEntry(cwd, "system", "status", message);
|
|
76
|
+
logger.info(message);
|
|
77
|
+
return { action: "continue", notice: message };
|
|
78
|
+
}
|
|
79
|
+
if (trimmed !== "1" && trimmed !== "2" && pendingBuildChoice) {
|
|
80
|
+
await services.setPendingBuildChoice(cwd, null);
|
|
81
|
+
}
|
|
48
82
|
if (!trimmed.startsWith("/")) {
|
|
49
83
|
return await (0, message_1.handleMessageInput)(createCommandContext({
|
|
50
84
|
cwd,
|
|
@@ -58,7 +92,9 @@ async function dispatchDialogInput(params) {
|
|
|
58
92
|
}
|
|
59
93
|
const [command, ...args] = trimmed.split(" ");
|
|
60
94
|
const rest = args.join(" ").trim();
|
|
61
|
-
|
|
95
|
+
if (command !== "/exit" && command !== "/login") {
|
|
96
|
+
await services.appendDialogEntry(cwd, "user", "command", trimmed);
|
|
97
|
+
}
|
|
62
98
|
const handler = activeHandlers[command];
|
|
63
99
|
if (!handler) {
|
|
64
100
|
throw new Error(`Unknown command: ${command}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/commands/dialog-handlers/router.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/commands/dialog-handlers/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,41 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.handleRunCommand = handleRunCommand;
|
|
4
|
+
function formatRunStageHistoryEntry(event) {
|
|
5
|
+
if (event.stage === "execute" && event.status === "completed") {
|
|
6
|
+
const changedFiles = Number(event.data?.changed_files ?? 0);
|
|
7
|
+
const appliedPatches = Number(event.data?.applied_patches ?? 0);
|
|
8
|
+
return `execute completed: changed_files=${changedFiles} applied_patches=${appliedPatches}`;
|
|
9
|
+
}
|
|
10
|
+
if (event.stage === "verify" && event.status === "completed") {
|
|
11
|
+
const allPassed = Boolean(event.data?.all_passed);
|
|
12
|
+
return `verify completed: ${allPassed ? "PASS" : "FAIL"}`;
|
|
13
|
+
}
|
|
14
|
+
if (event.stage === "c3fi" && event.status === "completed") {
|
|
15
|
+
const status = String(event.data?.status ?? "-");
|
|
16
|
+
const message = String(event.data?.message ?? "").trim();
|
|
17
|
+
return message ? `c3fi completed: status=${status} (${message})` : `c3fi completed: status=${status}`;
|
|
18
|
+
}
|
|
19
|
+
if (event.stage === "audit" && event.status === "completed") {
|
|
20
|
+
const verdict = String(event.data?.verdict ?? "-");
|
|
21
|
+
const reasonCode = String(event.data?.reason_code ?? "-");
|
|
22
|
+
return `audit completed: verdict=${verdict} reason=${reasonCode}`;
|
|
23
|
+
}
|
|
24
|
+
if (event.stage === "complete" && event.status === "completed") {
|
|
25
|
+
const verdict = String(event.data?.verdict ?? "-");
|
|
26
|
+
return `pipeline completed: verdict=${verdict}`;
|
|
27
|
+
}
|
|
28
|
+
if (event.stage === "error" && event.status === "failed") {
|
|
29
|
+
return `pipeline failed: ${event.message}`;
|
|
30
|
+
}
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
4
33
|
async function handleRunCommand(context) {
|
|
5
34
|
const { cwd, options, services, logger } = context;
|
|
6
35
|
const roundStart = services.now();
|
|
7
36
|
const session = await services.requireSessionWithDialog(cwd);
|
|
8
37
|
if (session.state !== "READY") {
|
|
9
|
-
throw new Error(`Run blocked: session state is ${session.state}. Use \`/
|
|
38
|
+
throw new Error(`Run blocked: session state is ${session.state}. Use \`/build\` first.`);
|
|
10
39
|
}
|
|
11
40
|
const nextRound = (session.dialog?.rounds.at(-1)?.round ?? 0) + 1;
|
|
12
41
|
options.board.run_status = "RUNNING";
|
|
@@ -20,8 +49,9 @@ async function handleRunCommand(context) {
|
|
|
20
49
|
options.board.budget_plan_calls = 0;
|
|
21
50
|
options.board.budget_audit_calls = 0;
|
|
22
51
|
options.board.budget_challenge_used = 0;
|
|
52
|
+
await services.appendDialogEntry(cwd, "system", "status", `run #${nextRound} started`);
|
|
23
53
|
if (options.interactive && options.redraw) {
|
|
24
|
-
await options.redraw("
|
|
54
|
+
await options.redraw("");
|
|
25
55
|
}
|
|
26
56
|
const appendRound = async (verdict, reasonCode, checkpointId) => {
|
|
27
57
|
await services.mutateDialogSession(cwd, (current) => {
|
|
@@ -69,8 +99,12 @@ async function handleRunCommand(context) {
|
|
|
69
99
|
const message = typeof event.data?.message === "string" ? event.data.message : "";
|
|
70
100
|
options.board.risk_hit = message || options.board.risk_hit;
|
|
71
101
|
}
|
|
102
|
+
const stageHistoryEntry = formatRunStageHistoryEntry(event);
|
|
103
|
+
if (stageHistoryEntry) {
|
|
104
|
+
await services.appendDialogEntry(cwd, "system", "status", `run #${nextRound} ${stageHistoryEntry}`);
|
|
105
|
+
}
|
|
72
106
|
if (options.interactive && options.redraw) {
|
|
73
|
-
await options.redraw(
|
|
107
|
+
await options.redraw("");
|
|
74
108
|
}
|
|
75
109
|
});
|
|
76
110
|
const debug = (await services.requireSessionWithDialog(cwd)).dialog?.debug ?? false;
|
|
@@ -93,9 +127,11 @@ async function handleRunCommand(context) {
|
|
|
93
127
|
services.printVerdictLines(summary.lines, output.interpretation.verdict);
|
|
94
128
|
}
|
|
95
129
|
const reasonCode = output.finalAuditResult.reason_code || "UNKNOWN";
|
|
130
|
+
const budgetSnapshot = `budget(plan=${options.board.budget_plan_calls},audit=${options.board.budget_audit_calls},challenge=${options.board.budget_challenge_used})`;
|
|
131
|
+
const historyEntry = `${summary.historyEntry} | ${budgetSnapshot}`;
|
|
96
132
|
await appendRound(output.interpretation.verdict, reasonCode, output.checkpoint?.checkpoint_id);
|
|
97
|
-
await services.appendDialogEntry(cwd, "system", "result", `round #${nextRound} ${
|
|
98
|
-
return { action: "continue"
|
|
133
|
+
await services.appendDialogEntry(cwd, "system", "result", `round #${nextRound} ${historyEntry}`);
|
|
134
|
+
return { action: "continue" };
|
|
99
135
|
}
|
|
100
136
|
catch (error) {
|
|
101
137
|
const message = error instanceof Error ? error.message : String(error);
|
|
@@ -107,17 +143,17 @@ async function handleRunCommand(context) {
|
|
|
107
143
|
options.board.audit_conclusion = message;
|
|
108
144
|
options.board.retry_allowed = "NO";
|
|
109
145
|
await appendRound("FAIL", reasonCode);
|
|
110
|
-
const historyEntry = `verdict=FAIL | rule=${reasonCode} | tests=${options.board.verification_status} (${options.board.verification_passed}/${options.board.verification_total}) | risk=${options.board.risk_hit} | retry=NO`;
|
|
146
|
+
const historyEntry = `verdict=FAIL | rule=${reasonCode} | tests=${options.board.verification_status} (${options.board.verification_passed}/${options.board.verification_total}) | risk=${options.board.risk_hit} | retry=NO | budget(plan=${options.board.budget_plan_calls},audit=${options.board.budget_audit_calls},challenge=${options.board.budget_challenge_used})`;
|
|
111
147
|
await services.appendDialogEntry(cwd, "system", "result", `round #${nextRound} ${historyEntry}`);
|
|
112
148
|
if (options.interactive && options.redraw) {
|
|
113
|
-
await options.redraw(
|
|
149
|
+
await options.redraw("");
|
|
114
150
|
}
|
|
115
151
|
if (!options.interactive && !options.quiet) {
|
|
116
152
|
logger.error("FAIL");
|
|
117
153
|
logger.error(message);
|
|
118
154
|
}
|
|
119
155
|
if (options.interactive) {
|
|
120
|
-
return { action: "continue"
|
|
156
|
+
return { action: "continue" };
|
|
121
157
|
}
|
|
122
158
|
throw error;
|
|
123
159
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/dialog-handlers/run.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/dialog-handlers/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { IntentCard, SessionStore } from "../../core/types";
|
|
2
|
+
import type { ConversationIndex, ConversationRuntime } from "../../infra/dialog-session";
|
|
2
3
|
import type { PipelineRunOutput, PipelineStageEvent } from "../run";
|
|
4
|
+
export type { ConversationIndex, ConversationRuntime } from "../../infra/dialog-session";
|
|
3
5
|
export interface HandleDialogInputResult {
|
|
4
6
|
action: "continue" | "exit";
|
|
5
7
|
notice?: string;
|
|
@@ -19,27 +21,12 @@ export interface TaskBoardState {
|
|
|
19
21
|
budget_audit_calls: number;
|
|
20
22
|
budget_challenge_used: number;
|
|
21
23
|
}
|
|
22
|
-
export interface ConversationRecord {
|
|
23
|
-
id: string;
|
|
24
|
-
updated_at: string;
|
|
25
|
-
state?: string;
|
|
26
|
-
last_run_verdict?: string;
|
|
27
|
-
current_intent_id?: string;
|
|
28
|
-
}
|
|
29
|
-
export interface ConversationIndex {
|
|
30
|
-
schema_version: string;
|
|
31
|
-
active_id: string;
|
|
32
|
-
updated_at: string;
|
|
33
|
-
sessions: ConversationRecord[];
|
|
34
|
-
}
|
|
35
|
-
export interface ConversationRuntime {
|
|
36
|
-
index: ConversationIndex;
|
|
37
|
-
}
|
|
38
24
|
export interface HandleDialogInputOptions {
|
|
39
25
|
sopOut: string;
|
|
40
26
|
checkpointOut: string;
|
|
41
27
|
interactive: boolean;
|
|
42
28
|
quiet: boolean;
|
|
29
|
+
turnAbortSignal?: AbortSignal;
|
|
43
30
|
board: TaskBoardState;
|
|
44
31
|
conversations: ConversationRuntime;
|
|
45
32
|
redraw?: (nextNotice?: string) => Promise<void>;
|
|
@@ -76,7 +63,19 @@ export interface DialogHandlerServices {
|
|
|
76
63
|
requireSessionWithDialog(cwd: string): Promise<SessionStore>;
|
|
77
64
|
mutateDialogSession(cwd: string, updater: (session: SessionStore) => SessionStore): Promise<SessionStore>;
|
|
78
65
|
appendDialogEntry(cwd: string, role: "user" | "system", kind: "message" | "command" | "status" | "result", content: string): Promise<void>;
|
|
66
|
+
readIntentCard(cwd: string): Promise<IntentCard | null>;
|
|
79
67
|
upsertDraftIntent(cwd: string, content: string, replace?: boolean): Promise<string>;
|
|
68
|
+
generateAssistantReply(cwd: string, userMessage: string, intentUpdate: string, options?: {
|
|
69
|
+
abort_signal?: AbortSignal;
|
|
70
|
+
}): Promise<string>;
|
|
71
|
+
detectBuildIntent(cwd: string, userMessage: string, intentUpdate: string, options?: {
|
|
72
|
+
abort_signal?: AbortSignal;
|
|
73
|
+
}): Promise<{
|
|
74
|
+
ready: boolean;
|
|
75
|
+
confidence: number;
|
|
76
|
+
signal: string;
|
|
77
|
+
}>;
|
|
78
|
+
setPendingBuildChoice(cwd: string, intentId: string | null): Promise<void>;
|
|
80
79
|
buildSessionStatusLines(cwd: string): Promise<string[]>;
|
|
81
80
|
runInit(cwd: string): Promise<void>;
|
|
82
81
|
persistActiveConversation(runtime: ConversationRuntime, cwd: string): Promise<void>;
|
|
@@ -86,7 +85,7 @@ export interface DialogHandlerServices {
|
|
|
86
85
|
current: string;
|
|
87
86
|
}>;
|
|
88
87
|
normalizeConversationId(raw: string): string;
|
|
89
|
-
|
|
88
|
+
buildIntent(cwd: string): Promise<{
|
|
90
89
|
intent: IntentCard;
|
|
91
90
|
binding: {
|
|
92
91
|
intent_sha256: string;
|
|
@@ -1,9 +1,101 @@
|
|
|
1
|
+
import type { Key as ReadlineKey } from "node:readline";
|
|
1
2
|
import { Command } from "commander";
|
|
3
|
+
import { ModelMenuSnapshot } from "../infra/model-accounts";
|
|
4
|
+
import { TwoPaneRenderParams } from "../infra/tui-view";
|
|
5
|
+
import { HandleDialogInputOptions, HandleDialogInputResult, TaskBoardState } from "./dialog-handlers";
|
|
6
|
+
export declare function buildCommandCompletionCandidates(): string[];
|
|
7
|
+
export declare function resolveSlashMenuCandidates(buffer: string, sessionIds?: string[], modelMenu?: ModelMenuSnapshot): string[];
|
|
2
8
|
export interface DialogueSessionOptions {
|
|
3
9
|
script?: string[];
|
|
4
10
|
quiet?: boolean;
|
|
5
11
|
sopOut?: string;
|
|
6
12
|
checkpointOut?: string;
|
|
13
|
+
debug?: boolean;
|
|
7
14
|
}
|
|
15
|
+
export declare function createTaskBoardState(): TaskBoardState;
|
|
16
|
+
export declare function buildTuiFramePreview(params: TwoPaneRenderParams, viewport?: {
|
|
17
|
+
columns?: number;
|
|
18
|
+
rows?: number;
|
|
19
|
+
}): string[];
|
|
20
|
+
interface NormalizedInputChunk {
|
|
21
|
+
text: string;
|
|
22
|
+
hasLineBreak: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function normalizeInteractiveInputChunk(chunk: string): NormalizedInputChunk;
|
|
25
|
+
export declare function parseMouseWheelDeltas(chunk: string): number[];
|
|
26
|
+
export declare function shouldAppendInteractiveTextChunk(chunk: string, key: ReadlineKey, normalizedChunk: NormalizedInputChunk): boolean;
|
|
27
|
+
export declare function shouldSubmitOnUnparsedLineBreak(key: ReadlineKey, normalizedChunk: NormalizedInputChunk): boolean;
|
|
28
|
+
export declare function isPlainSubmitSequence(sequence: string): boolean;
|
|
29
|
+
interface BufferedInputEvent {
|
|
30
|
+
readonly sequence: string;
|
|
31
|
+
readonly parsedKey?: string;
|
|
32
|
+
readonly key: ReadlineKey;
|
|
33
|
+
}
|
|
34
|
+
type BufferedInputListener = (event: BufferedInputEvent) => void;
|
|
35
|
+
declare class DialogInputBuffer {
|
|
36
|
+
private readonly listeners;
|
|
37
|
+
subscribe(listener: BufferedInputListener): () => void;
|
|
38
|
+
clear(): void;
|
|
39
|
+
emitSequence(sequence: string): void;
|
|
40
|
+
}
|
|
41
|
+
export declare function resolveAutocompleteCommandCandidatesForTest(buffer: string, cursorIndex: number, resolveCandidates: (buffer: string) => string[]): string[];
|
|
42
|
+
export declare function renderCommandMenuWithSelectListForTest(items: string[], selectedIndex?: number, width?: number): string[];
|
|
43
|
+
export declare function moveCommandSelectionWithSelectListForTest(items: string[], selectedIndex: number, sequence: string): number;
|
|
44
|
+
interface MenuEnterOutcome {
|
|
45
|
+
buffer: string;
|
|
46
|
+
submit: boolean;
|
|
47
|
+
}
|
|
48
|
+
export interface InteractiveBufferState {
|
|
49
|
+
buffer: string;
|
|
50
|
+
cursorIndex: number;
|
|
51
|
+
}
|
|
52
|
+
export type InteractiveBufferEditAction = {
|
|
53
|
+
type: "move_left";
|
|
54
|
+
} | {
|
|
55
|
+
type: "move_right";
|
|
56
|
+
} | {
|
|
57
|
+
type: "backspace";
|
|
58
|
+
} | {
|
|
59
|
+
type: "delete";
|
|
60
|
+
} | {
|
|
61
|
+
type: "insert";
|
|
62
|
+
text: string;
|
|
63
|
+
};
|
|
64
|
+
export declare function applyInteractiveBufferEdit(state: InteractiveBufferState, action: InteractiveBufferEditAction): InteractiveBufferState;
|
|
65
|
+
export declare function runInteractiveEditorKeySequenceForTest(initialBuffer: string, sequences: string[]): {
|
|
66
|
+
buffer: string;
|
|
67
|
+
cursorIndex: number;
|
|
68
|
+
submissions: string[];
|
|
69
|
+
};
|
|
70
|
+
export declare function shouldTreatCtrlDAsExit(buffer: string, key: ReadlineKey): boolean;
|
|
71
|
+
export declare function resolveMenuEnterOutcome(buffer: string, selected: string | undefined, modelMenu?: ModelMenuSnapshot): MenuEnterOutcome;
|
|
72
|
+
interface InteractiveLoginResolution {
|
|
73
|
+
action: "continue" | "cancel" | "exit";
|
|
74
|
+
line?: string;
|
|
75
|
+
notice?: string;
|
|
76
|
+
}
|
|
77
|
+
export declare function resolveInteractiveLoginCommand(params: {
|
|
78
|
+
line: string;
|
|
79
|
+
cwd: string;
|
|
80
|
+
prompt: (notice: string) => Promise<string>;
|
|
81
|
+
input_source?: DialogInputBuffer;
|
|
82
|
+
oauth_browser?: {
|
|
83
|
+
enabled?: boolean;
|
|
84
|
+
notify?: (notice: string) => Promise<void>;
|
|
85
|
+
run_openai_oauth?: (input: {
|
|
86
|
+
onAuth: (payload: {
|
|
87
|
+
url: string;
|
|
88
|
+
instructions: string;
|
|
89
|
+
}) => Promise<void>;
|
|
90
|
+
onProgress: (message: string) => Promise<void>;
|
|
91
|
+
onPrompt: (notice: string) => Promise<string>;
|
|
92
|
+
abort_signal?: AbortSignal;
|
|
93
|
+
}) => Promise<{
|
|
94
|
+
access_token: string;
|
|
95
|
+
}>;
|
|
96
|
+
};
|
|
97
|
+
}): Promise<InteractiveLoginResolution>;
|
|
98
|
+
export declare function handleDialogInput(line: string, cwd: string, options: HandleDialogInputOptions): Promise<HandleDialogInputResult>;
|
|
8
99
|
export declare function runDialogueSession(cwd?: string, options?: DialogueSessionOptions): Promise<void>;
|
|
9
100
|
export declare function registerDialogCommand(program: Command): void;
|
|
101
|
+
export {};
|