@sjawhar/pi-legion-envoy 0.35.0 → 0.36.1

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 CHANGED
@@ -65,12 +65,18 @@ what the installed package already ships.
65
65
  Released installs come from npm as `@sjawhar/pi-legion-envoy`. The tarball is
66
66
  self-contained: it ships `dist/envoy.js` and `dist/legion.js` — bundling every
67
67
  dependency except the OMP host package — and the repo `skills/` tree staged beside it
68
- at `dist/skills` so `resources_discover` serves the Legion skills from the installed
69
- package. The published manifest exposes both `dist/envoy.js` and `dist/legion.js`, while
70
- the committed manifest keeps the TypeScript entries for repo checkouts. The Legion
71
- daemon spawns every session against this one installed package instead of also loading
72
- a repo checkout with OMP's `--extension` flag, so a daemon session ends up with exactly
73
- one instance of each extension.
68
+ at `dist/skills`. The manifest declares `omp.skills: ["dist/skills"]` alongside
69
+ `omp.extensions`: OMP's own plugin discovery only reads `skill://`-resolvable skills from
70
+ `<plugin root>/skills` or from directories a manifest's `omp.skills` array names, and this
71
+ package ships skills at `dist/skills` (not the plugin root itself), so the field is required
72
+ for every session — including a headless Legion controller — to see the Legion skills at all.
73
+ `resources_discover` additionally serves the same directory as a secondary, extension-owned
74
+ discovery path. The published manifest exposes `dist/envoy.js` and `dist/legion.js` for
75
+ `omp.extensions` (only `omp.skills` ships as committed, since `dist/skills` is its path in both
76
+ a repo checkout post-`prepack.sh` and the published tarball), while the committed manifest keeps
77
+ the TypeScript entries for repo checkouts. The Legion daemon spawns every session against this
78
+ one installed package instead of also loading a repo checkout with OMP's `--extension` flag, so
79
+ a daemon session ends up with exactly one instance of each extension.
74
80
 
75
81
  `.github/workflows/release.yaml` performs that manifest rewrite around `bun pm pack`
76
82
  and restores the committed file before tagging. Packing with the committed source
package/dist/envoy.js CHANGED
@@ -30077,9 +30077,59 @@ var controllerIssue = strictObject({
30077
30077
  secret: nonEmptyString,
30078
30078
  issue: nonEmptyString
30079
30079
  });
30080
+ var TREE_STATUSES = ["queued", "active", "lingering", "dead", "launch-failed", "closed"];
30081
+ var stateWindowLocator = strictObject({
30082
+ tmuxSession: nonEmptyString,
30083
+ tmuxWindowId: nonEmptyString,
30084
+ tmuxPaneId: nonEmptyString.optional()
30085
+ });
30086
+ var stateTreeLocator = stateWindowLocator.extend({ ompSessionFile: nonEmptyString.optional() });
30087
+ var stateIssue = strictObject({
30088
+ key: nonEmptyString,
30089
+ title: string2(),
30090
+ status: _enum2(LIFECYCLE_STATUSES).optional(),
30091
+ children: array(nonEmptyString),
30092
+ parent: nonEmptyString.optional(),
30093
+ lastAppliedSeq: number2().int().nonnegative().optional()
30094
+ });
30095
+ var stateTree = strictObject({
30096
+ status: _enum2(TREE_STATUSES),
30097
+ generation: number2().int().nonnegative(),
30098
+ launchFailures: number2().int().nonnegative(),
30099
+ readyConfirmedAt: number2().optional(),
30100
+ locator: stateTreeLocator.optional()
30101
+ });
30102
+ var stateGate = strictObject({
30103
+ designAskId: nonEmptyString.optional(),
30104
+ designApproved: nonEmptyString.optional()
30105
+ });
30106
+ var stateRole = strictObject({
30107
+ role: nonEmptyString,
30108
+ issue: nonEmptyString.optional(),
30109
+ generation: number2().int().nonnegative().optional(),
30110
+ sessionId: nonEmptyString.optional(),
30111
+ readyConfirmedAt: number2().optional(),
30112
+ launchFailures: number2().int().nonnegative().optional(),
30113
+ locator: stateWindowLocator.optional()
30114
+ });
30080
30115
  var LegionDaemonApi = {
30081
30116
  State: {
30082
- response: object({ project: nonEmptyString })
30117
+ response: strictObject({
30118
+ project: nonEmptyString,
30119
+ version: number2().int(),
30120
+ issues: record(string2(), stateIssue),
30121
+ trees: record(string2(), stateTree),
30122
+ admission: strictObject({
30123
+ cap: number2().int().nonnegative(),
30124
+ active: array(nonEmptyString),
30125
+ queue: array(nonEmptyString)
30126
+ }),
30127
+ gates: record(string2(), stateGate),
30128
+ controllerLocator: stateWindowLocator.optional(),
30129
+ roles: record(string2(), stateRole),
30130
+ controllerPendingNotices: number2().int().nonnegative(),
30131
+ pendingStatusWrites: array(nonEmptyString)
30132
+ })
30083
30133
  },
30084
30134
  ControllerReady: {
30085
30135
  request: strictObject({ secret: nonEmptyString, sessionId: nonEmptyString }),
package/dist/legion.js CHANGED
@@ -30075,9 +30075,59 @@ var controllerIssue = strictObject({
30075
30075
  secret: nonEmptyString,
30076
30076
  issue: nonEmptyString
30077
30077
  });
30078
+ var TREE_STATUSES = ["queued", "active", "lingering", "dead", "launch-failed", "closed"];
30079
+ var stateWindowLocator = strictObject({
30080
+ tmuxSession: nonEmptyString,
30081
+ tmuxWindowId: nonEmptyString,
30082
+ tmuxPaneId: nonEmptyString.optional()
30083
+ });
30084
+ var stateTreeLocator = stateWindowLocator.extend({ ompSessionFile: nonEmptyString.optional() });
30085
+ var stateIssue = strictObject({
30086
+ key: nonEmptyString,
30087
+ title: string2(),
30088
+ status: _enum2(LIFECYCLE_STATUSES).optional(),
30089
+ children: array(nonEmptyString),
30090
+ parent: nonEmptyString.optional(),
30091
+ lastAppliedSeq: number2().int().nonnegative().optional()
30092
+ });
30093
+ var stateTree = strictObject({
30094
+ status: _enum2(TREE_STATUSES),
30095
+ generation: number2().int().nonnegative(),
30096
+ launchFailures: number2().int().nonnegative(),
30097
+ readyConfirmedAt: number2().optional(),
30098
+ locator: stateTreeLocator.optional()
30099
+ });
30100
+ var stateGate = strictObject({
30101
+ designAskId: nonEmptyString.optional(),
30102
+ designApproved: nonEmptyString.optional()
30103
+ });
30104
+ var stateRole = strictObject({
30105
+ role: nonEmptyString,
30106
+ issue: nonEmptyString.optional(),
30107
+ generation: number2().int().nonnegative().optional(),
30108
+ sessionId: nonEmptyString.optional(),
30109
+ readyConfirmedAt: number2().optional(),
30110
+ launchFailures: number2().int().nonnegative().optional(),
30111
+ locator: stateWindowLocator.optional()
30112
+ });
30078
30113
  var LegionDaemonApi = {
30079
30114
  State: {
30080
- response: object({ project: nonEmptyString })
30115
+ response: strictObject({
30116
+ project: nonEmptyString,
30117
+ version: number2().int(),
30118
+ issues: record(string2(), stateIssue),
30119
+ trees: record(string2(), stateTree),
30120
+ admission: strictObject({
30121
+ cap: number2().int().nonnegative(),
30122
+ active: array(nonEmptyString),
30123
+ queue: array(nonEmptyString)
30124
+ }),
30125
+ gates: record(string2(), stateGate),
30126
+ controllerLocator: stateWindowLocator.optional(),
30127
+ roles: record(string2(), stateRole),
30128
+ controllerPendingNotices: number2().int().nonnegative(),
30129
+ pendingStatusWrites: array(nonEmptyString)
30130
+ })
30081
30131
  },
30082
30132
  ControllerReady: {
30083
30133
  request: strictObject({ secret: nonEmptyString, sessionId: nonEmptyString }),
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@sjawhar/pi-legion-envoy",
3
- "version": "0.35.0",
3
+ "version": "0.36.1",
4
4
  "type": "module",
5
5
  "omp": {
6
6
  "extensions": [
7
7
  "dist/envoy.js",
8
8
  "dist/legion.js"
9
+ ],
10
+ "skills": [
11
+ "dist/skills"
9
12
  ]
10
13
  },
11
14
  "repository": {