raidlock 0.1.0__py3-none-any.whl

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 (126) hide show
  1. raidlock/__init__.py +11 -0
  2. raidlock/__main__.py +5 -0
  3. raidlock/_python.py +58 -0
  4. raidlock/achievements.py +156 -0
  5. raidlock/approvals.py +237 -0
  6. raidlock/bench.py +286 -0
  7. raidlock/bridge/__init__.py +186 -0
  8. raidlock/budgets.py +178 -0
  9. raidlock/cli.py +2153 -0
  10. raidlock/commands_install.py +114 -0
  11. raidlock/core/__init__.py +26 -0
  12. raidlock/core/advisories.py +16 -0
  13. raidlock/core/billing.py +54 -0
  14. raidlock/core/board.py +2251 -0
  15. raidlock/core/brief.py +111 -0
  16. raidlock/core/clock.py +40 -0
  17. raidlock/core/cost.py +198 -0
  18. raidlock/core/db.py +608 -0
  19. raidlock/core/errors.py +52 -0
  20. raidlock/core/exe.py +6 -0
  21. raidlock/core/hints.py +32 -0
  22. raidlock/core/identity.py +285 -0
  23. raidlock/core/lead.py +758 -0
  24. raidlock/core/lead_env.py +23 -0
  25. raidlock/core/lead_hook.py +42 -0
  26. raidlock/core/leases.py +19 -0
  27. raidlock/core/lock.py +99 -0
  28. raidlock/core/messages.py +98 -0
  29. raidlock/core/migrate.py +579 -0
  30. raidlock/core/model.py +126 -0
  31. raidlock/core/models.py +109 -0
  32. raidlock/core/paths.py +61 -0
  33. raidlock/core/portable.py +53 -0
  34. raidlock/core/receipts.py +73 -0
  35. raidlock/core/registry.py +39 -0
  36. raidlock/core/repos.py +250 -0
  37. raidlock/core/safeio.py +201 -0
  38. raidlock/core/status.py +52 -0
  39. raidlock/core/store.py +107 -0
  40. raidlock/core/tokens.py +77 -0
  41. raidlock/core/transcript.py +208 -0
  42. raidlock/duel.py +371 -0
  43. raidlock/foresight.py +191 -0
  44. raidlock/frames.py +162 -0
  45. raidlock/gitguard.py +753 -0
  46. raidlock/guard.py +239 -0
  47. raidlock/hooks.py +1526 -0
  48. raidlock/infer.py +205 -0
  49. raidlock/limits.py +685 -0
  50. raidlock/lore/__init__.py +22 -0
  51. raidlock/lore/approval.py +145 -0
  52. raidlock/lore/capture.py +146 -0
  53. raidlock/lore/cli.py +109 -0
  54. raidlock/lore/distill.py +17 -0
  55. raidlock/lore/frontmatter.py +56 -0
  56. raidlock/lore/inject.py +127 -0
  57. raidlock/lore/vault.py +264 -0
  58. raidlock/mcp/__init__.py +34 -0
  59. raidlock/mcp/resources.py +72 -0
  60. raidlock/mcp/server.py +184 -0
  61. raidlock/mcp/tools.py +178 -0
  62. raidlock/notify.py +144 -0
  63. raidlock/party.py +239 -0
  64. raidlock/pr.py +575 -0
  65. raidlock/prsync.py +318 -0
  66. raidlock/recipes/README.md +34 -0
  67. raidlock/recipes/__init__.py +105 -0
  68. raidlock/recipes/docs-refresh.md +15 -0
  69. raidlock/recipes/multi-repo-refactor.md +15 -0
  70. raidlock/recipes/security-audit.md +27 -0
  71. raidlock/recipes/upgrade-deps.md +15 -0
  72. raidlock/reputation.py +194 -0
  73. raidlock/resume.py +329 -0
  74. raidlock/resurrect.py +419 -0
  75. raidlock/routing.py +419 -0
  76. raidlock/runners/__init__.py +16 -0
  77. raidlock/runners/base.py +341 -0
  78. raidlock/runners/brief.py +176 -0
  79. raidlock/runners/claude_code.py +121 -0
  80. raidlock/runners/cli.py +110 -0
  81. raidlock/runners/codex.py +114 -0
  82. raidlock/runners/gemini.py +64 -0
  83. raidlock/runners/isolation.py +391 -0
  84. raidlock/runners/policy.py +123 -0
  85. raidlock/runners/runner.py +921 -0
  86. raidlock/runners/shell.py +35 -0
  87. raidlock/runners/verifycache.py +93 -0
  88. raidlock/runners/workspace.py +376 -0
  89. raidlock/scan.py +357 -0
  90. raidlock/snapshot.py +151 -0
  91. raidlock/treasury.py +210 -0
  92. raidlock/tui.py +223 -0
  93. raidlock/web/__init__.py +5 -0
  94. raidlock/web/achievements/view.css +19 -0
  95. raidlock/web/achievements/view.js +58 -0
  96. raidlock/web/bosses/view.css +19 -0
  97. raidlock/web/bosses/view.js +46 -0
  98. raidlock/web/cli.py +90 -0
  99. raidlock/web/data.py +687 -0
  100. raidlock/web/export.py +153 -0
  101. raidlock/web/frames/view.css +25 -0
  102. raidlock/web/frames/view.js +63 -0
  103. raidlock/web/graph/__init__.py +142 -0
  104. raidlock/web/graph/view.css +33 -0
  105. raidlock/web/graph/view.js +136 -0
  106. raidlock/web/raidmap/__init__.py +205 -0
  107. raidlock/web/raidmap/view.css +15 -0
  108. raidlock/web/raidmap/view.js +47 -0
  109. raidlock/web/replay/__init__.py +258 -0
  110. raidlock/web/replay/view.css +13 -0
  111. raidlock/web/replay/view.js +127 -0
  112. raidlock/web/server.py +292 -0
  113. raidlock/web/static/app.css +851 -0
  114. raidlock/web/static/app.js +2102 -0
  115. raidlock/web/static/fonts/OFL.txt +93 -0
  116. raidlock/web/static/fonts/cinzel-600.woff2 +0 -0
  117. raidlock/web/static/fonts/cinzel-700.woff2 +0 -0
  118. raidlock/web/static/icon-32.png +0 -0
  119. raidlock/web/static/icon-raid.svg +1 -0
  120. raidlock/web/static/icon.svg +1 -0
  121. raidlock/web/static/index.html +122 -0
  122. raidlock-0.1.0.dist-info/METADATA +186 -0
  123. raidlock-0.1.0.dist-info/RECORD +126 -0
  124. raidlock-0.1.0.dist-info/WHEEL +4 -0
  125. raidlock-0.1.0.dist-info/entry_points.txt +34 -0
  126. raidlock-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,93 @@
1
+ Copyright 2020 The Cinzel Project Authors (https://github.com/NDISCOVER/Cinzel)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ http://scripts.sil.org/OFL
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="raidlock"><title>raidlock</title><defs><linearGradient id="g" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#3b2a6e"/><stop offset="1" stop-color="#160f2e"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#g)" stroke="#f5c451" stroke-width="2"/><g fill="#f5c451" transform="translate(6 6) scale(.8125)"><circle cx="16" cy="20" r="7"/><circle cx="32" cy="9" r="7"/><circle cx="48" cy="20" r="7"/><path d="M12 20h8v16h-8zM44 20h8v16h-8z"/><path d="M14.3 17.5l15.4-10.6 4.6 5.6-15.4 10.6zM49.7 17.5l-15.4-10.6-4.6 5.6 15.4 10.6z"/><path fill-rule="evenodd" d="M12 32h40a8 8 0 0 1 8 8v16a8 8 0 0 1-8 8H12a8 8 0 0 1-8-8V40a8 8 0 0 1 8-8zM32 40a4 4 0 0 0-4 4v4a4 4 0 0 0 8 0v-4a4 4 0 0 0-4-4z"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="raidlock"><title>raidlock</title><rect width="64" height="64" rx="14" fill="#2f5bd3"/><g fill="#ffffff" transform="translate(6 6) scale(.8125)"><circle cx="16" cy="20" r="7"/><circle cx="32" cy="9" r="7"/><circle cx="48" cy="20" r="7"/><path d="M12 20h8v16h-8zM44 20h8v16h-8z"/><path d="M14.3 17.5l15.4-10.6 4.6 5.6-15.4 10.6zM49.7 17.5l-15.4-10.6-4.6 5.6 15.4 10.6z"/><path fill-rule="evenodd" d="M12 32h40a8 8 0 0 1 8 8v16a8 8 0 0 1-8 8H12a8 8 0 0 1-8-8V40a8 8 0 0 1 8-8zM32 40a4 4 0 0 0-4 4v4a4 4 0 0 0 8 0v-4a4 4 0 0 0-4-4z"/></g></svg>
@@ -0,0 +1,122 @@
1
+ <!doctype html>
2
+ <html lang="en" data-theme="plain" data-anim="on">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta name="color-scheme" content="dark light">
7
+ <title>raidlock</title>
8
+ <link rel="icon" href="/static/icon-raid.svg" type="image/svg+xml">
9
+ <link rel="icon" href="/static/icon-32.png" type="image/png" sizes="32x32">
10
+ <link rel="stylesheet" href="/static/app.css">
11
+ <link rel="stylesheet" href="/static/views/raidmap.css">
12
+ <link rel="stylesheet" href="/static/views/replay.css">
13
+ <link rel="stylesheet" href="/static/views/graph.css">
14
+ <link rel="stylesheet" href="/static/views/frames.css">
15
+ <link rel="stylesheet" href="/static/views/achievements.css">
16
+ <link rel="stylesheet" href="/static/views/bosses.css">
17
+ <script src="/static/views/raidmap.js" defer></script>
18
+ <script src="/static/views/replay.js" defer></script>
19
+ <script src="/static/views/graph.js" defer></script>
20
+ <script src="/static/views/frames.js" defer></script>
21
+ <script src="/static/views/achievements.js" defer></script>
22
+ <script src="/static/views/bosses.js" defer></script>
23
+ <script src="/static/app.js" defer></script>
24
+ </head>
25
+ <body>
26
+ <a class="skip" href="#content">Skip to the board</a>
27
+ <canvas id="stars" aria-hidden="true"></canvas>
28
+ <header>
29
+
30
+ <div class="brand">
31
+ <h1 id="brandText"><svg class="lockup" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 454.15 83.20" aria-hidden="true" focusable="false" width="142" height="26"><g class="lk-mark" fill="currentColor" transform="scale(1.3)"><circle cx="16" cy="20" r="7"/><circle cx="32" cy="9" r="7"/><circle cx="48" cy="20" r="7"/><path d="M12 20h8v16h-8zM44 20h8v16h-8z"/><path d="M14.3 17.5l15.4-10.6 4.6 5.6-15.4 10.6zM49.7 17.5l-15.4-10.6-4.6 5.6 15.4 10.6z"/><path fill-rule="evenodd" d="M12 32h40a8 8 0 0 1 8 8v16a8 8 0 0 1-8 8H12a8 8 0 0 1-8-8V40a8 8 0 0 1 8-8zM32 40a4 4 0 0 0-4 4v4a4 4 0 0 0 8 0v-4a4 4 0 0 0-4-4z"/></g><path class="lk-word" fill="currentColor" transform="translate(99.75 82.20)" d="M5.45 0V-51.56H17.33V-43H17.49Q18.91 -47.44 21.95 -49.75Q24.99 -52.06 30 -52.06Q31.23 -52.06 32.25 -52Q33.27 -51.94 34.01 -51.88V-40.94Q33.33 -41.03 31.67 -41.17Q30.02 -41.31 28.19 -41.31Q25.29 -41.31 22.92 -39.98Q20.55 -38.64 19.17 -35.95Q17.79 -33.27 17.79 -29.21V0Z M54.83 0.83Q49.68 0.83 45.66 -0.89Q41.65 -2.61 39.32 -6.06Q37 -9.51 37 -14.63Q37 -19.04 38.65 -21.9Q40.31 -24.77 43.14 -26.48Q45.98 -28.19 49.64 -29.08Q53.3 -29.97 57.26 -30.39Q62.05 -30.93 64.86 -31.33Q67.66 -31.74 68.87 -32.55Q70.07 -33.37 70.07 -35.13V-35.51Q70.07 -37.73 68.95 -39.42Q67.83 -41.11 65.72 -42.07Q63.61 -43.04 60.65 -43.04Q57.68 -43.04 55.42 -42.08Q53.15 -41.12 51.82 -39.43Q50.49 -37.74 50.3 -35.54H38.46Q38.77 -40.68 41.55 -44.5Q44.32 -48.33 49.25 -50.47Q54.18 -52.61 60.93 -52.61Q65.95 -52.61 69.92 -51.4Q73.89 -50.19 76.65 -47.9Q79.41 -45.62 80.85 -42.4Q82.28 -39.18 82.28 -35.16V0H70.18V-7.29H69.98Q68.77 -4.99 66.83 -3.15Q64.88 -1.3 61.95 -0.24Q59.02 0.83 54.83 0.83ZM57.86 -8.29Q61.87 -8.29 64.61 -9.75Q67.35 -11.22 68.75 -13.65Q70.14 -16.09 70.14 -19.07V-24.68Q69.57 -24.31 68.45 -23.97Q67.33 -23.63 65.79 -23.32Q64.26 -23 62.46 -22.71Q60.67 -22.41 58.77 -22.13Q56.14 -21.76 53.92 -20.9Q51.7 -20.05 50.35 -18.57Q49.01 -17.09 49.01 -14.74Q49.01 -12.74 50.1 -11.28Q51.19 -9.83 53.18 -9.06Q55.17 -8.29 57.86 -8.29Z M92.17 0V-51.56H104.51V0ZM98.32 -59.23Q95.17 -59.23 93.06 -61.25Q90.96 -63.27 90.96 -66.24Q90.96 -69.22 93.06 -71.23Q95.17 -73.23 98.3 -73.23Q101.47 -73.23 103.58 -71.23Q105.69 -69.23 105.69 -66.22Q105.69 -63.25 103.58 -61.24Q101.47 -59.23 98.32 -59.23Z M134.35 1.05Q127.64 1.05 122.61 -2.33Q117.57 -5.71 114.8 -11.75Q112.02 -17.8 112.02 -25.82Q112.02 -33.76 114.82 -39.8Q117.62 -45.84 122.65 -49.22Q127.68 -52.61 134.28 -52.61Q137.65 -52.61 140.55 -51.69Q143.45 -50.78 145.79 -48.93Q148.13 -47.09 149.78 -44.26H149.86V-72.75H162.2V0H150.05V-7.88H149.97Q148.36 -4.89 145.99 -2.9Q143.62 -0.91 140.68 0.07Q137.74 1.05 134.35 1.05ZM137.25 -9.25Q141.28 -9.25 144.27 -11.3Q147.26 -13.35 148.9 -17.08Q150.54 -20.81 150.54 -25.82Q150.54 -30.85 148.9 -34.56Q147.26 -38.28 144.27 -40.33Q141.28 -42.38 137.25 -42.38Q133.46 -42.38 130.58 -40.45Q127.7 -38.53 126.1 -34.84Q124.5 -31.16 124.5 -25.82Q124.5 -20.5 126.1 -16.8Q127.7 -13.1 130.58 -11.18Q133.46 -9.25 137.25 -9.25Z M184.45 -72.75V0H172.1V-72.75Z M217.39 1.17Q209.82 1.17 204.09 -2.22Q198.35 -5.61 195.15 -11.66Q191.96 -17.72 191.96 -25.72Q191.96 -33.75 195.15 -39.83Q198.35 -45.91 204.09 -49.32Q209.82 -52.73 217.39 -52.73Q225.01 -52.73 230.72 -49.32Q236.44 -45.91 239.63 -39.83Q242.83 -33.75 242.83 -25.72Q242.83 -17.72 239.63 -11.66Q236.44 -5.61 230.72 -2.22Q225.01 1.17 217.39 1.17ZM217.39 -9.12Q221.36 -9.12 224.27 -11.13Q227.17 -13.14 228.76 -16.87Q230.35 -20.61 230.35 -25.72Q230.35 -30.91 228.76 -34.63Q227.17 -38.36 224.27 -40.4Q221.36 -42.44 217.39 -42.44Q213.47 -42.44 210.54 -40.42Q207.62 -38.39 206.02 -34.65Q204.43 -30.91 204.43 -25.72Q204.43 -20.58 206.02 -16.86Q207.62 -13.14 210.53 -11.13Q213.44 -9.12 217.39 -9.12Z M273.16 1.17Q265.63 1.17 259.95 -2.24Q254.26 -5.66 251.1 -11.72Q247.94 -17.79 247.94 -25.72Q247.94 -33.68 251.1 -39.78Q254.26 -45.87 259.95 -49.3Q265.63 -52.73 273.16 -52.73Q278.02 -52.73 282.12 -51.29Q286.22 -49.84 289.31 -47.21Q292.39 -44.58 294.27 -41Q296.15 -37.42 296.56 -33.11H284.47Q284.14 -35.2 283.25 -36.91Q282.36 -38.62 280.94 -39.86Q279.52 -41.1 277.61 -41.79Q275.71 -42.47 273.3 -42.47Q269.28 -42.47 266.39 -40.42Q263.49 -38.36 261.95 -34.6Q260.41 -30.84 260.41 -25.72Q260.41 -20.65 261.95 -16.91Q263.49 -13.17 266.38 -11.13Q269.27 -9.09 273.3 -9.09Q275.71 -9.09 277.58 -9.75Q279.46 -10.41 280.81 -11.66Q282.17 -12.9 283.06 -14.64Q283.95 -16.39 284.38 -18.52H296.56Q296.22 -14.27 294.37 -10.68Q292.52 -7.1 289.41 -4.43Q286.3 -1.77 282.17 -0.3Q278.04 1.17 273.16 1.17Z M315.03 -16.09V-30.67H316.25L336.3 -51.56H351.12L327.19 -26.13H324.72ZM303.77 0V-72.75H316.12V0ZM337.67 0 319.8 -23.39 328.08 -32 352.4 0Z"/></svg><span class="sr-only">raidlock</span></h1>
32
+ <nav id="crumbs" aria-label="Breadcrumb">Loading the board…</nav>
33
+ </div>
34
+ <div class="hud">
35
+ <span id="hudLevel" aria-live="polite"></span>
36
+ <a id="export" class="tog" hidden download>Export snapshot</a>
37
+ <details id="soundMenu" class="menu">
38
+ <summary class="tog" id="soundSummary">Sound</summary>
39
+ <div class="menu-body sound-body">
40
+ <button type="button" class="tog" id="sound" aria-pressed="true">Sound on</button>
41
+ <label class="vol">Volume <input type="range" id="vol" min="0" max="100" value="80"></label>
42
+ <fieldset id="cueList" class="cues">
43
+ <legend>Play a sound when</legend>
44
+ </fieldset>
45
+ </div>
46
+ </details>
47
+ <details id="settings" class="menu">
48
+ <summary class="tog">Settings</summary>
49
+ <div class="menu-body">
50
+ <button type="button" class="tog" id="animBtn" aria-pressed="true">Animations: on</button>
51
+ <button type="button" class="tog" id="notify" aria-pressed="false">Desktop alerts: off</button>
52
+ <button type="button" class="tog" id="achieveBtn" aria-pressed="false">Achievements: off</button>
53
+ <div id="providerInfo" class="provider-info"></div>
54
+ </div>
55
+ </details>
56
+ </div>
57
+ </header>
58
+ <nav id="tabs" aria-label="Workspaces"></nav>
59
+ <main id="content" tabindex="-1">
60
+ <div id="notice" role="status" hidden></div>
61
+ <section id="limits" aria-label="Provider usage" hidden></section>
62
+ <section id="overview" aria-labelledby="overviewTitle" hidden><section id="realmbar"><h2 id="overviewTitle">Workspaces</h2><p id="realmStatus" class="status-line"></p><nav id="realmTabs" aria-label="Overview views"></nav></section><div id="projects"></div><p id="idle" hidden></p></section>
63
+ <div id="board" hidden>
64
+ <section id="wsbar" aria-labelledby="wsName">
65
+ <div class="wsrow"><h2 id="wsName"></h2><div id="repos" role="group" aria-label="Filter the board by repo"></div><div class="search" role="search"><label for="q" class="sr-only">Search cards</label><input id="q" type="search" placeholder="Search" autocomplete="off" spellcheck="false" aria-describedby="qCount"><kbd class="qkey" aria-hidden="true">/</kbd><span id="qCount" aria-live="polite"></span></div></div>
66
+ <p id="wsStatus" class="status-line" aria-live="polite"></p>
67
+ <nav id="viewTabs" aria-label="Board views"></nav>
68
+ </section>
69
+ <section id="viewPane" hidden></section>
70
+ <div id="focus">
71
+ <details id="needs" class="block fold">
72
+ <summary><h2 id="needsTitle">Needs you</h2><span class="sub" id="needsSub"></span></summary>
73
+ <ul id="needsList" class="rows"></ul>
74
+ </details>
75
+ <details id="loreInbox" class="block fold" hidden>
76
+ <summary><h2 id="loreTitle">Lore inbox</h2></summary>
77
+ <ul id="loreList" class="rows"></ul>
78
+ </details>
79
+ <nav id="workTabs" aria-label="Work columns"></nav>
80
+ <div id="columns">
81
+ <details id="todo" class="block fold"><summary><h2 id="todoTitle">To do</h2><span class="sub">Queued work, oldest first.</span></summary><ul id="todoList" class="rows"></ul></details>
82
+ <details id="doing" class="block fold"><summary><h2 id="doingTitle">In progress</h2><span class="sub">Active work, owners and held locks.</span></summary><ul id="doingList" class="rows"></ul></details>
83
+ </div>
84
+ </div>
85
+ <section id="lanes" aria-label="All cards by status" hidden></section>
86
+ </div>
87
+ <section id="panels" aria-label="More">
88
+ <details id="donePanel" class="block fold">
89
+ <summary><h2 id="doneTitle">Done</h2><span class="sub">Recently completed work.</span> <span class="cls" id="doneHint"></span></summary>
90
+ <ul id="doneList" class="rows"></ul>
91
+ </details>
92
+ <details id="agentsPanel" class="block fold">
93
+ <summary><h2 id="agentsTitle">Team</h2><span class="sub">Agents and cost.</span> <span class="cls" id="agentsHint"></span></summary>
94
+ <div id="agents"></div>
95
+ <section id="costPanel"><h3 id="costTitle">Cost</h3><span class="cls" id="costHint"></span>
96
+ <div id="treasury"></div></section>
97
+ </details>
98
+ <div id="score"></div>
99
+ <details id="logPanel" class="block fold">
100
+ <summary><h2 id="logTitle">Activity</h2><span class="sub">Completed cards and work records.</span> <span class="cls" id="logHint"></span></summary>
101
+ <div class="panel-tools"><label class="vol"><span id="logFilterLabel">Show</span> <select id="logFilter"></select></label></div>
102
+ <div id="activityChips"></div><div id="log" class="vlist" role="group" aria-label="Activity records"></div>
103
+ <div id="logDetail" role="region" aria-label="Selected record" tabindex="-1" hidden></div>
104
+ </details>
105
+ <details id="chatter" class="block fold">
106
+ <summary><h2 id="chatTitle">Chatter</h2><span id="chatUnread" class="badge"></span> <span class="sub">Live messages and notes, newest first.</span></summary>
107
+ <div class="panel-tools"><label class="vol">Show <select id="chatFilter"></select></label></div>
108
+ <div id="chat" tabindex="0" role="log" aria-live="polite" aria-relevant="additions" aria-label="Recent messages and notes"></div>
109
+ </details>
110
+ </section>
111
+ <dialog id="kbdHelp" aria-labelledby="kbdTitle"><h2 id="kbdTitle">Keyboard shortcuts</h2><dl>
112
+ <dt><kbd>/</kbd></dt><dd>Search cards and chat</dd>
113
+ <dt><kbd>Esc</kbd></dt><dd>Clear the search, close a menu, the card drawer or this panel</dd>
114
+ <dt><kbd>Tab</kbd> then <kbd>Enter</kbd></dt><dd>Move between cards and open one</dd>
115
+ <dt><kbd>?</kbd></dt><dd>Show this panel</dd>
116
+ </dl><form method="dialog"><button type="submit" class="tog">Close</button></form></dialog>
117
+ </main>
118
+ <div id="toasts" popover="manual" role="log" aria-live="polite" aria-label="Board events"></div>
119
+ <footer id="footer"><span class="credit"><a href="https://github.com/agi1clj/raidlock" target="_blank" rel="noopener">raidlock {{version}}</a> · made with <span aria-label="love">❤️</span> by <a href="https://www.linkedin.com/in/gabriel-arcas/" target="_blank" rel="noopener">Gabriel Arcas</a></span></footer>
120
+ <button type="button" id="soundBanner" hidden>Sound is on: click anywhere to enable it</button>
121
+ </body>
122
+ </html>
@@ -0,0 +1,186 @@
1
+ Metadata-Version: 2.5
2
+ Name: raidlock
3
+ Version: 0.1.0
4
+ Summary: Local-first lease-and-review board for coding agents from any provider
5
+ Project-URL: Homepage, https://github.com/agi1clj/raidlock
6
+ Project-URL: Documentation, https://github.com/agi1clj/raidlock/tree/main/docs/guides
7
+ Project-URL: Repository, https://github.com/agi1clj/raidlock
8
+ Project-URL: Issues, https://github.com/agi1clj/raidlock/issues
9
+ Project-URL: Changelog, https://github.com/agi1clj/raidlock/blob/main/CHANGELOG.md
10
+ Author: agi1clj
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: agents,claude-code,codex,coordination,gemini,leases
14
+ Classifier: Environment :: Console
15
+ Classifier: Operating System :: MacOS :: MacOS X
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Programming Language :: Python :: 3.15
24
+ Classifier: Topic :: Software Development
25
+ Requires-Python: >=3.11
26
+ Provides-Extra: test
27
+ Requires-Dist: hypothesis>=6; extra == 'test'
28
+ Requires-Dist: pytest>=8; extra == 'test'
29
+ Provides-Extra: ui-test
30
+ Requires-Dist: pytest-playwright>=0.5; extra == 'ui-test'
31
+ Requires-Dist: pytest>=8; extra == 'ui-test'
32
+ Description-Content-Type: text/markdown
33
+
34
+ <picture>
35
+ <source media="(prefers-color-scheme: dark)" srcset="docs/assets/brand/raidlock-lockup-dark.svg">
36
+ <img src="docs/assets/brand/raidlock-lockup.svg" alt="raidlock" width="227" height="42">
37
+ </picture>
38
+
39
+ # raidlock
40
+
41
+ A lease-and-review board that lets several coding agents work on the same repos without colliding.
42
+
43
+ **raidlock stops parallel coding agents from overwriting each other's files, across Claude Code, Codex and Gemini, and won't accept their work until the tests pass and an agent from another provider signs off.**
44
+
45
+ <p align="center"><img src="docs/assets/demo.gif" alt="raidlock web UI tour" width="960"></p>
46
+
47
+ [![CI](https://github.com/agi1clj/raidlock/actions/workflows/ci.yml/badge.svg)](https://github.com/agi1clj/raidlock/actions/workflows/ci.yml)
48
+ [![PyPI](https://img.shields.io/pypi/v/raidlock)](https://pypi.org/project/raidlock/)
49
+ [![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)
50
+
51
+ Run Claude Code, Codex, Gemini, shell scripts and people on one board. Each piece of work is a card. Claiming a card leases the exact paths it may touch, and hooks refuse edits anywhere else. One lead closes cards, and only after a signed verify receipt exists for the commit and, on a mixed-provider board, a reviewer from another provider has approved. You can follow who is doing what in the terminal or in a raid-themed web UI.
52
+
53
+ ## Why
54
+
55
+ Parallel agents fail in predictable ways. Two of them edit the same file. One reports "tests pass" and nobody checks. The lead loses track of who is on what, and a stalled session keeps writing after someone else took over. raidlock is a small local tool that handles each of these:
56
+
57
+ - Path leases are atomic, keyed by the repo's git remote, and checked across every project on your machine.
58
+ - A fence number changes with every new owner, so a replaced worker's writes are refused.
59
+ - `raid done` is lead-only and refuses a card until its verify command has passed in a sandbox on the exact commit.
60
+ - Once a second provider joins, `done` also needs an approval from a reviewer on another provider.
61
+ - Board-first by default: the hooks deny edits outside a card you hold, including the lead's, and subagent launches whose prompt names no open card.
62
+ - It runs on your machine with no runtime dependencies. The Claude Code plugin adds about 190 tokens per session ([benchmark](docs/guides/benchmark.md)).
63
+
64
+ ## Install with your agent
65
+
66
+ Paste this into Claude Code, Codex or another terminal coding agent:
67
+
68
+ ```text
69
+ Install raidlock by following the "Install with your agent" steps in
70
+ https://github.com/agi1clj/raidlock/blob/main/docs/guides/install.md
71
+ ```
72
+
73
+ The agent installs the CLI and the Claude Code plugin, runs `raid doctor`, creates a board and explains the board-first rule back to you. It never reads the lead secret.
74
+
75
+ ## Install by hand
76
+
77
+ ```bash
78
+ uv tool install raidlock # or: pipx install raidlock
79
+ raid doctor
80
+ ```
81
+
82
+ In Claude Code, add the plugin (hooks, skill and the `raid-worker` agent):
83
+
84
+ ```text
85
+ /plugin marketplace add agi1clj/raidlock
86
+ /plugin install raidlock@raidlock
87
+ ```
88
+
89
+ Needs Python 3.11 or newer on Linux or macOS. On Windows, use WSL2 (expected to work, not yet tested). Codex and MCP setup: [Install](docs/guides/install.md).
90
+
91
+ ## Quickstart
92
+
93
+ Lead terminal:
94
+
95
+ ```bash
96
+ mkdir -p ~/demo/shop && cd ~/demo/shop
97
+ raid quickstart --demo # a board, a demo repo acme-shop/, and you as the lead
98
+ LEAD_SECRET_FILE="<the path it printed>"
99
+ raid --lead-secret "$LEAD_SECRET_FILE" new "Reject empty carts" --id checkout \
100
+ --locks acme-shop/src/checkout --verify-cmd "python3 -m unittest"
101
+ ```
102
+
103
+ Worker terminal:
104
+
105
+ ```bash
106
+ cd ~/demo/shop/acme-shop
107
+ raid up --join --agent worker-1 --card checkout --runtime human # then run the source line it prints
108
+ raid claim checkout --checkout "$PWD" # then paste the two export lines
109
+ raid ui --open # http://127.0.0.1:8765
110
+ ```
111
+
112
+ worker-1 now holds `acme-shop/src/checkout`, and any other agent editing there is refused. [Getting started](docs/guides/getting-started.md) finishes the card: edit, commit, review, verify, done.
113
+
114
+ ## How coordination works
115
+
116
+ One lead, many agents, one project. The lead splits work into cards with narrow, disjoint locks. Each worker claims one, posts notes and hands it back to review. The lead verifies and closes it:
117
+
118
+ ```bash
119
+ raid --lead-secret "$LEAD_SECRET_FILE" new "Paginate orders" --id orders \
120
+ --locks acme-shop/src/orders --verify-cmd "python3 -m unittest"
121
+ raid claim orders --checkout "$PWD" # worker
122
+ raid note orders "pagination added; tests pass" # worker; renews the lease
123
+ raid --lead-secret "$LEAD_SECRET_FILE" msg --to worker-1 --card orders "keep page size at 50"
124
+ raid move orders review --note "python3 -m unittest: 9 passed" # worker
125
+ raid --lead-secret "$LEAD_SECRET_FILE" verify orders # signed receipt on the commit
126
+ raid --lead-secret "$LEAD_SECRET_FILE" done orders
127
+ ```
128
+
129
+ Many projects. Each workspace has its own `.board/`, and every board registers in one lease index under `~/.raidlock`. A path locked from one workspace is locked in all of them. `raid ui` shows every workspace on its realm page, with tabs for Guilds, Tavern chatter and Treasury.
130
+
131
+ Many sessions. Separate Claude Code or Codex sessions join the same board with `raid up --join`, each in its own clone or worktree. Leases map through the git remote, so every checkout of a repo shares one lock space.
132
+
133
+ Mixed providers. When an agent from a second provider joins, raidlock turns on the verify gate and the cross-provider review gate and records the change. Values you set yourself with `raid config set` are kept.
134
+
135
+ Board-first enforcement, on by default. The Claude Code hooks deny edits outside the card you hold, and that includes the lead: a lead edit inside a git repo needs a card the lead holds (`require_card_for_lead_edits`). A `Task` or `Agent` launch is denied unless its prompt names an open card as `card <id>` (`board_first_subagents`). Turn either off with `raid --lead-secret FILE config set <key> off`. The git commit guard checks other agents' leases either way.
136
+
137
+ Full version: [Orchestration](docs/guides/orchestration.md).
138
+
139
+ ## Two ways to run agents
140
+
141
+ | | Workstreams | Sandboxed agents |
142
+ |---|---|---|
143
+ | What | Sessions you run yourself: Claude Code, Codex, you | `raid delegate CARD --to codex\|claude\|gemini\|shell` runs an agent CLI for you |
144
+ | Where | Your own clone or worktree; claim with `raid claim CARD --checkout "$PWD"` | A throwaway clone with no remote and a cleared environment |
145
+ | Guard | Lease, edit hooks, git guards | Lease, a diff check against the card's locks and a secret scan; the lead applies the returned patch |
146
+ | Cleanup | Yours | The clone is deleted on `done`, `close` or `cancel`; logs and the patch stay |
147
+
148
+ Use a workstream for a session you watch, and `raid delegate` for unattended or less trusted runs. Details: [Workstreams and sandboxed agents](docs/guides/orchestration.md#workstreams-and-sandboxed-agents).
149
+
150
+ ## Features
151
+
152
+ | Feature | Guide |
153
+ |---|---|
154
+ | Path leases with expiry and fencing, across clones, worktrees and workspaces | [Concepts](docs/guides/concepts.md) |
155
+ | Board-first hooks, git pre-commit and pre-push guards, runner diff | [Hooks](docs/guides/hooks.md) |
156
+ | Lead-only done, signed verify receipts, cross-provider review | [Verification](docs/guides/verification.md) |
157
+ | `raid delegate`, `raid next` routing on plan headroom, `raid duel`, `raid resume`, opt-in `raid resurrect` | [Orchestration](docs/guides/orchestration.md) |
158
+ | Import a checklist or a spec tool's `tasks.md`, lock suggestions, merge-conflict foresight, a lessons vault | [Planning](docs/guides/planning.md) |
159
+ | Pull requests from a verified commit; merged PRs close cards through the gates | [Pull requests](docs/guides/pr.md) |
160
+ | Spend per card, model, agent and day; delegation budgets | [Operations](docs/guides/operations.md#delegation-budgets) |
161
+ | Live web UI on `127.0.0.1`: Needs you first, quest log, chatter, cost, dependency graph, lease map, replay | [Web UI](docs/guides/ui.md) |
162
+ | CLI with `--json` and stable exit codes; an MCP server that never acts as lead | [Commands](docs/guides/commands.md), [MCP](docs/guides/mcp.md) |
163
+ | Optional hardened container image for `raid ui`, `raid mcp` and sandboxed verify | [Docker](docs/guides/docker.md) |
164
+
165
+ Gemini runs only through `raid delegate --to gemini`, and that adapter is tested against recorded events, not a live Gemini CLI.
166
+
167
+ ## Documentation
168
+
169
+ - Start: [Install](docs/guides/install.md), [Getting started](docs/guides/getting-started.md), [Concepts](docs/guides/concepts.md)
170
+ - Run a board: [Lead playbook](docs/guides/lead-playbook.md), [Worker rules](docs/guides/worker-rules.md), [Claude Code plus Codex](docs/guides/multi-provider.md), [Orchestration](docs/guides/orchestration.md)
171
+ - Reference: [Commands](docs/guides/commands.md), [Protocol](PROTOCOL.md), [Hooks](docs/guides/hooks.md), [Verification](docs/guides/verification.md), [Web UI](docs/guides/ui.md), [MCP server](docs/guides/mcp.md)
172
+ - More: [Planning](docs/guides/planning.md), [Operations](docs/guides/operations.md), [Agent Teams and Codex hooks](docs/guides/native.md), [Docker image](docs/guides/docker.md), [Overview, FAQ and alternatives](docs/guides/overview.md), [Examples](examples/README.md)
173
+
174
+ If you are an agent, start with [skills/raidlock/SKILL.md](skills/raidlock/SKILL.md).
175
+
176
+ ## Security
177
+
178
+ raidlock keeps cooperating agents out of each other's way. It is not a sandbox. Tokens, the lead secret and the verify signing key are files under your user account, readable by any process running as you. `raid verify` runs only under bubblewrap on Linux or `sandbox-exec` on macOS. The UI listens on `127.0.0.1` and answers `GET` only. Threat model and reporting: [SECURITY.md](SECURITY.md). Limits: [Security and limits](docs/guides/overview.md#security-and-limits).
179
+
180
+ ## Contributing
181
+
182
+ See [CONTRIBUTING.md](CONTRIBUTING.md) and the [Code of Conduct](CODE_OF_CONDUCT.md).
183
+
184
+ ## License
185
+
186
+ [MIT](LICENSE). The web UI bundles the Cinzel font under the [SIL Open Font License 1.1](src/raidlock/web/static/fonts/OFL.txt). raidlock is an independent project, not affiliated with or endorsed by Anthropic, OpenAI or Google. Claude, Codex and Gemini are trademarks of their respective owners.
@@ -0,0 +1,126 @@
1
+ raidlock/__init__.py,sha256=icOqbssFEPuEEviiy7h0PKB-GizT9lMo2BKRh1xwuJA,249
2
+ raidlock/__main__.py,sha256=E6Gls0DNz8GQK2K-kOUIx8cYhgANW_CH54VKrfCfs14,52
3
+ raidlock/_python.py,sha256=NFOHu1EoJ2pIQwLwOcKEfQO7ZxNHcxEs5Ba--LL4NFU,1941
4
+ raidlock/achievements.py,sha256=V9nBtPAKDarOHx3gBQiH-nrgctheC80WXtjMcIoUhB0,6774
5
+ raidlock/approvals.py,sha256=J1vq1UOm1U6mdsjZQnquLoC3sv5MtgNDFpeMh3yRgbY,8755
6
+ raidlock/bench.py,sha256=eKCWxupTrtQrXhRbtieQltI7QpvqmlIWsUjrm1-4-Tk,11393
7
+ raidlock/budgets.py,sha256=zvte6yKFLvpwpt52cRQ5dAb0Az165LB58HR8Bgcz_Go,7075
8
+ raidlock/cli.py,sha256=kCIoIJeoj916j2qFkvQrRf0ZBafcxygTp-bzMb0rcnE,85438
9
+ raidlock/commands_install.py,sha256=-UkV6emkMyrLrbguPA19Gp5ednb04YIZ7xymr6eWpj4,3292
10
+ raidlock/duel.py,sha256=Sawc9R5z0eplcXa9-ZJZSR1dzwg6Q_kWxrrV1klIAcI,16461
11
+ raidlock/foresight.py,sha256=pw84kcmcj2btL7Xy4TF3avO7viWG4HvQVr-YpkxByS0,8126
12
+ raidlock/frames.py,sha256=YYe_CUE7S3Jq92zlXG31piQWgYkJJfme1ZEuYPtytpA,6419
13
+ raidlock/gitguard.py,sha256=st-HEZNFUU7CpWxQKidTYVNSaN6sbxG15nSgS0jYysE,22531
14
+ raidlock/guard.py,sha256=rRKKCnHzSBkdBr6B8s1Aa6vTEpQTDzKugG6AeqOs5GU,8154
15
+ raidlock/hooks.py,sha256=YgGnyhh23Tl5SZ0-QW7vBB6ouioElMuVDDBZSLmQzmI,55670
16
+ raidlock/infer.py,sha256=dv45xVSYsNwEEj19x3GS19gfSkUq9N01_X_UvTdhZcs,8661
17
+ raidlock/limits.py,sha256=7o7ZAiDd3HpV63U9FShdGfMhWQeuBFJiATWMw5j89ns,25048
18
+ raidlock/notify.py,sha256=Cx4kUucVspIJT4162cFWpeFNhmLqx2phGKsVrU8OIo8,5813
19
+ raidlock/party.py,sha256=5oyNAJ36_0BTIuUo3HhAT9kwC2JFHAKa26oNq884MTQ,8261
20
+ raidlock/pr.py,sha256=JA0BFIEuNuXyu-Ax1Fy1HHQjZgqMLRw8PmYlVgsGGp0,25013
21
+ raidlock/prsync.py,sha256=OXkcxpJsjaWi5bTLgEHvRby519yz9jsXJd2kZqolqPM,13524
22
+ raidlock/reputation.py,sha256=FWJHe91y66JdVjBEMILrKFghUxY3_gXWGytOvPS2waQ,8812
23
+ raidlock/resume.py,sha256=RRGRulsFi6StlJTequ5jcevGguKIYmoVkmSySV_L0-U,14177
24
+ raidlock/resurrect.py,sha256=kT2Zxux2162-bTuls44-1Va8UyFG2dbQX9WfNeQgfYo,17951
25
+ raidlock/routing.py,sha256=E4AGHx-SFyae94SwwsoERBW5i_IQiu5_fb8DuNzDps4,17920
26
+ raidlock/scan.py,sha256=3dizzFjVzlpVrKsD7-MnSey0reuxeSgcM4Z6WYNchRQ,14559
27
+ raidlock/snapshot.py,sha256=oPsp3WY1r01-Ja8gRSfjBkxhcd8YQnVi4gkmjpXiBgw,6225
28
+ raidlock/treasury.py,sha256=eABJ5xIu3zQf5uPHfog02Kkguo8FF3gyf1Q1ksVMTYw,8201
29
+ raidlock/tui.py,sha256=PQrxZ5KFT-wcvTE4mBmzAMqHaQo_IzXFmAFb-yX6yKk,7177
30
+ raidlock/bridge/__init__.py,sha256=t0Y0Kz73aAWy5xIcppYH9vovAuvjScz5QFw5HCFQI6w,5630
31
+ raidlock/core/__init__.py,sha256=LIKQPJ2ePsg13lM7WKitIMBghUtV7uUwGn0G5ND0XuA,663
32
+ raidlock/core/advisories.py,sha256=hdoun4o-OzK-8-niFpm5eW2xUjjQz5b7nM3Sujqi5Bc,523
33
+ raidlock/core/billing.py,sha256=TLqiiJ_0oEMEk-lLKEMEEnGz1Tsl3IsOkXuLT73yHoc,2087
34
+ raidlock/core/board.py,sha256=dQdZGq6oQXWMwMu-YnTZNSVewpNjf9ktP5edLYPYXek,99191
35
+ raidlock/core/brief.py,sha256=bYj8eRoBirkQwILs2CS8KDHSf9cemBGkCHmKhmZT54Q,3704
36
+ raidlock/core/clock.py,sha256=wCpNFZ__qWUAltg6Z4xfpKC5CC9GvDebFSnqNZPtVR8,813
37
+ raidlock/core/cost.py,sha256=aJkvXED85qVRi13UUDY49Js3kmaxrMNFCkhCmaN5k84,6591
38
+ raidlock/core/db.py,sha256=YIQlbcru73vV5YAO_v-OIOyFOPy_d6wVVRTXQ8iMXGA,25777
39
+ raidlock/core/errors.py,sha256=MImXFRrFCnH6PyjtCnnL5dYwBGDkqCAjWLAdia4Lu1w,1295
40
+ raidlock/core/exe.py,sha256=HFf3EszzRqUMD6FwcECH3fU_IGUQDVoSP8iex8jzeSA,184
41
+ raidlock/core/hints.py,sha256=jIU7IFHIdIiYUemyVQaKOBNtNIs8p5ZDzbum6k4uMdI,972
42
+ raidlock/core/identity.py,sha256=QKcq-F1u6ZG8kOXoJswkG-7o_LeMRtQBPbkBb7vbYVM,10382
43
+ raidlock/core/lead.py,sha256=Fi6EqJJ1CE2jnvj4-JSBY1JsTtNDF6mesXFpjBpLtb0,27698
44
+ raidlock/core/lead_env.py,sha256=QHUJ27i7w-5G8bFppHVY3Y3n1XIa0Lb8X2cNUYjbC0A,752
45
+ raidlock/core/lead_hook.py,sha256=FQ8UcOMyYZhgamPULTL1Et9Hc-WZMfo_ecraX3wL3uY,1562
46
+ raidlock/core/leases.py,sha256=Ow1B1Bnm8JaaTOPR3gfnH52CJiH9ZLVm48NeQuNW6Og,604
47
+ raidlock/core/lock.py,sha256=HV5GSVXuBHDEEqe9CVaBZNXS4fY5XZ_lkdnryasKAAg,2762
48
+ raidlock/core/messages.py,sha256=-0s31Qf_oXNJ6wRGZbCLZqmhSH55lS3zqq1u1pzRkbs,3155
49
+ raidlock/core/migrate.py,sha256=ZZk_4hAjfLoCUAZPSt1Sln6QjKWH9cWiEkMePR4tjwM,20997
50
+ raidlock/core/model.py,sha256=K95uGDSTDta4rtlsv8VBRiydVGM8IZyfQbK6uJwQzeo,4355
51
+ raidlock/core/models.py,sha256=5EV1VR_Fws4MdAfaLSll8VsoGVbQ8CpAWUH4PM7Qdjk,3689
52
+ raidlock/core/paths.py,sha256=xeAsqVGsbm_H9jgFF-E_rhpcKWhCtwJ7kpYvKctDans,2021
53
+ raidlock/core/portable.py,sha256=TZBJ3wcJGjF1Y2sXBo0wI-FW6ZLjI5D9FqX4lQe-7Q4,1647
54
+ raidlock/core/receipts.py,sha256=FsF8w9gDTWYvrReaPWhRSo7yhNon40Liy0Hhn6PLkZs,2605
55
+ raidlock/core/registry.py,sha256=ea1Vz7FcuhdRtHGgbvLssizmsQWr2Cq932U-6bagCwM,1259
56
+ raidlock/core/repos.py,sha256=xFNnM3GEwIyV9DBxK0Vr83ejBGcZBWYQnAEbFJCNbu4,8203
57
+ raidlock/core/safeio.py,sha256=Lri5WusWF_hn8whb7kMuJyBBkCEIVIWgdWAu5VWFFyc,6650
58
+ raidlock/core/status.py,sha256=X3wJbooT8yWoAJkhoFCFZwM8daRC7aXM02qlxnq85bY,1916
59
+ raidlock/core/store.py,sha256=UnvsmZxwfmN8iDros53ywAYTn6N6m1gL7_ThMHjqzTg,2794
60
+ raidlock/core/tokens.py,sha256=fzRcLvASo6F-xFNmbCMh85mn7NgGNQQ5HgSUUZcaR6g,2767
61
+ raidlock/core/transcript.py,sha256=iBNFMrfACmhO_JtB-bdrhsAS-nJtCp4ufIvqXVkxJUQ,7719
62
+ raidlock/lore/__init__.py,sha256=UhY_l9HG3IecmWrpxaSYFkT1bSxE8p_ZLRDx34MFrEw,901
63
+ raidlock/lore/approval.py,sha256=3SLwkplJDr58LxoNEzJ8cUlSLA3qgVOFWwxhciJaKFU,5170
64
+ raidlock/lore/capture.py,sha256=Dq5T_G733VVmiPh7PoNkHlkVBoYKw_noyTZWJKzeQRQ,5139
65
+ raidlock/lore/cli.py,sha256=YqIEFMtKNIG2QoiQfuagUoFQDYLHtQa10cLt2uuOVd4,5261
66
+ raidlock/lore/distill.py,sha256=FjHXrIxqCGpRQ5DXrOejqcgrviBI7QCr7RANmVu6u9k,929
67
+ raidlock/lore/frontmatter.py,sha256=wfrkyZ6ax91_RtqBIwrSIuUn25HoK4O-mIpzPCvtUX4,2016
68
+ raidlock/lore/inject.py,sha256=0SrxFK9p4QqCQdsatSBlHZFmlRiPe9U--fycmxlTcL4,4971
69
+ raidlock/lore/vault.py,sha256=hZ-M_xEI5FWRZtuhoFDBaMfMRJ4D2dsuR6cbLCV3i8M,8790
70
+ raidlock/mcp/__init__.py,sha256=EGqqhzzvOWvxOdMdwHtKSAU-vt0bgjZsQDmXQ0HQd4E,948
71
+ raidlock/mcp/resources.py,sha256=36ssQuw7ymBXv8Jcm-3XQccbiFSABu3gY7uhdEceGc8,2135
72
+ raidlock/mcp/server.py,sha256=i9q0somPJhJhzmUo9e-fS7ziGHtIoosLxdgOGIqzaco,7149
73
+ raidlock/mcp/tools.py,sha256=LXyXxhnzL6qMAC0dVfDXNZ0YVqFgyr6VSV--j1CebD4,6542
74
+ raidlock/recipes/README.md,sha256=QVApzrGviEOgSzv9NcAC6U4kalC8zS9wi8Da9RhTDlM,1934
75
+ raidlock/recipes/__init__.py,sha256=NOUFZYqtGyaJ-Fm2nhhHT_jewUkNHbTgPxFGmffDvB8,3728
76
+ raidlock/recipes/docs-refresh.md,sha256=nFHsg-u-dAXQdavi50OUwSQa-kMB-_K32xBoF8xosfY,660
77
+ raidlock/recipes/multi-repo-refactor.md,sha256=wpmoHMNUHYIBbm7NTNlvQ7iLeGsNZi7CQk_rkf6lRag,866
78
+ raidlock/recipes/security-audit.md,sha256=K-CSZmEQvEH9HMGVRjixeVd1i7FqN1OpcoJmjFBuX7A,2248
79
+ raidlock/recipes/upgrade-deps.md,sha256=414le8C8gkLG4phHqZu4IMR96ocCDKWs6uNjKPS2AyA,792
80
+ raidlock/runners/__init__.py,sha256=Mds2miY-c2ypvUy_FzNbDQWseKebSWyaOf1sD03XXbg,522
81
+ raidlock/runners/base.py,sha256=sjH9PQBF4VUbJDGeK4kede0huCyv5hFLF_iMikxbQ9I,11217
82
+ raidlock/runners/brief.py,sha256=1SizkW9lvu8zaksdOwr9oUljMr1Xj9Eo6-eyQ3gZww4,6749
83
+ raidlock/runners/claude_code.py,sha256=sD_PPMYWYP3Y6DclMQPGjCGioDCnJdwTgIpHWISZH58,4705
84
+ raidlock/runners/cli.py,sha256=5OBGCMz_Tfn2tyE0a4VVj0dqS0Qic2pLkyzQboNhJks,3857
85
+ raidlock/runners/codex.py,sha256=QWANAB20Rt5bYafAoOA59_z7kkvNCoz2S2Kz8riEIjw,4023
86
+ raidlock/runners/gemini.py,sha256=dfiOC9PvRQr9M5BU6OUrAw3CkciXQOwRHoHHD-AfV4k,2435
87
+ raidlock/runners/isolation.py,sha256=LiQgXmIebi6Ykg5X_alYKd2aVUWDXGhSKxv23uZL6Kc,13405
88
+ raidlock/runners/policy.py,sha256=BPaueMX8jmepq9dLA8pxlzr-xxszU24hNFIPYSyjul8,4377
89
+ raidlock/runners/runner.py,sha256=3c0V-hhTxTowM8QPvokPpFZtdPBlhprxYSfVorWbyvI,34356
90
+ raidlock/runners/shell.py,sha256=bSNiN6Vhd2G-I91hArGKWIPg9lpqoNO1rihzy9O2jgM,1261
91
+ raidlock/runners/verifycache.py,sha256=KfYKrjQIccO9ZEZIP00mMy9fwD3InrEn0qeycfFcTQw,2972
92
+ raidlock/runners/workspace.py,sha256=iB5MTPjQVjgixqtJMj17gr6xR6wJDNJKj63VTxRZQPk,13763
93
+ raidlock/web/__init__.py,sha256=DsHwSg_2bScluKbuk8eA9GfR0BNbLOz_lJSW5n3-3PY,110
94
+ raidlock/web/cli.py,sha256=LpwFBHMhxhAImutmFEjGIe4htvyEGtB4DVDrtt4I2M4,2991
95
+ raidlock/web/data.py,sha256=R7BkkEB75IkrxePleIlX9jbDIIpZqKIewadEK973FIQ,23906
96
+ raidlock/web/export.py,sha256=3r-JZIh3gfcBfNFNWe48M7truA27vSEzyvGObeEj7Pc,5600
97
+ raidlock/web/server.py,sha256=DRwsY4MFCRlcWP81M_X_NFSF71BIA3fck4IY7XrJFNU,10673
98
+ raidlock/web/achievements/view.css,sha256=FXpzF57AyI2CVrGGk402zNGYeDn_6UBs7H_MHmh1SUc,1380
99
+ raidlock/web/achievements/view.js,sha256=OhhacUcaeS0LjolZ1o2wUK7fMk2B2l4oJ5LXkRzaMsE,4155
100
+ raidlock/web/bosses/view.css,sha256=4OQsAbrWxFTsDQ3Xf_jqrJvmqf32Zt8cPjWUqEAxa5g,1331
101
+ raidlock/web/bosses/view.js,sha256=8rkDjrDhHRRRwN-HA7B8GnclQV_63VvEOPqaWxQbnrI,2988
102
+ raidlock/web/frames/view.css,sha256=yGjGlismw0ZJJqb8FQdj1vDArtT00oVl5hMxWBCKDXs,2024
103
+ raidlock/web/frames/view.js,sha256=MTNbGWdLycDayCrGMuhqm9Yyttj79OGLZ7P_GnTDv8E,4389
104
+ raidlock/web/graph/__init__.py,sha256=0-GQbuPfejJP8mddYCWC-bBmsQdsc1tutmglJS85lyc,5313
105
+ raidlock/web/graph/view.css,sha256=A_nGLuXACwm61R6b2ShezMw2c8x8Qf_25tTEJDcPsxY,2337
106
+ raidlock/web/graph/view.js,sha256=rlBbjW3GnbnLNKmldF_PKSaYBct8EHyCG8Jomh-9KEI,9515
107
+ raidlock/web/raidmap/__init__.py,sha256=yi8CI5IaSdjMkO7_2S8xbgCgAh33TrH0HXju4TMQhr4,7365
108
+ raidlock/web/raidmap/view.css,sha256=HpEJ7Ypnggn10YKgWsYvcaxfxo1vHlrxk5npOQZzuls,1450
109
+ raidlock/web/raidmap/view.js,sha256=yl6HIxk4s3BCN3Lri18tx8ihP0WvjqLCjsHOKvd_cnY,3067
110
+ raidlock/web/replay/__init__.py,sha256=ogZnomgZc3O17FygUpQNadAdfNUsHHFaWnHwBHFfQfw,9681
111
+ raidlock/web/replay/view.css,sha256=0JLsxfyvKHNjVsvLzRW7lLy4JV_r1js9rqnOzowC-EI,1368
112
+ raidlock/web/replay/view.js,sha256=tvBjTXNcz7d7yHW8pg9t-lqtwcuLrGgk66tk_42HO8Q,6683
113
+ raidlock/web/static/app.css,sha256=zI9BXaf-Bp13y0yvn8wMO4hZegwKPtCzalk6-KM2868,60591
114
+ raidlock/web/static/app.js,sha256=2YkXtAlIEbAUu6gG647eV4iYjkWbIeBYjG9rTGgyMSQ,128156
115
+ raidlock/web/static/icon-32.png,sha256=oEfu2Ihu1KMRDmVAKn9vRLrK34AsIoIcSDp2RvLB9ys,966
116
+ raidlock/web/static/icon-raid.svg,sha256=J9_2ifw2M0B1Awct__D3hkSwLWsgUuWLSK1_aH5aA2g,817
117
+ raidlock/web/static/icon.svg,sha256=NdW-8qu6GY1oLMhszxn5cmsmhKhiF9ElP1r5Ok-LLzo,624
118
+ raidlock/web/static/index.html,sha256=pZOHmAF8W2_p4DKtb2rz97BogJ5LxLotzp7jFZ9xFD0,11973
119
+ raidlock/web/static/fonts/OFL.txt,sha256=9aJCz2itbr0GA7M1mnTFk8oIAximgQNb5SlrosawSuY,4382
120
+ raidlock/web/static/fonts/cinzel-600.woff2,sha256=HHIG0um8WV9rQ5Z3hOm-QNVipHROdzUaV65nSjVbn3c,14776
121
+ raidlock/web/static/fonts/cinzel-700.woff2,sha256=92NIW5niCaaLMkL_2DzfMIBf7JGhEsiSjE8uCNqpYuI,14684
122
+ raidlock-0.1.0.dist-info/METADATA,sha256=gIlpq8schxvtSwZ9GvQvNPIq3vDDp4zuXm8ZNfUQRhE,11824
123
+ raidlock-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
124
+ raidlock-0.1.0.dist-info/entry_points.txt,sha256=N6s6GxFTXfJUQEvO5O8Q9-471urn_sV1dmCmEGnb-Hk,1230
125
+ raidlock-0.1.0.dist-info/licenses/LICENSE,sha256=XgN2OpjVTxctR9B3zwXktyrf0DLWFoMLAjnqQkw2G3E,1070
126
+ raidlock-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,34 @@
1
+ [console_scripts]
2
+ raid = raidlock.cli:main
3
+ raidlock = raidlock.cli:main
4
+
5
+ [raidlock.commands]
6
+ achievements = raidlock.achievements:register_cli
7
+ approvals = raidlock.approvals:register_cli
8
+ bench = raidlock.bench:register_cli
9
+ budget = raidlock.budgets:register_cli
10
+ delegate = raidlock.runners.cli:register_cli
11
+ duel = raidlock.duel:register_cli
12
+ foresight = raidlock.foresight:register_cli
13
+ frames = raidlock.frames:register_cli
14
+ graph = raidlock.web.graph:register_cli
15
+ guard = raidlock.guard:register_cli
16
+ limits = raidlock.limits:register_cli
17
+ lore = raidlock.lore.cli:register_cli
18
+ map = raidlock.web.raidmap:register_cli
19
+ mcp = raidlock.mcp:register_cli
20
+ next = raidlock.routing:register_cli
21
+ notify = raidlock.notify:register_cli
22
+ pr = raidlock.pr:register_cli
23
+ pr-sync = raidlock.prsync:register_cli
24
+ recipes = raidlock.recipes:register_cli
25
+ replay = raidlock.web.replay:register_cli
26
+ reputation = raidlock.reputation:register_cli
27
+ resume = raidlock.resume:register_cli
28
+ resurrect = raidlock.resurrect:register_cli
29
+ scan = raidlock.scan:register_cli
30
+ snapshot = raidlock.snapshot:register_cli
31
+ suggest-locks = raidlock.infer:register_cli
32
+ treasury = raidlock.treasury:register_cli
33
+ tui = raidlock.tui:register_cli
34
+ ui = raidlock.web.cli:register_cli
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Gabriel Arcas
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.