pilotswarm 0.5.73 → 0.5.75
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 +6 -0
- package/package.json +2 -2
- package/ui/core/src/controller.js +54 -8
- package/ui/core/src/reducer.js +1 -1
- package/ui/core/src/selectors.js +6 -6
- package/ui/react/src/components.js +5 -5
- package/ui/react/src/feature-flags-panel.js +2 -0
- package/ui/react/src/web-app.js +6 -4
- package/web/dist/assets/{abnfDiagram-VRR7QNED-BnkQIEhH.js → abnfDiagram-VRR7QNED-CRN_CPXb.js} +1 -1
- package/web/dist/assets/{arc-CGyB8bDx.js → arc-CXqBVBpG.js} +1 -1
- package/web/dist/assets/{architectureDiagram-ZJ3FMSHR-DWKmcDN1.js → architectureDiagram-ZJ3FMSHR-DOA41VEX.js} +1 -1
- package/web/dist/assets/{blockDiagram-677ZJIJ3-rn5c_Stz.js → blockDiagram-677ZJIJ3-BCa9kQVE.js} +1 -1
- package/web/dist/assets/{c4Diagram-LMCZKHZV-DyDQ7Ifb.js → c4Diagram-LMCZKHZV-CccO5uAf.js} +1 -1
- package/web/dist/assets/channel-Df1De1np.js +1 -0
- package/web/dist/assets/{chunk-2Q5K7J3B-C5VqT-KF.js → chunk-2Q5K7J3B-BOzOMW0c.js} +1 -1
- package/web/dist/assets/{chunk-32BRIVSS-DT-sPck4.js → chunk-32BRIVSS-DyeNS6EA.js} +1 -1
- package/web/dist/assets/{chunk-5VM5RSS4-yOTPomtB.js → chunk-5VM5RSS4-Cl2puolj.js} +1 -1
- package/web/dist/assets/{chunk-EX3LRPZG-DmFxJ0dk.js → chunk-EX3LRPZG-CU792nsG.js} +1 -1
- package/web/dist/assets/{chunk-JWPE2WC7-pjfQBm7p.js → chunk-JWPE2WC7-DI-c4Jvn.js} +1 -1
- package/web/dist/assets/{chunk-MOJQB5TN-CHa4SOoq.js → chunk-MOJQB5TN-CVuPn9RU.js} +1 -1
- package/web/dist/assets/{chunk-RYQCIY6F-DgRDTwUy.js → chunk-RYQCIY6F-CD34aFNh.js} +1 -1
- package/web/dist/assets/{chunk-V7JOEXUC-BdxruVNZ.js → chunk-V7JOEXUC-BwQU46DX.js} +1 -1
- package/web/dist/assets/{chunk-VR4S4FIN-DVyRDA0m.js → chunk-VR4S4FIN-CL1JK1sJ.js} +1 -1
- package/web/dist/assets/{chunk-XXDRQBXY-C_SZSWHx.js → chunk-XXDRQBXY-UOxFbxIp.js} +1 -1
- package/web/dist/assets/classDiagram-OUVF2IWQ-ee52oYsq.js +1 -0
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-ee52oYsq.js +1 -0
- package/web/dist/assets/{cose-bilkent-JH36ORCC-B4ttgAJ8.js → cose-bilkent-JH36ORCC-CfQP19CB.js} +1 -1
- package/web/dist/assets/{cynefin-VYW2F7L2-B8cRqvMz.js → cynefin-VYW2F7L2-C9ifcKtK.js} +1 -1
- package/web/dist/assets/{cynefinDiagram-TSTJHNR4-CEubmFl-.js → cynefinDiagram-TSTJHNR4-IwcrpJT3.js} +1 -1
- package/web/dist/assets/{dagre-VKFMJZFB-CgRi7BXz.js → dagre-VKFMJZFB-BzTGLYBP.js} +1 -1
- package/web/dist/assets/{diagram-FQU43EPY-DfLMLNvB.js → diagram-FQU43EPY-D9X1NgQz.js} +1 -1
- package/web/dist/assets/{diagram-G47NLZAW-DMBnhSjJ.js → diagram-G47NLZAW-BkdiUvXU.js} +1 -1
- package/web/dist/assets/{diagram-NH7WQ7WH-CsVx_EMq.js → diagram-NH7WQ7WH-nCeiDJLN.js} +1 -1
- package/web/dist/assets/{diagram-OA4YK3LP-Cd8z9ubn.js → diagram-OA4YK3LP-CXdSE6QP.js} +1 -1
- package/web/dist/assets/{diagram-WEI45ONY-BIjozLvB.js → diagram-WEI45ONY-BNDoTBRl.js} +1 -1
- package/web/dist/assets/{ebnfDiagram-CCIWWBDH-BvEyKaUx.js → ebnfDiagram-CCIWWBDH-BSsQ9Do8.js} +1 -1
- package/web/dist/assets/{erDiagram-Q63AITRT-C1KyyEXS.js → erDiagram-Q63AITRT-BTkFSkJi.js} +1 -1
- package/web/dist/assets/{flowDiagram-23GEKE2U-8vv4Bw3F.js → flowDiagram-23GEKE2U-BGEZ9wur.js} +1 -1
- package/web/dist/assets/{ganttDiagram-NO4QXBWP-BQXnAu0k.js → ganttDiagram-NO4QXBWP-WUAUhEpP.js} +1 -1
- package/web/dist/assets/{gitGraphDiagram-IHSO6WYX-BGtXqY1X.js → gitGraphDiagram-IHSO6WYX-BQZQl2ZR.js} +1 -1
- package/web/dist/assets/{index-BixB0dRp.js → index-DQFBdVYX.js} +4 -4
- package/web/dist/assets/{infoDiagram-FWYZ7A6U-CVJezXGw.js → infoDiagram-FWYZ7A6U-BP9xJx0Z.js} +1 -1
- package/web/dist/assets/{ishikawaDiagram-FXEZZL3T-D_Fi5Rxo.js → ishikawaDiagram-FXEZZL3T-Kz3l0pEF.js} +1 -1
- package/web/dist/assets/{journeyDiagram-5HDEW3XC-Di1In_FH.js → journeyDiagram-5HDEW3XC-KA8zfX2j.js} +1 -1
- package/web/dist/assets/{kanban-definition-HUTT4EX6-ozcJ7MQ3.js → kanban-definition-HUTT4EX6-Cvy5U2tj.js} +1 -1
- package/web/dist/assets/{linear-BCHWKN_x.js → linear-DQ0Ynwre.js} +1 -1
- package/web/dist/assets/{mermaid.core-DPy_PtTG.js → mermaid.core-C_2W6ze2.js} +4 -4
- package/web/dist/assets/{mindmap-definition-LN4V7U3C-BUPXSGdc.js → mindmap-definition-LN4V7U3C-CPkdv3pS.js} +1 -1
- package/web/dist/assets/{papaparse.min-DLMQN21E.js → papaparse.min-gRC4B4xh.js} +1 -1
- package/web/dist/assets/{pegDiagram-2B236MQR-B0VRzHj8.js → pegDiagram-2B236MQR-BEmzoVBF.js} +1 -1
- package/web/dist/assets/{pieDiagram-ENE6RG2P-DJDr0spg.js → pieDiagram-ENE6RG2P-Cs-r2GVr.js} +1 -1
- package/web/dist/assets/{pilotswarm-BchtZfEr.js → pilotswarm-qQVUkWws.js} +62 -62
- package/web/dist/assets/{quadrantDiagram-ABIIQ3AL-D80hp41u.js → quadrantDiagram-ABIIQ3AL-D1SNNoOk.js} +1 -1
- package/web/dist/assets/{railroadDiagram-RFXS5EU6-BVZxxDDn.js → railroadDiagram-RFXS5EU6-BH9sxNL4.js} +1 -1
- package/web/dist/assets/{requirementDiagram-TGXJPOKE-BYBz1YgE.js → requirementDiagram-TGXJPOKE-ucbqSBch.js} +1 -1
- package/web/dist/assets/{sankeyDiagram-HTMAVEWB-Cm0EjuqP.js → sankeyDiagram-HTMAVEWB-9LzvC1Q9.js} +1 -1
- package/web/dist/assets/{sequenceDiagram-DBY2YBRQ-C08lIz44.js → sequenceDiagram-DBY2YBRQ-yVbJ1mbs.js} +1 -1
- package/web/dist/assets/{sizeCapture-X5ZJPWSS-xEVPLUiU.js → sizeCapture-X5ZJPWSS-aH-owuq8.js} +1 -1
- package/web/dist/assets/{stateDiagram-2N3HPSRC-C54U2MIf.js → stateDiagram-2N3HPSRC-eNxPWwbu.js} +1 -1
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-B5tcxao1.js +1 -0
- package/web/dist/assets/{swimlanes-5IMT3BWC-DRPOWaFR.js → swimlanes-5IMT3BWC-CUOaCY_Z.js} +2 -2
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-Dz8gcrTg.js +8 -0
- package/web/dist/assets/{timeline-definition-FHXFAJF6-BUhUcJ_i.js → timeline-definition-FHXFAJF6-CP6SzyRW.js} +1 -1
- package/web/dist/assets/{vennDiagram-L72KCM5P-DFFa7JWQ.js → vennDiagram-L72KCM5P-ByPylANx.js} +1 -1
- package/web/dist/assets/{wardleyDiagram-EHGQE667-Bjv--ELM.js → wardleyDiagram-EHGQE667-QfPO6uUo.js} +1 -1
- package/web/dist/assets/{xychartDiagram-FW5EYKEG-BnGbWQJK.js → xychartDiagram-FW5EYKEG-CNvueYN7.js} +1 -1
- package/web/dist/index.html +2 -2
- package/web/runtime.js +15 -4
- package/web/dist/assets/channel-BTptNqYp.js +0 -1
- package/web/dist/assets/classDiagram-OUVF2IWQ-D_z8OghZ.js +0 -1
- package/web/dist/assets/classDiagram-v2-EOCWNBFH-D_z8OghZ.js +0 -1
- package/web/dist/assets/stateDiagram-v2-6OUMAXLB-CQXFWqsn.js +0 -1
- package/web/dist/assets/swimlanesDiagram-G3AALYLV-BuWCDUQa.js +0 -8
package/README.md
CHANGED
|
@@ -12,6 +12,12 @@ surface of a [PilotSwarm](https://github.com/affandar/pilotswarm) deployment:
|
|
|
12
12
|
Requires **Node 24+**. Everything below assumes you already have a deployment's
|
|
13
13
|
portal URL — that URL is the only thing you need to configure.
|
|
14
14
|
|
|
15
|
+
PilotSwarm packages can distribute skills, worker tools, MCP servers, and
|
|
16
|
+
optional authored agent workflows. In deployments with Base Agent V2 enabled,
|
|
17
|
+
generic sessions discover these capabilities progressively and attach only the
|
|
18
|
+
ones needed for the current task. Named agents remain useful for complex,
|
|
19
|
+
prepackaged workflows and independent durable entry points.
|
|
20
|
+
|
|
15
21
|
---
|
|
16
22
|
|
|
17
23
|
## Quickstart
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pilotswarm",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.75",
|
|
4
4
|
"description": "PilotSwarm application package: terminal UI, browser portal + Web API server, and MCP server — one install, three bins.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"ink": "^6.8.0",
|
|
82
82
|
"jose": "^6.2.2",
|
|
83
83
|
"mermaid": "^11.16.0",
|
|
84
|
-
"pilotswarm-sdk": "0.5.
|
|
84
|
+
"pilotswarm-sdk": "0.5.75",
|
|
85
85
|
"react": "^19.2.4",
|
|
86
86
|
"react-dom": "^19.2.4",
|
|
87
87
|
"ws": "^8.18.2"
|
|
@@ -96,7 +96,6 @@ const FLEET_STATS_DEFAULT_WINDOW_DAYS = 30;
|
|
|
96
96
|
const SESSION_REFRESH_FAILED_STATUS = "Session refresh failed";
|
|
97
97
|
const AUTO_HISTORY_SCROLL_PAGE_COUNT = 3;
|
|
98
98
|
const SESSION_REFRESH_PAGE_LIMIT = 200;
|
|
99
|
-
const SESSION_REFRESH_MAX_PAGES = 5;
|
|
100
99
|
const FULLSCREENABLE_PANES = new Set([
|
|
101
100
|
FOCUS_REGIONS.SESSIONS,
|
|
102
101
|
FOCUS_REGIONS.CHAT,
|
|
@@ -191,26 +190,59 @@ function isSessionGoneError(error) {
|
|
|
191
190
|
return status === 404 || status === 403 || code === "NOT_FOUND" || code === "FORBIDDEN";
|
|
192
191
|
}
|
|
193
192
|
|
|
194
|
-
async function
|
|
193
|
+
async function loadSessionCatalogPages(transport, systemFilter) {
|
|
195
194
|
if (typeof transport.listSessionsPage !== "function") {
|
|
196
195
|
return transport.listSessions();
|
|
197
196
|
}
|
|
198
197
|
|
|
199
198
|
const sessions = [];
|
|
200
199
|
let cursor = null;
|
|
201
|
-
|
|
200
|
+
const seenCursors = new Set();
|
|
201
|
+
for (;;) {
|
|
202
202
|
const page = await transport.listSessionsPage({
|
|
203
203
|
limit: SESSION_REFRESH_PAGE_LIMIT,
|
|
204
204
|
cursor,
|
|
205
|
+
systemFilter,
|
|
206
|
+
viewerOnly: true,
|
|
205
207
|
});
|
|
206
208
|
const pageSessions = Array.isArray(page?.sessions) ? page.sessions : [];
|
|
207
209
|
sessions.push(...pageSessions);
|
|
208
|
-
if (!page?.hasMore
|
|
210
|
+
if (!page?.hasMore) break;
|
|
211
|
+
if (!page?.nextCursor) {
|
|
212
|
+
throw new Error("Session catalog page reported more rows without a next cursor");
|
|
213
|
+
}
|
|
214
|
+
const cursorKey = `${Number(page.nextCursor.updatedAt)}\0${String(page.nextCursor.sessionId || "")}`;
|
|
215
|
+
if (seenCursors.has(cursorKey)) {
|
|
216
|
+
throw new Error("Session catalog page repeated its next cursor");
|
|
217
|
+
}
|
|
218
|
+
seenCursors.add(cursorKey);
|
|
209
219
|
cursor = page.nextCursor;
|
|
210
220
|
}
|
|
211
221
|
return sessions;
|
|
212
222
|
}
|
|
213
223
|
|
|
224
|
+
async function loadSessionCatalog(transport) {
|
|
225
|
+
if (typeof transport.listSessionsPage !== "function") {
|
|
226
|
+
return transport.listSessions();
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// System roots must not depend on where they happen to fall in the main
|
|
230
|
+
// catalog's recency order. Fetch both server-filtered streams
|
|
231
|
+
// independently, then combine them without changing either stream's
|
|
232
|
+
// order. Every page still goes through the transport's viewer-scoped API.
|
|
233
|
+
const [systemSessions, regularSessions] = await Promise.all([
|
|
234
|
+
loadSessionCatalogPages(transport, "only"),
|
|
235
|
+
loadSessionCatalogPages(transport, "exclude"),
|
|
236
|
+
]);
|
|
237
|
+
const byId = new Set();
|
|
238
|
+
return [...systemSessions, ...regularSessions].filter((session) => {
|
|
239
|
+
const sessionId = String(session?.sessionId || "");
|
|
240
|
+
if (!sessionId || byId.has(sessionId)) return false;
|
|
241
|
+
byId.add(sessionId);
|
|
242
|
+
return true;
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
|
|
214
246
|
function groupModelsByProvider(models = []) {
|
|
215
247
|
const groups = [];
|
|
216
248
|
const byProvider = new Map();
|
|
@@ -2641,7 +2673,7 @@ export class PilotSwarmUiController {
|
|
|
2641
2673
|
return null;
|
|
2642
2674
|
})
|
|
2643
2675
|
: Promise.resolve(null);
|
|
2644
|
-
let sessions = (await
|
|
2676
|
+
let sessions = (await loadSessionCatalog(this.transport)).map(normalizeSessionListRow);
|
|
2645
2677
|
// Folders are NOT merged into the session payload any more: they live
|
|
2646
2678
|
// in their own state slice, so a session refresh cannot drop them. A
|
|
2647
2679
|
// failed fetch is "no news" and simply leaves the slice alone.
|
|
@@ -3745,7 +3777,7 @@ export class PilotSwarmUiController {
|
|
|
3745
3777
|
: this.clearAdminSystemAgentModel(route.agentId);
|
|
3746
3778
|
}
|
|
3747
3779
|
|
|
3748
|
-
// ──
|
|
3780
|
+
// ── Packages (Admin → Packages) ──────────────────────────────
|
|
3749
3781
|
|
|
3750
3782
|
setAdminSection(section) {
|
|
3751
3783
|
this.dispatch({ type: "admin/section", section });
|
|
@@ -3978,8 +4010,22 @@ export class PilotSwarmUiController {
|
|
|
3978
4010
|
updated.source = allowUser && updated.user ? "user" : updated.cluster ? "cluster" : "default";
|
|
3979
4011
|
updated.userOverrideIgnored = Boolean(updated.user && !allowUser);
|
|
3980
4012
|
const data = this.getState().admin.features.data;
|
|
4013
|
+
const flags = data.flags.map(flag => flag.featureKey === featureKey ? updated : flag);
|
|
4014
|
+
// Preserve independent saved preferences, but do not display
|
|
4015
|
+
// Base V2 as active when the native prerequisite is Off.
|
|
4016
|
+
// Recompute both when either setting changes; the following
|
|
4017
|
+
// refresh may fail after a successfully saved mutation.
|
|
4018
|
+
const nativeEnabled = flags.find(flag => flag.featureKey === "copilot.native_tasks")?.effective === true;
|
|
4019
|
+
const effectiveFlags = flags.map(flag => {
|
|
4020
|
+
if (flag.featureKey !== "agents.base_v2") return flag;
|
|
4021
|
+
const { reason: _reason, ...baseFlag } = flag;
|
|
4022
|
+
const allowPersonal = flag.cluster?.allowUserOverride ?? flag.defaultAllowUserOverride;
|
|
4023
|
+
const configured = allowPersonal && flag.user ? flag.user.enabled : flag.cluster?.enabled ?? flag.defaultEnabled;
|
|
4024
|
+
return { ...baseFlag, effective: configured && nativeEnabled,
|
|
4025
|
+
...(configured && !nativeEnabled ? { reason: "requires_native_tasks" } : {}) };
|
|
4026
|
+
});
|
|
3981
4027
|
this.dispatch({ type: "admin/features", patch: { data: { ...data,
|
|
3982
|
-
flags:
|
|
4028
|
+
flags: effectiveFlags } } });
|
|
3983
4029
|
}
|
|
3984
4030
|
if (draft && this.getState().admin.features.drafts?.[draftKey] === draft) {
|
|
3985
4031
|
const drafts = { ...this.getState().admin.features.drafts };
|
|
@@ -4046,7 +4092,7 @@ export class PilotSwarmUiController {
|
|
|
4046
4092
|
/** Reload the package list + sources (+ fleet state when permitted). */
|
|
4047
4093
|
async refreshAdminAgentPackages() {
|
|
4048
4094
|
if (typeof this.transport.listAgentPackages !== "function") {
|
|
4049
|
-
this.dispatch({ type: "admin/packages/loadFailed", error: "
|
|
4095
|
+
this.dispatch({ type: "admin/packages/loadFailed", error: "Packages are not available on this deployment." });
|
|
4050
4096
|
return;
|
|
4051
4097
|
}
|
|
4052
4098
|
this.dispatch({ type: "admin/packages/loading" });
|
package/ui/core/src/reducer.js
CHANGED
|
@@ -3067,7 +3067,7 @@ function baseReducer(state, action) {
|
|
|
3067
3067
|
};
|
|
3068
3068
|
}
|
|
3069
3069
|
case "admin/packages/loadFailed": {
|
|
3070
|
-
return { ...state, admin: { ...state.admin, packages: { ...state.admin.packages, loading: false, error: action.error || "Failed to load
|
|
3070
|
+
return { ...state, admin: { ...state.admin, packages: { ...state.admin.packages, loading: false, error: action.error || "Failed to load packages" } } };
|
|
3071
3071
|
}
|
|
3072
3072
|
case "admin/packages/select": {
|
|
3073
3073
|
return {
|
package/ui/core/src/selectors.js
CHANGED
|
@@ -4520,7 +4520,7 @@ export function selectAdminConsole(state) {
|
|
|
4520
4520
|
? "Configured (overrides env GITHUB_TOKEN for this user)"
|
|
4521
4521
|
: "Not configured (using env GITHUB_TOKEN fallback)");
|
|
4522
4522
|
|
|
4523
|
-
// ──
|
|
4523
|
+
// ── Package view-model (Admin → Packages) ────────────────────
|
|
4524
4524
|
const pkgState = admin.packages || {};
|
|
4525
4525
|
const pkgList = Array.isArray(pkgState.list) ? pkgState.list : [];
|
|
4526
4526
|
const ownsPackage = (pkg) => Boolean(
|
|
@@ -4634,7 +4634,7 @@ export function selectAdminConsole(state) {
|
|
|
4634
4634
|
{ id: "myProviders", kind: "subsection", depth: 1, label: "My Providers", selected: section === "providers" && providerPage === "mine" },
|
|
4635
4635
|
...(isAdmin ? [{ id: "sharedProviders", kind: "subsection", depth: 1, label: "Shared Providers", selected: section === "providers" && providerPage === "shared" }] : []),
|
|
4636
4636
|
{ id: "features", kind: "section", depth: 0, label: "Feature flags", selected: section === "features" },
|
|
4637
|
-
{ id: "agents", kind: "section", depth: 0, label: "
|
|
4637
|
+
{ id: "agents", kind: "section", depth: 0, label: "Packages", selected: section === "packages" && !pkgState.selectedName },
|
|
4638
4638
|
{ id: "group:shared", kind: "group", depth: 1, label: "Shared", count: sharedRows.length },
|
|
4639
4639
|
...sharedRows.map((row) => ({ id: `pkg:shared:${row.name}`, kind: "package", depth: 2, label: row.name, ...row })),
|
|
4640
4640
|
{ id: "group:user", kind: "group", depth: 1, label: "User", count: userRows.length },
|
|
@@ -4910,7 +4910,7 @@ export function selectAdminConsole(state) {
|
|
|
4910
4910
|
const actions = [];
|
|
4911
4911
|
if (section === "workers") {
|
|
4912
4912
|
actions.push({ id: "workersRefresh", label: "Refresh workers", key: "r" });
|
|
4913
|
-
actions.push({ id: "showPackages", label: "
|
|
4913
|
+
actions.push({ id: "showPackages", label: "Packages", key: "a" });
|
|
4914
4914
|
actions.push({ id: "showProviders", label: "Model Providers", key: "m" });
|
|
4915
4915
|
actions.push({ id: "close", label: "Close console", key: "Esc" });
|
|
4916
4916
|
return {
|
|
@@ -4999,7 +4999,7 @@ export function selectAdminConsole(state) {
|
|
|
4999
4999
|
actions.push({ id: "cycleSystemOverride", label: "Cycle system-agent override", key: "o" });
|
|
5000
5000
|
}
|
|
5001
5001
|
actions.push({ id: "refreshProviders", label: "Refresh", key: "r" });
|
|
5002
|
-
actions.push({ id: "showPackages", label: "
|
|
5002
|
+
actions.push({ id: "showPackages", label: "Packages", key: "a" });
|
|
5003
5003
|
actions.push({ id: "close", label: "Close console", key: "Esc" });
|
|
5004
5004
|
return {
|
|
5005
5005
|
visible: Boolean(admin.visible),
|
|
@@ -5049,7 +5049,7 @@ export function selectAdminConsole(state) {
|
|
|
5049
5049
|
actions.push({ id: "close", label: "Close console", key: ghcpKey.editing ? "Ctrl+Esc" : "Esc" });
|
|
5050
5050
|
|
|
5051
5051
|
if (section === "ghcp") {
|
|
5052
|
-
actions.splice(actions.length - 1, 0, { id: "showPackages", label: "
|
|
5052
|
+
actions.splice(actions.length - 1, 0, { id: "showPackages", label: "Packages", key: "a" });
|
|
5053
5053
|
}
|
|
5054
5054
|
return {
|
|
5055
5055
|
visible: Boolean(admin.visible),
|
|
@@ -7255,7 +7255,7 @@ export function selectSessionAgentPickerModal(state, maxWidth = 76) {
|
|
|
7255
7255
|
: [[{
|
|
7256
7256
|
text: selectedItem.sectionKind === "builtin"
|
|
7257
7257
|
? "Agents baked into this deployment."
|
|
7258
|
-
: "
|
|
7258
|
+
: "Packages installed on this deployment.",
|
|
7259
7259
|
color: "gray",
|
|
7260
7260
|
}]]),
|
|
7261
7261
|
[{ text: "", color: "gray" }],
|
|
@@ -1922,7 +1922,7 @@ function formatAdminPrincipalLabelTui(principal) {
|
|
|
1922
1922
|
}
|
|
1923
1923
|
|
|
1924
1924
|
function buildAdminPackagesLines(view) {
|
|
1925
|
-
// TUI parity for Admin →
|
|
1925
|
+
// TUI parity for Admin → Packages: the same selector view-model the web
|
|
1926
1926
|
// workspace renders, as text — settings tree, selected package detail,
|
|
1927
1927
|
// files, and a preview head. Keys: a/g switch sections, j/k select,
|
|
1928
1928
|
// r refresh (wired via the ADMIN_* commands).
|
|
@@ -2029,7 +2029,7 @@ function buildAdminPackagesLines(view) {
|
|
|
2029
2029
|
}
|
|
2030
2030
|
} else {
|
|
2031
2031
|
lines.push([{ text: packages.empty
|
|
2032
|
-
? "No
|
|
2032
|
+
? "No packages yet — add skills, tools, MCP integrations, or agents in the portal or `pilotswarm agents push ./dir`."
|
|
2033
2033
|
: "Select a package (j/k) to see detail and files.", color: "gray" }]);
|
|
2034
2034
|
}
|
|
2035
2035
|
lines.push([{ text: "", color: "gray" }]);
|
|
@@ -2083,7 +2083,7 @@ function buildAdminWorkersLines(view) {
|
|
|
2083
2083
|
lines.push([{ text: "Actions", color: "cyan", bold: true }]);
|
|
2084
2084
|
lines.push([
|
|
2085
2085
|
{ text: " r ", color: "cyan", bold: true }, { text: "refresh ", color: "gray" },
|
|
2086
|
-
{ text: "a ", color: "yellow", bold: true }, { text: "
|
|
2086
|
+
{ text: "a ", color: "yellow", bold: true }, { text: "Packages ", color: "gray" },
|
|
2087
2087
|
{ text: "m ", color: "yellow", bold: true }, { text: "Model Providers ", color: "gray" },
|
|
2088
2088
|
{ text: "Esc ", color: "red", bold: true }, { text: "close", color: "gray" },
|
|
2089
2089
|
]);
|
|
@@ -2173,7 +2173,7 @@ function buildAdminModelProviderLines(view) {
|
|
|
2173
2173
|
lines.push([
|
|
2174
2174
|
{ text: " r ", color: "cyan", bold: true }, { text: "refresh ", color: "gray" },
|
|
2175
2175
|
{ text: "m/M ", color: "cyan", bold: true }, { text: "my/shared ", color: "gray" },
|
|
2176
|
-
{ text: "a ", color: "yellow", bold: true }, { text: "
|
|
2176
|
+
{ text: "a ", color: "yellow", bold: true }, { text: "Packages ", color: "gray" },
|
|
2177
2177
|
{ text: "Esc ", color: "red", bold: true }, { text: "close", color: "gray" },
|
|
2178
2178
|
]);
|
|
2179
2179
|
return lines;
|
|
@@ -2248,7 +2248,7 @@ function buildAdminConsoleLines(view) {
|
|
|
2248
2248
|
]);
|
|
2249
2249
|
lines.push([
|
|
2250
2250
|
{ text: " a ", color: "cyan", bold: true },
|
|
2251
|
-
{ text: "
|
|
2251
|
+
{ text: "Packages ", color: "gray" },
|
|
2252
2252
|
{ text: "Esc ", color: "red", bold: true },
|
|
2253
2253
|
{ text: "close console and return to workspace", color: "gray" },
|
|
2254
2254
|
]);
|
|
@@ -103,6 +103,8 @@ function FeatureFlagRow({ flag, mode, busy, saving, controller, workers, workers
|
|
|
103
103
|
mode !== "cluster" ? h("p", { className: "ps-feature-context" }, `Cluster setting: ${onOff(storedEnabled)}. Personal settings ${storedOverride ? "allowed" : "not allowed"}.`) : null,
|
|
104
104
|
locked ? h("p", { className: "ps-feature-retained" }, `Saved future preference: ${savedChoice === "inherit" ? "Use cluster setting" : onOff(flag.user.enabled)}. This will apply if personal settings are allowed again.`) : null),
|
|
105
105
|
!flag.supported ? h("p", { role: "status" }, "This server does not support changing this feature.") : null,
|
|
106
|
+
flag.reason === "requires_native_tasks" ? h("p", { className: "ps-feature-blocker", role: "status" },
|
|
107
|
+
"Base Agent V2 is currently Off because it requires Native Copilot tasks. The Base V2 preference is saved and will apply when native tasks are enabled for the same scope.") : null,
|
|
106
108
|
knownBlocked ? h("p", { className: "ps-feature-blocker", role: "status" }, `The saved setting is On, but none of the ${status.eligible} reporting workers is configured for native tasks. Native tasks cannot run on those workers.`) : null,
|
|
107
109
|
h("div", { className: "ps-feature-editor" }, mode === "cluster" ? [
|
|
108
110
|
h(RadioChoices, { key: "enabled", legend: "Cluster setting", name: `${id}-cluster`, value: String(clusterDraft.enabled), disabled: editDisabled,
|
package/ui/react/src/web-app.js
CHANGED
|
@@ -13904,10 +13904,10 @@ function AdminPackageDetailPane({ controller, view }) {
|
|
|
13904
13904
|
const detail = packages.detail;
|
|
13905
13905
|
if (!packages.selectedName) {
|
|
13906
13906
|
return React.createElement("div", { className: "ps-admin-detail is-empty" },
|
|
13907
|
-
React.createElement("h3", null, "
|
|
13907
|
+
React.createElement("h3", null, "Packages"),
|
|
13908
13908
|
React.createElement("p", { className: "ps-admin-console__hint" },
|
|
13909
13909
|
packages.empty
|
|
13910
|
-
? "No
|
|
13910
|
+
? "No packages yet. Add reusable skills, tools, MCP integrations, or authored agent workflows from a repo or folder — or use `pilotswarm agents push ./my-kit`."
|
|
13911
13911
|
: "Select a package from the tree to see its detail, versions, and files."));
|
|
13912
13912
|
}
|
|
13913
13913
|
const confirmDelete = () => {
|
|
@@ -14349,9 +14349,11 @@ function AdminAddPackageDialog({ controller, dialog }) {
|
|
|
14349
14349
|
onSubmit,
|
|
14350
14350
|
},
|
|
14351
14351
|
React.createElement("div", { className: "ps-modal-header" },
|
|
14352
|
-
React.createElement("span", null, dialog.updateName ? `Update ${dialog.updateName}` : "Add
|
|
14352
|
+
React.createElement("span", null, dialog.updateName ? `Update ${dialog.updateName}` : "Add package"),
|
|
14353
14353
|
React.createElement("button", { type: "button", className: "ps-mini-button", onClick: () => controller.closeAdminAddPackage() }, "✕")),
|
|
14354
14354
|
React.createElement("div", { className: "ps-admin-add__body" },
|
|
14355
|
+
React.createElement("p", { className: "ps-admin-console__hint" },
|
|
14356
|
+
"Packages can contain reusable skills, tools, MCP integrations, and authored agent workflows. No agent is required."),
|
|
14355
14357
|
React.createElement("div", { className: "ps-admin-add__tabs" },
|
|
14356
14358
|
kinds.map(([kind, label]) => React.createElement("button", {
|
|
14357
14359
|
key: kind,
|
|
@@ -14418,7 +14420,7 @@ function AdminAddPackageDialog({ controller, dialog }) {
|
|
|
14418
14420
|
href: guideUrl,
|
|
14419
14421
|
target: "_blank",
|
|
14420
14422
|
rel: "noreferrer noopener",
|
|
14421
|
-
}, "How to build
|
|
14423
|
+
}, "How to build a package"),
|
|
14422
14424
|
" — a complete guide you can also hand straight to Claude or Copilot.")
|
|
14423
14425
|
: null,
|
|
14424
14426
|
React.createElement("p", { className: "ps-admin-console__hint" },
|
package/web/dist/assets/{abnfDiagram-VRR7QNED-BnkQIEhH.js → abnfDiagram-VRR7QNED-CRN_CPXb.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-CVuPn9RU.js";import{p as f}from"./chunk-JWPE2WC7-DI-c4Jvn.js";import{_ as n,l as o}from"./mermaid.core-C_2W6ze2.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-C9ifcKtK.js";import"./pilotswarm-qQVUkWws.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-C_2W6ze2.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|