@codyswann/lisa 2.147.5 → 2.147.7

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.
Files changed (76) hide show
  1. package/package.json +1 -1
  2. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  3. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  4. package/plugins/lisa/skills/repair-intake/SKILL.md +37 -14
  5. package/plugins/lisa-agy/plugin.json +1 -1
  6. package/plugins/lisa-agy/skills/repair-intake/SKILL.md +37 -14
  7. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  8. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  9. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  10. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  11. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  12. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  13. package/plugins/lisa-copilot/skills/repair-intake/SKILL.md +37 -14
  14. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  15. package/plugins/lisa-cursor/skills/repair-intake/SKILL.md +37 -14
  16. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  17. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  18. package/plugins/lisa-expo-agy/plugin.json +1 -1
  19. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  20. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  21. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  23. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  24. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  27. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  28. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  29. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  30. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  31. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  32. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  33. package/plugins/lisa-openclaw/skills/lisa-openclaw-connect-repo-topic/SKILL.md +13 -5
  34. package/plugins/lisa-openclaw/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +6 -0
  35. package/plugins/lisa-openclaw/skills/lisa-openclaw-connect-staff/references/platform-routing.md +5 -0
  36. package/plugins/lisa-openclaw/skills/lisa-openclaw-setup/SKILL.md +3 -0
  37. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  38. package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-repo-topic/SKILL.md +13 -5
  39. package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +6 -0
  40. package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-connect-staff/references/platform-routing.md +5 -0
  41. package/plugins/lisa-openclaw-agy/skills/lisa-openclaw-setup/SKILL.md +3 -0
  42. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-repo-topic/SKILL.md +13 -5
  44. package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +6 -0
  45. package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-connect-staff/references/platform-routing.md +5 -0
  46. package/plugins/lisa-openclaw-copilot/skills/lisa-openclaw-setup/SKILL.md +3 -0
  47. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-repo-topic/SKILL.md +13 -5
  49. package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +6 -0
  50. package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-connect-staff/references/platform-routing.md +5 -0
  51. package/plugins/lisa-openclaw-cursor/skills/lisa-openclaw-setup/SKILL.md +3 -0
  52. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails-agy/plugin.json +1 -1
  55. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  56. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  60. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  61. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki/scripts/ingest_slack_channel.py +2 -2
  65. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  66. package/plugins/lisa-wiki-agy/scripts/ingest_slack_channel.py +2 -2
  67. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  68. package/plugins/lisa-wiki-copilot/scripts/ingest_slack_channel.py +2 -2
  69. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  70. package/plugins/lisa-wiki-cursor/scripts/ingest_slack_channel.py +2 -2
  71. package/plugins/src/base/skills/repair-intake/SKILL.md +37 -14
  72. package/plugins/src/openclaw/skills/lisa-openclaw-connect-repo-topic/SKILL.md +13 -5
  73. package/plugins/src/openclaw/skills/lisa-openclaw-connect-repo-topic/references/repo-topic-config.md +6 -0
  74. package/plugins/src/openclaw/skills/lisa-openclaw-connect-staff/references/platform-routing.md +5 -0
  75. package/plugins/src/openclaw/skills/lisa-openclaw-setup/SKILL.md +3 -0
  76. package/plugins/src/wiki/scripts/ingest_slack_channel.py +2 -2
@@ -49,11 +49,15 @@ close-out** roles and moves work *unstuck* or *fully closed*:
49
49
  lifecycle label. repair-intake classifies it as a PRD or build ticket and adds the configured
50
50
  `ready` label (`prd-ready` for a PRD, build `status:ready` for a ticket) so normal intake can see
51
51
  it; if the later intake/implement gate finds the item incomplete, it moves the item to `blocked`.
52
- - **Missing PRD child link drift** — a GitHub PRD in `ticketed` (or another open non-product-owned
53
- PRD role) has a generated-work section/comment that names top-level generated work, but the PRD's
54
- native sub-issue list is missing one or more of those top-level children. repair-intake replays the
55
- `prd-backlink` native-linking contract and attaches the missing same-repo top-level children
56
- idempotently, so PRD rollup can rely on the native graph again.
52
+ - **Missing native child link drift** — a GitHub parent (a `ticketed`/other open non-product-owned
53
+ PRD, **or a build Epic/Story container**) whose children are discoverable from the generated-work
54
+ section/comment for a PRD, or from body parentage (`Parent: #<n>` / `Parent Epic: #<n>`) for a build
55
+ container resolved via the documented hierarchy fallback but whose native sub-issue list is missing
56
+ one or more of those children. This is the common shape when children were created by an external
57
+ generator (e.g. Codex) or an older write path that recorded parentage only in prose and never called
58
+ `addSubIssue`. repair-intake replays the `prd-backlink` / `github-write-issue` native-linking contract
59
+ and attaches the missing same-repo children idempotently, so rollup and the GitHub UI can rely on the
60
+ native graph again.
57
61
 
58
62
  This skill is the symmetric counterpart to `lisa:intake`. It reuses the same queue-detection,
59
63
  the same agent-team orchestration, the same "don't ask, just run" confirmation policy, and the
@@ -467,7 +471,21 @@ left in a status it should not carry, including a stale build-ready `ready`).
467
471
 
468
472
  1. Read the child set using the vendor-native hierarchy first (GitHub sub-issues, JIRA
469
473
  Epic/parent/sub-task hierarchy, Linear project/parent/sub-issues), with the same fallbacks the
470
- vendor read/sync skills document.
474
+ vendor read/sync skills document. **Record which children were resolved natively vs. only via the
475
+ prose/body-parentage fallback** — the gap between the two sets is repairable native-link drift.
476
+ 1a. **Heal native child links before rolling up (GitHub).** Whenever the resolved child set
477
+ contains same-repo children that are *not* in the parent's native `subIssues` graph — the typical
478
+ case when the children carry `Parent: #<n>` / `Parent Epic: #<n>` in prose but were never attached
479
+ (external generators like Codex, or an older write path) — attach each missing same-repo child as a
480
+ native sub-issue using the identical idempotent `addSubIssue` contract the "GitHub PRD missing child
481
+ links" path documents below: dedupe by `owner/repo#number`, treat "already linked" as success, keep
482
+ cross-repo/cross-vendor children documented-only with a warning, and on `subIssues`/`addSubIssue`
483
+ unavailability record a capability warning and continue. A build parent attaches the children
484
+ resolved by its hierarchy (its Stories/Sub-tasks), not only empty-parent-token top-level work — the
485
+ PRD top-level-only restriction is a PRD rule, not a build one. Record repaired refs in the rollup
486
+ state fingerprint so repeated cycles do not re-post. Do this even when step 2 derives `unchanged`:
487
+ the native graph is what the GitHub UI rollup and progress bar depend on, independently of the
488
+ parent's status.
471
489
  2. **Compute the derived parent state** bottom-up per the `leaf-only-lifecycle` **Parent status
472
490
  rollup** state machine, evaluated over the env ladder `in-progress < dev < staging <
473
491
  production` (the ordered keys of the env-keyed `done` map): any required child blocked →
@@ -754,9 +772,11 @@ It MAY:
754
772
  applies only to containers, never to leaves.
755
773
  - Move a PRD with fully terminal generated work to `shipped` and close/archive the source artifact
756
774
  where the source vendor supports native close-out, per `prd-lifecycle-rollup`.
757
- - Repair missing native GitHub PRD child links from the generated-work fallback by replaying the
758
- `prd-backlink` top-level-only, same-repo, idempotent `addSubIssue` contract. This repairs
759
- structure only; it does not ship or verify the PRD.
775
+ - Repair missing native GitHub child links by replaying the same-repo, idempotent `addSubIssue`
776
+ contract — for a **PRD** from the generated-work fallback (top-level-only), and for a **build
777
+ Epic/Story container** from its hierarchy/body-parentage children so rollup and the GitHub UI can
778
+ rely on the native graph. This repairs structure only; it does not ship, transition, or verify the
779
+ parent.
760
780
  - Normalize a GitHub issue with no configured lifecycle label by adding the configured PRD or build
761
781
  `ready` label after classifying the issue. This is a visibility repair, not a claim; the item
762
782
  remains open and unclaimed for normal intake.
@@ -779,13 +799,16 @@ It MUST NOT:
779
799
  1. **Resolve the queue** — detect vendor/lifecycle (Source dispatch); resolve stuck role names
780
800
  from config. For JIRA, confirm the needed transitions are reachable; stop on misconfig.
781
801
  2. **Enumerate repair candidates** — query in-progress role(s), `blocked` role(s), terminal/open
782
- items, GitHub PRDs whose generated-work fallback names top-level children missing from native
783
- sub-issues, rollup parents/PRDs with child work, **containers carrying the `ready` role** (a
802
+ items, GitHub parents (PRDs **and build Epic/Story containers**) whose discoverable children
803
+ generated-work fallback for a PRD, hierarchy/body-parentage for a build container are missing from
804
+ their native sub-issue graph, rollup parents/PRDs with child work, **containers carrying the `ready`
805
+ role** (a
784
806
  leaf-only-invariant violation to reconcile), and GitHub issues with no configured lifecycle label,
785
807
  for the detected lifecycle(s), up to `max_candidates`, via the Access layer reads.
786
808
  3. **Order deterministically**, highest repair-confidence first:
787
809
  1. terminal-labeled items that only need native close / complete / resolve,
788
- 2. GitHub PRDs missing native links for generated top-level work (structure-only repair),
810
+ 2. GitHub parents (PRDs missing native links for generated top-level work, or build Epic/Story
811
+ containers missing native links for prose/hierarchy children) needing structure-only repair,
789
812
  3. rollup parents/PRDs whose child sets are all terminal (close-out),
790
813
  4. rollup parents whose children have advanced to an intermediate env, or stale-`ready`
791
814
  containers, that need their derived state applied (status-only reconciliation, no native
@@ -826,8 +849,8 @@ Report outcomes in these buckets:
826
849
  - `rolled_up` — parent/container/PRD rollups advanced to their derived state: an intermediate env
827
850
  (e.g. all children at `On Stg` → parent `On Stg`), a fully-terminal close-out, or a stale-`ready`
828
851
  container reconciled from its children.
829
- - `relinked` — GitHub PRDs whose missing native sub-issue links were repaired from the
830
- generated-work fallback.
852
+ - `relinked` — GitHub parents (PRDs from the generated-work fallback, or build Epic/Story containers
853
+ from hierarchy/body-parentage) whose missing native sub-issue links were attached.
831
854
  - `normalized_ready` — GitHub issues missing official lifecycle labels that were classified and
832
855
  given the configured PRD/build `ready` label so normal intake can claim them.
833
856
  - `still_blocked` — examined and intentionally left `blocked`, with the active reason.
@@ -110,6 +110,11 @@ root-only route can validate while the actual bot still ignores the topic-level
110
110
  `agentId`, and prompt. When in doubt, mirror the route under the owning account and keep any existing
111
111
  root group route only as a fallback/documentation shape.
112
112
 
113
+ Account-scoped topic `agentId` routes also require an OpenClaw runtime that treats the topic agent as
114
+ an explicit group route for non-default Telegram accounts. If the self-test logs
115
+ `drop non-default account requires explicit binding`, update or rebuild OpenClaw before adding config
116
+ workarounds; do not create persistent ACP bindings solely to bypass that guard.
117
+
113
118
  Keep allowlist policy, and add `allowFrom` only when membership must be narrower than the group.
114
119
  Leave the topic-level `requireMention = false` (the default) so the agent activates on any message —
115
120
  the topic is bound 1:1 to this dispatcher, so an @mention carries no routing information and is pure
@@ -137,11 +142,14 @@ Then from the target topic, send a plain message with **no** @mention (the defau
137
142
  `requireMention = false` means the agent must activate without one) asking for an exact-token reply
138
143
  with **no** file changes, commits, PRs, or merges, e.g. `reply with exactly TELEGRAM-ROUTE-OK`.
139
144
  Confirm the visible reply, that the dispatcher spawned the worker, and that the worker ran in the
140
- intended repo. If the topic was deliberately left at `requireMention = true`, mention the bot instead
141
- (`<bot-handle> reply with exactly TELEGRAM-ROUTE-OK`) and additionally confirm that an un-mentioned
142
- message is **ignored**. For folder-scoped topics, also send a request that implies but doesn't name a
143
- repo and confirm the dispatcher asks for confirmation before proceeding. Do **not** treat `openclaw agent --agent
144
- <id> ...` as proof a topic route works use the visible topic reply.
145
+ intended repo. If there is no dispatcher session, inspect `/tmp/openclaw/openclaw-YYYY-MM-DD.log`;
146
+ `drop non-default account requires explicit binding` means the OpenClaw runtime is too old for
147
+ account-scoped topic-agent routing. If the topic was deliberately left at `requireMention = true`,
148
+ mention the bot instead (`<bot-handle> reply with exactly TELEGRAM-ROUTE-OK`) and additionally
149
+ confirm that an un-mentioned message is **ignored**. For folder-scoped topics, also send a request
150
+ that implies but doesn't name a repo and confirm the dispatcher asks for confirmation before
151
+ proceeding. Do **not** treat `openclaw agent --agent <id> ...` as proof a topic route works — use the
152
+ visible topic reply.
145
153
 
146
154
  ## Output standard
147
155
 
@@ -75,6 +75,12 @@ Use `channels.telegram.groups` for a single-account Telegram setup. If
75
75
  `channels.telegram.accounts.<account-id>.groups.<group-id>`. Account-scoped Telegram configs do not
76
76
  inherit root `channels.telegram.groups` routes.
77
77
 
78
+ Account-scoped topic `agentId` routes require an OpenClaw runtime that treats the topic agent as an
79
+ explicit group route for non-default Telegram accounts. If a real topic self-test is delivered to the
80
+ bot but the logs show `drop non-default account requires explicit binding`, update or rebuild
81
+ OpenClaw. Do not add a persistent ACP binding as a workaround; the configured topic `agentId` is the
82
+ intended route.
83
+
78
84
  ### Single-account route
79
85
 
80
86
  ```json5
@@ -19,6 +19,11 @@ Use `channels.telegram.groups` for a single-account Telegram setup. If the OpenC
19
19
  `channels.telegram.accounts.<account-id>.groups.<telegram-supergroup-id>`; account-scoped Telegram
20
20
  configs do not inherit root group routes.
21
21
 
22
+ Account-scoped topic `agentId` routes require an OpenClaw runtime that treats the topic agent as an
23
+ explicit group route for non-default Telegram accounts. If a real Telegram topic test reaches the bot
24
+ but logs `drop non-default account requires explicit binding`, update or rebuild OpenClaw before
25
+ adding config workarounds; the topic `agentId` is the intended route.
26
+
22
27
  ### Single-account route
23
28
 
24
29
  ```json5
@@ -83,6 +83,9 @@ loudly, do not silently proceed) if any is missing:
83
83
  root (Slack channel + root `thread_ts`; Telegram supergroup + forum topic + root `message_id`), and
84
84
  replies in that thread continue the same session, so concurrent threads don't share short-term
85
85
  context.
86
+ - **Account-scoped Telegram topic agents** — in multi-account Telegram configs,
87
+ `channels.telegram.accounts.<account-id>.groups.<group-id>.topics.<topic-id>.agentId` routes group
88
+ messages as an explicit topic route instead of dropping them as a non-default account fallback.
86
89
  - **`NO_REPLY` sentinel** — after an agent sends a message with the platform message tool, returning
87
90
  exactly `NO_REPLY` as its assistant final prevents the gateway from posting a duplicate loose
88
91
  message.
@@ -57,12 +57,12 @@ TOKEN_PATTERNS = [
57
57
 
58
58
 
59
59
  def utc_now() -> dt.datetime:
60
- return dt.datetime.now(dt.UTC).replace(microsecond=0)
60
+ return dt.datetime.now(dt.timezone.utc).replace(microsecond=0)
61
61
 
62
62
 
63
63
  def iso_from_ts(ts: str) -> str:
64
64
  seconds = float(ts)
65
- return dt.datetime.fromtimestamp(seconds, dt.UTC).replace(microsecond=0).isoformat().replace("+00:00", "Z")
65
+ return dt.datetime.fromtimestamp(seconds, dt.timezone.utc).replace(microsecond=0).isoformat().replace("+00:00", "Z")
66
66
 
67
67
 
68
68
  def ts_from_input(value: str | None) -> str | None: