@nac3/forge-cli 0.2.0-alpha.2 → 0.2.0-alpha.20
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/bin/yf.d.ts.map +1 -1
- package/dist/bin/yf.js +25 -0
- package/dist/bin/yf.js.map +1 -1
- package/dist/chat/claude.d.ts +22 -15
- package/dist/chat/claude.d.ts.map +1 -1
- package/dist/chat/claude.js +75 -22
- package/dist/chat/claude.js.map +1 -1
- package/dist/chat/panel.d.ts.map +1 -1
- package/dist/chat/panel.js +90 -3
- package/dist/chat/panel.js.map +1 -1
- package/dist/chat/server.js +498 -32
- package/dist/chat/server.js.map +1 -1
- package/dist/chat/tools/audit_consumers.d.ts +66 -0
- package/dist/chat/tools/audit_consumers.d.ts.map +1 -0
- package/dist/chat/tools/audit_consumers.js +231 -0
- package/dist/chat/tools/audit_consumers.js.map +1 -0
- package/dist/chat/tools/git.js +4 -4
- package/dist/chat/tools/github.js +3 -3
- package/dist/chat/tools/lifecycle.js +3 -3
- package/dist/chat/tools/manual.js +1 -1
- package/dist/chat/tools/reader.js +8 -8
- package/dist/chat/tools/workflow.d.ts +45 -0
- package/dist/chat/tools/workflow.d.ts.map +1 -0
- package/dist/chat/tools/workflow.js +404 -0
- package/dist/chat/tools/workflow.js.map +1 -0
- package/dist/chat/tools.d.ts.map +1 -1
- package/dist/chat/tools.js +23 -4
- package/dist/chat/tools.js.map +1 -1
- package/dist/commands/approve.d.ts +32 -0
- package/dist/commands/approve.d.ts.map +1 -0
- package/dist/commands/approve.js +198 -0
- package/dist/commands/approve.js.map +1 -0
- package/dist/commands/block.d.ts +28 -0
- package/dist/commands/block.d.ts.map +1 -0
- package/dist/commands/block.js +189 -0
- package/dist/commands/block.js.map +1 -0
- package/dist/commands/bootstrap.d.ts +35 -0
- package/dist/commands/bootstrap.d.ts.map +1 -0
- package/dist/commands/bootstrap.js +205 -0
- package/dist/commands/bootstrap.js.map +1 -0
- package/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -1
- package/dist/commands/chat.js +46 -1
- package/dist/commands/chat.js.map +1 -1
- package/dist/commands/clarify.d.ts +30 -0
- package/dist/commands/clarify.d.ts.map +1 -0
- package/dist/commands/clarify.js +671 -0
- package/dist/commands/clarify.js.map +1 -0
- package/dist/commands/discover.d.ts +30 -0
- package/dist/commands/discover.d.ts.map +1 -0
- package/dist/commands/discover.js +178 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/doctor.js +94 -42
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/keys_setup.d.ts +53 -0
- package/dist/commands/keys_setup.d.ts.map +1 -0
- package/dist/commands/keys_setup.js +487 -0
- package/dist/commands/keys_setup.js.map +1 -0
- package/dist/commands/legacy-audit.d.ts +34 -0
- package/dist/commands/legacy-audit.d.ts.map +1 -0
- package/dist/commands/legacy-audit.js +270 -0
- package/dist/commands/legacy-audit.js.map +1 -0
- package/dist/commands/license.d.ts.map +1 -1
- package/dist/commands/license.js +41 -0
- package/dist/commands/license.js.map +1 -1
- package/dist/commands/operate.d.ts +22 -0
- package/dist/commands/operate.d.ts.map +1 -0
- package/dist/commands/operate.js +483 -0
- package/dist/commands/operate.js.map +1 -0
- package/dist/commands/spec.d.ts +38 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +256 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/triage.d.ts +34 -0
- package/dist/commands/triage.d.ts.map +1 -0
- package/dist/commands/triage.js +228 -0
- package/dist/commands/triage.js.map +1 -0
- package/dist/commands/vault-inventory.d.ts +30 -0
- package/dist/commands/vault-inventory.d.ts.map +1 -0
- package/dist/commands/vault-inventory.js +214 -0
- package/dist/commands/vault-inventory.js.map +1 -0
- package/dist/commands/vault.d.ts.map +1 -1
- package/dist/commands/vault.js +5 -0
- package/dist/commands/vault.js.map +1 -1
- package/dist/commands/voice.js +1 -1
- package/dist/commands/voice.js.map +1 -1
- package/dist/commands/workflow-coverage.d.ts +30 -0
- package/dist/commands/workflow-coverage.d.ts.map +1 -0
- package/dist/commands/workflow-coverage.js +138 -0
- package/dist/commands/workflow-coverage.js.map +1 -0
- package/dist/core/keys_envelope.d.ts +13 -0
- package/dist/core/keys_envelope.d.ts.map +1 -1
- package/dist/core/keys_envelope.js.map +1 -1
- package/dist/deploy/adapter.d.ts +93 -0
- package/dist/deploy/adapter.d.ts.map +1 -0
- package/dist/deploy/adapter.js +42 -0
- package/dist/deploy/adapter.js.map +1 -0
- package/dist/deploy/aws_adapter.d.ts +28 -0
- package/dist/deploy/aws_adapter.d.ts.map +1 -0
- package/dist/deploy/aws_adapter.js +65 -0
- package/dist/deploy/aws_adapter.js.map +1 -0
- package/dist/deploy/cloudflare.d.ts +24 -0
- package/dist/deploy/cloudflare.d.ts.map +1 -0
- package/dist/deploy/cloudflare.js +169 -0
- package/dist/deploy/cloudflare.js.map +1 -0
- package/dist/license/hito4_client.d.ts +17 -1
- package/dist/license/hito4_client.d.ts.map +1 -1
- package/dist/license/hito4_client.js +71 -10
- package/dist/license/hito4_client.js.map +1 -1
- package/dist/license/index.d.ts.map +1 -1
- package/dist/license/index.js +7 -0
- package/dist/license/index.js.map +1 -1
- package/dist/license/sync.d.ts +54 -0
- package/dist/license/sync.d.ts.map +1 -0
- package/dist/license/sync.js +131 -0
- package/dist/license/sync.js.map +1 -0
- package/dist/telemetry/usage.d.ts +67 -0
- package/dist/telemetry/usage.d.ts.map +1 -0
- package/dist/telemetry/usage.js +208 -0
- package/dist/telemetry/usage.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/voice/intents.d.ts +1 -1
- package/dist/voice/intents.js +0 -0
- package/dist/voice/providers/google.d.ts.map +1 -1
- package/dist/voice/providers/google.js +157 -27
- package/dist/voice/providers/google.js.map +1 -1
- package/dist/voice/router.d.ts +10 -0
- package/dist/voice/router.d.ts.map +1 -1
- package/dist/voice/router.js +39 -20
- package/dist/voice/router.js.map +1 -1
- package/dist/voice/types.d.ts +5 -2
- package/dist/voice/types.d.ts.map +1 -1
- package/dist/voice/types.js.map +1 -1
- package/dist/workflow/state.d.ts +190 -0
- package/dist/workflow/state.d.ts.map +1 -0
- package/dist/workflow/state.js +119 -0
- package/dist/workflow/state.js.map +1 -0
- package/package.json +13 -15
- package/templates/nextjs-app/README.md +48 -0
- package/templates/nextjs-app/next.config.js +8 -0
- package/templates/nextjs-app/package.json +33 -0
- package/templates/nextjs-app/src/app/globals.css +43 -0
- package/templates/nextjs-app/src/app/layout.tsx +29 -0
- package/templates/nextjs-app/src/app/page.tsx +63 -0
- package/templates/nextjs-app/src/nac/manifest.ts +36 -0
- package/templates/nextjs-app/tsconfig.json +21 -0
- package/templates/nextjs-app/yujin.forge.json +11 -0
|
@@ -32,7 +32,7 @@ const VAULT_SLOT = 'github_token';
|
|
|
32
32
|
const GITHUB_API = 'https://api.github.com';
|
|
33
33
|
/* ------------------ Tool specs ------------------ */
|
|
34
34
|
export const CREATE_GITHUB_REPO_SPEC = {
|
|
35
|
-
name: '
|
|
35
|
+
name: 'forge_create_github_repo',
|
|
36
36
|
description: 'Create a new repository under the authenticated GitHub user. Requires vault slot github_token with repo scope. Returns the new repository metadata including clone_url.',
|
|
37
37
|
input_schema: {
|
|
38
38
|
type: 'object',
|
|
@@ -46,7 +46,7 @@ export const CREATE_GITHUB_REPO_SPEC = {
|
|
|
46
46
|
requires_approval: true,
|
|
47
47
|
};
|
|
48
48
|
export const CLONE_REPO_SPEC = {
|
|
49
|
-
name: '
|
|
49
|
+
name: 'forge_clone_repo',
|
|
50
50
|
description: 'Clone a remote git repository to a local directory. Public repos need no auth. Private repos use the github_token slot when present. Returns the resolved target_dir + the first commit hash.',
|
|
51
51
|
input_schema: {
|
|
52
52
|
type: 'object',
|
|
@@ -59,7 +59,7 @@ export const CLONE_REPO_SPEC = {
|
|
|
59
59
|
requires_approval: true,
|
|
60
60
|
};
|
|
61
61
|
export const BRANCH_STATUS_SPEC = {
|
|
62
|
-
name: '
|
|
62
|
+
name: 'forge_branch_status',
|
|
63
63
|
description: 'Read the current git branch + dirty-tree status of a local checkout. Returns branch name, ahead/behind counters vs upstream when present, list of dirty files (max 50).',
|
|
64
64
|
input_schema: {
|
|
65
65
|
type: 'object',
|
|
@@ -37,7 +37,7 @@ let active = null;
|
|
|
37
37
|
* Specs
|
|
38
38
|
* ============================================================ */
|
|
39
39
|
export const RUN_APP_SPEC = {
|
|
40
|
-
name: '
|
|
40
|
+
name: 'forge_run_app',
|
|
41
41
|
description: 'Launch the project dev server. Auto-detects the package manager (npm / yarn / pnpm) and the script (dev / start / serve). Returns pid + best-effort URL.',
|
|
42
42
|
input_schema: {
|
|
43
43
|
type: 'object',
|
|
@@ -51,7 +51,7 @@ export const RUN_APP_SPEC = {
|
|
|
51
51
|
requires_approval: true,
|
|
52
52
|
};
|
|
53
53
|
export const STOP_APP_SPEC = {
|
|
54
|
-
name: '
|
|
54
|
+
name: 'forge_stop_app',
|
|
55
55
|
description: 'Stop the running app spawned by forge.run_app. Returns the final logs tail.',
|
|
56
56
|
input_schema: {
|
|
57
57
|
type: 'object',
|
|
@@ -63,7 +63,7 @@ export const STOP_APP_SPEC = {
|
|
|
63
63
|
requires_approval: true,
|
|
64
64
|
};
|
|
65
65
|
export const RESTART_APP_SPEC = {
|
|
66
|
-
name: '
|
|
66
|
+
name: 'forge_restart_app',
|
|
67
67
|
description: 'Stop the running app + relaunch with the same (or new) options.',
|
|
68
68
|
input_schema: {
|
|
69
69
|
type: 'object',
|
|
@@ -47,7 +47,7 @@ const MANUAL_PATH_CANDIDATES = (lang) => {
|
|
|
47
47
|
return manualBaseDirs().map((dir) => path.join(dir, fname));
|
|
48
48
|
};
|
|
49
49
|
export const MANUAL_OPEN_SPEC = {
|
|
50
|
-
name: '
|
|
50
|
+
name: 'forge_manual_open',
|
|
51
51
|
description: 'Open the Yujin Forge user manual in the requested language (default: current user language). Resolves to docs/manuals/manual.<lang>.html and opens it through the reader pipeline so the user can navigate by voice. Available languages: es, en, pt, fr, ja, zh, hi, ar, de, it.',
|
|
52
52
|
input_schema: {
|
|
53
53
|
type: 'object',
|
|
@@ -45,7 +45,7 @@ export function _resetReaderForTests() {
|
|
|
45
45
|
* Specs
|
|
46
46
|
* ============================================================ */
|
|
47
47
|
export const READER_OPEN_SPEC = {
|
|
48
|
-
name: '
|
|
48
|
+
name: 'forge_reader_open',
|
|
49
49
|
description: 'Open a document for reading. Auto-detects format (txt / md / source / ...). Returns the doc_id + title + section count + first block.',
|
|
50
50
|
input_schema: {
|
|
51
51
|
type: 'object',
|
|
@@ -57,13 +57,13 @@ export const READER_OPEN_SPEC = {
|
|
|
57
57
|
requires_approval: false,
|
|
58
58
|
};
|
|
59
59
|
export const READER_LIST_DOCS_SPEC = {
|
|
60
|
-
name: '
|
|
60
|
+
name: 'forge_reader_list_documents',
|
|
61
61
|
description: 'List all documents currently open in this chat session.',
|
|
62
62
|
input_schema: { type: 'object', properties: {}, required: [] },
|
|
63
63
|
requires_approval: false,
|
|
64
64
|
};
|
|
65
65
|
export const READER_READ_SECTION_SPEC = {
|
|
66
|
-
name: '
|
|
66
|
+
name: 'forge_reader_read_section',
|
|
67
67
|
description: 'Return the blocks of a section. With no index, returns the current section under the cursor.',
|
|
68
68
|
input_schema: {
|
|
69
69
|
type: 'object',
|
|
@@ -76,7 +76,7 @@ export const READER_READ_SECTION_SPEC = {
|
|
|
76
76
|
requires_approval: false,
|
|
77
77
|
};
|
|
78
78
|
export const READER_NEXT_BLOCK_SPEC = {
|
|
79
|
-
name: '
|
|
79
|
+
name: 'forge_reader_next_block',
|
|
80
80
|
description: 'Advance the reader cursor one block forward. Returns the new block contents.',
|
|
81
81
|
input_schema: {
|
|
82
82
|
type: 'object',
|
|
@@ -88,7 +88,7 @@ export const READER_NEXT_BLOCK_SPEC = {
|
|
|
88
88
|
requires_approval: false,
|
|
89
89
|
};
|
|
90
90
|
export const READER_SEARCH_SPEC = {
|
|
91
|
-
name: '
|
|
91
|
+
name: 'forge_reader_search',
|
|
92
92
|
description: 'Full-text search across a document. Returns top hits sorted by match count.',
|
|
93
93
|
input_schema: {
|
|
94
94
|
type: 'object',
|
|
@@ -102,7 +102,7 @@ export const READER_SEARCH_SPEC = {
|
|
|
102
102
|
requires_approval: false,
|
|
103
103
|
};
|
|
104
104
|
export const READER_BOOKMARK_SET_SPEC = {
|
|
105
|
-
name: '
|
|
105
|
+
name: 'forge_reader_bookmark_set',
|
|
106
106
|
description: 'Set a named bookmark at the current cursor position.',
|
|
107
107
|
input_schema: {
|
|
108
108
|
type: 'object',
|
|
@@ -115,7 +115,7 @@ export const READER_BOOKMARK_SET_SPEC = {
|
|
|
115
115
|
requires_approval: false,
|
|
116
116
|
};
|
|
117
117
|
export const READER_BOOKMARK_JUMP_SPEC = {
|
|
118
|
-
name: '
|
|
118
|
+
name: 'forge_reader_bookmark_jump',
|
|
119
119
|
description: 'Jump the cursor to a previously-set bookmark.',
|
|
120
120
|
input_schema: {
|
|
121
121
|
type: 'object',
|
|
@@ -128,7 +128,7 @@ export const READER_BOOKMARK_JUMP_SPEC = {
|
|
|
128
128
|
requires_approval: false,
|
|
129
129
|
};
|
|
130
130
|
export const READER_RECAP_SPEC = {
|
|
131
|
-
name: '
|
|
131
|
+
name: 'forge_reader_recap',
|
|
132
132
|
description: 'Return the last N spoken blocks from the reader playback buffer. Default window 10. mode="summary" returns a Claude-generated 1-2 sentence summary instead of literal blocks (charges tokens; gated by env YF_ENABLE_CLAUDE_RECAP=1).',
|
|
133
133
|
input_schema: {
|
|
134
134
|
type: 'object',
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat tool surface for the PRODUCT_WORKFLOW.md state machine.
|
|
3
|
+
*
|
|
4
|
+
* Three tools that let Forge drive the entire 18-step methodology
|
|
5
|
+
* from inside the chat panel, without the user dropping to the CLI:
|
|
6
|
+
*
|
|
7
|
+
* forge_workflow_state(scope?) read workflow state (full or scoped)
|
|
8
|
+
* forge_workflow_set(group, patch) persist a patch under workflow.<group>
|
|
9
|
+
* forge_workflow_run_step(step) run an autonomous step
|
|
10
|
+
* (legacy_audit, coverage, manual_generate,
|
|
11
|
+
* handoff, metrics) without prompts
|
|
12
|
+
*
|
|
13
|
+
* Design notes:
|
|
14
|
+
* - State write goes through the same module the CLI verbs use
|
|
15
|
+
* (`src/workflow/state.ts`), so a chat session and a CLI session
|
|
16
|
+
* see the same yujin.forge.json.
|
|
17
|
+
* - `forge_workflow_run_step` only handles steps that do NOT
|
|
18
|
+
* require the user to answer questions (legacy_audit reads the
|
|
19
|
+
* project; coverage greps tests; manual_generate emits markdown
|
|
20
|
+
* from existing state). Interactive steps (triage, discover,
|
|
21
|
+
* clarify, approve) stay CLI-driven OR are driven by Forge
|
|
22
|
+
* asking the user in chat + calling forge_workflow_set with the
|
|
23
|
+
* collected answers.
|
|
24
|
+
* - Per SQ Sec 14, Forge calls forge_audit_consumers before any
|
|
25
|
+
* structural commit; this surface is read-mostly + persistence-
|
|
26
|
+
* safe so it does not trip that rule.
|
|
27
|
+
*
|
|
28
|
+
* ASCII-only.
|
|
29
|
+
*/
|
|
30
|
+
import type { ToolContext, ToolResult, ToolSpec } from '../tools.js';
|
|
31
|
+
export declare const WORKFLOW_STATE_SPEC: ToolSpec;
|
|
32
|
+
export declare function runWorkflowState(args: {
|
|
33
|
+
scope?: string;
|
|
34
|
+
}, ctx: ToolContext): Promise<ToolResult>;
|
|
35
|
+
export declare const WORKFLOW_SET_SPEC: ToolSpec;
|
|
36
|
+
export declare function runWorkflowSet(args: {
|
|
37
|
+
group?: string;
|
|
38
|
+
patch?: Record<string, unknown>;
|
|
39
|
+
top_level?: boolean;
|
|
40
|
+
}, ctx: ToolContext): Promise<ToolResult>;
|
|
41
|
+
export declare const WORKFLOW_RUN_STEP_SPEC: ToolSpec;
|
|
42
|
+
export declare function runWorkflowRunStep(args: {
|
|
43
|
+
step?: string;
|
|
44
|
+
}, ctx: ToolContext): Promise<ToolResult>;
|
|
45
|
+
//# sourceMappingURL=workflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../../src/chat/tools/workflow.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYrE,eAAO,MAAM,mBAAmB,EAAE,QAqBjC,CAAC;AAEF,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,EACxB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAMD,eAAO,MAAM,iBAAiB,EAAE,QAkC/B,CAAC;AAWF,wBAAsB,cAAc,CAClC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EAC9E,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA4DrB;AAMD,eAAO,MAAM,sBAAsB,EAAE,QAwBpC,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EACvB,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CA0ErB"}
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chat tool surface for the PRODUCT_WORKFLOW.md state machine.
|
|
3
|
+
*
|
|
4
|
+
* Three tools that let Forge drive the entire 18-step methodology
|
|
5
|
+
* from inside the chat panel, without the user dropping to the CLI:
|
|
6
|
+
*
|
|
7
|
+
* forge_workflow_state(scope?) read workflow state (full or scoped)
|
|
8
|
+
* forge_workflow_set(group, patch) persist a patch under workflow.<group>
|
|
9
|
+
* forge_workflow_run_step(step) run an autonomous step
|
|
10
|
+
* (legacy_audit, coverage, manual_generate,
|
|
11
|
+
* handoff, metrics) without prompts
|
|
12
|
+
*
|
|
13
|
+
* Design notes:
|
|
14
|
+
* - State write goes through the same module the CLI verbs use
|
|
15
|
+
* (`src/workflow/state.ts`), so a chat session and a CLI session
|
|
16
|
+
* see the same yujin.forge.json.
|
|
17
|
+
* - `forge_workflow_run_step` only handles steps that do NOT
|
|
18
|
+
* require the user to answer questions (legacy_audit reads the
|
|
19
|
+
* project; coverage greps tests; manual_generate emits markdown
|
|
20
|
+
* from existing state). Interactive steps (triage, discover,
|
|
21
|
+
* clarify, approve) stay CLI-driven OR are driven by Forge
|
|
22
|
+
* asking the user in chat + calling forge_workflow_set with the
|
|
23
|
+
* collected answers.
|
|
24
|
+
* - Per SQ Sec 14, Forge calls forge_audit_consumers before any
|
|
25
|
+
* structural commit; this surface is read-mostly + persistence-
|
|
26
|
+
* safe so it does not trip that rule.
|
|
27
|
+
*
|
|
28
|
+
* ASCII-only.
|
|
29
|
+
*/
|
|
30
|
+
import path from 'node:path';
|
|
31
|
+
import { readWorkflow, writeWorkflow, patchWorkflowGroup, } from '../../workflow/state.js';
|
|
32
|
+
/* =========================================================================
|
|
33
|
+
* forge_workflow_state
|
|
34
|
+
* ========================================================================= */
|
|
35
|
+
export const WORKFLOW_STATE_SPEC = {
|
|
36
|
+
name: 'forge_workflow_state',
|
|
37
|
+
description: 'Read the project workflow state from yujin.forge.json. Returns '
|
|
38
|
+
+ 'the full workflow object by default. Optionally filter by '
|
|
39
|
+
+ 'scope (one of: tier, intent, legacy_audit, vault_inventory, '
|
|
40
|
+
+ 'clarification, specs, approvals, bootstrap, blocks_progress, '
|
|
41
|
+
+ 'deploy, postlaunch, iterations). Use this at the START of '
|
|
42
|
+
+ 'every chat turn to know where the user is in the 18-step '
|
|
43
|
+
+ 'methodology + decide what to ask next. Pure read.',
|
|
44
|
+
input_schema: {
|
|
45
|
+
type: 'object',
|
|
46
|
+
properties: {
|
|
47
|
+
scope: {
|
|
48
|
+
type: 'string',
|
|
49
|
+
description: 'Optional: return only this group of the workflow state.',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
required: [],
|
|
53
|
+
},
|
|
54
|
+
requires_approval: false,
|
|
55
|
+
};
|
|
56
|
+
export async function runWorkflowState(args, ctx) {
|
|
57
|
+
const wf = await readWorkflow(ctx.projectRoot);
|
|
58
|
+
if (args.scope) {
|
|
59
|
+
const val = wf[args.scope];
|
|
60
|
+
return {
|
|
61
|
+
tool: WORKFLOW_STATE_SPEC.name,
|
|
62
|
+
is_error: false,
|
|
63
|
+
result: { scope: args.scope, value: val ?? null },
|
|
64
|
+
display: 'state[' + args.scope + ']: ' + (val ? 'present' : 'empty'),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
/* Summary of completion for the display string. */
|
|
68
|
+
const phases = {
|
|
69
|
+
phase_i: Boolean(wf.tier && wf.intent),
|
|
70
|
+
phase_ii: Boolean(wf.clarification?.functional && wf.clarification?.nfr_quantitative
|
|
71
|
+
&& wf.clarification?.nfr_structural && wf.clarification?.nfr_governance
|
|
72
|
+
&& wf.clarification?.nfr_operational && wf.clarification?.blocks),
|
|
73
|
+
phase_iii: Boolean(wf.specs?.rfp && wf.specs?.arch && wf.specs?.design),
|
|
74
|
+
phase_iv: Boolean(wf.approvals?.rfp && wf.approvals?.arch && wf.approvals?.design),
|
|
75
|
+
phase_v: Boolean(wf.bootstrap),
|
|
76
|
+
phase_vi: Boolean(wf.deploy),
|
|
77
|
+
};
|
|
78
|
+
const completedPhases = Object.values(phases).filter(Boolean).length;
|
|
79
|
+
return {
|
|
80
|
+
tool: WORKFLOW_STATE_SPEC.name,
|
|
81
|
+
is_error: false,
|
|
82
|
+
result: { workflow: wf, phases },
|
|
83
|
+
display: 'workflow state read; phases complete: ' + completedPhases + '/6',
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/* =========================================================================
|
|
87
|
+
* forge_workflow_set
|
|
88
|
+
* ========================================================================= */
|
|
89
|
+
export const WORKFLOW_SET_SPEC = {
|
|
90
|
+
name: 'forge_workflow_set',
|
|
91
|
+
description: 'Persist a patch under workflow.<group> in yujin.forge.json. '
|
|
92
|
+
+ 'Use this when you have collected the answers for a workflow '
|
|
93
|
+
+ 'step conversationally (triage answers, discover answers, a '
|
|
94
|
+
+ 'clarification round summary, an approval decision) and need '
|
|
95
|
+
+ 'to commit them to disk so the next session inherits the '
|
|
96
|
+
+ 'progress. The patch is merged into the existing group; you '
|
|
97
|
+
+ 'do not need to send the whole group. Valid groups: tier '
|
|
98
|
+
+ '(use top-level patch, see args), tier_reason, '
|
|
99
|
+
+ 'tier_decided_at, intent, legacy_audit, vault_inventory, '
|
|
100
|
+
+ 'clarification, specs, approvals, bootstrap, blocks_progress, '
|
|
101
|
+
+ 'deploy, postlaunch.',
|
|
102
|
+
input_schema: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
properties: {
|
|
105
|
+
group: {
|
|
106
|
+
type: 'string',
|
|
107
|
+
description: 'Which workflow group to patch.',
|
|
108
|
+
},
|
|
109
|
+
patch: {
|
|
110
|
+
type: 'object',
|
|
111
|
+
description: 'Partial object merged into the group (any keys).',
|
|
112
|
+
},
|
|
113
|
+
top_level: {
|
|
114
|
+
type: 'boolean',
|
|
115
|
+
description: 'If true, patch is merged at workflow.<key> top level '
|
|
116
|
+
+ '(used for tier / tier_reason / tier_decided_at). Default false.',
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
required: ['group', 'patch'],
|
|
120
|
+
},
|
|
121
|
+
requires_approval: false,
|
|
122
|
+
};
|
|
123
|
+
const VALID_GROUPS = new Set([
|
|
124
|
+
'intent', 'legacy_audit', 'vault_inventory', 'clarification',
|
|
125
|
+
'specs', 'approvals', 'bootstrap', 'deploy', 'postlaunch',
|
|
126
|
+
]);
|
|
127
|
+
const VALID_TOP_LEVEL = new Set([
|
|
128
|
+
'tier', 'tier_reason', 'tier_decided_at', 'blocks_progress', 'iterations',
|
|
129
|
+
]);
|
|
130
|
+
export async function runWorkflowSet(args, ctx) {
|
|
131
|
+
const group = String(args.group ?? '').trim();
|
|
132
|
+
if (group === '') {
|
|
133
|
+
return {
|
|
134
|
+
tool: WORKFLOW_SET_SPEC.name,
|
|
135
|
+
is_error: true,
|
|
136
|
+
result: { error: 'group required' },
|
|
137
|
+
display: 'bad input: no group',
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
if (!args.patch || typeof args.patch !== 'object') {
|
|
141
|
+
return {
|
|
142
|
+
tool: WORKFLOW_SET_SPEC.name,
|
|
143
|
+
is_error: true,
|
|
144
|
+
result: { error: 'patch (object) required' },
|
|
145
|
+
display: 'bad input: no patch',
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
if (args.top_level || VALID_TOP_LEVEL.has(group)) {
|
|
149
|
+
/* Top-level patch (tier / tier_reason / tier_decided_at /
|
|
150
|
+
* blocks_progress / iterations). */
|
|
151
|
+
if (!VALID_TOP_LEVEL.has(group) && !args.top_level) {
|
|
152
|
+
return {
|
|
153
|
+
tool: WORKFLOW_SET_SPEC.name,
|
|
154
|
+
is_error: true,
|
|
155
|
+
result: { error: 'group "' + group + '" must be patched as a sub-group; see VALID_GROUPS' },
|
|
156
|
+
display: 'invalid top-level group',
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
const top = { [group]: args.patch[group] ?? args.patch };
|
|
160
|
+
const next = await writeWorkflow(ctx.projectRoot, top);
|
|
161
|
+
return {
|
|
162
|
+
tool: WORKFLOW_SET_SPEC.name,
|
|
163
|
+
is_error: false,
|
|
164
|
+
result: { workflow: next },
|
|
165
|
+
display: 'set workflow.' + group,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
if (!VALID_GROUPS.has(group)) {
|
|
169
|
+
return {
|
|
170
|
+
tool: WORKFLOW_SET_SPEC.name,
|
|
171
|
+
is_error: true,
|
|
172
|
+
result: { error: 'group "' + group + '" not in [' + [...VALID_GROUPS].join(', ') + ']' },
|
|
173
|
+
display: 'invalid group',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
const next = await patchWorkflowGroup(ctx.projectRoot, group, args.patch);
|
|
177
|
+
return {
|
|
178
|
+
tool: WORKFLOW_SET_SPEC.name,
|
|
179
|
+
is_error: false,
|
|
180
|
+
result: { workflow: next },
|
|
181
|
+
display: 'patched workflow.' + group + ' (+' + Object.keys(args.patch).length + ' keys)',
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/* =========================================================================
|
|
185
|
+
* forge_workflow_run_step
|
|
186
|
+
* ========================================================================= */
|
|
187
|
+
export const WORKFLOW_RUN_STEP_SPEC = {
|
|
188
|
+
name: 'forge_workflow_run_step',
|
|
189
|
+
description: 'Run an autonomous workflow step that does NOT need user '
|
|
190
|
+
+ 'questions. Reads the project + writes the state. Valid steps:\n'
|
|
191
|
+
+ ' - legacy_audit: scan repo for framework + NAC-3 readiness\n'
|
|
192
|
+
+ ' - coverage: check NAC-3 structural coverage 100%\n'
|
|
193
|
+
+ ' - manual_generate: write docs/manual.<lang>.md per locale\n'
|
|
194
|
+
+ ' - handoff: write docs/HANDOFF.md from current state\n'
|
|
195
|
+
+ ' - metrics: write docs/observability.md checklist\n'
|
|
196
|
+
+ 'Returns the persisted state slice + a human display string. '
|
|
197
|
+
+ 'Use this after collecting any prerequisite answers via '
|
|
198
|
+
+ 'forge_workflow_set.',
|
|
199
|
+
input_schema: {
|
|
200
|
+
type: 'object',
|
|
201
|
+
properties: {
|
|
202
|
+
step: {
|
|
203
|
+
type: 'string',
|
|
204
|
+
description: 'One of: legacy_audit | coverage | manual_generate | handoff | metrics',
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
required: ['step'],
|
|
208
|
+
},
|
|
209
|
+
requires_approval: false,
|
|
210
|
+
};
|
|
211
|
+
export async function runWorkflowRunStep(args, ctx) {
|
|
212
|
+
const step = String(args.step ?? '').trim();
|
|
213
|
+
switch (step) {
|
|
214
|
+
case 'legacy_audit': {
|
|
215
|
+
const { runLegacyAudit } = await import('../../commands/legacy-audit.js');
|
|
216
|
+
await runLegacyAudit({ cwd: ctx.projectRoot });
|
|
217
|
+
const wf = await readWorkflow(ctx.projectRoot);
|
|
218
|
+
return {
|
|
219
|
+
tool: WORKFLOW_RUN_STEP_SPEC.name,
|
|
220
|
+
is_error: false,
|
|
221
|
+
result: { step, legacy_audit: wf.legacy_audit ?? null },
|
|
222
|
+
display: 'legacy_audit done; readiness=' + (wf.legacy_audit?.nac3_readiness ?? '?') + '%',
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
case 'coverage': {
|
|
226
|
+
const { runCoverage } = await import('../../commands/workflow-coverage.js');
|
|
227
|
+
/* runCoverage prints to stdout + sets exit code. We do not
|
|
228
|
+
* read its return because the function returns void. Instead
|
|
229
|
+
* we re-derive coverage from manifest + tests directly here
|
|
230
|
+
* for the structured result. */
|
|
231
|
+
const before = process.exitCode;
|
|
232
|
+
await runCoverage({ cwd: ctx.projectRoot, ifFailingExit1: false });
|
|
233
|
+
const after = process.exitCode;
|
|
234
|
+
process.exitCode = before;
|
|
235
|
+
return {
|
|
236
|
+
tool: WORKFLOW_RUN_STEP_SPEC.name,
|
|
237
|
+
is_error: false,
|
|
238
|
+
result: { step, coverage_failed: after === 1 },
|
|
239
|
+
display: 'coverage run; failed=' + (after === 1),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
case 'manual_generate': {
|
|
243
|
+
const mod = await import('../../commands/operate.js');
|
|
244
|
+
/* operate.ts does not export the verb fns directly. We
|
|
245
|
+
* re-invoke the underlying flow via state inspection +
|
|
246
|
+
* manual writes -- avoiding a CLI parser re-entry. */
|
|
247
|
+
const { runManualGenerateFromTool } = await __compatLayer();
|
|
248
|
+
const docs = await runManualGenerateFromTool(ctx.projectRoot);
|
|
249
|
+
void mod; /* silence unused import */
|
|
250
|
+
return {
|
|
251
|
+
tool: WORKFLOW_RUN_STEP_SPEC.name,
|
|
252
|
+
is_error: false,
|
|
253
|
+
result: { step, docs },
|
|
254
|
+
display: 'manual_generate wrote ' + docs.length + ' file(s)',
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
case 'handoff': {
|
|
258
|
+
const { runHandoffFromTool } = await __compatLayer();
|
|
259
|
+
const docPath = await runHandoffFromTool(ctx.projectRoot);
|
|
260
|
+
return {
|
|
261
|
+
tool: WORKFLOW_RUN_STEP_SPEC.name,
|
|
262
|
+
is_error: false,
|
|
263
|
+
result: { step, doc_path: docPath },
|
|
264
|
+
display: 'handoff doc written at ' + docPath,
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
case 'metrics': {
|
|
268
|
+
const { runMetricsFromTool } = await __compatLayer();
|
|
269
|
+
const docPath = await runMetricsFromTool(ctx.projectRoot);
|
|
270
|
+
return {
|
|
271
|
+
tool: WORKFLOW_RUN_STEP_SPEC.name,
|
|
272
|
+
is_error: false,
|
|
273
|
+
result: { step, doc_path: docPath },
|
|
274
|
+
display: 'observability checklist written at ' + docPath,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
default:
|
|
278
|
+
return {
|
|
279
|
+
tool: WORKFLOW_RUN_STEP_SPEC.name,
|
|
280
|
+
is_error: true,
|
|
281
|
+
result: { error: 'unknown step "' + step + '"' },
|
|
282
|
+
display: 'unknown step',
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
let _compat = null;
|
|
287
|
+
async function __compatLayer() {
|
|
288
|
+
if (_compat)
|
|
289
|
+
return _compat;
|
|
290
|
+
const { promises: fs } = await import('node:fs');
|
|
291
|
+
_compat = {
|
|
292
|
+
async runManualGenerateFromTool(projectRoot) {
|
|
293
|
+
const wf = await readWorkflow(projectRoot);
|
|
294
|
+
const blocks = wf.clarification?.blocks?.blocks ?? [];
|
|
295
|
+
const opSummary = wf.clarification?.nfr_operational?.summary ?? '';
|
|
296
|
+
const localesMatch = opSummary.match(/(\d+) locales/);
|
|
297
|
+
const localesCount = localesMatch ? parseInt(localesMatch[1] ?? '1', 10) : 1;
|
|
298
|
+
const locales = localesCount > 1 ? ['es', 'en'] : ['es'];
|
|
299
|
+
const dir = path.join(projectRoot, 'docs', 'manual');
|
|
300
|
+
await fs.mkdir(dir, { recursive: true });
|
|
301
|
+
const stamp = new Date().toISOString();
|
|
302
|
+
const written = [];
|
|
303
|
+
for (const lang of locales) {
|
|
304
|
+
const fp = path.join(dir, 'manual.' + lang + '.md');
|
|
305
|
+
const blocksList = blocks
|
|
306
|
+
.map((b) => '- **' + b.name + '** (' + b.id + '): ' + (b.mvp ? 'MVP' : 'optional'))
|
|
307
|
+
.join('\n');
|
|
308
|
+
const body = [
|
|
309
|
+
'# Manual de usuario (' + lang + ')',
|
|
310
|
+
'',
|
|
311
|
+
'*Generado por forge_workflow_run_step el ' + stamp + '.*',
|
|
312
|
+
'',
|
|
313
|
+
'## Que hace esta app',
|
|
314
|
+
'',
|
|
315
|
+
(wf.clarification?.functional?.summary ?? 'TBD'),
|
|
316
|
+
'',
|
|
317
|
+
'## Funcionalidades',
|
|
318
|
+
'',
|
|
319
|
+
blocksList,
|
|
320
|
+
'',
|
|
321
|
+
'## Como empezar',
|
|
322
|
+
'',
|
|
323
|
+
'TBD: completar el quick-start una vez que la primera version este live.',
|
|
324
|
+
].join('\n');
|
|
325
|
+
await fs.writeFile(fp, body, 'utf-8');
|
|
326
|
+
written.push(path.relative(projectRoot, fp));
|
|
327
|
+
}
|
|
328
|
+
await patchWorkflowGroup(projectRoot, 'postlaunch', {
|
|
329
|
+
manual_at: stamp,
|
|
330
|
+
dashboards_at: wf.postlaunch?.dashboards_at ?? '',
|
|
331
|
+
feedback_channel: wf.postlaunch?.feedback_channel ?? '',
|
|
332
|
+
});
|
|
333
|
+
return written;
|
|
334
|
+
},
|
|
335
|
+
async runHandoffFromTool(projectRoot) {
|
|
336
|
+
const wf = await readWorkflow(projectRoot);
|
|
337
|
+
const stamp = new Date().toISOString();
|
|
338
|
+
const fp = path.join(projectRoot, 'docs', 'HANDOFF.md');
|
|
339
|
+
await fs.mkdir(path.dirname(fp), { recursive: true });
|
|
340
|
+
const body = [
|
|
341
|
+
'# Handoff package',
|
|
342
|
+
'',
|
|
343
|
+
'*Generado por forge_workflow_run_step el ' + stamp + '.*',
|
|
344
|
+
'*Tier: ' + (wf.tier ?? 'unknown') + '*',
|
|
345
|
+
'',
|
|
346
|
+
'## Que es esta app',
|
|
347
|
+
'',
|
|
348
|
+
(wf.clarification?.functional?.summary ?? 'TBD'),
|
|
349
|
+
'',
|
|
350
|
+
'## Decisiones de arquitectura',
|
|
351
|
+
'',
|
|
352
|
+
'- Persistencia: ver ' + (wf.clarification?.nfr_structural?.doc_path ?? 'TBD'),
|
|
353
|
+
'- Compliance: ver ' + (wf.clarification?.nfr_governance?.doc_path ?? 'TBD'),
|
|
354
|
+
'- Observability: ver ' + (wf.clarification?.nfr_operational?.doc_path ?? 'TBD'),
|
|
355
|
+
'',
|
|
356
|
+
'## Credenciales activas',
|
|
357
|
+
'',
|
|
358
|
+
...Object.entries(wf.vault_inventory?.families ?? {})
|
|
359
|
+
.map(([fam, st]) => '- **' + fam + '**: ' + st),
|
|
360
|
+
'',
|
|
361
|
+
'## Bloques + estado',
|
|
362
|
+
'',
|
|
363
|
+
...((wf.clarification?.blocks?.blocks ?? []).map((b) => {
|
|
364
|
+
const pp = (wf.blocks_progress ?? []).find((x) => x.block_id === b.id);
|
|
365
|
+
return '- **' + b.name + '** (' + b.id + '): ' + (pp?.status ?? 'pending');
|
|
366
|
+
})),
|
|
367
|
+
].join('\n');
|
|
368
|
+
await fs.writeFile(fp, body, 'utf-8');
|
|
369
|
+
return path.relative(projectRoot, fp);
|
|
370
|
+
},
|
|
371
|
+
async runMetricsFromTool(projectRoot) {
|
|
372
|
+
const wf = await readWorkflow(projectRoot);
|
|
373
|
+
const stamp = new Date().toISOString();
|
|
374
|
+
const opSummary = wf.clarification?.nfr_operational?.summary ?? '';
|
|
375
|
+
const checklist = [
|
|
376
|
+
'# Observability dashboards setup',
|
|
377
|
+
'',
|
|
378
|
+
'*Generado por forge_workflow_run_step el ' + stamp + '.*',
|
|
379
|
+
'',
|
|
380
|
+
'## A configurar manualmente:',
|
|
381
|
+
'- Error rate dashboard + alerta umbral.',
|
|
382
|
+
'- Latency p95 dashboard.',
|
|
383
|
+
'- Cost-per-day tracker.',
|
|
384
|
+
'- Free-tier limit watchdog.',
|
|
385
|
+
'- Custom KPI: ' + (wf.clarification?.functional?.summary ?? 'TBD'),
|
|
386
|
+
'',
|
|
387
|
+
'## Settings extraidas',
|
|
388
|
+
'',
|
|
389
|
+
opSummary || '_(operational clarification vacio)_',
|
|
390
|
+
].join('\n');
|
|
391
|
+
const fp = path.join(projectRoot, 'docs', 'observability.md');
|
|
392
|
+
await fs.mkdir(path.dirname(fp), { recursive: true });
|
|
393
|
+
await fs.writeFile(fp, checklist, 'utf-8');
|
|
394
|
+
await patchWorkflowGroup(projectRoot, 'postlaunch', {
|
|
395
|
+
manual_at: wf.postlaunch?.manual_at ?? '',
|
|
396
|
+
dashboards_at: stamp,
|
|
397
|
+
feedback_channel: wf.postlaunch?.feedback_channel ?? 'TBD',
|
|
398
|
+
});
|
|
399
|
+
return path.relative(projectRoot, fp);
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
return _compat;
|
|
403
|
+
}
|
|
404
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../../src/chat/tools/workflow.ts"],"names":[],"mappings":"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"}
|
package/dist/chat/tools.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/chat/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/chat/tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAiEH,wDAAwD;AACxD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE;QACZ,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;SAAE,CAAC,CAAC;QACxG,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IACF,gEAAgE;IAChE,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,MAAM,EAAE,OAAO,CAAC;IAChB;;gDAE4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,eAAO,MAAM,kBAAkB,EAAE,QAchC,CAAC;AAEF,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA+C3G;AAMD,eAAO,MAAM,gBAAgB,EAAE,QAkB9B,CAAC;AAEF,MAAM,WAAW,OAAO;IACtB,4DAA4D;IAC5D,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,EAC7C,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAmDrB;AAED;;0BAE0B;AAC1B,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAU,GAAG,OAAO,EAAE,CAkClF;AAoBD,eAAO,MAAM,eAAe,EAAE,QAsB7B,CAAC;AAOF,wBAAsB,YAAY,CAChC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC5D,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAkErB;AASD;;;0BAG0B;AAC1B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAUhG;AAMD,eAAO,MAAM,cAAc,EAAE,QAkB5B,CAAC;AAKF,wBAAsB,WAAW,CAC/B,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1C,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAiGrB;AAaD,eAAO,MAAM,gBAAgB,EAAE,QAAQ,EA8CtC,CAAC;AAEF;oEACoE;AACpE,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,WAAW,GACf,OAAO,CAAC,UAAU,CAAC,CAgErB"}
|