@laitszkin/apollo-toolkit 3.13.2 → 3.14.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.
Files changed (154) hide show
  1. package/AGENTS.md +7 -7
  2. package/CHANGELOG.md +36 -0
  3. package/CLAUDE.md +8 -8
  4. package/analyse-app-logs/SKILL.md +3 -3
  5. package/bin/apollo-toolkit.ts +7 -0
  6. package/codex/codex-memory-manager/SKILL.md +2 -2
  7. package/codex/learn-skill-from-conversations/SKILL.md +3 -3
  8. package/dist/bin/apollo-toolkit.d.ts +2 -0
  9. package/dist/bin/apollo-toolkit.js +7 -0
  10. package/dist/lib/cli.d.ts +41 -0
  11. package/dist/lib/cli.js +655 -0
  12. package/dist/lib/installer.d.ts +59 -0
  13. package/dist/lib/installer.js +404 -0
  14. package/dist/lib/tool-runner.d.ts +19 -0
  15. package/dist/lib/tool-runner.js +536 -0
  16. package/dist/lib/tools/architecture.d.ts +2 -0
  17. package/dist/lib/tools/architecture.js +23 -0
  18. package/dist/lib/tools/create-specs.d.ts +2 -0
  19. package/dist/lib/tools/create-specs.js +175 -0
  20. package/dist/lib/tools/docs-to-voice.d.ts +2 -0
  21. package/dist/lib/tools/docs-to-voice.js +705 -0
  22. package/dist/lib/tools/enforce-video-aspect-ratio.d.ts +2 -0
  23. package/dist/lib/tools/enforce-video-aspect-ratio.js +312 -0
  24. package/dist/lib/tools/extract-conversations.d.ts +2 -0
  25. package/dist/lib/tools/extract-conversations.js +105 -0
  26. package/dist/lib/tools/extract-pdf-text.d.ts +2 -0
  27. package/dist/lib/tools/extract-pdf-text.js +92 -0
  28. package/dist/lib/tools/filter-logs.d.ts +2 -0
  29. package/dist/lib/tools/filter-logs.js +94 -0
  30. package/dist/lib/tools/find-github-issues.d.ts +2 -0
  31. package/dist/lib/tools/find-github-issues.js +176 -0
  32. package/dist/lib/tools/generate-storyboard-images.d.ts +2 -0
  33. package/dist/lib/tools/generate-storyboard-images.js +419 -0
  34. package/dist/lib/tools/log-cli-utils.d.ts +35 -0
  35. package/dist/lib/tools/log-cli-utils.js +233 -0
  36. package/dist/lib/tools/open-github-issue.d.ts +2 -0
  37. package/dist/lib/tools/open-github-issue.js +750 -0
  38. package/dist/lib/tools/read-github-issue.d.ts +2 -0
  39. package/dist/lib/tools/read-github-issue.js +134 -0
  40. package/dist/lib/tools/render-error-book.d.ts +2 -0
  41. package/dist/lib/tools/render-error-book.js +265 -0
  42. package/dist/lib/tools/render-katex.d.ts +2 -0
  43. package/dist/lib/tools/render-katex.js +294 -0
  44. package/dist/lib/tools/review-threads.d.ts +2 -0
  45. package/dist/lib/tools/review-threads.js +491 -0
  46. package/dist/lib/tools/search-logs.d.ts +2 -0
  47. package/dist/lib/tools/search-logs.js +164 -0
  48. package/dist/lib/tools/sync-memory-index.d.ts +2 -0
  49. package/dist/lib/tools/sync-memory-index.js +113 -0
  50. package/dist/lib/tools/validate-openai-agent-config.d.ts +2 -0
  51. package/dist/lib/tools/validate-openai-agent-config.js +190 -0
  52. package/dist/lib/tools/validate-skill-frontmatter.d.ts +2 -0
  53. package/dist/lib/tools/validate-skill-frontmatter.js +118 -0
  54. package/dist/lib/types.d.ts +82 -0
  55. package/dist/lib/types.js +2 -0
  56. package/dist/lib/updater.d.ts +34 -0
  57. package/dist/lib/updater.js +112 -0
  58. package/dist/lib/utils/format.d.ts +2 -0
  59. package/dist/lib/utils/format.js +6 -0
  60. package/dist/lib/utils/terminal.d.ts +12 -0
  61. package/dist/lib/utils/terminal.js +26 -0
  62. package/docs-to-voice/SKILL.md +0 -1
  63. package/generate-spec/SKILL.md +1 -1
  64. package/katex/SKILL.md +1 -2
  65. package/lib/cli.ts +780 -0
  66. package/lib/installer.ts +466 -0
  67. package/lib/tool-runner.ts +561 -0
  68. package/lib/tools/architecture.ts +20 -0
  69. package/lib/tools/create-specs.ts +204 -0
  70. package/lib/tools/docs-to-voice.ts +799 -0
  71. package/lib/tools/enforce-video-aspect-ratio.ts +368 -0
  72. package/lib/tools/extract-conversations.ts +114 -0
  73. package/lib/tools/extract-pdf-text.ts +99 -0
  74. package/lib/tools/filter-logs.ts +118 -0
  75. package/lib/tools/find-github-issues.ts +211 -0
  76. package/lib/tools/generate-storyboard-images.ts +455 -0
  77. package/lib/tools/log-cli-utils.ts +262 -0
  78. package/lib/tools/open-github-issue.ts +930 -0
  79. package/lib/tools/read-github-issue.ts +179 -0
  80. package/lib/tools/render-error-book.ts +300 -0
  81. package/lib/tools/render-katex.ts +325 -0
  82. package/lib/tools/review-threads.ts +590 -0
  83. package/lib/tools/search-logs.ts +200 -0
  84. package/lib/tools/sync-memory-index.ts +114 -0
  85. package/lib/tools/validate-openai-agent-config.ts +213 -0
  86. package/lib/tools/validate-skill-frontmatter.ts +124 -0
  87. package/lib/types.ts +90 -0
  88. package/lib/updater.ts +165 -0
  89. package/lib/utils/format.ts +7 -0
  90. package/lib/utils/terminal.ts +22 -0
  91. package/open-github-issue/SKILL.md +2 -2
  92. package/optimise-skill/SKILL.md +1 -1
  93. package/package.json +13 -4
  94. package/resources/project-architecture/assets/architecture.css +764 -0
  95. package/resources/project-architecture/assets/viewer.client.js +144 -0
  96. package/resources/project-architecture/index.html +42 -0
  97. package/review-spec-related-changes/SKILL.md +1 -1
  98. package/solve-issues-found-during-review/SKILL.md +2 -1
  99. package/tsconfig.json +28 -0
  100. package/analyse-app-logs/scripts/__pycache__/filter_logs_by_time.cpython-312.pyc +0 -0
  101. package/analyse-app-logs/scripts/__pycache__/log_cli_utils.cpython-312.pyc +0 -0
  102. package/analyse-app-logs/scripts/__pycache__/search_logs.cpython-312.pyc +0 -0
  103. package/analyse-app-logs/scripts/filter_logs_by_time.py +0 -64
  104. package/analyse-app-logs/scripts/log_cli_utils.py +0 -112
  105. package/analyse-app-logs/scripts/search_logs.py +0 -137
  106. package/analyse-app-logs/tests/test_filter_logs_by_time.py +0 -95
  107. package/analyse-app-logs/tests/test_search_logs.py +0 -100
  108. package/codex/codex-memory-manager/scripts/extract_recent_conversations.py +0 -369
  109. package/codex/codex-memory-manager/scripts/sync_memory_index.py +0 -130
  110. package/codex/codex-memory-manager/tests/test_extract_recent_conversations.py +0 -177
  111. package/codex/codex-memory-manager/tests/test_memory_template.py +0 -37
  112. package/codex/codex-memory-manager/tests/test_sync_memory_index.py +0 -84
  113. package/codex/learn-skill-from-conversations/scripts/extract_recent_conversations.py +0 -369
  114. package/codex/learn-skill-from-conversations/tests/test_extract_recent_conversations.py +0 -177
  115. package/docs-to-voice/scripts/__pycache__/docs_to_voice.cpython-312.pyc +0 -0
  116. package/docs-to-voice/scripts/docs_to_voice.py +0 -1385
  117. package/docs-to-voice/scripts/docs_to_voice.sh +0 -11
  118. package/docs-to-voice/tests/test_docs_to_voice_api_max_chars.py +0 -210
  119. package/docs-to-voice/tests/test_docs_to_voice_sentence_timeline.py +0 -115
  120. package/docs-to-voice/tests/test_docs_to_voice_settings.py +0 -43
  121. package/docs-to-voice/tests/test_docs_to_voice_shell_wrapper.py +0 -51
  122. package/docs-to-voice/tests/test_docs_to_voice_speech_rate.py +0 -57
  123. package/generate-spec/scripts/__pycache__/create-specscpython-312.pyc +0 -0
  124. package/generate-spec/scripts/create-specs +0 -215
  125. package/generate-spec/tests/test_create_specs.py +0 -200
  126. package/init-project-html/scripts/architecture-bootstrap-render.js +0 -16
  127. package/init-project-html/scripts/architecture.js +0 -296
  128. package/katex/scripts/__pycache__/render_katex.cpython-312.pyc +0 -0
  129. package/katex/scripts/render_katex.py +0 -247
  130. package/katex/scripts/render_katex.sh +0 -11
  131. package/katex/tests/test_render_katex.py +0 -174
  132. package/learning-error-book/scripts/render_error_book_json_to_pdf.py +0 -590
  133. package/learning-error-book/tests/test_render_error_book_json_to_pdf.py +0 -134
  134. package/open-github-issue/scripts/__pycache__/open_github_issue.cpython-312.pyc +0 -0
  135. package/open-github-issue/scripts/open_github_issue.py +0 -705
  136. package/open-github-issue/tests/test_open_github_issue.py +0 -381
  137. package/openai-text-to-image-storyboard/scripts/generate_storyboard_images.py +0 -763
  138. package/openai-text-to-image-storyboard/tests/test_generate_storyboard_images.py +0 -177
  139. package/read-github-issue/scripts/__pycache__/find_issues.cpython-312.pyc +0 -0
  140. package/read-github-issue/scripts/__pycache__/read_issue.cpython-312.pyc +0 -0
  141. package/read-github-issue/scripts/find_issues.py +0 -148
  142. package/read-github-issue/scripts/read_issue.py +0 -108
  143. package/read-github-issue/tests/test_find_issues.py +0 -127
  144. package/read-github-issue/tests/test_read_issue.py +0 -109
  145. package/resolve-review-comments/scripts/__pycache__/review_threads.cpython-312.pyc +0 -0
  146. package/resolve-review-comments/scripts/review_threads.py +0 -425
  147. package/resolve-review-comments/tests/test_review_threads.py +0 -74
  148. package/scripts/validate_openai_agent_config.py +0 -209
  149. package/scripts/validate_skill_frontmatter.py +0 -131
  150. package/text-to-short-video/scripts/__pycache__/enforce_video_aspect_ratio.cpython-312.pyc +0 -0
  151. package/text-to-short-video/scripts/enforce_video_aspect_ratio.py +0 -350
  152. package/text-to-short-video/tests/test_enforce_video_aspect_ratio.py +0 -194
  153. package/weekly-financial-event-report/scripts/extract_pdf_text_pdfkit.swift +0 -99
  154. package/weekly-financial-event-report/tests/test_extract_pdf_text_pdfkit.py +0 -64
@@ -1,134 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- from __future__ import annotations
4
-
5
- import importlib.util
6
- import json
7
- import tempfile
8
- import unittest
9
- from pathlib import Path
10
- from unittest.mock import patch
11
-
12
- REPORTLAB_AVAILABLE = importlib.util.find_spec("reportlab") is not None
13
-
14
- if REPORTLAB_AVAILABLE:
15
- from reportlab.platypus import Paragraph
16
- SCRIPT_PATH = Path(__file__).resolve().parents[1] / "scripts" / "render_error_book_json_to_pdf.py"
17
- SPEC = importlib.util.spec_from_file_location("render_error_book_json_to_pdf", SCRIPT_PATH)
18
- MODULE = importlib.util.module_from_spec(SPEC)
19
- SPEC.loader.exec_module(MODULE)
20
- else:
21
- Paragraph = object
22
- MODULE = None
23
-
24
-
25
- def minimal_payload() -> dict:
26
- return {
27
- "title": "Physics Error Book",
28
- "book_type": "mc-question",
29
- "last_updated": "2026-04-18",
30
- "coverage_scope": [
31
- {
32
- "source_path": "notes/ch1.pdf",
33
- "included_questions": ["Q1", "Q2"],
34
- "notes": "Kinematics review",
35
- }
36
- ],
37
- "mistake_overview": [
38
- {
39
- "type": "Concept mix-up",
40
- "summary": "Mixed up displacement and distance.",
41
- "representative_questions": ["Q1"],
42
- }
43
- ],
44
- "concept_highlights": [
45
- {
46
- "name": "Velocity",
47
- "definition": "Rate of change of displacement.",
48
- "common_misjudgment": "Treating it as always positive speed.",
49
- "checklist": ["Track sign", "Check reference direction"],
50
- }
51
- ],
52
- "questions": [
53
- {
54
- "question_id": "Q1",
55
- "source_path": "notes/ch1.pdf",
56
- "page_or_locator": "p.3",
57
- "user_answer": "B",
58
- "correct_answer": "C",
59
- "mistake_type": "Concept mix-up",
60
- "concepts": ["Velocity", "Displacement"],
61
- "stem": "A car turns around after 10 seconds.",
62
- "why_wrong": "The answer used total distance instead of signed displacement.",
63
- "correct_solution_steps": ["Identify direction", "Compute signed displacement"],
64
- "options": [
65
- {"label": "A", "text": "0", "verdict": "wrong", "reason": "Ignores movement"},
66
- {"label": "C", "text": "-2", "verdict": "correct", "reason": "Signed displacement"},
67
- ],
68
- }
69
- ],
70
- }
71
-
72
-
73
- @unittest.skipUnless(REPORTLAB_AVAILABLE, "reportlab is required for PDF rendering tests")
74
- class RenderErrorBookTests(unittest.TestCase):
75
- def test_safe_text_handles_lists_numbers_and_defaults(self) -> None:
76
- self.assertEqual(MODULE._safe_text([" A ", 2, ""], default="-"), "A, 2")
77
- self.assertEqual(MODULE._safe_text(None, default="(none)"), "(none)")
78
- self.assertEqual(MODULE._safe_text(" ", default="fallback"), "fallback")
79
-
80
- def test_markup_escapes_html_and_preserves_line_breaks(self) -> None:
81
- rendered = MODULE._markup("A < B\nline 2")
82
- self.assertIn("A &lt; B", rendered)
83
- self.assertIn("<br/>", rendered)
84
-
85
- def test_bullet_lines_returns_default_paragraph_when_empty(self) -> None:
86
- styles = MODULE._build_styles("Helvetica", 11)
87
- bullets = MODULE._bullet_lines([], styles, empty_text="No data")
88
- self.assertEqual(len(bullets), 1)
89
- self.assertIsInstance(bullets[0], Paragraph)
90
-
91
- def test_build_story_contains_multiple_sections(self) -> None:
92
- font_path, subfont_index = MODULE._detect_cjk_font_path(None)
93
- font_name = MODULE._register_font(font_path, subfont_index)
94
- styles = MODULE._build_styles(font_name, 11)
95
-
96
- with tempfile.TemporaryDirectory() as temp_dir:
97
- output_pdf = Path(temp_dir) / "preview.pdf"
98
- doc = MODULE.SimpleDocTemplate(
99
- str(output_pdf),
100
- title="Physics Error Book",
101
- )
102
- story = MODULE._build_story(minimal_payload(), styles, doc)
103
-
104
- self.assertGreater(len(story), 10)
105
- self.assertEqual(story[1].text, "Physics Error Book")
106
-
107
- def test_main_renders_pdf_from_minimal_payload(self) -> None:
108
- font_path, _ = MODULE._detect_cjk_font_path(None)
109
-
110
- with tempfile.TemporaryDirectory() as temp_dir:
111
- temp_root = Path(temp_dir)
112
- input_json = temp_root / "error-book.json"
113
- output_pdf = temp_root / "out" / "error-book.pdf"
114
- input_json.write_text(json.dumps(minimal_payload(), ensure_ascii=False), encoding="utf-8")
115
-
116
- argv = [
117
- str(input_json),
118
- str(output_pdf),
119
- "--font-path",
120
- font_path,
121
- "--font-size",
122
- "10",
123
- ]
124
-
125
- with patch("sys.argv", ["render_error_book_json_to_pdf.py", *argv]):
126
- exit_code = MODULE.main()
127
-
128
- self.assertEqual(exit_code, 0)
129
- self.assertTrue(output_pdf.is_file())
130
- self.assertTrue(output_pdf.read_bytes().startswith(b"%PDF"))
131
-
132
-
133
- if __name__ == "__main__":
134
- unittest.main()