lazycodex-ai 5.0.1 → 5.1.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.ja.md +2 -1
- package/README.ko.md +2 -1
- package/README.md +2 -1
- package/README.ru.md +2 -1
- package/README.zh-cn.md +2 -1
- package/dist/cli/index.js +851 -546
- package/dist/cli-node/index.js +851 -546
- package/package.json +6 -1
- package/packages/omo-codex/plugin/.codex-plugin/plugin.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/dist/cli.js +341 -157
- package/packages/omo-codex/plugin/components/bootstrap/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/package.json +1 -1
- package/packages/omo-codex/plugin/components/bootstrap/src/setup.ts +7 -4
- package/packages/omo-codex/plugin/components/comment-checker/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/comment-checker/package.json +1 -1
- package/packages/omo-codex/plugin/components/git-bash/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/git-bash/package.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/lazycodex-executor-verify/package.json +1 -1
- package/packages/omo-codex/plugin/components/lsp/dist/.omo-runtime-manifest.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/hooks/hooks.json +2 -2
- package/packages/omo-codex/plugin/components/lsp/package.json +1 -1
- package/packages/omo-codex/plugin/components/rules/hooks/hooks.json +4 -4
- package/packages/omo-codex/plugin/components/rules/package.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/teammode/package.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/telemetry/package.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ultrawork/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/AGENTS.md +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/dist/cli.js +42 -32
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/hooks/hooks.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/package.json +1 -1
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/src/plan-checklist.ts +55 -29
- package/packages/omo-codex/plugin/components/ulw-execute-continuation/test/boulder-reader.test.ts +51 -0
- package/packages/omo-codex/plugin/components/ulw-loop/hooks/hooks.json +5 -5
- package/packages/omo-codex/plugin/components/ulw-loop/package.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-git-bash-mcp-reminder.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-lsp-diagnostics-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-compact-resetting-project-rule-cache.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-comments.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-lsp-diagnostics.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-checking-thread-title-hygiene.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-matching-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/post-tool-use-recording-spawn-admission.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-enforcing-unlimited-goal-budget.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-guarding-ulw-loop-spawns.json +1 -1
- package/packages/omo-codex/plugin/hooks/pre-tool-use-recommending-git-bash-mcp.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-auto-update.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-checking-bootstrap-provisioning.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/hooks/session-start-recording-session-telemetry.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-execute-continuation.json +1 -1
- package/packages/omo-codex/plugin/hooks/stop-checking-ulw-loop-resume.json +1 -1
- package/packages/omo-codex/plugin/hooks/subagent-stop-verifying-lazycodex-executor-evidence.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ultrawork-trigger.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-checking-ulw-loop-steering.json +1 -1
- package/packages/omo-codex/plugin/hooks/user-prompt-submit-loading-project-rules.json +1 -1
- package/packages/omo-codex/plugin/package-lock.json +12 -12
- package/packages/omo-codex/plugin/package.json +1 -1
- package/packages/omo-codex/plugin/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/SKILL.md +1 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
- package/packages/omo-codex/plugin/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
- package/packages/omo-codex/scripts/install-dist/install-local.mjs +10465 -10270
- package/packages/shared-skills/skills/browser/runtime/omowright/manifest.json +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/SKILL.md +1 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py +3 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/cli.py +4 -0
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py +6 -2
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py +7 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py +3 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/types.py +3 -1
- package/packages/shared-skills/skills/coding-agent-sessions/scripts/find-agent-sessions.py +4 -0
|
@@ -66,7 +66,7 @@ The finder prints JSON for stdout and `jq`. Every result includes:
|
|
|
66
66
|
| `detail_hint` | Ready-to-run `read` command for detailed inspection |
|
|
67
67
|
| `match_reasons` | Search-only array explaining which field/content matched each query |
|
|
68
68
|
|
|
69
|
-
Each `match_reasons` entry includes `query`, `platform`, `field`, and `snippet`, so you can tell which platform matched and what content caused the hit without opening every transcript.
|
|
69
|
+
Each `match_reasons` entry includes `query`, `platform`, `field`, and `snippet`, so you can tell which platform matched and what content caused the hit without opening every transcript. `field` is `user_message` when the query matched a user prompt that the `first_user_message`/`last_user_message` previews do not cover, such as a prompt in the middle of the session.
|
|
70
70
|
|
|
71
71
|
## Filters
|
|
72
72
|
|
package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/aside_scanner.py
CHANGED
|
@@ -93,6 +93,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
|
|
|
93
93
|
sid = _dir_session_id(path.parent.name)
|
|
94
94
|
row = index.get(sid)
|
|
95
95
|
first_user = last_user = ""
|
|
96
|
+
prompts: list[str] = []
|
|
96
97
|
provider = model = None
|
|
97
98
|
created = updated = None
|
|
98
99
|
usage: JsonMap = {}
|
|
@@ -107,6 +108,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
|
|
|
107
108
|
if prompt:
|
|
108
109
|
first_user = first_user or prompt
|
|
109
110
|
last_user = prompt
|
|
111
|
+
prompts.append(prompt)
|
|
110
112
|
elif role == "assistant":
|
|
111
113
|
provider = provider or text(data.get("provider"))
|
|
112
114
|
model = model or text(data.get("model"))
|
|
@@ -125,6 +127,7 @@ def _aside_session(path: Path, index: dict[str, _StateRow]) -> Session:
|
|
|
125
127
|
row.parent_id if row is not None else None,
|
|
126
128
|
row.title if row is not None and row.parent_id is not None else None,
|
|
127
129
|
last_user,
|
|
130
|
+
tuple(prompts),
|
|
128
131
|
)
|
|
129
132
|
|
|
130
133
|
|
|
@@ -226,6 +226,10 @@ def _match_reasons(item: Session, query: str) -> list[JsonMap]:
|
|
|
226
226
|
for field, value in _search_fields(item):
|
|
227
227
|
if needle in value.lower():
|
|
228
228
|
reasons.append({"query": query, "platform": item.platform, "field": field, "snippet": _snippet(value, needle)})
|
|
229
|
+
if not reasons:
|
|
230
|
+
prompt = next((message for message in item.user_messages or () if needle in message.lower()), "")
|
|
231
|
+
if prompt:
|
|
232
|
+
reasons.append({"query": query, "platform": item.platform, "field": "user_message", "snippet": _snippet(prompt, needle)})
|
|
229
233
|
return reasons
|
|
230
234
|
|
|
231
235
|
|
package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/file_scanners.py
CHANGED
|
@@ -80,6 +80,7 @@ def scan_aider(extra_roots: tuple[Path, ...], workers: int) -> list[Session]:
|
|
|
80
80
|
def _droid_session(path: Path) -> Session:
|
|
81
81
|
sid = path.stem
|
|
82
82
|
cwd = model = first_user = last_user = None
|
|
83
|
+
prompts: list[str] = []
|
|
83
84
|
created = updated = None
|
|
84
85
|
settings = as_map(read_json(path.with_suffix(".settings.json"))) or {}
|
|
85
86
|
for data in iter_jsonl(path):
|
|
@@ -94,7 +95,8 @@ def _droid_session(path: Path) -> Session:
|
|
|
94
95
|
if prompt:
|
|
95
96
|
first_user = first_user or prompt
|
|
96
97
|
last_user = prompt
|
|
97
|
-
|
|
98
|
+
prompts.append(prompt)
|
|
99
|
+
return Session("droid", sid, str(path), cwd, created or file_time(path), updated or created or file_time(path), None, text(settings.get("model")) or model, first_user or "", _usage(settings), last_user_message=last_user or "", user_messages=tuple(prompts))
|
|
98
100
|
|
|
99
101
|
|
|
100
102
|
def _amp_sessions(path: Path) -> list[Session]:
|
|
@@ -136,6 +138,7 @@ def _gemini_sessions(path: Path) -> list[Session]:
|
|
|
136
138
|
|
|
137
139
|
def _kimi_session(path: Path) -> Session:
|
|
138
140
|
first_user = last_user = ""
|
|
141
|
+
prompts: list[str] = []
|
|
139
142
|
created = updated = None
|
|
140
143
|
for data in iter_jsonl(path):
|
|
141
144
|
stamp = data.get("timestamp")
|
|
@@ -146,7 +149,8 @@ def _kimi_session(path: Path) -> Session:
|
|
|
146
149
|
if prompt:
|
|
147
150
|
first_user = first_user or prompt
|
|
148
151
|
last_user = prompt
|
|
149
|
-
|
|
152
|
+
prompts.append(prompt)
|
|
153
|
+
return Session("kimi", path.parent.name, str(path), None, created or file_time(path), updated or file_time(path), "moonshot", None, first_user, {}, last_user_message=last_user, user_messages=tuple(prompts))
|
|
150
154
|
|
|
151
155
|
|
|
152
156
|
def _codebuff_sessions(path: Path) -> list[Session]:
|
package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/scanners.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
|
4
|
+
from dataclasses import replace
|
|
4
5
|
from pathlib import Path
|
|
5
6
|
from typing import Callable, TypeAlias
|
|
6
7
|
|
|
@@ -95,8 +96,13 @@ def _dedupe(sessions: list[Session]) -> list[Session]:
|
|
|
95
96
|
for session in sessions:
|
|
96
97
|
key = (session.platform, session.id)
|
|
97
98
|
current = found.get(key)
|
|
98
|
-
if current is None
|
|
99
|
+
if current is None:
|
|
99
100
|
found[key] = session
|
|
101
|
+
continue
|
|
102
|
+
winner, twin = (session, current) if _linkage_score(session) > _linkage_score(current) else (current, session)
|
|
103
|
+
if winner.user_messages is None and twin.user_messages is not None:
|
|
104
|
+
winner = replace(winner, user_messages=twin.user_messages)
|
|
105
|
+
found[key] = winner
|
|
100
106
|
return list(found.values())
|
|
101
107
|
|
|
102
108
|
|
package/packages/shared-skills/skills/coding-agent-sessions/scripts/agent_sessions/transcript.py
CHANGED
|
@@ -39,6 +39,7 @@ def jsonl_session(platform: str, path: Path, fallback_id: str) -> Session:
|
|
|
39
39
|
sid = fallback_id
|
|
40
40
|
cwd = provider = model = first_user = parent = agent = None
|
|
41
41
|
last_user = ""
|
|
42
|
+
prompts: list[str] = []
|
|
42
43
|
created = updated = None
|
|
43
44
|
usage: JsonMap = {}
|
|
44
45
|
for data in iter_jsonl(path):
|
|
@@ -65,8 +66,9 @@ def jsonl_session(platform: str, path: Path, fallback_id: str) -> Session:
|
|
|
65
66
|
if prompt:
|
|
66
67
|
first_user = first_user or prompt
|
|
67
68
|
last_user = prompt
|
|
69
|
+
prompts.append(prompt)
|
|
68
70
|
merge_usage(usage, as_map(message.get("usage")) or as_map(data.get("usage")))
|
|
69
|
-
return Session(platform, sid, str(path), cwd, created or file_time(path), updated or created or file_time(path), provider, model, first_user or "", usage, parent, agent, last_user)
|
|
71
|
+
return Session(platform, sid, str(path), cwd, created or file_time(path), updated or created or file_time(path), provider, model, first_user or "", usage, parent, agent, last_user, tuple(prompts))
|
|
70
72
|
|
|
71
73
|
|
|
72
74
|
def spawn_info(source: Json | None) -> tuple[str | None, str | None]:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from dataclasses import dataclass
|
|
3
|
+
from dataclasses import dataclass, field
|
|
4
4
|
from pathlib import Path
|
|
5
5
|
from typing import TypeAlias
|
|
6
6
|
|
|
@@ -38,6 +38,8 @@ class Session:
|
|
|
38
38
|
parent_id: str | None = None
|
|
39
39
|
agent: str | None = None
|
|
40
40
|
last_user_message: str = ""
|
|
41
|
+
# Every user prompt the scanner already parsed, kept for search only; None when the scanner did not read the whole transcript.
|
|
42
|
+
user_messages: tuple[str, ...] | None = field(default=None, compare=False, repr=False)
|
|
41
43
|
|
|
42
44
|
def to_json(self) -> JsonMap:
|
|
43
45
|
return {
|
|
@@ -16,4 +16,8 @@ sys.path.insert(0, str(Path(__file__).resolve().parent))
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
if __name__ == "__main__":
|
|
19
|
+
if sys.version_info < (3, 11):
|
|
20
|
+
found = ".".join(str(part) for part in sys.version_info[:3])
|
|
21
|
+
_ = sys.stderr.write(f"find-agent-sessions requires Python 3.11 or newer (found {found}); run it with python3.11+ or `uv run`.\n")
|
|
22
|
+
raise SystemExit(2)
|
|
19
23
|
_ = runpy.run_module("agent_sessions.cli", run_name="__main__")
|