dev-memory-cli 0.18.2 → 0.19.2
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 +45 -8
- package/bin/dev-memory.js +79 -1
- package/hooks/README.md +8 -2
- package/hooks/hooks.json +1 -1
- package/lib/dev_memory_capture.py +637 -84
- package/lib/dev_memory_common.py +129 -71
- package/lib/dev_memory_context.py +35 -1
- package/lib/dev_memory_graduate.py +83 -20
- package/lib/dev_memory_read.py +317 -0
- package/lib/dev_memory_setup.py +0 -2
- package/lib/dev_memory_summary.py +233 -0
- package/lib/ui-app.html +41 -0
- package/lib/ui-server.js +53 -0
- package/package.json +1 -1
- package/scripts/hooks/_common.py +670 -15
- package/scripts/hooks/session_end.py +14 -0
- package/scripts/hooks/session_start.py +17 -1
- package/suite-manifest.json +1 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
|
|
3
3
|
from _common import (
|
|
4
|
+
enqueue_session_summary_job,
|
|
4
5
|
is_no_git_mode,
|
|
5
6
|
is_workspace_mode,
|
|
6
7
|
log,
|
|
7
8
|
maybe_record_head,
|
|
9
|
+
read_hook_input,
|
|
8
10
|
record_head_all_repos,
|
|
9
11
|
resolve_assets,
|
|
10
12
|
)
|
|
@@ -12,6 +14,7 @@ from _common import (
|
|
|
12
14
|
|
|
13
15
|
def main():
|
|
14
16
|
try:
|
|
17
|
+
hook_input = read_hook_input()
|
|
15
18
|
if is_no_git_mode():
|
|
16
19
|
log("[dev-memory][SessionEnd] no-git mode: nothing to finalize (no HEAD)")
|
|
17
20
|
return 0
|
|
@@ -19,6 +22,12 @@ def main():
|
|
|
19
22
|
results = record_head_all_repos()
|
|
20
23
|
if not results:
|
|
21
24
|
log("[dev-memory][SessionEnd] workspace mode: no initialized repos finalized")
|
|
25
|
+
for _, payload in results:
|
|
26
|
+
try:
|
|
27
|
+
queued = enqueue_session_summary_job(payload, hook_input, event_name="SessionEnd")
|
|
28
|
+
log(f"[dev-memory][SessionEnd] queued summary job {queued['job_id']}")
|
|
29
|
+
except Exception as exc:
|
|
30
|
+
log(f"[dev-memory][SessionEnd] summary enqueue skipped: {exc}")
|
|
22
31
|
return 0
|
|
23
32
|
assets = resolve_assets()
|
|
24
33
|
if not assets["branch_dir"].exists():
|
|
@@ -26,6 +35,11 @@ def main():
|
|
|
26
35
|
return 0
|
|
27
36
|
payload = maybe_record_head()
|
|
28
37
|
log(f"[dev-memory][SessionEnd] finalized HEAD marker {payload['last_seen_head']} for {payload['branch']}")
|
|
38
|
+
try:
|
|
39
|
+
queued = enqueue_session_summary_job(payload, hook_input, event_name="SessionEnd")
|
|
40
|
+
log(f"[dev-memory][SessionEnd] queued summary job {queued['job_id']}")
|
|
41
|
+
except Exception as exc:
|
|
42
|
+
log(f"[dev-memory][SessionEnd] summary enqueue skipped: {exc}")
|
|
29
43
|
except Exception as exc:
|
|
30
44
|
log(f"[dev-memory][SessionEnd] skipped: {exc}")
|
|
31
45
|
return 0
|
|
@@ -7,6 +7,10 @@ from _common import (
|
|
|
7
7
|
build_session_start_context,
|
|
8
8
|
build_workspace_start_context,
|
|
9
9
|
is_workspace_mode,
|
|
10
|
+
read_hook_input,
|
|
11
|
+
record_session_start_injected,
|
|
12
|
+
resolve_assets,
|
|
13
|
+
session_start_already_injected,
|
|
10
14
|
log,
|
|
11
15
|
)
|
|
12
16
|
|
|
@@ -22,7 +26,19 @@ def _resolve_context():
|
|
|
22
26
|
|
|
23
27
|
def main():
|
|
24
28
|
try:
|
|
25
|
-
|
|
29
|
+
hook_input = read_hook_input()
|
|
30
|
+
assets = None
|
|
31
|
+
if not is_workspace_mode():
|
|
32
|
+
assets = resolve_assets()
|
|
33
|
+
if session_start_already_injected(assets, hook_input):
|
|
34
|
+
log("[dev-memory][SessionStart] duplicate injection skipped")
|
|
35
|
+
print(json.dumps({}, ensure_ascii=False))
|
|
36
|
+
return 0
|
|
37
|
+
else:
|
|
38
|
+
additional_context = _resolve_context()
|
|
39
|
+
record_session_start_injected(assets, hook_input)
|
|
40
|
+
else:
|
|
41
|
+
additional_context = _resolve_context()
|
|
26
42
|
payload = {
|
|
27
43
|
"hookSpecificOutput": {
|
|
28
44
|
"hookEventName": "SessionStart",
|