@floh-solutions/pharos-cli 0.31.1 → 0.33.0
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/README.md +223 -9
- package/dist/capabilities.d.ts +27 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +144 -41
- package/dist/capabilities.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +79 -16
- package/dist/cli.js.map +1 -1
- package/dist/commands/delegate.d.ts +211 -13
- package/dist/commands/delegate.d.ts.map +1 -1
- package/dist/commands/delegate.js +798 -52
- package/dist/commands/delegate.js.map +1 -1
- package/dist/commands/doctor.d.ts +30 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +382 -39
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pr.d.ts +56 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +202 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/setup.js +21 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/delegate/argus.d.ts +436 -0
- package/dist/delegate/argus.d.ts.map +1 -0
- package/dist/delegate/argus.js +709 -0
- package/dist/delegate/argus.js.map +1 -0
- package/dist/delegate/vsix.d.ts +26 -0
- package/dist/delegate/vsix.d.ts.map +1 -1
- package/dist/delegate/vsix.js +22 -5
- package/dist/delegate/vsix.js.map +1 -1
- package/package.json +3 -3
- package/skill/SKILL.md +44 -10
- package/vscode/pharos-bridge.json +1 -1
- package/vscode/pharos-bridge.vsix +0 -0
package/README.md
CHANGED
|
@@ -549,6 +549,34 @@ connectivity fault worded as a credential fault. `gh-auth` therefore never tells
|
|
|
549
549
|
you that you are signed out; it reports both causes, because from here they are
|
|
550
550
|
genuinely indistinguishable.
|
|
551
551
|
|
|
552
|
+
### The skill serves both agents
|
|
553
|
+
|
|
554
|
+
`pharos setup --install skill` installs the skill from the floh-skills
|
|
555
|
+
marketplace into **every coding agent on the machine**: Claude Code, Codex, or
|
|
556
|
+
both when both are found. Codex reads the same Claude-format
|
|
557
|
+
`.claude-plugin/marketplace.json` and generates its own `.codex-plugin/plugin.json`
|
|
558
|
+
from it, so one publish reaches both.
|
|
559
|
+
|
|
560
|
+
`doctor` reports them as two rows — `skill` for Claude Code, `skill-codex` for
|
|
561
|
+
Codex — and emits each only when that agent is on PATH, so a machine running one
|
|
562
|
+
of them does not get a column of red about the other. **Publishing a new version
|
|
563
|
+
does not update an installed one**, and the command that picks one up differs:
|
|
564
|
+
|
|
565
|
+
| agent | update |
|
|
566
|
+
|---|---|
|
|
567
|
+
| Claude Code | `claude plugin update pharos@floh-skills` |
|
|
568
|
+
| Codex | `codex plugin marketplace upgrade floh-skills` then `codex plugin add pharos@floh-skills` |
|
|
569
|
+
|
|
570
|
+
Codex needs the two because `codex plugin marketplace add` is a no-op once the
|
|
571
|
+
marketplace is configured and does **not** refresh the snapshot it fetched the
|
|
572
|
+
first time — so `plugin add` alone reinstalls whatever was published back then.
|
|
573
|
+
`--install skill` runs the refresh for you, and reports per agent which got it.
|
|
574
|
+
|
|
575
|
+
`pharos setup --skill` is something else and stays Claude-only: a personal copy
|
|
576
|
+
in `~/.claude/skills/`, which **shadows** the marketplace one and stops receiving
|
|
577
|
+
corrections. It is for a machine that cannot use plugins, and Codex has no such
|
|
578
|
+
machine — `codex plugin` ships with the CLI.
|
|
579
|
+
|
|
552
580
|
## Delegating a work item to a coding agent
|
|
553
581
|
|
|
554
582
|
```bash
|
|
@@ -557,6 +585,7 @@ pharos delegate --host vscode-insiders --agent claude \
|
|
|
557
585
|
pharos delegate --host terminal --agent codex --folder … --text … --dry-run
|
|
558
586
|
pharos delegate --list --host terminal --agent claude --folder … # what is running
|
|
559
587
|
pharos delegate --session 6844 --host terminal --agent claude --folder … --text …
|
|
588
|
+
pharos delegate --host navarch --agent claude --folder … --text … # a worker in Navarch
|
|
560
589
|
```
|
|
561
590
|
|
|
562
591
|
Pharos.app's *Ask Agent* is a GUI over this verb, the way its Command line
|
|
@@ -571,7 +600,7 @@ starts one with the prompt as its first message.
|
|
|
571
600
|
|---|---|
|
|
572
601
|
| `terminal` | Apple Events: `do script … in` the tab whose tty the session holds, else a new window. macOS asks once whether the calling app may control Terminal. |
|
|
573
602
|
| `vscode`, `vscode-insiders` | a `vscode[-insiders]://floh-solutions.pharos/delegate?…` URI handled by the Pharos bridge extension — `pharos setup --install vscode-bridge`. Nothing else can put a prompt into VS Code from outside; the Claude Code and Codex extensions take none. |
|
|
574
|
-
| `navarch` |
|
|
603
|
+
| `navarch` | one JSON line on `argusd`'s board socket — `{"op":"delegate"}`, the verb that needs no board todo. The daemon finds a worker on the folder, Navarch starts one if there is none, waits for a screen that can take text, and types. See below: it is the one route that can answer `pending`. |
|
|
575
604
|
|
|
576
605
|
### Several sessions on one folder
|
|
577
606
|
|
|
@@ -599,6 +628,179 @@ refuse a list — notably **not** `bridge-not-installed`, because listing is
|
|
|
599
628
|
`claude agents --json` and `ps` and reads the same on a VS Code with no
|
|
600
629
|
extensions at all. `--dry-run` carries the same array.
|
|
601
630
|
|
|
631
|
+
### Navarch, over `argusd`'s own socket
|
|
632
|
+
|
|
633
|
+
```bash
|
|
634
|
+
pharos delegate --host navarch --agent claude --folder ~/Developer/widgets --text "Fetch …"
|
|
635
|
+
pharos delegate --host navarch --agent claude --folder … --list
|
|
636
|
+
pharos delegate --host navarch --agent claude --folder … --session 1958E897-… --text "…"
|
|
637
|
+
pharos delegate --host navarch --agent claude --folder … --gh-account alisina-tibata --text "…"
|
|
638
|
+
pharos delegate --host navarch --agent claude --folder … --status 89933CD2-…
|
|
639
|
+
```
|
|
640
|
+
|
|
641
|
+
In Navarch neither half of the job belongs to the application alone. A worker's
|
|
642
|
+
terminal is held by **`argusd`**, a daemon that outlives the app; only the app
|
|
643
|
+
can watch a screen settle before typing into it. So the route is one JSON line
|
|
644
|
+
on `~/.config/argus/argus-board.sock` — `{"op":"delegate"}` — and the two halves
|
|
645
|
+
split where the knowledge is: the daemon validates and finds a worker on the
|
|
646
|
+
folder, Navarch starts one if there is none, waits for an input box and types.
|
|
647
|
+
|
|
648
|
+
It is also the one route that needs no board todo, which every other operator
|
|
649
|
+
action in Argus does. That is the whole reason the verb exists: the work item
|
|
650
|
+
*is* the todo, and it lives in Azure DevOps. The hand-off is recorded on a
|
|
651
|
+
hidden scratch pad instead, reported as `delegation.todo`.
|
|
652
|
+
|
|
653
|
+
**`pending` is a successful answer, and a `--status` read is the other half of
|
|
654
|
+
it.** On the default autonomy dial the first hand-off on a machine raises an
|
|
655
|
+
approval card in Navarch, and the daemon answers the moment it goes up rather
|
|
656
|
+
than holding a CLI on somebody who is in another app:
|
|
657
|
+
|
|
658
|
+
```json
|
|
659
|
+
{ "ok": true, "action": "pending", "host": "navarch", "session": null,
|
|
660
|
+
"detail": "Navarch is asking you to approve this hand-off …",
|
|
661
|
+
"delegation": { "request": "270005F8-…", "worker": null, "name": null,
|
|
662
|
+
"created": false, "todo": 2 } }
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
`worker` and `name` are `null` rather than `""` because nothing has been typed
|
|
666
|
+
yet — "we have not got a worker" and "the worker is the empty string" are
|
|
667
|
+
different facts. Pass `delegation.request` back as `--status <request>` to turn
|
|
668
|
+
that into `sent`, `launched`, `declined` or `delivery-failed`; argus keeps the
|
|
669
|
+
row for an hour, sized for a person at lunch rather than for a poll.
|
|
670
|
+
|
|
671
|
+
The socket adds ten `reason` ids, and they are separate because **each names a
|
|
672
|
+
different fix**:
|
|
673
|
+
|
|
674
|
+
| `reason` | what is true | the fix |
|
|
675
|
+
|---|---|---|
|
|
676
|
+
| `argusd-not-running` | nothing is listening on the socket | open Navarch; argusd comes with it |
|
|
677
|
+
| `argusd-outdated` | argusd is running and predates the verb | reload it — deliberately, it ends every live session |
|
|
678
|
+
| `navarch-not-running` | argusd is up, the app is not | open Navarch |
|
|
679
|
+
| `unsupported` | Navarch is running and is an older build | update it (`make-app.sh --install`) |
|
|
680
|
+
| `declined` | a person said no at the card | nothing to fix |
|
|
681
|
+
| `delivery-failed` | Navarch reached the worker and nothing landed — a trust dialog, a blank screen | look at the pane, then delegate again |
|
|
682
|
+
| `rate-limited` | twelve operator writes a minute, and this was the thirteenth | wait a minute |
|
|
683
|
+
| `not-an-operator` | the gate refused the stamp pharos sets on every request | almost always a daemon that predates it |
|
|
684
|
+
| `request-unknown` | `--status` for an id this core does not hold | it aged out, or was made elsewhere |
|
|
685
|
+
| `gh-account-unknown` | `--gh-account` named an identity this core has never heard of, and a worker would be started | add it in Navarch ▸ Accounts, or pass a spelling it knows — the refusal lists them |
|
|
686
|
+
|
|
687
|
+
`argusd-outdated` is the one to expect first, and it is not a bug: argusd
|
|
688
|
+
outliving the app is the feature that keeps sessions alive across a restart, so
|
|
689
|
+
master, the installed app and the running daemon drift independently. It is also
|
|
690
|
+
the one that has to be **inferred rather than read**. `reason` arrived with the
|
|
691
|
+
verb, so a daemon too old to serve `delegate` is too old to stamp one — and it
|
|
692
|
+
says three different things, two of which blame the caller:
|
|
693
|
+
|
|
694
|
+
```
|
|
695
|
+
{"ok":false,"error":"unknown op 'delegate' — see argus-board help …"}
|
|
696
|
+
{"ok":false,"error":"delegate requires a \"todo\" (id) — the work it serves"}
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
The second is the trap. An old daemon forwards any verb the attached app claims
|
|
700
|
+
it can run, and that forwarder demands the board todo this verb exists to do
|
|
701
|
+
without — so a correct delegation is refused for not carrying one, and a caller
|
|
702
|
+
that believed the message would go and add it. **The tell is the missing
|
|
703
|
+
`reason` key, never the prose.**
|
|
704
|
+
|
|
705
|
+
`--list` asks `delegate_candidates` — **the find, asked rather than
|
|
706
|
+
performed** (argus #1402). The rows are argusd's own answer to its own
|
|
707
|
+
question, ranked by its own rule: not exited, the right kind, local, not
|
|
708
|
+
holding a board mission, and **not an Argus Agent** — an operator is a claude
|
|
709
|
+
worker with no mission sitting in a base checkout, which is exactly the folder
|
|
710
|
+
a person links in Pharos, and delegating into it would hand the work item to
|
|
711
|
+
the thing that drives the fleet. Ties break on `starting` last and then on
|
|
712
|
+
ascending UUID, never on status, so two calls a second apart name the same
|
|
713
|
+
pane. `recommended` is the daemon's own `target`. A row's `id` is the worker
|
|
714
|
+
UUID, its `status` is the contract's `idle`/`busy`/`unknown` — with
|
|
715
|
+
**`needs_input` reported `busy`**, because a worker on a trust dialog is idle
|
|
716
|
+
by every measure except the one that matters.
|
|
717
|
+
|
|
718
|
+
The answer carries **`source`**, which is not a footnote:
|
|
719
|
+
|
|
720
|
+
| `source` | what the list is | what `--session` / `--gh-account` do |
|
|
721
|
+
|---|---|---|
|
|
722
|
+
| `daemon` | `delegate_candidates` — a row it offered is a row it accepts | honoured |
|
|
723
|
+
| `fleet_status` | this CLI's own reading, a prediction of the find | refused `argusd-outdated` |
|
|
724
|
+
|
|
725
|
+
An argusd that predates #1402 answers the read `unknown-op`, and `fleet_status`
|
|
726
|
+
answers on *every* generation of argusd — so the list is still worth serving,
|
|
727
|
+
and it is served with `source: "fleet_status"` and a sentence saying the pick
|
|
728
|
+
cannot be honoured against that daemon. One that predates `delegate` itself
|
|
729
|
+
carries no `reason` key at all, and that is `argusd-outdated`: listing workers
|
|
730
|
+
a send is about to refuse to touch would hand the app a menu of picks that can
|
|
731
|
+
only fail.
|
|
732
|
+
|
|
733
|
+
Two things the route does **not** do. It never pre-checks the agent on `PATH`:
|
|
734
|
+
argusd spawns the worker from the app's own login shell, and a GUI-launched
|
|
735
|
+
Pharos has roughly `/usr/bin:/bin`, so a check here would refuse nearly every
|
|
736
|
+
real call while reporting a fact about the wrong process. And it never folds a
|
|
737
|
+
multi-line prompt into one line — the receiving TUI submits on Enter and Navarch
|
|
738
|
+
owns that Enter, so several lines is a usage error rather than a rewrite nobody
|
|
739
|
+
proof-read.
|
|
740
|
+
|
|
741
|
+
### Picking a worker, and the daemon that would ignore the pick
|
|
742
|
+
|
|
743
|
+
`--session <uuid>` travels as the op's `worker`, and `--session new` as
|
|
744
|
+
`worker: "new"` — a fresh worker even where the find would have had one. The
|
|
745
|
+
CLI does **not** re-check the pick before sending it: argusd validates `worker`
|
|
746
|
+
against the very predicate `delegate_candidates` listed from, so one rule
|
|
747
|
+
serves the find, the list and the validation, and a second copy here could only
|
|
748
|
+
disagree with it. A row the read offered is a row the send accepts.
|
|
749
|
+
|
|
750
|
+
A pick it will not take comes back as **`session-gone`**, keeping argusd's own
|
|
751
|
+
sentence — which names *which* of six it was: *has exited*, *is an Argus Agent*,
|
|
752
|
+
*is holding mission #N*, *is a codex worker, not claude*, *is on ax52, not on
|
|
753
|
+
this Mac*, *is in … , not in …*. That is the same fact and the same fix as a
|
|
754
|
+
vanished pid on Terminal, so it is the same word. (`session-not-targetable` was
|
|
755
|
+
this route's own refusal and is **gone from the closed set** — it meant the op
|
|
756
|
+
could not express a target at all, and it can.)
|
|
757
|
+
|
|
758
|
+
**A daemon that predates #1402 does not refuse these flags — it ignores them.**
|
|
759
|
+
`delegate` reads the keys it knows and discards the rest, so a `worker` it has
|
|
760
|
+
never heard of is dropped, the find runs anyway, and the answer is `sent` about
|
|
761
|
+
a pane nobody chose; a `gh_account` is dropped the same way and the worker
|
|
762
|
+
starts as whoever `gh` was last logged in as. Nothing in the reply says either
|
|
763
|
+
happened. So `--session` and `--gh-account` ask `delegate_candidates` first —
|
|
764
|
+
it landed in the same change, so serving it is proof both fields are read — and
|
|
765
|
+
refuse `argusd-outdated` with nothing sent when it is not served. `pharos
|
|
766
|
+
doctor`'s `argus-delegate` row reports the same fact before anybody hits it.
|
|
767
|
+
|
|
768
|
+
### The GitHub account a started worker runs as
|
|
769
|
+
|
|
770
|
+
```bash
|
|
771
|
+
pharos delegate --host navarch --agent claude --folder … \
|
|
772
|
+
--gh-account alisina-tibata --text "Fetch Azure DevOps work item #4821 …"
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
`--gh-account` takes a **GitHub login, or the label of an account bound in
|
|
776
|
+
Navarch** — argusd resolves it against its own `accounts.json`, label first and
|
|
777
|
+
then login, case-insensitively and read fresh on every call. Two spellings
|
|
778
|
+
because two systems name one identity differently: Navarch knows a label a
|
|
779
|
+
human picked, and a caller outside Argus knows the login. The flag is held to a
|
|
780
|
+
login-shaped token (no spaces), so a label containing a space cannot be named
|
|
781
|
+
through it — pass the login, which always resolves.
|
|
782
|
+
|
|
783
|
+
Three rules, all argusd's:
|
|
784
|
+
|
|
785
|
+
- **A worker it STARTS runs as that account.** An account it does not know is
|
|
786
|
+
refused `gh-account-unknown`, never substituted — a worker with no binding
|
|
787
|
+
runs as whatever `gh` was last logged in as, and a hand-off that commits
|
|
788
|
+
under the wrong identity is the failure the resolution exists to prevent. The
|
|
789
|
+
refusal lists every label and login the core holds.
|
|
790
|
+
- **A prompt that lands in a worker already running leaves its account alone**,
|
|
791
|
+
and says so in the reply: a session already on the project is already running
|
|
792
|
+
as somebody, and re-checking would refuse hand-offs that are perfectly fine.
|
|
793
|
+
- **There is no fallback**, in either direction.
|
|
794
|
+
|
|
795
|
+
On `terminal`, `vscode` and `vscode-insiders` the flag is accepted, ignored,
|
|
796
|
+
and said to be — those hosts hand the prompt to a session in an app that is
|
|
797
|
+
already running as whoever this machine is logged in as, and only Navarch
|
|
798
|
+
starts a session on your behalf. An empty `--gh-account ""` is a usage error
|
|
799
|
+
rather than "no account asked for": a caller whose variable came out empty must
|
|
800
|
+
not silently get the wrong identity.
|
|
801
|
+
|
|
802
|
+
### Picking one of several
|
|
803
|
+
|
|
602
804
|
`--session <id>` delivers to exactly that session and **never falls back**: a
|
|
603
805
|
pick that no longer matches is `session-gone`, not a new window. That covers
|
|
604
806
|
the session exiting between the list and the send, and a Terminal tab closed
|
|
@@ -610,21 +812,33 @@ malformed id is a usage error rather than `session-gone`, because the latter is
|
|
|
610
812
|
a fact about the machine and would tell somebody their session had died when it
|
|
611
813
|
never existed.
|
|
612
814
|
|
|
613
|
-
On the
|
|
614
|
-
|
|
815
|
+
On Navarch the pick is a worker UUID and travels as the op's own `worker` — see
|
|
816
|
+
*Picking a worker* above. On the VS Code hosts it travels in the URI as
|
|
817
|
+
`session=<pid>`, and the bridge honours it — from **0.2.0**. An older bridge refuses any query key it
|
|
615
818
|
does not know, so it would reject the whole URI and send nothing; `--session`
|
|
616
819
|
against one is therefore refused `bridge-not-installed` here rather than
|
|
617
820
|
reported as sent, and `pharos doctor` marks such a bridge not ok so the wizard
|
|
618
821
|
offers the upgrade. Delegating without `--session` works on either.
|
|
619
822
|
|
|
620
|
-
Success is `{ ok: true, action: "sent" | "launched", session,
|
|
621
|
-
|
|
823
|
+
Success is `{ ok: true, action: "sent" | "launched" | "pending", session,
|
|
824
|
+
detail }` — `pending` only on `navarch`, where it carries a `delegation` block.
|
|
825
|
+
A refusal is `{ ok: false, reason, detail }` on stdout with exit 2, `reason`
|
|
622
826
|
being one of `host-not-installed`, `agent-not-installed`,
|
|
623
827
|
`bridge-not-installed`, `automation-denied`, `folder-missing`, `unsupported`,
|
|
624
|
-
`session-gone
|
|
625
|
-
|
|
626
|
-
`
|
|
627
|
-
|
|
828
|
+
`session-gone`, plus the Argus socket's ten tabulated above — stable ids,
|
|
829
|
+
because the app renders facts. **`session-not-targetable` is no longer one of
|
|
830
|
+
them**: it meant the `delegate` op could not name a worker, which stopped being
|
|
831
|
+
true with argus #1402, and a dead id in a closed set is a fix the app builds
|
|
832
|
+
for a state that cannot happen. `pharos doctor` carries the rows behind them:
|
|
833
|
+
`terminal`, `vscode`, `vscode-insiders`, `navarch`, `claude`, `codex`, per
|
|
834
|
+
installed VS Code flavour `<host>-claude-ext`, `<host>-codex-ext`,
|
|
835
|
+
`<host>-bridge`, and — only where Navarch is installed — `argus-delegate`, which
|
|
836
|
+
asks the **running** `argusd` whether it serves the verb, and then whether it
|
|
837
|
+
also reads a target worker and a GitHub account. That last one is a row
|
|
838
|
+
of its own because argusd outlives the app: a current Navarch in `/Applications`
|
|
839
|
+
and a daemon from last week are an ordinary state, and the daemon is what
|
|
840
|
+
decides. It offers no `install`, because the fix is a reload that ends every live
|
|
841
|
+
worker session and is a person's to time. The agents are reported, never installed:
|
|
628
842
|
a coding agent is the person's login.
|
|
629
843
|
|
|
630
844
|
## Requirements
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -52,6 +52,24 @@ export interface CapabilityOutcome {
|
|
|
52
52
|
* reading the sentence. Absent on every other capability.
|
|
53
53
|
*/
|
|
54
54
|
flavours?: BridgeInstallOutcome["flavours"];
|
|
55
|
+
/**
|
|
56
|
+
* `skill` only, and the same idea one layer over: one entry per coding agent
|
|
57
|
+
* found on this machine, so a wizard can say *Claude Code got it, Codex did
|
|
58
|
+
* not* rather than parsing a sentence for it (#1399). Absent on every other
|
|
59
|
+
* capability; an empty array when no agent was found at all.
|
|
60
|
+
*/
|
|
61
|
+
agents?: SkillAgentOutcome[];
|
|
62
|
+
}
|
|
63
|
+
/** The agents that can install the skill. Both read the same marketplace. */
|
|
64
|
+
export type SkillAgent = "claude" | "codex";
|
|
65
|
+
export interface SkillAgentOutcome {
|
|
66
|
+
agent: SkillAgent;
|
|
67
|
+
/** How it is spelled to a person, matching the `doctor` row's name. */
|
|
68
|
+
name: string;
|
|
69
|
+
ok: boolean;
|
|
70
|
+
/** The last command run for this agent, so a transcript shows what happened. */
|
|
71
|
+
command: string | null;
|
|
72
|
+
detail: string;
|
|
55
73
|
}
|
|
56
74
|
export declare const INSTALLABLE: Capability[];
|
|
57
75
|
/** Install the named capabilities, one at a time, reporting each. */
|
|
@@ -61,4 +79,13 @@ export declare function installCapabilities(ids: readonly string[], options?: {
|
|
|
61
79
|
onCommand?: (command: string) => void;
|
|
62
80
|
onProgress?: (fraction: number, stage: string) => void;
|
|
63
81
|
}): Promise<CapabilityOutcome[]>;
|
|
82
|
+
/** The marketplace this skill ships from. Public, and ours. */
|
|
83
|
+
export declare const MARKETPLACE = "ASNNetworks/floh-skills";
|
|
84
|
+
/**
|
|
85
|
+
* What both agents call it once it is added — the repository name, not the
|
|
86
|
+
* `owner/repo` source. `codex plugin list --marketplace <name>` and the
|
|
87
|
+
* `@<name>` half of {@link PLUGIN} are the same string, so it is spelled once.
|
|
88
|
+
*/
|
|
89
|
+
export declare const MARKETPLACE_NAME = "floh-skills";
|
|
90
|
+
export declare const PLUGIN = "pharos@floh-skills";
|
|
64
91
|
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,qEAAqE;IACrE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,qEAAqE;IACrE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,6EAA6E;AAC7E,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,gFAAgF;IAChF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AA0CD,eAAO,MAAM,WAAW,EAAE,UAAU,EAwDnC,CAAC;AAEF,qEAAqE;AACrE,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA2B9B;AAaD,+DAA+D;AAC/D,eAAO,MAAM,WAAW,4BAA4B,CAAC;AACrD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,MAAM,uBAA+B,CAAC"}
|
package/dist/capabilities.js
CHANGED
|
@@ -44,11 +44,15 @@ const PACKAGES = {
|
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
46
|
export const INSTALLABLE = [
|
|
47
|
+
// **One capability, every agent on the machine** (#1399). `doctor` reports it
|
|
48
|
+
// per agent — `skill`, `skill-codex` — and this is the single install both
|
|
49
|
+
// rows name, exactly like the two VS Code bridge rows below.
|
|
47
50
|
{
|
|
48
51
|
id: "skill",
|
|
49
52
|
name: "The pharos skill",
|
|
50
|
-
unlocks: "Claude Code
|
|
51
|
-
+ "
|
|
53
|
+
unlocks: "Claude Code and Codex learn this tool exists — whichever of them is on this machine, and "
|
|
54
|
+
+ "both when both are. Without it a session does not know to reach for pharos at all, "
|
|
55
|
+
+ "which is the difference between a CLI you installed and one that gets used.",
|
|
52
56
|
size: "a few hundred KB",
|
|
53
57
|
},
|
|
54
58
|
{
|
|
@@ -130,10 +134,64 @@ function convertOutcome(result) {
|
|
|
130
134
|
};
|
|
131
135
|
}
|
|
132
136
|
/** The marketplace this skill ships from. Public, and ours. */
|
|
133
|
-
const MARKETPLACE = "ASNNetworks/floh-skills";
|
|
134
|
-
const PLUGIN = "pharos@floh-skills";
|
|
137
|
+
export const MARKETPLACE = "ASNNetworks/floh-skills";
|
|
135
138
|
/**
|
|
136
|
-
*
|
|
139
|
+
* What both agents call it once it is added — the repository name, not the
|
|
140
|
+
* `owner/repo` source. `codex plugin list --marketplace <name>` and the
|
|
141
|
+
* `@<name>` half of {@link PLUGIN} are the same string, so it is spelled once.
|
|
142
|
+
*/
|
|
143
|
+
export const MARKETPLACE_NAME = "floh-skills";
|
|
144
|
+
export const PLUGIN = `pharos@${MARKETPLACE_NAME}`;
|
|
145
|
+
/**
|
|
146
|
+
* What each agent has to be told, in order, to install the skill from the
|
|
147
|
+
* marketplace.
|
|
148
|
+
*
|
|
149
|
+
* **Both agents read the same `.claude-plugin/marketplace.json`** — Codex
|
|
150
|
+
* generates its own `.codex-plugin/plugin.json` scoped to `./skills/pharos`
|
|
151
|
+
* from it — so this is one skill published once, reaching whichever agents are
|
|
152
|
+
* here. Every command below is idempotent and exits 0 when already done, which
|
|
153
|
+
* is what makes them safe in a wizard somebody runs twice (measured: Codex
|
|
154
|
+
* answers `alreadyAdded: true`).
|
|
155
|
+
*
|
|
156
|
+
* **Codex has a third step and it is the one that matters.** `codex plugin
|
|
157
|
+
* marketplace add` is a no-op when the marketplace is already configured, and
|
|
158
|
+
* it does NOT refresh the git snapshot it fetched the first time — so `plugin
|
|
159
|
+
* add` straight after it installs whatever was published back then. That is
|
|
160
|
+
* this repository's published-is-not-delivered trap in a new place, and
|
|
161
|
+
* `marketplace upgrade` is what closes it. It is `optional` because a refresh
|
|
162
|
+
* needs the network and a stale skill beats no skill: a failure there is
|
|
163
|
+
* reported and the install continues.
|
|
164
|
+
*/
|
|
165
|
+
const SKILL_AGENTS = [
|
|
166
|
+
{
|
|
167
|
+
agent: "claude",
|
|
168
|
+
name: "Claude Code",
|
|
169
|
+
binary: "claude",
|
|
170
|
+
steps: [
|
|
171
|
+
{ args: ["plugin", "marketplace", "add", MARKETPLACE] },
|
|
172
|
+
{ args: ["plugin", "install", PLUGIN] },
|
|
173
|
+
],
|
|
174
|
+
update: `\`claude plugin update ${PLUGIN}\``,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
agent: "codex",
|
|
178
|
+
name: "Codex",
|
|
179
|
+
binary: "codex",
|
|
180
|
+
steps: [
|
|
181
|
+
{ args: ["plugin", "marketplace", "add", MARKETPLACE] },
|
|
182
|
+
{
|
|
183
|
+
args: ["plugin", "marketplace", "upgrade", MARKETPLACE_NAME],
|
|
184
|
+
optional: true,
|
|
185
|
+
whenSkipped: "the marketplace snapshot could not be refreshed, so what was installed may be "
|
|
186
|
+
+ "behind what is published",
|
|
187
|
+
},
|
|
188
|
+
{ args: ["plugin", "add", PLUGIN] },
|
|
189
|
+
],
|
|
190
|
+
update: `\`codex plugin marketplace upgrade ${MARKETPLACE_NAME}\` then \`codex plugin add ${PLUGIN}\``,
|
|
191
|
+
},
|
|
192
|
+
];
|
|
193
|
+
/**
|
|
194
|
+
* Install the skill as a PLUGIN, into every coding agent on this machine.
|
|
137
195
|
*
|
|
138
196
|
* ## Why this is not `setup --skill`
|
|
139
197
|
*
|
|
@@ -142,13 +200,18 @@ const PLUGIN = "pharos@floh-skills";
|
|
|
142
200
|
* to floh-skills silently stops arriving. That flag is for a machine that
|
|
143
201
|
* cannot use plugins, and it stays that way.
|
|
144
202
|
*
|
|
145
|
-
* This does what the printed hint always told people to do by hand
|
|
203
|
+
* This does what the printed hint always told people to do by hand, now for
|
|
204
|
+
* both agents rather than one — see {@link SKILL_AGENTS}.
|
|
146
205
|
*
|
|
147
|
-
*
|
|
148
|
-
* claude plugin install pharos@floh-skills
|
|
206
|
+
* ## Both when both are found (#1399)
|
|
149
207
|
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
208
|
+
* Found the day @user asked whether Codex could reach pharos on this machine:
|
|
209
|
+
* the CLI was on the login PATH, the skill was installed for Claude Code, and
|
|
210
|
+
* Codex had the marketplace configured and had never installed pharos from it.
|
|
211
|
+
* Nothing on the machine reported that, and the fix was two commands typed by
|
|
212
|
+
* hand. So this installs for every agent it finds, and reports **per agent**
|
|
213
|
+
* which got it: a half-install that reads as done is the failure this whole
|
|
214
|
+
* file is arranged against.
|
|
152
215
|
*
|
|
153
216
|
* ## Why it matters more than it looks
|
|
154
217
|
*
|
|
@@ -157,53 +220,93 @@ const PLUGIN = "pharos@floh-skills";
|
|
|
157
220
|
* an agent knows to use it before being told.
|
|
158
221
|
*/
|
|
159
222
|
async function installSkillPlugin(options) {
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
|
|
164
|
-
|
|
223
|
+
// **Probed against the env this was GIVEN, not `process.env`** — the doctor's
|
|
224
|
+
// rule, and it is how the macOS app hands over a login-shell PATH. A GUI
|
|
225
|
+
// -launched app inherits roughly `/usr/bin:/bin`, so probing the wrong
|
|
226
|
+
// environment concludes "no agents here" on a machine running both.
|
|
227
|
+
const env = options.env ?? process.env;
|
|
228
|
+
const present = [];
|
|
229
|
+
for (const agent of SKILL_AGENTS) {
|
|
230
|
+
try {
|
|
231
|
+
await run(agent.binary, ["--version"], { timeout: 15_000, env });
|
|
232
|
+
present.push(agent);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Not here. A legitimate state, not a failure to install something:
|
|
236
|
+
// antigravity and a plain shell both use this CLI and have no plugin
|
|
237
|
+
// system at all.
|
|
238
|
+
}
|
|
165
239
|
}
|
|
166
|
-
|
|
240
|
+
if (present.length === 0) {
|
|
167
241
|
return {
|
|
168
242
|
id: "skill",
|
|
169
243
|
ok: false,
|
|
170
244
|
command: null,
|
|
171
|
-
|
|
245
|
+
agents: [],
|
|
246
|
+
detail: "Neither `claude` nor `codex` is on PATH, so there is no plugin system to install into. "
|
|
172
247
|
+ "If you are using a different agent, point it at the skill in the floh-skills "
|
|
173
248
|
+ "repository, or run `pharos setup --skill` for a personal copy.",
|
|
174
249
|
};
|
|
175
250
|
}
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
251
|
+
const agents = [];
|
|
252
|
+
for (const agent of present) {
|
|
253
|
+
agents.push(await installSkillFor(agent, env, options.onCommand));
|
|
254
|
+
}
|
|
255
|
+
const installed = agents.filter((outcome) => outcome.ok);
|
|
256
|
+
const summary = agents.map((outcome) => `${outcome.name}: ${outcome.detail}`).join(" ");
|
|
257
|
+
return {
|
|
258
|
+
id: "skill",
|
|
259
|
+
// Every agent found, or it is not done. A tick box that goes green while
|
|
260
|
+
// one of two agents still has no idea pharos exists is the exact shape of
|
|
261
|
+
// the bug this replaces.
|
|
262
|
+
ok: agents.every((outcome) => outcome.ok),
|
|
263
|
+
command: agents.at(-1)?.command ?? null,
|
|
264
|
+
agents,
|
|
265
|
+
// **Said out loud, because it is the step people miss.** Installing the
|
|
266
|
+
// plugin does not load it into a session already running, and publishing a
|
|
267
|
+
// new version does not update an installed one. A skill silently seven
|
|
268
|
+
// versions behind is how a correction that shipped weeks ago keeps not
|
|
269
|
+
// arriving — and the command that picks it up is different per agent.
|
|
270
|
+
detail: installed.length === 0
|
|
271
|
+
? summary
|
|
272
|
+
: `${summary} Restart the agent to load it. Later, publishing a new skill does NOT `
|
|
273
|
+
+ "update an installed copy; what picks up a correction is "
|
|
274
|
+
+ `${installed.map((outcome) => `${updateCommand(outcome.agent)} for ${outcome.name}`).join(", ")}.`,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/** What picks up a published correction for one agent. Never the same string. */
|
|
278
|
+
function updateCommand(agent) {
|
|
279
|
+
return SKILL_AGENTS.find((candidate) => candidate.agent === agent).update;
|
|
280
|
+
}
|
|
281
|
+
/** One agent's steps, stopping at the first required one that fails. */
|
|
282
|
+
async function installSkillFor(agent, env, onCommand) {
|
|
283
|
+
const base = { agent: agent.agent, name: agent.name };
|
|
284
|
+
const skipped = [];
|
|
285
|
+
let last = null;
|
|
286
|
+
for (const step of agent.steps) {
|
|
287
|
+
const command = `${agent.binary} ${step.args.join(" ")}`;
|
|
288
|
+
onCommand?.(command);
|
|
183
289
|
try {
|
|
184
|
-
await run(
|
|
290
|
+
await run(agent.binary, step.args, {
|
|
291
|
+
timeout: 5 * 60_000,
|
|
292
|
+
maxBuffer: 4 * 1024 * 1024,
|
|
293
|
+
env,
|
|
294
|
+
});
|
|
295
|
+
last = command;
|
|
185
296
|
}
|
|
186
297
|
catch (error) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
ok: false,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
};
|
|
298
|
+
const failure = `\`${command}\` failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
299
|
+
if (step.optional !== true) {
|
|
300
|
+
return { ...base, ok: false, command, detail: failure };
|
|
301
|
+
}
|
|
302
|
+
skipped.push(`${failure} — ${step.whenSkipped ?? "carrying on"}`);
|
|
193
303
|
}
|
|
194
304
|
}
|
|
195
305
|
return {
|
|
196
|
-
|
|
306
|
+
...base,
|
|
197
307
|
ok: true,
|
|
198
|
-
command:
|
|
199
|
-
|
|
200
|
-
// plugin does not load it into a session already running, and publishing a
|
|
201
|
-
// new version does not update an installed one — `claude plugin update`
|
|
202
|
-
// does. A skill silently seven versions behind is how a correction that
|
|
203
|
-
// shipped weeks ago keeps not arriving.
|
|
204
|
-
detail: "Installed from the marketplace. Restart Claude Code to load it. Later, "
|
|
205
|
-
+ "`claude plugin update pharos@floh-skills` picks up published corrections — "
|
|
206
|
-
+ "publishing does not update an installed copy on its own.",
|
|
308
|
+
command: last,
|
|
309
|
+
detail: `installed from the marketplace.${skipped.length === 0 ? "" : ` ${skipped.join(" ")}`}`,
|
|
207
310
|
};
|
|
208
311
|
}
|
|
209
312
|
async function installPackage(id, options) {
|
package/dist/capabilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,cAAc,EAA6B,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAE9E,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,cAAc,EAA6B,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAE9E,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AA+EhC;;;;;;;GAOG;AACH,MAAM,QAAQ,GAA2E;IACvF,WAAW,EAAE;QACX,4EAA4E;QAC5E,2EAA2E;QAC3E,yEAAyE;QACzE,oCAAoC;QACpC,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC;QAC1C,GAAG,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,aAAa,CAAC;QACrC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,mCAAmC,EAAE,IAAI,CAAC;KACvE;IACD,OAAO,EAAE;QACP,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC5B,GAAG,EAAE,CAAC,SAAS,EAAE,IAAI,EAAE,eAAe,CAAC;QACvC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,wBAAwB,EAAE,IAAI,CAAC;KAC5D;IACD,yEAAyE;IACzE,2EAA2E;IAC3E,8EAA8E;IAC9E,4EAA4E;IAC5E,EAAE;IACF,wEAAwE;IACxE,+EAA+E;IAC/E,4EAA4E;IAC5E,8EAA8E;IAC9E,8EAA8E;IAC9E,iBAAiB;IACjB,EAAE,EAAE;QACF,IAAI,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC;QACvB,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC;KAChD;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,8EAA8E;IAC9E,2EAA2E;IAC3E,6DAA6D;IAC7D;QACE,EAAE,EAAE,OAAO;QACX,IAAI,EAAE,kBAAkB;QACxB,OAAO,EACL,2FAA2F;cACzF,qFAAqF;cACrF,6EAA6E;QACjF,IAAI,EAAE,kBAAkB;KACzB;IACD;QACE,EAAE,EAAE,gBAAgB;QACpB,IAAI,EAAE,oBAAoB;QAC1B,OAAO,EAAE,sDAAsD;QAC/D,IAAI,EAAE,iBAAiB;KACxB;IACD;QACE,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,YAAY;QAClB,OAAO,EACL,4FAA4F;cAC1F,qFAAqF;cACrF,iCAAiC;QACrC,IAAI,EAAE,QAAQ;KACf;IACD;QACE,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,aAAa;QACnB,OAAO,EACL,sFAAsF;cACpF,gCAAgC;QACpC,IAAI,EAAE,SAAS;KAChB;IACD;QACE,EAAE,EAAE,SAAS;QACb,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,2DAA2D;QACpE,IAAI,EAAE,QAAQ;KACf;IACD,0EAA0E;IAC1E,2EAA2E;IAC3E,oEAAoE;IACpE,uEAAuE;IACvE,kEAAkE;IAClE;QACE,EAAE,EAAE,eAAe;QACnB,IAAI,EAAE,+BAA+B;QACrC,OAAO,EACL,gGAAgG;cAC9F,yFAAyF;cACzF,yCAAyC;QAC7C,IAAI,EAAE,mDAAmD;KAC1D;CACF,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,GAAsB,EACtB,UAKI,EAAE;IAEN,MAAM,QAAQ,GAAwB,EAAE,CAAC;IAEzC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,EAAE,KAAK,gBAAgB,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,cAAc,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;YACpE,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,eAAe,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC;gBACZ,EAAE;gBACF,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc,CAAC,MAA4B;IAClD,OAAO;QACL,EAAE,EAAE,gBAAgB;QACpB,EAAE,EAAE,MAAM,CAAC,SAAS;QACpB,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,MAAM,CAAC,SAAS;YACtB,CAAC,CAAC,aAAa,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,IAAI,GAAG;YAClD,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,IAAI,gBAAgB,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,MAAM,WAAW,GAAG,yBAAyB,CAAC;AACrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,gBAAgB,EAAE,CAAC;AAEnD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,YAAY,GAQZ;IACJ;QACE,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,QAAQ;QAChB,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE;YACvD,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE;SACxC;QACD,MAAM,EAAE,0BAA0B,MAAM,IAAI;KAC7C;IACD;QACE,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,OAAO;QACf,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE;YACvD;gBACE,IAAI,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,CAAC;gBAC5D,QAAQ,EAAE,IAAI;gBACd,WAAW,EACT,gFAAgF;sBAC9E,0BAA0B;aAC/B;YACD,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;SACpC;QACD,MAAM,EACJ,sCAAsC,gBAAgB,8BAA8B,MAAM,IAAI;KACjG;CACF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,KAAK,UAAU,kBAAkB,CAC/B,OAA2E;IAE3E,8EAA8E;IAC9E,yEAAyE;IACzE,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACvC,MAAM,OAAO,GAAwB,EAAE,CAAC;IACxC,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;YACpE,qEAAqE;YACrE,iBAAiB;QACnB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,EAAE,EAAE,OAAO;YACX,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,EAAE;YACV,MAAM,EACJ,yFAAyF;kBACvF,+EAA+E;kBAC/E,gEAAgE;SACrE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAwB,EAAE,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,eAAe,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAExF,OAAO;QACL,EAAE,EAAE,OAAO;QACX,yEAAyE;QACzE,0EAA0E;QAC1E,yBAAyB;QACzB,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,IAAI;QACvC,MAAM;QACN,wEAAwE;QACxE,2EAA2E;QAC3E,uEAAuE;QACvE,uEAAuE;QACvE,sEAAsE;QACtE,MAAM,EACJ,SAAS,CAAC,MAAM,KAAK,CAAC;YACpB,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,GAAG,OAAO,wEAAwE;kBAChF,0DAA0D;kBAC1D,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;KAC3G,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,KAAiB;IACtC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAE,CAAC,MAAM,CAAC;AAC7E,CAAC;AAED,wEAAwE;AACxE,KAAK,UAAU,eAAe,CAC5B,KAAoC,EACpC,GAAsB,EACtB,SAAkD;IAElD,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;IACtD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,IAAI,GAAkB,IAAI,CAAC;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACzD,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE;gBACjC,OAAO,EAAE,CAAC,GAAG,MAAM;gBACnB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;gBAC1B,GAAG;aACJ,CAAC,CAAC;YACH,IAAI,GAAG,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,OAAO,cAAc,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnG,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAC3B,OAAO,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;YAC1D,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,MAAM,IAAI,CAAC,WAAW,IAAI,aAAa,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;IAED,OAAO;QACL,GAAG,IAAI;QACP,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,kCAAkC,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;KAChG,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,EAAU,EACV,OAA2E;IAE3E,MAAM,IAAI,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,sCAAsC,EAAE,IAAI,EAAE,CAAC;IAChG,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,cAAc,EAAE,CAAC;IACvC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO;YACL,EAAE;YACF,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,IAAI;YACb,MAAM,EACJ,QAAQ,EAAE,KAAK,QAAQ;gBACrB,CAAC,CAAC,kFAAkF;sBAChF,0EAA0E;sBAC1E,4CAA4C;gBAChD,CAAC,CAAC,wEAAwE;SAC/E,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,sBAAsB,EAAE,GAAG,EAAE,CAAC;IACjG,CAAC;IAED,8EAA8E;IAC9E,sEAAsE;IACtE,oDAAoD;IACpD,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACjF,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;IAE7B,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;YAC3F,mEAAmE;YACnE,oEAAoE;YACpE,kDAAkD;YAClD,OAAO,EAAE,EAAE,GAAG,MAAM;YACpB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;YAC1B,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;SAC3D,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IACzD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE;YACF,EAAE,EAAE,KAAK;YACT,OAAO;YACP,MAAM,EAAE,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;SACzF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,KAAK,UAAU,cAAc;IAC3B,MAAM,UAAU,GACd,QAAQ,EAAE,KAAK,QAAQ;QACrB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QACpC,CAAC,CAAC,QAAQ,EAAE,KAAK,OAAO;YACtB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACxC,CAAC,CAAC;gBACE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;gBAClC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;aACjC,CAAC;IAEV,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAChE,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ;QACV,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiC5D,OAAO,EAKL,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;AAsBpE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,6TAOX,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiC5D,OAAO,EAKL,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;AAsBpE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,6TAOX,CAAC;AA+nBX,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,gDAAgD;IAChD,SAAS,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAChD,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACnC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAOhE;AA+jBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,EAAE,CA+BrF"}
|