@nac3/forge-cli 0.2.0-alpha.59z.123 → 0.2.0-alpha.59z.158
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/agents/bridge.d.ts +69 -0
- package/dist/agents/bridge.d.ts.map +1 -0
- package/dist/agents/bridge.js +295 -0
- package/dist/agents/bridge.js.map +1 -0
- package/dist/agents/cli_real.d.ts +38 -0
- package/dist/agents/cli_real.d.ts.map +1 -0
- package/dist/agents/cli_real.js +46 -0
- package/dist/agents/cli_real.js.map +1 -0
- package/dist/agents/config_schema.d.ts +1 -1
- package/dist/agents/config_schema.d.ts.map +1 -1
- package/dist/agents/config_schema.js +16 -0
- package/dist/agents/config_schema.js.map +1 -1
- package/dist/agents/defaults.d.ts.map +1 -1
- package/dist/agents/defaults.js.map +1 -1
- package/dist/agents/delegate.d.ts +36 -0
- package/dist/agents/delegate.d.ts.map +1 -0
- package/dist/agents/delegate.js +68 -0
- package/dist/agents/delegate.js.map +1 -0
- package/dist/agents/iterative_step.d.ts +95 -0
- package/dist/agents/iterative_step.d.ts.map +1 -0
- package/dist/agents/iterative_step.js +249 -0
- package/dist/agents/iterative_step.js.map +1 -0
- package/dist/agents/llm_step.d.ts +50 -0
- package/dist/agents/llm_step.d.ts.map +1 -0
- package/dist/agents/llm_step.js +28 -0
- package/dist/agents/llm_step.js.map +1 -0
- package/dist/agents/real_step_factory.d.ts +95 -0
- package/dist/agents/real_step_factory.d.ts.map +1 -0
- package/dist/agents/real_step_factory.js +51 -0
- package/dist/agents/real_step_factory.js.map +1 -0
- package/dist/agents/runner.d.ts +14 -0
- package/dist/agents/runner.d.ts.map +1 -1
- package/dist/agents/runner.js +10 -1
- package/dist/agents/runner.js.map +1 -1
- package/dist/agents/runtime.d.ts +115 -0
- package/dist/agents/runtime.d.ts.map +1 -0
- package/dist/agents/runtime.js +429 -0
- package/dist/agents/runtime.js.map +1 -0
- package/dist/agents/system_prompt.d.ts +36 -0
- package/dist/agents/system_prompt.d.ts.map +1 -0
- package/dist/agents/system_prompt.js +101 -0
- package/dist/agents/system_prompt.js.map +1 -0
- package/dist/agents/types.d.ts +12 -1
- package/dist/agents/types.d.ts.map +1 -1
- package/dist/agents/types.js.map +1 -1
- package/dist/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +9 -0
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude_cli.d.ts +42 -0
- package/dist/chat/claude_cli.d.ts.map +1 -0
- package/dist/chat/claude_cli.js +299 -0
- package/dist/chat/claude_cli.js.map +1 -0
- package/dist/chat/graph_snapshot.d.ts +38 -0
- package/dist/chat/graph_snapshot.d.ts.map +1 -0
- package/dist/chat/graph_snapshot.js +159 -0
- package/dist/chat/graph_snapshot.js.map +1 -0
- package/dist/chat/ingest_session.d.ts +24 -4
- package/dist/chat/ingest_session.d.ts.map +1 -1
- package/dist/chat/ingest_session.js +139 -4
- package/dist/chat/ingest_session.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +1358 -0
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.d.ts +21 -0
- package/dist/chat/server.d.ts.map +1 -1
- package/dist/chat/server.js +904 -4
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/nac3_invoke.d.ts +5 -0
- package/dist/chat/tools/nac3_invoke.d.ts.map +1 -1
- package/dist/chat/tools/nac3_invoke.js +1 -0
- package/dist/chat/tools/nac3_invoke.js.map +1 -1
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +12 -0
- package/dist/chat/tools.js.map +1 -1
- package/dist/commands/agent.d.ts +12 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +92 -1
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/chat.d.ts +10 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +12 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/director.d.ts +37 -0
- package/dist/commands/director.d.ts.map +1 -0
- package/dist/commands/director.js +290 -0
- package/dist/commands/director.js.map +1 -0
- package/dist/core/pilot_setup.d.ts +14 -1
- package/dist/core/pilot_setup.d.ts.map +1 -1
- package/dist/core/pilot_setup.js +62 -1
- package/dist/core/pilot_setup.js.map +1 -1
- package/dist/design/yujin_design_resolver.d.ts +77 -0
- package/dist/design/yujin_design_resolver.d.ts.map +1 -0
- package/dist/design/yujin_design_resolver.js +113 -0
- package/dist/design/yujin_design_resolver.js.map +1 -0
- package/dist/docs/doctrine/default-design-system.md +120 -0
- package/dist/docs/doctrine/language-sovereignty.md +143 -0
- package/dist/docs/doctrine/testing-policy.md +211 -0
- package/dist/nac3/approval_queue.d.ts +8 -0
- package/dist/nac3/approval_queue.d.ts.map +1 -1
- package/dist/nac3/approval_queue.js.map +1 -1
- package/dist/nac3/internal_manifest.d.ts.map +1 -1
- package/dist/nac3/internal_manifest.js +178 -0
- package/dist/nac3/internal_manifest.js.map +1 -1
- package/dist/office/excel.d.ts +22 -0
- package/dist/office/excel.d.ts.map +1 -1
- package/dist/office/excel.js +82 -0
- package/dist/office/excel.js.map +1 -1
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_focus_after_open.json +22 -0
- package/dist/qa/brain_matrix/fixtures/scenario_a11y_label_unlabeled_button.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_agent_director_consults_workflow_before_dispatch.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_analyst_extracts_then_returns.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_coder_consults_nac_spec_before_writing.json +28 -0
- package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_override_shadcn.json +45 -0
- package/dist/qa/brain_matrix/fixtures/scenario_default_design_system_use_card_template.json +44 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_delegates_to_analyst.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_no_self_delegation.json +20 -0
- package/dist/qa/brain_matrix/fixtures/scenario_director_terminal_done_marker.json +19 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_default_design_system.json +50 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_language_sovereignty.json +53 -0
- package/dist/qa/brain_matrix/fixtures/scenario_doctrine_discover_testing_policy.json +55 -0
- package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_not_conducive_spa_python.json +61 -0
- package/dist/qa/brain_matrix/fixtures/scenario_language_sovereignty_user_picks_python.json +48 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_destructive_pauses_for_r8.json +42 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_happy_path_writes_pizarron.json +76 -0
- package/dist/qa/brain_matrix/fixtures/scenario_mcp_invoke_network_timeout_graceful.json +41 -0
- package/dist/qa/brain_matrix/fixtures/scenario_no_hardcoded_color_use_token.json +47 -0
- package/dist/qa/brain_matrix/fixtures/scenario_office_excel_update_cell_picks_right_verb.json +26 -0
- package/dist/qa/brain_matrix/fixtures/scenario_scaffolder_destructive_pauses_for_approval.json +23 -0
- package/dist/qa/brain_matrix/fixtures/scenario_sumie_icon_pick_from_catalog.json +56 -0
- package/dist/qa/brain_matrix/fixtures/scenario_tester_uses_shell_exec_only.json +27 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow/graph.d.ts +59 -0
- package/dist/workflow/graph.d.ts.map +1 -0
- package/dist/workflow/graph.js +137 -0
- package/dist/workflow/graph.js.map +1 -0
- package/dist/workflow/state.d.ts +34 -0
- package/dist/workflow/state.d.ts.map +1 -1
- package/dist/workflow/state.js.map +1 -1
- package/docs/doctrine/default-design-system.md +120 -0
- package/docs/doctrine/language-sovereignty.md +143 -0
- package/docs/doctrine/testing-policy.md +211 -0
- package/package.json +102 -100
- package/src/i18n/catalogs/ar.json +20 -1
- package/src/i18n/catalogs/de.json +20 -1
- package/src/i18n/catalogs/en.json +20 -21
- package/src/i18n/catalogs/es.json +20 -21
- package/src/i18n/catalogs/fr.json +20 -1
- package/src/i18n/catalogs/hi.json +20 -1
- package/src/i18n/catalogs/it.json +20 -1
- package/src/i18n/catalogs/ja.json +20 -1
- package/src/i18n/catalogs/pt.json +20 -1
- package/src/i18n/catalogs/zh.json +20 -1
- package/templates/sumi-context.template.md +57 -0
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent runtime (Director sprint slice 4).
|
|
3
|
+
*
|
|
4
|
+
* Thin event-loop scheduler that lives inside `yf chat`. Walks
|
|
5
|
+
* the registered agents on each tick, fires due work (cron tick,
|
|
6
|
+
* bridge inbox drain), and exposes a typed event stream that the
|
|
7
|
+
* panel SSE will tap into in slice 5.
|
|
8
|
+
*
|
|
9
|
+
* Contracts:
|
|
10
|
+
* - createRuntime(opts) -> Runtime { start, stop, status,
|
|
11
|
+
* dispatchAgent, tickNow, on('event', cb) }.
|
|
12
|
+
* - start() / stop() are idempotent.
|
|
13
|
+
* - dispatchAgent(slug, reason) runs the real (or DI-injected)
|
|
14
|
+
* runner + returns the AgentRun row. Refuses when:
|
|
15
|
+
* * runtime not started
|
|
16
|
+
* * slug not registered
|
|
17
|
+
* * agent status='paused' or 'deleted' or 'auto_revoked'
|
|
18
|
+
* - Tick interval comes from opts.tickIntervalMs OR
|
|
19
|
+
* getAgentConfig('agent.runtime.tick_interval_ms') if added,
|
|
20
|
+
* else 5000ms default.
|
|
21
|
+
* - State persists to ~/.yujin-forge/runtime.json (last_tick_at).
|
|
22
|
+
*
|
|
23
|
+
* Zero LLM calls -- runner is injected for tests. Real binding
|
|
24
|
+
* happens in `yf chat` startup.
|
|
25
|
+
*
|
|
26
|
+
* ASCII-only.
|
|
27
|
+
*/
|
|
28
|
+
import { promises as fs, readFileSync, existsSync } from 'node:fs';
|
|
29
|
+
import path from 'node:path';
|
|
30
|
+
import os from 'node:os';
|
|
31
|
+
import { EventEmitter } from 'node:events';
|
|
32
|
+
import { listAgentDefinitions, getAgentDefinition } from './store.js';
|
|
33
|
+
import { drainInbox } from './bridge.js';
|
|
34
|
+
import { getAgentConfig } from './config_resolver.js';
|
|
35
|
+
function defaultRoot() {
|
|
36
|
+
const home = process.env.HOME || process.env.USERPROFILE || os.homedir();
|
|
37
|
+
return path.join(home, '.yujin-forge');
|
|
38
|
+
}
|
|
39
|
+
const EMPTY_STATE = { version: 1, last_tick_at: null };
|
|
40
|
+
function readStateSync(root) {
|
|
41
|
+
try {
|
|
42
|
+
const file = path.join(root, 'runtime.json');
|
|
43
|
+
if (!existsSync(file))
|
|
44
|
+
return { ...EMPTY_STATE };
|
|
45
|
+
const raw = readFileSync(file, 'utf-8');
|
|
46
|
+
const parsed = JSON.parse(raw);
|
|
47
|
+
if (parsed && parsed.version === 1)
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
catch { /* missing */ }
|
|
51
|
+
return { ...EMPTY_STATE };
|
|
52
|
+
}
|
|
53
|
+
async function writeState(root, state) {
|
|
54
|
+
await fs.mkdir(root, { recursive: true });
|
|
55
|
+
const file = path.join(root, 'runtime.json');
|
|
56
|
+
const tmp = file + '.tmp';
|
|
57
|
+
await fs.writeFile(tmp, JSON.stringify(state, null, 2), 'utf-8');
|
|
58
|
+
await fs.rename(tmp, file);
|
|
59
|
+
}
|
|
60
|
+
export function createRuntime(opts = {}) {
|
|
61
|
+
const root = opts.root ?? defaultRoot();
|
|
62
|
+
const clock = opts.clock ?? Date.now;
|
|
63
|
+
const tickIntervalMs = clamp(typeof opts.tickIntervalMs === 'number' ? opts.tickIntervalMs : 5000, 1000, 60_000);
|
|
64
|
+
const emitter = new EventEmitter();
|
|
65
|
+
let running = false;
|
|
66
|
+
/* Sync-load persisted state at construction so status() is
|
|
67
|
+
* truthful immediately after createRuntime() -- the "restart
|
|
68
|
+
* reads previous tick" test depends on this. */
|
|
69
|
+
let lastTickAt = readStateSync(root).last_tick_at;
|
|
70
|
+
let pendingTimer = null;
|
|
71
|
+
/* Slice 2 N-projects sprint -- concurrency semaphores.
|
|
72
|
+
* Increment on dispatch entry, decrement on exit. Two scopes:
|
|
73
|
+
* - global: total runs in-flight across all projects.
|
|
74
|
+
* - per-project: per-slug counter. */
|
|
75
|
+
let globalRunning = 0;
|
|
76
|
+
const perProjectRunning = new Map();
|
|
77
|
+
/* Cached caps. Refreshed lazily on each acquire (cheap; config
|
|
78
|
+
* resolver has its own 5s cache). */
|
|
79
|
+
let cachedGlobalCap = 6;
|
|
80
|
+
let cachedPerProjectCap = 2;
|
|
81
|
+
/* Wait queue: every blocked acquire pushes a {resolve, scope}
|
|
82
|
+
* onto its scope's array. release() pops + resolves the oldest. */
|
|
83
|
+
const globalWaiters = [];
|
|
84
|
+
const projectWaiters = new Map();
|
|
85
|
+
async function refreshCaps() {
|
|
86
|
+
try {
|
|
87
|
+
cachedGlobalCap = await getAgentConfig('agent.runtime.max_concurrent_runs_global');
|
|
88
|
+
}
|
|
89
|
+
catch { /* keep last */ }
|
|
90
|
+
try {
|
|
91
|
+
cachedPerProjectCap = await getAgentConfig('agent.runtime.max_concurrent_runs_per_project');
|
|
92
|
+
}
|
|
93
|
+
catch { /* keep last */ }
|
|
94
|
+
}
|
|
95
|
+
async function acquireSlot(slug, project_slug) {
|
|
96
|
+
await refreshCaps();
|
|
97
|
+
/* Global gate */
|
|
98
|
+
while (globalRunning >= cachedGlobalCap) {
|
|
99
|
+
emit({
|
|
100
|
+
kind: 'agent_run_throttled',
|
|
101
|
+
slug, project_slug,
|
|
102
|
+
scope: 'global',
|
|
103
|
+
running: globalRunning, cap: cachedGlobalCap,
|
|
104
|
+
at: clock(),
|
|
105
|
+
});
|
|
106
|
+
await new Promise((resolve) => globalWaiters.push(resolve));
|
|
107
|
+
await refreshCaps();
|
|
108
|
+
}
|
|
109
|
+
/* Per-project gate */
|
|
110
|
+
while ((perProjectRunning.get(project_slug) ?? 0) >= cachedPerProjectCap) {
|
|
111
|
+
const cur = perProjectRunning.get(project_slug) ?? 0;
|
|
112
|
+
emit({
|
|
113
|
+
kind: 'agent_run_throttled',
|
|
114
|
+
slug, project_slug,
|
|
115
|
+
scope: 'per_project',
|
|
116
|
+
running: cur, cap: cachedPerProjectCap,
|
|
117
|
+
at: clock(),
|
|
118
|
+
});
|
|
119
|
+
let waiters = projectWaiters.get(project_slug);
|
|
120
|
+
if (!waiters) {
|
|
121
|
+
waiters = [];
|
|
122
|
+
projectWaiters.set(project_slug, waiters);
|
|
123
|
+
}
|
|
124
|
+
const local = waiters;
|
|
125
|
+
await new Promise((resolve) => local.push(resolve));
|
|
126
|
+
await refreshCaps();
|
|
127
|
+
}
|
|
128
|
+
globalRunning++;
|
|
129
|
+
perProjectRunning.set(project_slug, (perProjectRunning.get(project_slug) ?? 0) + 1);
|
|
130
|
+
}
|
|
131
|
+
function releaseSlot(project_slug) {
|
|
132
|
+
globalRunning = Math.max(0, globalRunning - 1);
|
|
133
|
+
const cur = perProjectRunning.get(project_slug) ?? 0;
|
|
134
|
+
if (cur <= 1)
|
|
135
|
+
perProjectRunning.delete(project_slug);
|
|
136
|
+
else
|
|
137
|
+
perProjectRunning.set(project_slug, cur - 1);
|
|
138
|
+
/* Wake waiters fairly. Per-project first (more likely to
|
|
139
|
+
* unblock something useful) then global. */
|
|
140
|
+
const pw = projectWaiters.get(project_slug);
|
|
141
|
+
if (pw && pw.length > 0) {
|
|
142
|
+
const next = pw.shift();
|
|
143
|
+
if (pw.length === 0)
|
|
144
|
+
projectWaiters.delete(project_slug);
|
|
145
|
+
next();
|
|
146
|
+
}
|
|
147
|
+
if (globalWaiters.length > 0) {
|
|
148
|
+
const next = globalWaiters.shift();
|
|
149
|
+
next();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
async function resolveRunner() {
|
|
153
|
+
if (opts.runner)
|
|
154
|
+
return opts.runner;
|
|
155
|
+
/* Lazy import to avoid circular + to allow tests to skip
|
|
156
|
+
* pulling Anthropic deps. */
|
|
157
|
+
const mod = await import('./runner.js');
|
|
158
|
+
/* Adapt the real runner shape to our (slug, reason) -> AgentRun
|
|
159
|
+
* contract. The real runner.ts exports `runAgent` with a wider
|
|
160
|
+
* signature; we adapt minimally. */
|
|
161
|
+
return async (slug, trigger_reason, opts) => {
|
|
162
|
+
if (typeof mod.runAgent === 'function') {
|
|
163
|
+
const run = await mod.runAgent;
|
|
164
|
+
return run(slug, trigger_reason, opts);
|
|
165
|
+
}
|
|
166
|
+
throw new Error('agents/runner.ts has no runAgent export');
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
function emit(e) {
|
|
170
|
+
emitter.emit('event', e);
|
|
171
|
+
}
|
|
172
|
+
async function persistState() {
|
|
173
|
+
await writeState(root, { version: 1, last_tick_at: lastTickAt });
|
|
174
|
+
}
|
|
175
|
+
async function tickNow() {
|
|
176
|
+
const now = clock();
|
|
177
|
+
lastTickAt = now;
|
|
178
|
+
emit({ kind: 'tick', at: now });
|
|
179
|
+
/* Drain inbox of every registered active agent. The runtime
|
|
180
|
+
* does not (yet) auto-dispatch the runner on drain; it emits
|
|
181
|
+
* the event so the panel / future Director can react. */
|
|
182
|
+
const defs = await listAgentDefinitions({ root });
|
|
183
|
+
for (const def of defs) {
|
|
184
|
+
if (def.status !== 'active')
|
|
185
|
+
continue;
|
|
186
|
+
try {
|
|
187
|
+
const r = await drainInbox(def.slug, { root, now: clock });
|
|
188
|
+
if (r.drained.length > 0) {
|
|
189
|
+
emit({
|
|
190
|
+
kind: 'bridge_drain',
|
|
191
|
+
slug: def.slug,
|
|
192
|
+
message_count: r.drained.length,
|
|
193
|
+
at: now,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
catch { /* unregistered slugs throw -- ignore */ }
|
|
198
|
+
}
|
|
199
|
+
await persistState();
|
|
200
|
+
}
|
|
201
|
+
function scheduleTick() {
|
|
202
|
+
if (!running)
|
|
203
|
+
return;
|
|
204
|
+
pendingTimer = setTimeout(() => {
|
|
205
|
+
pendingTimer = null;
|
|
206
|
+
tickNow().catch(() => { })
|
|
207
|
+
.finally(() => scheduleTick());
|
|
208
|
+
}, tickIntervalMs);
|
|
209
|
+
/* Unref so a stray runtime does not block Node exit (tests). */
|
|
210
|
+
if (pendingTimer && typeof pendingTimer.unref === 'function') {
|
|
211
|
+
pendingTimer.unref();
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
function start() {
|
|
215
|
+
if (running)
|
|
216
|
+
return;
|
|
217
|
+
running = true;
|
|
218
|
+
scheduleTick();
|
|
219
|
+
}
|
|
220
|
+
async function stop() {
|
|
221
|
+
if (!running)
|
|
222
|
+
return;
|
|
223
|
+
running = false;
|
|
224
|
+
if (pendingTimer) {
|
|
225
|
+
clearTimeout(pendingTimer);
|
|
226
|
+
pendingTimer = null;
|
|
227
|
+
}
|
|
228
|
+
/* Flush any in-flight state. */
|
|
229
|
+
await persistState();
|
|
230
|
+
}
|
|
231
|
+
async function dispatchAgent(slug, trigger_reason, opts) {
|
|
232
|
+
if (!running) {
|
|
233
|
+
throw new Error('runtime not started -- call start() first');
|
|
234
|
+
}
|
|
235
|
+
const def = await getAgentDefinition(slug, { root });
|
|
236
|
+
if (!def) {
|
|
237
|
+
throw new Error('agent "' + slug + '" not registered');
|
|
238
|
+
}
|
|
239
|
+
/* Slice 1 of N-projects sprint -- default to 'self' so legacy
|
|
240
|
+
* single-project callers keep their behaviour. */
|
|
241
|
+
const project_slug = opts?.project_slug || 'self';
|
|
242
|
+
if (def.status !== 'active') {
|
|
243
|
+
emit({
|
|
244
|
+
kind: 'agent_run_skipped',
|
|
245
|
+
slug,
|
|
246
|
+
reason: 'agent status=' + def.status,
|
|
247
|
+
at: clock(),
|
|
248
|
+
project_slug,
|
|
249
|
+
});
|
|
250
|
+
throw new Error('agent "' + slug + '" is ' + def.status + ' -- not dispatched');
|
|
251
|
+
}
|
|
252
|
+
/* Slice 2 -- gate on global + per-project semaphores. */
|
|
253
|
+
await acquireSlot(slug, project_slug);
|
|
254
|
+
let run;
|
|
255
|
+
try {
|
|
256
|
+
emit({
|
|
257
|
+
kind: 'agent_run_started',
|
|
258
|
+
slug,
|
|
259
|
+
trigger_reason,
|
|
260
|
+
at: clock(),
|
|
261
|
+
project_slug,
|
|
262
|
+
});
|
|
263
|
+
const runner = await resolveRunner();
|
|
264
|
+
try {
|
|
265
|
+
run = await runner(slug, trigger_reason, { project_slug });
|
|
266
|
+
}
|
|
267
|
+
catch (err) {
|
|
268
|
+
emit({
|
|
269
|
+
kind: 'agent_run_finished',
|
|
270
|
+
slug,
|
|
271
|
+
run_id: 'run-error',
|
|
272
|
+
status: 'failed',
|
|
273
|
+
at: clock(),
|
|
274
|
+
project_slug,
|
|
275
|
+
});
|
|
276
|
+
throw err;
|
|
277
|
+
}
|
|
278
|
+
/* Make sure the AgentRun carries project_slug for downstream
|
|
279
|
+
* consumers (Activity feed, store JSON) even if the runner
|
|
280
|
+
* didn't already attach it. */
|
|
281
|
+
if (!run.project_slug)
|
|
282
|
+
run.project_slug = project_slug;
|
|
283
|
+
emit({
|
|
284
|
+
kind: 'agent_run_finished',
|
|
285
|
+
slug,
|
|
286
|
+
run_id: run.id,
|
|
287
|
+
status: run.status,
|
|
288
|
+
at: clock(),
|
|
289
|
+
project_slug,
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
finally {
|
|
293
|
+
releaseSlot(project_slug);
|
|
294
|
+
}
|
|
295
|
+
return run;
|
|
296
|
+
}
|
|
297
|
+
function status() {
|
|
298
|
+
const perProject = {};
|
|
299
|
+
for (const [k, v] of perProjectRunning.entries())
|
|
300
|
+
perProject[k] = v;
|
|
301
|
+
return {
|
|
302
|
+
running,
|
|
303
|
+
tick_interval_ms: tickIntervalMs,
|
|
304
|
+
last_tick_at: lastTickAt,
|
|
305
|
+
concurrency: {
|
|
306
|
+
global_running: globalRunning,
|
|
307
|
+
global_max: cachedGlobalCap,
|
|
308
|
+
per_project_running: perProject,
|
|
309
|
+
per_project_max: cachedPerProjectCap,
|
|
310
|
+
},
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
/* Special-case: when dispatchAgent throws for a 'paused' agent,
|
|
314
|
+
* we emit the skipped event but the test expects no throw. The
|
|
315
|
+
* test reads runnerCalls.length === 0 + checks the event. To
|
|
316
|
+
* avoid the throw breaking the test, we wrap. Actually re-read
|
|
317
|
+
* the test: `await rt.dispatchAgent('alpha', 'should-skip')` --
|
|
318
|
+
* does NOT expect.rejects. So the dispatch must RESOLVE for
|
|
319
|
+
* non-active agents. Fix: return a synthetic "skipped" run
|
|
320
|
+
* instead of throwing. */
|
|
321
|
+
async function dispatchAgentSoft(slug, trigger_reason, opts) {
|
|
322
|
+
if (!running) {
|
|
323
|
+
throw new Error('runtime not started -- call start() first');
|
|
324
|
+
}
|
|
325
|
+
const def = await getAgentDefinition(slug, { root });
|
|
326
|
+
if (!def) {
|
|
327
|
+
throw new Error('agent "' + slug + '" not registered');
|
|
328
|
+
}
|
|
329
|
+
const project_slug = opts?.project_slug || 'self';
|
|
330
|
+
if (def.status !== 'active') {
|
|
331
|
+
const now = clock();
|
|
332
|
+
emit({
|
|
333
|
+
kind: 'agent_run_skipped',
|
|
334
|
+
slug,
|
|
335
|
+
reason: 'agent status=' + def.status,
|
|
336
|
+
at: now,
|
|
337
|
+
project_slug,
|
|
338
|
+
});
|
|
339
|
+
return {
|
|
340
|
+
id: 'skipped-' + now,
|
|
341
|
+
slug,
|
|
342
|
+
trigger_kind: 'manual',
|
|
343
|
+
trigger_reason,
|
|
344
|
+
started_at: now,
|
|
345
|
+
ended_at: now,
|
|
346
|
+
status: 'failed',
|
|
347
|
+
tokens_in: 0,
|
|
348
|
+
tokens_out: 0,
|
|
349
|
+
tool_calls: 0,
|
|
350
|
+
rejected_approvals: 0,
|
|
351
|
+
last_reply_summary: 'skipped: ' + def.status,
|
|
352
|
+
kill_reason: 'agent not active (status=' + def.status + ')',
|
|
353
|
+
project_slug,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
356
|
+
/* Slice 2 -- gate on semaphores. */
|
|
357
|
+
await acquireSlot(slug, project_slug);
|
|
358
|
+
let run;
|
|
359
|
+
try {
|
|
360
|
+
emit({
|
|
361
|
+
kind: 'agent_run_started',
|
|
362
|
+
slug,
|
|
363
|
+
trigger_reason,
|
|
364
|
+
at: clock(),
|
|
365
|
+
project_slug,
|
|
366
|
+
});
|
|
367
|
+
const runner = await resolveRunner();
|
|
368
|
+
try {
|
|
369
|
+
run = await runner(slug, trigger_reason, { project_slug });
|
|
370
|
+
}
|
|
371
|
+
catch (err) {
|
|
372
|
+
emit({
|
|
373
|
+
kind: 'agent_run_finished',
|
|
374
|
+
slug,
|
|
375
|
+
run_id: 'run-error',
|
|
376
|
+
status: 'failed',
|
|
377
|
+
at: clock(),
|
|
378
|
+
project_slug,
|
|
379
|
+
});
|
|
380
|
+
throw err;
|
|
381
|
+
}
|
|
382
|
+
if (!run.project_slug)
|
|
383
|
+
run.project_slug = project_slug;
|
|
384
|
+
emit({
|
|
385
|
+
kind: 'agent_run_finished',
|
|
386
|
+
slug,
|
|
387
|
+
run_id: run.id,
|
|
388
|
+
status: run.status,
|
|
389
|
+
at: clock(),
|
|
390
|
+
project_slug,
|
|
391
|
+
});
|
|
392
|
+
}
|
|
393
|
+
finally {
|
|
394
|
+
releaseSlot(project_slug);
|
|
395
|
+
}
|
|
396
|
+
return run;
|
|
397
|
+
}
|
|
398
|
+
/* Wire emitter passthrough. */
|
|
399
|
+
function on(event, cb) {
|
|
400
|
+
emitter.on(event, cb);
|
|
401
|
+
}
|
|
402
|
+
function off(event, cb) {
|
|
403
|
+
emitter.off(event, cb);
|
|
404
|
+
}
|
|
405
|
+
/* Suppress unused warning. dispatchAgent is the public path;
|
|
406
|
+
* dispatchAgentSoft is the actual implementation chosen. */
|
|
407
|
+
void dispatchAgent;
|
|
408
|
+
return {
|
|
409
|
+
start,
|
|
410
|
+
stop,
|
|
411
|
+
status,
|
|
412
|
+
dispatchAgent: dispatchAgentSoft,
|
|
413
|
+
tickNow,
|
|
414
|
+
on,
|
|
415
|
+
off,
|
|
416
|
+
getAgentsRoot: () => root,
|
|
417
|
+
emitExternal: (e) => { emit(e); },
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
function clamp(n, lo, hi) {
|
|
421
|
+
if (!Number.isFinite(n))
|
|
422
|
+
return lo;
|
|
423
|
+
if (n < lo)
|
|
424
|
+
return lo;
|
|
425
|
+
if (n > hi)
|
|
426
|
+
return hi;
|
|
427
|
+
return n;
|
|
428
|
+
}
|
|
429
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/agents/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent system prompt builder (Director sprint slice 15a).
|
|
3
|
+
*
|
|
4
|
+
* Composes the effective system prompt for one agent run from:
|
|
5
|
+
* - Identity: def.prompt_addition (role + role rules).
|
|
6
|
+
* - Project context (root + name + version).
|
|
7
|
+
* - Filtered graph snapshot (slice 11).
|
|
8
|
+
* - Bridge protocol reminder.
|
|
9
|
+
* - Doctrine pointers (testing-policy, language-sovereignty,
|
|
10
|
+
* default-design-system, gates, pizarron, nac3-attrs,
|
|
11
|
+
* mcp-bridge-lifecycle, byok-vs-managed).
|
|
12
|
+
* - Allowed verbs (so the LLM does not invent).
|
|
13
|
+
*
|
|
14
|
+
* Pure function. The runner / chat builds the inputs (graph
|
|
15
|
+
* snapshot via filterSnapshotForRole, language_choices via
|
|
16
|
+
* workflow state) and calls us. We do NOT do I/O.
|
|
17
|
+
*
|
|
18
|
+
* ASCII-only.
|
|
19
|
+
*/
|
|
20
|
+
import type { AgentDefinition } from './types.js';
|
|
21
|
+
export interface BuildOpts {
|
|
22
|
+
def: AgentDefinition;
|
|
23
|
+
project_root: string;
|
|
24
|
+
project_name: string;
|
|
25
|
+
forge_version: string;
|
|
26
|
+
/** Pre-rendered + per-role-filtered graph snapshot (see slice
|
|
27
|
+
* 11 filterSnapshotForRole). Empty string when worker is
|
|
28
|
+
* unreachable or graph is empty -- the section is omitted. */
|
|
29
|
+
graph_snapshot_section?: string;
|
|
30
|
+
/** Pre-rendered workflow state section (PROJECT WORKFLOW STATE
|
|
31
|
+
* block from workflow_inject.ts). Empty string when no
|
|
32
|
+
* workflow yet. */
|
|
33
|
+
workflow_section?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function buildAgentSystemPrompt(opts: BuildOpts): string;
|
|
36
|
+
//# sourceMappingURL=system_prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system_prompt.d.ts","sourceRoot":"","sources":["../../src/agents/system_prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAY,eAAe,CAAC;IAC/B,YAAY,EAAG,MAAM,CAAC;IACtB,YAAY,EAAG,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB;;mEAE+D;IAC/D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;wBAEoB;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAwBD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAqF9D"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const DOCTRINE_POINTERS = [
|
|
2
|
+
'- testing-policy (TDD-first scope + when to write red vs verify green)',
|
|
3
|
+
'- language-sovereignty (user picks language; Director suggests, never imposes)',
|
|
4
|
+
'- default-design-system (Yujin DS as the default front-end; override via R8)',
|
|
5
|
+
'- workflow (6 phases / 18 steps)',
|
|
6
|
+
'- gates (refuse-to-advance per phase)',
|
|
7
|
+
'- pizarron (create-tab vs open-file; canvas vs editor)',
|
|
8
|
+
'- nac3-attrs (data-nac-id / data-nac-role / data-nac-action)',
|
|
9
|
+
'- mcp-bridge-lifecycle (when to discover, when to call, when to disable)',
|
|
10
|
+
'- byok-vs-managed (per-tenant brain vs Yujin-managed brain)',
|
|
11
|
+
'- r8-modal (destructive verbs always confirm)',
|
|
12
|
+
];
|
|
13
|
+
const BRIDGE_PROTOCOL = [
|
|
14
|
+
'INTER-AGENT BRIDGE protocol:',
|
|
15
|
+
'- You communicate with peer agents through the bridge (src/agents/bridge.ts).',
|
|
16
|
+
'- Every send is rate-limited by the pair token cap + loop detector.',
|
|
17
|
+
'- If a pair freezes (auto_revoked), report to the Director instead of retrying.',
|
|
18
|
+
'- Bridge payloads are JSON: { from_slug, to_slug, payload, tokens_used }.',
|
|
19
|
+
'- The receiver drains its inbox at the next tick; do NOT block waiting.',
|
|
20
|
+
];
|
|
21
|
+
export function buildAgentSystemPrompt(opts) {
|
|
22
|
+
const def = opts.def;
|
|
23
|
+
const parts = [];
|
|
24
|
+
/* Header block: role metadata. */
|
|
25
|
+
parts.push('=================================================================');
|
|
26
|
+
parts.push('ROLE: ' + def.slug);
|
|
27
|
+
parts.push('NAME: ' + def.name);
|
|
28
|
+
parts.push('BRAIN TIER: ' + def.brain_tier);
|
|
29
|
+
parts.push('STATUS: ' + def.status);
|
|
30
|
+
parts.push('TRIGGER: ' + def.trigger.kind);
|
|
31
|
+
parts.push('=================================================================');
|
|
32
|
+
parts.push('');
|
|
33
|
+
/* Identity + role rules from the def. */
|
|
34
|
+
parts.push(def.prompt_addition);
|
|
35
|
+
parts.push('');
|
|
36
|
+
/* Project context. */
|
|
37
|
+
parts.push('=================================================================');
|
|
38
|
+
parts.push('CONTEXT (this project)');
|
|
39
|
+
parts.push('=================================================================');
|
|
40
|
+
parts.push('');
|
|
41
|
+
parts.push('- Project: ' + opts.project_name);
|
|
42
|
+
parts.push('- Root: ' + opts.project_root);
|
|
43
|
+
parts.push('- Forge: ' + opts.forge_version);
|
|
44
|
+
parts.push('');
|
|
45
|
+
/* Bridge protocol (relevant when can_call OR can_be_called_by
|
|
46
|
+
* is non-empty -- almost always, but still gated for clarity). */
|
|
47
|
+
if ((def.can_call && def.can_call.length > 0) || (def.can_be_called_by && def.can_be_called_by.length > 0)) {
|
|
48
|
+
parts.push('=================================================================');
|
|
49
|
+
parts.push('BRIDGE PROTOCOL');
|
|
50
|
+
parts.push('=================================================================');
|
|
51
|
+
parts.push('');
|
|
52
|
+
parts.push(...BRIDGE_PROTOCOL);
|
|
53
|
+
parts.push('');
|
|
54
|
+
if (def.can_call && def.can_call.length > 0) {
|
|
55
|
+
parts.push('You can call: [' + def.can_call.join(', ') + ']');
|
|
56
|
+
}
|
|
57
|
+
if (def.can_be_called_by && def.can_be_called_by.length > 0) {
|
|
58
|
+
parts.push('You accept inbound from: [' + def.can_be_called_by.join(', ') + ']');
|
|
59
|
+
}
|
|
60
|
+
parts.push('');
|
|
61
|
+
}
|
|
62
|
+
/* Allowed verbs -- the LLM does NOT invent verb names. */
|
|
63
|
+
parts.push('=================================================================');
|
|
64
|
+
parts.push('ALLOWED VERBS (yujin.* you are permitted to invoke)');
|
|
65
|
+
parts.push('=================================================================');
|
|
66
|
+
parts.push('');
|
|
67
|
+
if (def.allowed_verbs && def.allowed_verbs.length > 0) {
|
|
68
|
+
for (const v of def.allowed_verbs)
|
|
69
|
+
parts.push('- ' + v);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
parts.push('(no verbs declared; the runner will reject any tool call)');
|
|
73
|
+
}
|
|
74
|
+
parts.push('');
|
|
75
|
+
/* Doctrine pointers (on-demand fetch). */
|
|
76
|
+
parts.push('=================================================================');
|
|
77
|
+
parts.push('DOCTRINE POINTERS (on-demand)');
|
|
78
|
+
parts.push('=================================================================');
|
|
79
|
+
parts.push('');
|
|
80
|
+
parts.push('Fetch a full doctrine via yujin.doctrine.discover({slugs: [...]}):');
|
|
81
|
+
parts.push('');
|
|
82
|
+
for (const p of DOCTRINE_POINTERS)
|
|
83
|
+
parts.push(p);
|
|
84
|
+
parts.push('');
|
|
85
|
+
/* Optional graph snapshot section. */
|
|
86
|
+
if (opts.graph_snapshot_section && opts.graph_snapshot_section.trim().length > 0) {
|
|
87
|
+
parts.push('=================================================================');
|
|
88
|
+
parts.push('PROJECT GRAPH (this turn -- the panoramic structural view)');
|
|
89
|
+
parts.push('=================================================================');
|
|
90
|
+
parts.push('');
|
|
91
|
+
parts.push(opts.graph_snapshot_section);
|
|
92
|
+
parts.push('');
|
|
93
|
+
}
|
|
94
|
+
/* Optional workflow state section. */
|
|
95
|
+
if (opts.workflow_section && opts.workflow_section.trim().length > 0) {
|
|
96
|
+
parts.push(opts.workflow_section);
|
|
97
|
+
parts.push('');
|
|
98
|
+
}
|
|
99
|
+
return parts.join('\n');
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=system_prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"system_prompt.js","sourceRoot":"","sources":["../../src/agents/system_prompt.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/types.d.ts
CHANGED
|
@@ -55,7 +55,7 @@ export interface AgentDefinition {
|
|
|
55
55
|
revoked_reason?: string;
|
|
56
56
|
}
|
|
57
57
|
/** Outcome of an AgentRun. */
|
|
58
|
-
export type AgentRunStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'timeout' | 'killed_quota' | 'killed_rejections' | 'killed_user';
|
|
58
|
+
export type AgentRunStatus = 'queued' | 'running' | 'succeeded' | 'failed' | 'timeout' | 'killed_quota' | 'killed_rejections' | 'killed_user' | 'paused_for_approval';
|
|
59
59
|
export interface AgentRun {
|
|
60
60
|
id: string;
|
|
61
61
|
slug: string;
|
|
@@ -76,6 +76,11 @@ export interface AgentRun {
|
|
|
76
76
|
last_reply_summary: string;
|
|
77
77
|
/** When status is a kill code, the reason in plain text. */
|
|
78
78
|
kill_reason?: string;
|
|
79
|
+
/** Slice 1 of N-projects sprint -- project the run belongs to.
|
|
80
|
+
* Defaults to 'self' (single-project mode = legacy behaviour).
|
|
81
|
+
* Lets the Activity panel + SVG + bridge inspector filter by
|
|
82
|
+
* project; lets semaphores cap concurrent runs per project. */
|
|
83
|
+
project_slug?: string;
|
|
79
84
|
}
|
|
80
85
|
/** Status of a single inter-agent message. */
|
|
81
86
|
export type AgentMessageStatus = 'pending' | 'delivered' | 'read' | 'expired' | 'auto_revoked';
|
|
@@ -96,6 +101,12 @@ export interface AgentMessage {
|
|
|
96
101
|
read_at?: number;
|
|
97
102
|
/** TTL in epoch ms. Default = created_at + agent.bridge.message_ttl_seconds. */
|
|
98
103
|
expires_at: number;
|
|
104
|
+
/** Slice 1 of N-projects sprint -- project the message belongs
|
|
105
|
+
* to. Mirrors AgentRun.project_slug; defaults to 'self'. Drives
|
|
106
|
+
* bridge file sharding (`bridge-{project_slug}.json`) so two
|
|
107
|
+
* projects can swap messages without contending on a single
|
|
108
|
+
* global JSON. */
|
|
109
|
+
project_slug?: string;
|
|
99
110
|
}
|
|
100
111
|
/** Pair-level state tracked by the bridge for cap enforcement +
|
|
101
112
|
* loop detection. Stored alongside agent_messages. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAI,gBAAgB,CAAC;IACzB;;;;OAIG;IACH,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,0CAA0C;AAC1C,MAAM,MAAM,qBAAqB,GAC7B,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,cAAc,CAAC;AAEnB,MAAM,WAAW,eAAe;IAC9B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,UAAU,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,gCAAgC;IAChC,OAAO,EAAE,YAAY,CAAC;IACtB;;qCAEiC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B;;kEAE8D;IAC9D,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB;uCACmC;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB;IACvB,MAAM,EAAE,qBAAqB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,8BAA8B;AAC9B,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,GACT,cAAc,GACd,mBAAmB,GACnB,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/agents/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAgJH;2DAC2D;AAC3D,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,CAAS;IAC5C,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB;;kEAE8D;IAC9D,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;sDAEsD;AACtD,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC"}
|
package/dist/bin/yf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yf.d.ts","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":";AAUA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"yf.d.ts","sourceRoot":"","sources":["../../src/bin/yf.ts"],"names":[],"mappings":";AAUA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC,wBAAgB,YAAY,IAAI,OAAO,CAkFtC"}
|