@entelligentsia/forgecli 0.6.6 → 0.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +88 -0
- package/README.md +28 -1
- package/dist/bin/forge.js +20 -0
- package/dist/bin/forge.js.map +1 -1
- package/dist/extensions/forgecli/approve.d.ts +24 -0
- package/dist/extensions/forgecli/approve.js +202 -0
- package/dist/extensions/forgecli/approve.js.map +1 -0
- package/dist/extensions/forgecli/audience-gate.d.ts +4 -0
- package/dist/extensions/forgecli/audience-gate.js +8 -5
- package/dist/extensions/forgecli/audience-gate.js.map +1 -1
- package/dist/extensions/forgecli/collate.d.ts +24 -0
- package/dist/extensions/forgecli/collate.js +199 -0
- package/dist/extensions/forgecli/collate.js.map +1 -0
- package/dist/extensions/forgecli/commit.d.ts +24 -0
- package/dist/extensions/forgecli/commit.js +202 -0
- package/dist/extensions/forgecli/commit.js.map +1 -0
- package/dist/extensions/forgecli/fix-bug.d.ts +75 -0
- package/dist/extensions/forgecli/fix-bug.js +1133 -0
- package/dist/extensions/forgecli/fix-bug.js.map +1 -0
- package/dist/extensions/forgecli/forge-commands.js +7 -0
- package/dist/extensions/forgecli/forge-commands.js.map +1 -1
- package/dist/extensions/forgecli/forge-init.js +16 -8
- package/dist/extensions/forgecli/forge-init.js.map +1 -1
- package/dist/extensions/forgecli/forge-subagent.d.ts +29 -0
- package/dist/extensions/forgecli/forge-subagent.js +14 -1
- package/dist/extensions/forgecli/forge-subagent.js.map +1 -1
- package/dist/extensions/forgecli/hook-dispatcher.d.ts +53 -1
- package/dist/extensions/forgecli/hook-dispatcher.js +47 -1
- package/dist/extensions/forgecli/hook-dispatcher.js.map +1 -1
- package/dist/extensions/forgecli/hooks/post-init-hook.d.ts +15 -0
- package/dist/extensions/forgecli/hooks/post-init-hook.js +127 -0
- package/dist/extensions/forgecli/hooks/post-init-hook.js.map +1 -0
- package/dist/extensions/forgecli/hooks/post-sprint-hook.d.ts +37 -0
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js +166 -0
- package/dist/extensions/forgecli/hooks/post-sprint-hook.js.map +1 -0
- package/dist/extensions/forgecli/index.js +47 -0
- package/dist/extensions/forgecli/index.js.map +1 -1
- package/dist/extensions/forgecli/review-code.d.ts +24 -0
- package/dist/extensions/forgecli/review-code.js +202 -0
- package/dist/extensions/forgecli/review-code.js.map +1 -0
- package/dist/extensions/forgecli/review-plan.d.ts +24 -0
- package/dist/extensions/forgecli/review-plan.js +203 -0
- package/dist/extensions/forgecli/review-plan.js.map +1 -0
- package/dist/extensions/forgecli/run-sprint.d.ts +18 -0
- package/dist/extensions/forgecli/run-sprint.js +33 -1
- package/dist/extensions/forgecli/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/run-task.d.ts +21 -2
- package/dist/extensions/forgecli/run-task.js +33 -9
- package/dist/extensions/forgecli/run-task.js.map +1 -1
- package/dist/extensions/forgecli/session-registry.d.ts +10 -0
- package/dist/extensions/forgecli/session-registry.js +9 -0
- package/dist/extensions/forgecli/session-registry.js.map +1 -1
- package/dist/extensions/forgecli/validate.d.ts +24 -0
- package/dist/extensions/forgecli/validate.js +202 -0
- package/dist/extensions/forgecli/validate.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/engine.d.ts +23 -0
- package/dist/extensions/forgecli/wf-engine/engine.js +384 -0
- package/dist/extensions/forgecli/wf-engine/engine.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/event-parser.d.ts +6 -0
- package/dist/extensions/forgecli/wf-engine/event-parser.js +29 -0
- package/dist/extensions/forgecli/wf-engine/event-parser.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/id-gen.d.ts +6 -0
- package/dist/extensions/forgecli/wf-engine/id-gen.js +17 -0
- package/dist/extensions/forgecli/wf-engine/id-gen.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/loader.d.ts +2 -0
- package/dist/extensions/forgecli/wf-engine/loader.js +100 -0
- package/dist/extensions/forgecli/wf-engine/loader.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/predicate.d.ts +7 -0
- package/dist/extensions/forgecli/wf-engine/predicate.js +36 -0
- package/dist/extensions/forgecli/wf-engine/predicate.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/prompt-compiler.d.ts +15 -0
- package/dist/extensions/forgecli/wf-engine/prompt-compiler.js +23 -0
- package/dist/extensions/forgecli/wf-engine/prompt-compiler.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/register.d.ts +9 -0
- package/dist/extensions/forgecli/wf-engine/register.js +59 -0
- package/dist/extensions/forgecli/wf-engine/register.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/remit-check.d.ts +6 -0
- package/dist/extensions/forgecli/wf-engine/remit-check.js +42 -0
- package/dist/extensions/forgecli/wf-engine/remit-check.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/state-store.d.ts +13 -0
- package/dist/extensions/forgecli/wf-engine/state-store.js +43 -0
- package/dist/extensions/forgecli/wf-engine/state-store.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/types.d.ts +66 -0
- package/dist/extensions/forgecli/wf-engine/types.js +2 -0
- package/dist/extensions/forgecli/wf-engine/types.js.map +1 -0
- package/dist/extensions/forgecli/wf-engine/worker.d.ts +11 -0
- package/dist/extensions/forgecli/wf-engine/worker.js +50 -0
- package/dist/extensions/forgecli/wf-engine/worker.js.map +1 -0
- package/dist/forge-payload/.base-pack/workflows/_fragments/context-injection.md +10 -4
- package/dist/forge-payload/.base-pack/workflows/fix_bug.md +12 -0
- package/dist/forge-payload/.schemas/bug.schema.json +4 -2
- package/dist/forge-payload/.schemas/event.schema.json +22 -3
- package/dist/forge-payload/commands/add-pipeline.md +342 -0
- package/dist/forge-payload/commands/add-task.md +269 -0
- package/dist/forge-payload/commands/ask.md +43 -0
- package/dist/forge-payload/commands/calibrate.md +356 -0
- package/dist/forge-payload/commands/config.md +202 -0
- package/dist/forge-payload/commands/enhance.md +38 -0
- package/dist/forge-payload/commands/health.md +225 -0
- package/dist/forge-payload/commands/init.md +165 -0
- package/dist/forge-payload/commands/materialize.md +119 -0
- package/dist/forge-payload/commands/migrate.md +160 -0
- package/dist/forge-payload/commands/quiz-agent.md +38 -0
- package/dist/forge-payload/commands/regenerate.md +673 -0
- package/dist/forge-payload/commands/remove.md +174 -0
- package/dist/forge-payload/commands/report-bug.md +191 -0
- package/dist/forge-payload/commands/store-query.md +73 -0
- package/dist/forge-payload/commands/store-repair.md +187 -0
- package/dist/forge-payload/commands/update-tools.md +56 -0
- package/dist/forge-payload/commands/update.md +1376 -0
- package/dist/forge-payload/tools/preflight-gate.cjs +2 -1
- package/dist/forge-payload/tools/read-verdict.cjs +41 -8
- package/dist/forge-payload/tools/store-cli.cjs +4 -3
- package/node_modules/argparse/CHANGELOG.md +216 -0
- package/node_modules/argparse/LICENSE +254 -0
- package/node_modules/argparse/README.md +84 -0
- package/node_modules/argparse/argparse.js +3707 -0
- package/node_modules/argparse/lib/sub.js +67 -0
- package/node_modules/argparse/lib/textwrap.js +440 -0
- package/node_modules/argparse/package.json +31 -0
- package/node_modules/cliui/CHANGELOG.md +121 -0
- package/node_modules/color-convert/CHANGELOG.md +54 -0
- package/node_modules/esprima/ChangeLog +235 -0
- package/node_modules/js-yaml/LICENSE +21 -0
- package/node_modules/js-yaml/README.md +247 -0
- package/node_modules/js-yaml/bin/js-yaml.js +126 -0
- package/node_modules/js-yaml/dist/js-yaml.js +3880 -0
- package/node_modules/js-yaml/dist/js-yaml.min.js +2 -0
- package/node_modules/js-yaml/dist/js-yaml.mjs +3856 -0
- package/node_modules/js-yaml/index.js +47 -0
- package/node_modules/js-yaml/lib/common.js +59 -0
- package/node_modules/js-yaml/lib/dumper.js +965 -0
- package/node_modules/js-yaml/lib/exception.js +55 -0
- package/node_modules/js-yaml/lib/loader.js +1733 -0
- package/node_modules/js-yaml/lib/schema/core.js +11 -0
- package/node_modules/js-yaml/lib/schema/default.js +22 -0
- package/node_modules/js-yaml/lib/schema/failsafe.js +17 -0
- package/node_modules/js-yaml/lib/schema/json.js +19 -0
- package/node_modules/js-yaml/lib/schema.js +121 -0
- package/node_modules/js-yaml/lib/snippet.js +101 -0
- package/node_modules/js-yaml/lib/type/binary.js +125 -0
- package/node_modules/js-yaml/lib/type/bool.js +35 -0
- package/node_modules/js-yaml/lib/type/float.js +97 -0
- package/node_modules/js-yaml/lib/type/int.js +156 -0
- package/node_modules/js-yaml/lib/type/map.js +8 -0
- package/node_modules/js-yaml/lib/type/merge.js +12 -0
- package/node_modules/js-yaml/lib/type/null.js +35 -0
- package/node_modules/js-yaml/lib/type/omap.js +44 -0
- package/node_modules/js-yaml/lib/type/pairs.js +53 -0
- package/node_modules/js-yaml/lib/type/seq.js +8 -0
- package/node_modules/js-yaml/lib/type/set.js +29 -0
- package/node_modules/js-yaml/lib/type/str.js +8 -0
- package/node_modules/js-yaml/lib/type/timestamp.js +88 -0
- package/node_modules/js-yaml/lib/type.js +66 -0
- package/node_modules/js-yaml/package.json +66 -0
- package/node_modules/mz/HISTORY.md +66 -0
- package/node_modules/proper-lockfile/CHANGELOG.md +108 -0
- package/node_modules/source-map/CHANGELOG.md +301 -0
- package/node_modules/thenify/History.md +11 -0
- package/node_modules/thenify-all/History.md +11 -0
- package/node_modules/y18n/CHANGELOG.md +100 -0
- package/node_modules/yargs/CHANGELOG.md +88 -0
- package/node_modules/yargs-parser/CHANGELOG.md +263 -0
- package/package.json +6 -2
- package/workflows/lead-qualifier/prompts/digest.md +44 -0
- package/workflows/lead-qualifier/prompts/draft-outreach.md +44 -0
- package/workflows/lead-qualifier/prompts/enrich.md +52 -0
- package/workflows/lead-qualifier/prompts/intake.md +48 -0
- package/workflows/lead-qualifier/prompts/mark-cold.md +38 -0
- package/workflows/lead-qualifier/prompts/score.md +45 -0
- package/workflows/lead-qualifier/workflow.yaml +95 -0
- package/workflows/research-brief/prompts/brief-synthesize.md +43 -0
- package/workflows/research-brief/prompts/intake.md +51 -0
- package/workflows/research-brief/prompts/source-critique.md +38 -0
- package/workflows/research-brief/prompts/source-score.md +38 -0
- package/workflows/research-brief/prompts/source-summarize.md +54 -0
- package/workflows/research-brief/workflow.yaml +66 -0
- package/dist/extensions/forgecli/session-monitor-widget.d.ts +0 -37
- package/dist/extensions/forgecli/session-monitor-widget.js +0 -320
- package/dist/extensions/forgecli/session-monitor-widget.js.map +0 -1
- package/dist/extensions/forgecli/session-monitor.d.ts +0 -2
- package/dist/extensions/forgecli/session-monitor.js +0 -135
- package/dist/extensions/forgecli/session-monitor.js.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Role
|
|
2
|
+
You are the `brief-synthesize` node — produce the final research brief.
|
|
3
|
+
|
|
4
|
+
# Inputs
|
|
5
|
+
- Original question: state.entryPrompt
|
|
6
|
+
- Full state JSON:
|
|
7
|
+
{{state}}
|
|
8
|
+
|
|
9
|
+
# Your remit
|
|
10
|
+
Read every source's summary (artifacts/sources/*.summary.md), its score, and its critique.
|
|
11
|
+
Produce `artifacts/BRIEF.md` — a single document with:
|
|
12
|
+
|
|
13
|
+
- TL;DR (3–5 sentences)
|
|
14
|
+
- Findings (grouped, with inline source citations using the source ids)
|
|
15
|
+
- Open questions (from the critiques)
|
|
16
|
+
- Sources table (id, title, kind, score)
|
|
17
|
+
|
|
18
|
+
# Output protocol (MANDATORY)
|
|
19
|
+
|
|
20
|
+
```json events
|
|
21
|
+
[
|
|
22
|
+
{ "type": "started" },
|
|
23
|
+
{
|
|
24
|
+
"type": "success",
|
|
25
|
+
"summary": "Brief written",
|
|
26
|
+
"writes": {
|
|
27
|
+
"artifact": {
|
|
28
|
+
"path": "artifacts/BRIEF.md",
|
|
29
|
+
"content": "# Research Brief\n\n## TL;DR\n...\n\n## Findings\n...\n\n## Open Questions\n...\n\n## Sources\n| id | title | kind | score |\n|---|---|---|---|\n..."
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
On failure:
|
|
37
|
+
|
|
38
|
+
```json events
|
|
39
|
+
[
|
|
40
|
+
{ "type": "started" },
|
|
41
|
+
{ "type": "failure", "reason": "cannot-synthesize", "details": "<why>" }
|
|
42
|
+
]
|
|
43
|
+
```
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Role
|
|
2
|
+
You are the `intake` node of the `research-brief` workflow.
|
|
3
|
+
|
|
4
|
+
# Inputs
|
|
5
|
+
- Workflow instance: {{wf.instanceId}}
|
|
6
|
+
- Working directory: {{wf.workingDir}}
|
|
7
|
+
- Your node exec id: {{node.execId}}
|
|
8
|
+
- Current state JSON:
|
|
9
|
+
{{state}}
|
|
10
|
+
|
|
11
|
+
# Your remit
|
|
12
|
+
Read `state.entryPrompt` (the user's research question). Identify 2 to 4 plausible
|
|
13
|
+
information sources that would help answer it. For each source, produce:
|
|
14
|
+
- `id`: a short kebab-case identifier (e.g. "rfc-9001", "nist-pqc-report")
|
|
15
|
+
- `url`: a real or representative URL
|
|
16
|
+
- `title`: human-readable title
|
|
17
|
+
- `kind`: one of "spec" / "paper" / "report" / "blog" / "doc"
|
|
18
|
+
|
|
19
|
+
# Output protocol (MANDATORY)
|
|
20
|
+
End your reply with a fenced ```json events block. The engine parses ONLY this block.
|
|
21
|
+
Exactly two events: `started`, then `success` (or `failure` if the prompt is unintelligible).
|
|
22
|
+
|
|
23
|
+
Example success:
|
|
24
|
+
|
|
25
|
+
```json events
|
|
26
|
+
[
|
|
27
|
+
{ "type": "started" },
|
|
28
|
+
{
|
|
29
|
+
"type": "success",
|
|
30
|
+
"summary": "Identified 3 sources for post-quantum crypto adoption",
|
|
31
|
+
"writes": {
|
|
32
|
+
"state": {
|
|
33
|
+
"sources": [
|
|
34
|
+
{ "id": "nist-pqc", "url": "https://csrc.nist.gov/projects/post-quantum-cryptography", "title": "NIST PQC Project", "kind": "report" },
|
|
35
|
+
{ "id": "rfc-9180", "url": "https://www.rfc-editor.org/rfc/rfc9180", "title": "RFC 9180 (HPKE)", "kind": "spec" },
|
|
36
|
+
{ "id": "cloudflare-pq", "url": "https://blog.cloudflare.com/pq-2024/", "title": "Cloudflare PQ rollout 2024", "kind": "blog" }
|
|
37
|
+
]
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Example failure:
|
|
45
|
+
|
|
46
|
+
```json events
|
|
47
|
+
[
|
|
48
|
+
{ "type": "started" },
|
|
49
|
+
{ "type": "failure", "reason": "unintelligible-prompt", "details": "entryPrompt was empty or not parseable as a research question" }
|
|
50
|
+
]
|
|
51
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Role
|
|
2
|
+
You are the `source-critique` node — identify gaps, biases, or follow-up questions for one source.
|
|
3
|
+
|
|
4
|
+
# Inputs
|
|
5
|
+
- Source (loop item):
|
|
6
|
+
{{loop.item}}
|
|
7
|
+
|
|
8
|
+
# Your remit
|
|
9
|
+
Produce a short critique (1–3 bullets) and 1–2 follow-up questions.
|
|
10
|
+
|
|
11
|
+
# Output protocol (MANDATORY)
|
|
12
|
+
|
|
13
|
+
```json events
|
|
14
|
+
[
|
|
15
|
+
{ "type": "started" },
|
|
16
|
+
{
|
|
17
|
+
"type": "success",
|
|
18
|
+
"summary": "Critiqued {{loop.item.id}}",
|
|
19
|
+
"writes": {
|
|
20
|
+
"state": {
|
|
21
|
+
"sources.{{loop.item.id}}.critique": {
|
|
22
|
+
"concerns": ["..."],
|
|
23
|
+
"followUps": ["..."]
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
On failure:
|
|
32
|
+
|
|
33
|
+
```json events
|
|
34
|
+
[
|
|
35
|
+
{ "type": "started" },
|
|
36
|
+
{ "type": "failure", "reason": "cannot-critique", "details": "<why>" }
|
|
37
|
+
]
|
|
38
|
+
```
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Role
|
|
2
|
+
You are the `source-score` node — assign quality scores to one source.
|
|
3
|
+
|
|
4
|
+
# Inputs
|
|
5
|
+
- Source (loop item):
|
|
6
|
+
{{loop.item}}
|
|
7
|
+
|
|
8
|
+
# Your remit
|
|
9
|
+
Score the source on three axes, each 1–5:
|
|
10
|
+
- `relevance`: how directly relevant to the research question (state.entryPrompt)
|
|
11
|
+
- `recency`: how recent / current the source is
|
|
12
|
+
- `authority`: how authoritative the source is
|
|
13
|
+
|
|
14
|
+
# Output protocol (MANDATORY)
|
|
15
|
+
|
|
16
|
+
```json events
|
|
17
|
+
[
|
|
18
|
+
{ "type": "started" },
|
|
19
|
+
{
|
|
20
|
+
"type": "success",
|
|
21
|
+
"summary": "Scored {{loop.item.id}}",
|
|
22
|
+
"writes": {
|
|
23
|
+
"state": {
|
|
24
|
+
"sources.{{loop.item.id}}.score": { "relevance": 5, "recency": 4, "authority": 5 }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
On failure:
|
|
32
|
+
|
|
33
|
+
```json events
|
|
34
|
+
[
|
|
35
|
+
{ "type": "started" },
|
|
36
|
+
{ "type": "failure", "reason": "cannot-score", "details": "<why>" }
|
|
37
|
+
]
|
|
38
|
+
```
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Role
|
|
2
|
+
You are the `source-summarize` node of the `research-brief` workflow, executing for one source.
|
|
3
|
+
|
|
4
|
+
# Inputs
|
|
5
|
+
- Workflow instance: {{wf.instanceId}}
|
|
6
|
+
- Your node exec id: {{node.execId}}
|
|
7
|
+
- Current source (loop item):
|
|
8
|
+
{{loop.item}}
|
|
9
|
+
|
|
10
|
+
# Your remit
|
|
11
|
+
Produce a structured summary of the source identified by `loop.item.url` / `loop.item.title`.
|
|
12
|
+
You do not need to actually fetch the URL — write a plausible summary based on the title
|
|
13
|
+
and what such a source typically contains. The summary should include:
|
|
14
|
+
|
|
15
|
+
- thesis: ≤200 chars
|
|
16
|
+
- key-claims: 3–7 bullet points
|
|
17
|
+
- methodology: 1–3 sentences
|
|
18
|
+
- limitations: 1–3 sentences
|
|
19
|
+
|
|
20
|
+
# Output protocol (MANDATORY)
|
|
21
|
+
End your reply with a fenced ```json events block. Exactly two events: `started`, then
|
|
22
|
+
`success` carrying both the artifact (the full markdown summary) and a state write.
|
|
23
|
+
|
|
24
|
+
The artifact path MUST be exactly `artifacts/sources/{{loop.item.id}}.summary.md`.
|
|
25
|
+
|
|
26
|
+
Example:
|
|
27
|
+
|
|
28
|
+
```json events
|
|
29
|
+
[
|
|
30
|
+
{ "type": "started" },
|
|
31
|
+
{
|
|
32
|
+
"type": "success",
|
|
33
|
+
"summary": "Summarized {{loop.item.id}}",
|
|
34
|
+
"writes": {
|
|
35
|
+
"artifact": {
|
|
36
|
+
"path": "artifacts/sources/{{loop.item.id}}.summary.md",
|
|
37
|
+
"content": "# Summary: <title>\n\n## Thesis\n...\n\n## Key Claims\n- ...\n\n## Methodology\n...\n\n## Limitations\n...\n"
|
|
38
|
+
},
|
|
39
|
+
"state": {
|
|
40
|
+
"sources.{{loop.item.id}}.summarized": true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
]
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
If you cannot summarize (e.g. source kind is unknown):
|
|
48
|
+
|
|
49
|
+
```json events
|
|
50
|
+
[
|
|
51
|
+
{ "type": "started" },
|
|
52
|
+
{ "type": "failure", "reason": "cannot-summarize", "details": "<why>" }
|
|
53
|
+
]
|
|
54
|
+
```
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
id: research-brief
|
|
2
|
+
version: 1
|
|
3
|
+
description: Multi-source research brief synthesis — 5-node PoC with 3 loop-body nodes.
|
|
4
|
+
|
|
5
|
+
nodes:
|
|
6
|
+
- id: intake
|
|
7
|
+
prompt: prompts/intake.md
|
|
8
|
+
expects:
|
|
9
|
+
success:
|
|
10
|
+
writes:
|
|
11
|
+
state: [sources]
|
|
12
|
+
failure: {}
|
|
13
|
+
|
|
14
|
+
- id: source-summarize
|
|
15
|
+
prompt: prompts/source-summarize.md
|
|
16
|
+
loop:
|
|
17
|
+
over: sources
|
|
18
|
+
alias: loop.item
|
|
19
|
+
expects:
|
|
20
|
+
success:
|
|
21
|
+
writes:
|
|
22
|
+
artifact: { pattern: "artifacts/sources/{loop.item.id}.summary.md" }
|
|
23
|
+
state: ["sources.{loop.item.id}.summarized"]
|
|
24
|
+
failure: {}
|
|
25
|
+
|
|
26
|
+
- id: source-score
|
|
27
|
+
prompt: prompts/source-score.md
|
|
28
|
+
loop:
|
|
29
|
+
over: sources
|
|
30
|
+
alias: loop.item
|
|
31
|
+
expects:
|
|
32
|
+
success:
|
|
33
|
+
writes:
|
|
34
|
+
state: ["sources.{loop.item.id}.score"]
|
|
35
|
+
failure: {}
|
|
36
|
+
|
|
37
|
+
- id: source-critique
|
|
38
|
+
prompt: prompts/source-critique.md
|
|
39
|
+
loop:
|
|
40
|
+
over: sources
|
|
41
|
+
alias: loop.item
|
|
42
|
+
expects:
|
|
43
|
+
success:
|
|
44
|
+
writes:
|
|
45
|
+
state: ["sources.{loop.item.id}.critique"]
|
|
46
|
+
failure: {}
|
|
47
|
+
|
|
48
|
+
- id: brief-synthesize
|
|
49
|
+
prompt: prompts/brief-synthesize.md
|
|
50
|
+
expects:
|
|
51
|
+
success:
|
|
52
|
+
writes:
|
|
53
|
+
artifact: { pattern: "artifacts/BRIEF.md" }
|
|
54
|
+
failure: {}
|
|
55
|
+
|
|
56
|
+
edges:
|
|
57
|
+
- { from: intake, on: success, to: source-summarize }
|
|
58
|
+
- { from: intake, on: failure, halt: intake-failed }
|
|
59
|
+
- { from: source-summarize, on: success, advance: loop-or-next, next: source-score }
|
|
60
|
+
- { from: source-summarize, on: failure, halt: source-summarize-failed }
|
|
61
|
+
- { from: source-score, on: success, advance: loop-or-next, next: source-critique }
|
|
62
|
+
- { from: source-score, on: failure, halt: source-score-failed }
|
|
63
|
+
- { from: source-critique, on: success, advance: loop-or-next, next: brief-synthesize }
|
|
64
|
+
- { from: source-critique, on: failure, halt: source-critique-failed }
|
|
65
|
+
- { from: brief-synthesize, on: success, terminal: complete }
|
|
66
|
+
- { from: brief-synthesize, on: failure, halt: brief-failed }
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import type { Component } from "@entelligentsia/pi-tui";
|
|
2
|
-
import type { Theme } from "@entelligentsia/pi-coding-agent";
|
|
3
|
-
interface WidgetDeps {
|
|
4
|
-
theme: Theme;
|
|
5
|
-
requestRender: () => void;
|
|
6
|
-
onClose: () => void;
|
|
7
|
-
/** Called once after the widget instance is constructed. The session-monitor
|
|
8
|
-
* controller uses this to capture a reference for onTerminalInput routing. */
|
|
9
|
-
onMount?: (widget: SessionMonitorWidget) => void;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Build the widget factory expected by ctx.ui.setWidget.
|
|
13
|
-
* The factory captures dependencies (theme, render hook, close hook) and
|
|
14
|
-
* returns a fresh Component on each setWidget() call.
|
|
15
|
-
*/
|
|
16
|
-
export declare function buildSessionMonitorWidget(deps: Omit<WidgetDeps, "theme">): (tui: unknown, theme: Theme) => Component & {
|
|
17
|
-
dispose?(): void;
|
|
18
|
-
};
|
|
19
|
-
export declare class SessionMonitorWidget implements Component {
|
|
20
|
-
private registry;
|
|
21
|
-
private listener;
|
|
22
|
-
private focusedPane;
|
|
23
|
-
private selectedTaskId?;
|
|
24
|
-
private selectedEventIndex;
|
|
25
|
-
private sessionsList;
|
|
26
|
-
private eventsList;
|
|
27
|
-
private deps;
|
|
28
|
-
private disposed;
|
|
29
|
-
constructor(deps: WidgetDeps);
|
|
30
|
-
dispose(): void;
|
|
31
|
-
invalidate(): void;
|
|
32
|
-
handleInput(data: string): void;
|
|
33
|
-
render(width: number): string[];
|
|
34
|
-
private refreshSessions;
|
|
35
|
-
private rebuildEvents;
|
|
36
|
-
}
|
|
37
|
-
export {};
|
|
@@ -1,320 +0,0 @@
|
|
|
1
|
-
// session-monitor-widget.ts — embedded TUI for live subagent sessions.
|
|
2
|
-
//
|
|
3
|
-
// Renders below the input swimline via ctx.ui.setWidget(..., { placement: "belowEditor" }).
|
|
4
|
-
// Two-pane layout: sessions list (left) and events list (right), with a details
|
|
5
|
-
// footer for the highlighted event. Arrow keys navigate within the focused pane;
|
|
6
|
-
// Tab / →/← switch focus between panes; Esc closes.
|
|
7
|
-
//
|
|
8
|
-
// Subscribes to the shared SessionRegistry — every run-task subagent event causes
|
|
9
|
-
// a re-render request.
|
|
10
|
-
import { SelectList } from "@entelligentsia/pi-tui";
|
|
11
|
-
import { getSessionRegistry, } from "./session-registry.js";
|
|
12
|
-
const MAX_VISIBLE_ROWS = 10;
|
|
13
|
-
const DETAIL_LINES = 8;
|
|
14
|
-
/**
|
|
15
|
-
* Build the widget factory expected by ctx.ui.setWidget.
|
|
16
|
-
* The factory captures dependencies (theme, render hook, close hook) and
|
|
17
|
-
* returns a fresh Component on each setWidget() call.
|
|
18
|
-
*/
|
|
19
|
-
export function buildSessionMonitorWidget(deps) {
|
|
20
|
-
return (_tui, theme) => {
|
|
21
|
-
const w = new SessionMonitorWidget({
|
|
22
|
-
theme,
|
|
23
|
-
requestRender: deps.requestRender,
|
|
24
|
-
onClose: deps.onClose,
|
|
25
|
-
});
|
|
26
|
-
deps.onMount?.(w);
|
|
27
|
-
return w;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
export class SessionMonitorWidget {
|
|
31
|
-
registry;
|
|
32
|
-
listener;
|
|
33
|
-
focusedPane = "sessions";
|
|
34
|
-
selectedTaskId;
|
|
35
|
-
selectedEventIndex = 0;
|
|
36
|
-
sessionsList;
|
|
37
|
-
eventsList;
|
|
38
|
-
deps;
|
|
39
|
-
disposed = false;
|
|
40
|
-
constructor(deps) {
|
|
41
|
-
this.deps = deps;
|
|
42
|
-
this.registry = getSessionRegistry();
|
|
43
|
-
const selectTheme = buildSelectListTheme(deps.theme);
|
|
44
|
-
this.sessionsList = new SelectList([], MAX_VISIBLE_ROWS, selectTheme);
|
|
45
|
-
this.eventsList = new SelectList([], MAX_VISIBLE_ROWS, selectTheme);
|
|
46
|
-
this.sessionsList.onSelectionChange = (item) => {
|
|
47
|
-
this.selectedTaskId = item.value;
|
|
48
|
-
this.selectedEventIndex = 0;
|
|
49
|
-
this.rebuildEvents();
|
|
50
|
-
this.deps.requestRender();
|
|
51
|
-
};
|
|
52
|
-
this.eventsList.onSelectionChange = (item) => {
|
|
53
|
-
const idx = Number.parseInt(item.value, 10);
|
|
54
|
-
if (!Number.isNaN(idx)) {
|
|
55
|
-
this.selectedEventIndex = idx;
|
|
56
|
-
this.deps.requestRender();
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
this.refreshSessions();
|
|
60
|
-
this.listener = (_taskId) => {
|
|
61
|
-
if (this.disposed)
|
|
62
|
-
return;
|
|
63
|
-
this.refreshSessions();
|
|
64
|
-
if (this.focusedPane === "events" || this.selectedTaskId)
|
|
65
|
-
this.rebuildEvents();
|
|
66
|
-
this.deps.requestRender();
|
|
67
|
-
};
|
|
68
|
-
this.registry.on("change", this.listener);
|
|
69
|
-
}
|
|
70
|
-
dispose() {
|
|
71
|
-
this.disposed = true;
|
|
72
|
-
this.registry.off("change", this.listener);
|
|
73
|
-
}
|
|
74
|
-
invalidate() {
|
|
75
|
-
this.sessionsList.invalidate();
|
|
76
|
-
this.eventsList.invalidate();
|
|
77
|
-
}
|
|
78
|
-
handleInput(data) {
|
|
79
|
-
// Tab or → → focus events pane; ← → focus sessions pane.
|
|
80
|
-
// Esc closes the widget.
|
|
81
|
-
// Anything else is delegated to the focused pane.
|
|
82
|
-
if (data === "") {
|
|
83
|
-
this.deps.onClose();
|
|
84
|
-
return;
|
|
85
|
-
}
|
|
86
|
-
if (data === "\t" || data === "[C" /* right arrow */) {
|
|
87
|
-
if (this.focusedPane === "sessions") {
|
|
88
|
-
this.focusedPane = "events";
|
|
89
|
-
this.deps.requestRender();
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (data === "[D" /* left arrow */) {
|
|
94
|
-
if (this.focusedPane === "events") {
|
|
95
|
-
this.focusedPane = "sessions";
|
|
96
|
-
this.deps.requestRender();
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
if (this.focusedPane === "sessions")
|
|
101
|
-
this.sessionsList.handleInput(data);
|
|
102
|
-
else
|
|
103
|
-
this.eventsList.handleInput(data);
|
|
104
|
-
}
|
|
105
|
-
render(width) {
|
|
106
|
-
const theme = this.deps.theme;
|
|
107
|
-
const sessions = this.registry.listSessions();
|
|
108
|
-
// Layout: left pane = 40 cols (or 40% if narrow), right pane = remainder.
|
|
109
|
-
const leftWidth = Math.max(28, Math.min(44, Math.floor(width * 0.4)));
|
|
110
|
-
const rightWidth = Math.max(20, width - leftWidth - 3); // 3 cols for gutter "│ "
|
|
111
|
-
const header = theme.bold(theme.fg("accent", "Forge Sessions ") +
|
|
112
|
-
theme.fg("muted", `(${sessions.length}) `) +
|
|
113
|
-
theme.fg("muted", "[↑↓ nav Tab/→ pane Esc close]"));
|
|
114
|
-
const sessionLines = sessions.length === 0
|
|
115
|
-
? [theme.fg("muted", " (no live subagent sessions yet)")]
|
|
116
|
-
: this.sessionsList.render(leftWidth);
|
|
117
|
-
const focusedSession = this.selectedTaskId
|
|
118
|
-
? this.registry.getSession(this.selectedTaskId)
|
|
119
|
-
: undefined;
|
|
120
|
-
const rightHeaderText = focusedSession
|
|
121
|
-
? `Events: ${focusedSession.taskId} (${focusedSession.events.length})`
|
|
122
|
-
: "Events";
|
|
123
|
-
const rightHeader = theme.bold(theme.fg("accent", rightHeaderText));
|
|
124
|
-
const eventLines = focusedSession
|
|
125
|
-
? this.eventsList.render(rightWidth)
|
|
126
|
-
: [theme.fg("muted", " (select a session on the left)")];
|
|
127
|
-
const sessionsPaneTitle = this.focusedPane === "sessions" ? theme.inverse(" sessions ") : theme.fg("muted", " sessions ");
|
|
128
|
-
const eventsPaneTitle = this.focusedPane === "events" ? theme.inverse(" events ") : theme.fg("muted", " events ");
|
|
129
|
-
const leftPane = [sessionsPaneTitle, ...sessionLines];
|
|
130
|
-
const rightPane = [eventsPaneTitle, rightHeader, ...eventLines];
|
|
131
|
-
const stitched = stitchPanes(leftPane, rightPane, leftWidth, rightWidth, theme);
|
|
132
|
-
const detailLines = renderDetails(focusedSession, this.selectedEventIndex, width, theme);
|
|
133
|
-
return [header, "", ...stitched, "", ...detailLines];
|
|
134
|
-
}
|
|
135
|
-
refreshSessions() {
|
|
136
|
-
const sessions = this.registry.listSessions();
|
|
137
|
-
const items = sessions.map((s) => ({
|
|
138
|
-
value: s.taskId,
|
|
139
|
-
label: formatSessionLabel(s),
|
|
140
|
-
description: formatSessionDescription(s),
|
|
141
|
-
}));
|
|
142
|
-
this.sessionsList.invalidate();
|
|
143
|
-
// SelectList has no public setItems(); rebuild via constructor isn't ideal,
|
|
144
|
-
// but mutating its private items[] would be even uglier. Easiest: replace
|
|
145
|
-
// the instance. Keep the selected taskId stable across rebuilds.
|
|
146
|
-
const prior = this.selectedTaskId;
|
|
147
|
-
const selectedIndex = prior
|
|
148
|
-
? Math.max(0, items.findIndex((i) => i.value === prior))
|
|
149
|
-
: 0;
|
|
150
|
-
this.sessionsList = new SelectList(items, MAX_VISIBLE_ROWS, buildSelectListTheme(this.deps.theme));
|
|
151
|
-
this.sessionsList.setSelectedIndex(selectedIndex);
|
|
152
|
-
this.sessionsList.onSelectionChange = (item) => {
|
|
153
|
-
this.selectedTaskId = item.value;
|
|
154
|
-
this.selectedEventIndex = 0;
|
|
155
|
-
this.rebuildEvents();
|
|
156
|
-
this.deps.requestRender();
|
|
157
|
-
};
|
|
158
|
-
if (!this.selectedTaskId && items[0]) {
|
|
159
|
-
this.selectedTaskId = items[0].value;
|
|
160
|
-
this.rebuildEvents();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
rebuildEvents() {
|
|
164
|
-
const s = this.selectedTaskId ? this.registry.getSession(this.selectedTaskId) : undefined;
|
|
165
|
-
if (!s) {
|
|
166
|
-
this.eventsList = new SelectList([], MAX_VISIBLE_ROWS, buildSelectListTheme(this.deps.theme));
|
|
167
|
-
return;
|
|
168
|
-
}
|
|
169
|
-
// Pair tool_start + tool_end into a single line; show errors with a marker.
|
|
170
|
-
const items = [];
|
|
171
|
-
const startsByCallId = new Map();
|
|
172
|
-
s.events.forEach((ev, idx) => {
|
|
173
|
-
if (ev.kind === "tool_start") {
|
|
174
|
-
startsByCallId.set(ev.toolCallId, ev);
|
|
175
|
-
items.push({
|
|
176
|
-
value: String(idx),
|
|
177
|
-
label: formatEventLabel(ev, undefined, this.deps.theme),
|
|
178
|
-
description: shortArgHint(ev.args),
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
const start = startsByCallId.get(ev.toolCallId);
|
|
183
|
-
if (start) {
|
|
184
|
-
// Update the existing item's label with completion marker.
|
|
185
|
-
const lastIdx = items.findIndex((i) => i.value === String(idx - 1));
|
|
186
|
-
if (lastIdx >= 0) {
|
|
187
|
-
items[lastIdx] = {
|
|
188
|
-
...items[lastIdx],
|
|
189
|
-
label: formatEventLabel(start, ev, this.deps.theme),
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
else {
|
|
194
|
-
items.push({
|
|
195
|
-
value: String(idx),
|
|
196
|
-
label: formatEventLabel(ev, ev, this.deps.theme),
|
|
197
|
-
description: ev.isError ? "errored" : "ok",
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
this.eventsList = new SelectList(items, MAX_VISIBLE_ROWS, buildSelectListTheme(this.deps.theme));
|
|
203
|
-
const idx = Math.min(this.selectedEventIndex, Math.max(0, items.length - 1));
|
|
204
|
-
this.eventsList.setSelectedIndex(idx);
|
|
205
|
-
this.eventsList.onSelectionChange = (item) => {
|
|
206
|
-
const i = Number.parseInt(item.value, 10);
|
|
207
|
-
if (!Number.isNaN(i)) {
|
|
208
|
-
this.selectedEventIndex = i;
|
|
209
|
-
this.deps.requestRender();
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
function formatSessionLabel(s) {
|
|
215
|
-
const phase = s.currentPhaseRole ?? s.phases[s.phases.length - 1]?.role ?? "—";
|
|
216
|
-
const marker = s.status === "running" ? "▶" : s.status === "failed" || s.status === "escalated" ? "✗" : "✓";
|
|
217
|
-
return `${marker} ${s.taskId} ${phase}`;
|
|
218
|
-
}
|
|
219
|
-
function formatSessionDescription(s) {
|
|
220
|
-
const p = s.phases[s.phases.length - 1];
|
|
221
|
-
if (!p)
|
|
222
|
-
return "";
|
|
223
|
-
const errPart = p.errCount ? ` · err ${p.errCount}` : "";
|
|
224
|
-
const elapsed = Math.floor(((p.endedAt ?? Date.now()) - p.startedAt) / 1000);
|
|
225
|
-
return `t${p.turn} · tools ${p.toolCount}${errPart} · ${elapsed}s`;
|
|
226
|
-
}
|
|
227
|
-
function formatEventLabel(start, end, theme) {
|
|
228
|
-
const ts = new Date(start.ts).toISOString().slice(11, 19);
|
|
229
|
-
const hint = shortArgHint(start.args);
|
|
230
|
-
const status = end ? (end.isError ? theme.fg("error", "✗") : theme.fg("success", "✓")) : "·";
|
|
231
|
-
return `${ts} ${status} ${start.toolName}${hint ? ` ${hint}` : ""}`;
|
|
232
|
-
}
|
|
233
|
-
function shortArgHint(args) {
|
|
234
|
-
if (!args || typeof args !== "object")
|
|
235
|
-
return "";
|
|
236
|
-
const a = args;
|
|
237
|
-
const fp = (a.file_path ?? a.path);
|
|
238
|
-
if (typeof fp === "string") {
|
|
239
|
-
const base = fp.split("/").pop() ?? fp;
|
|
240
|
-
return base.length > 28 ? `${base.slice(0, 28)}…` : base;
|
|
241
|
-
}
|
|
242
|
-
if (typeof a.command === "string") {
|
|
243
|
-
const head = a.command.split(/\s+/).slice(0, 3).join(" ");
|
|
244
|
-
return head.length > 36 ? `${head.slice(0, 36)}…` : head;
|
|
245
|
-
}
|
|
246
|
-
if (typeof a.pattern === "string")
|
|
247
|
-
return a.pattern.slice(0, 36);
|
|
248
|
-
if (typeof a.query === "string")
|
|
249
|
-
return a.query.slice(0, 36);
|
|
250
|
-
return "";
|
|
251
|
-
}
|
|
252
|
-
function renderDetails(session, eventIndex, width, theme) {
|
|
253
|
-
if (!session)
|
|
254
|
-
return [];
|
|
255
|
-
const ev = session.events[eventIndex];
|
|
256
|
-
if (!ev)
|
|
257
|
-
return [theme.fg("muted", " (no event selected)")];
|
|
258
|
-
const lines = [];
|
|
259
|
-
lines.push(theme.bold(theme.fg("accent", `Details: ${ev.toolName}`)));
|
|
260
|
-
if (ev.args !== undefined) {
|
|
261
|
-
lines.push(theme.fg("muted", " args:"));
|
|
262
|
-
lines.push(...indent(jsonLines(ev.args), 4));
|
|
263
|
-
}
|
|
264
|
-
if (ev.kind === "tool_end") {
|
|
265
|
-
const label = ev.isError ? theme.fg("error", " result (errored):") : theme.fg("muted", " result:");
|
|
266
|
-
lines.push(label);
|
|
267
|
-
lines.push(...indent(jsonLines(ev.result), 4));
|
|
268
|
-
}
|
|
269
|
-
// Truncate to DETAIL_LINES so the widget doesn't grow unbounded.
|
|
270
|
-
const truncated = lines.slice(0, DETAIL_LINES + 1);
|
|
271
|
-
if (lines.length > DETAIL_LINES + 1) {
|
|
272
|
-
truncated.push(theme.fg("muted", ` … (${lines.length - DETAIL_LINES - 1} more lines; see .forge/cache/run-task-debug-${session.taskId}.jsonl)`));
|
|
273
|
-
}
|
|
274
|
-
// Hard-wrap any line that exceeds width.
|
|
275
|
-
return truncated.map((l) => (visibleLen(l) > width ? l.slice(0, Math.max(0, width - 1)) + "…" : l));
|
|
276
|
-
}
|
|
277
|
-
function jsonLines(value) {
|
|
278
|
-
try {
|
|
279
|
-
const s = typeof value === "string" ? value : JSON.stringify(value, null, 2);
|
|
280
|
-
return s.split("\n");
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
return [String(value)];
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
function indent(lines, spaces) {
|
|
287
|
-
const pad = " ".repeat(spaces);
|
|
288
|
-
return lines.map((l) => pad + l);
|
|
289
|
-
}
|
|
290
|
-
function visibleLen(s) {
|
|
291
|
-
// Strip ANSI escape sequences for a rough visible-width estimate.
|
|
292
|
-
return s.replace(/\[[0-9;]*m/g, "").length;
|
|
293
|
-
}
|
|
294
|
-
function stitchPanes(left, right, leftWidth, rightWidth, theme) {
|
|
295
|
-
const rows = Math.max(left.length, right.length);
|
|
296
|
-
const gutter = theme.fg("borderMuted", " │ ");
|
|
297
|
-
const out = [];
|
|
298
|
-
for (let i = 0; i < rows; i++) {
|
|
299
|
-
const l = padVisible(left[i] ?? "", leftWidth);
|
|
300
|
-
const r = padVisible(right[i] ?? "", rightWidth);
|
|
301
|
-
out.push(l + gutter + r);
|
|
302
|
-
}
|
|
303
|
-
return out;
|
|
304
|
-
}
|
|
305
|
-
function padVisible(s, width) {
|
|
306
|
-
const len = visibleLen(s);
|
|
307
|
-
if (len >= width)
|
|
308
|
-
return s;
|
|
309
|
-
return s + " ".repeat(width - len);
|
|
310
|
-
}
|
|
311
|
-
function buildSelectListTheme(theme) {
|
|
312
|
-
return {
|
|
313
|
-
selectedPrefix: (t) => theme.fg("accent", "▸") + " " + t,
|
|
314
|
-
selectedText: (t) => theme.bold(theme.fg("accent", t)),
|
|
315
|
-
description: (t) => theme.fg("muted", t),
|
|
316
|
-
scrollInfo: (t) => theme.fg("muted", t),
|
|
317
|
-
noMatch: (t) => theme.fg("muted", t),
|
|
318
|
-
};
|
|
319
|
-
}
|
|
320
|
-
//# sourceMappingURL=session-monitor-widget.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session-monitor-widget.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/session-monitor-widget.ts"],"names":[],"mappings":"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"}
|