wafer-cli 0.2.23__py3-none-any.whl → 0.2.25__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.
wafer/workspaces.py CHANGED
@@ -39,13 +39,13 @@ def _friendly_error(status_code: int, response_text: str, workspace_id: str) ->
39
39
  User-friendly error message with suggested next steps
40
40
  """
41
41
  if status_code == 401:
42
- return "Not authenticated. Run: wafer login"
42
+ return "Not authenticated. Run: wafer auth login"
43
43
 
44
44
  if status_code == 402:
45
45
  return (
46
46
  "Insufficient credits.\n"
47
- " Check usage: wafer billing\n"
48
- " Add credits: wafer billing topup"
47
+ " Check usage: wafer config billing\n"
48
+ " Add credits: wafer config billing topup"
49
49
  )
50
50
 
51
51
  if status_code == 404:
@@ -107,7 +107,7 @@ def _list_workspaces_raw() -> list[dict]:
107
107
  workspaces = response.json()
108
108
  except httpx.HTTPStatusError as e:
109
109
  if e.response.status_code == 401:
110
- raise RuntimeError("Not authenticated. Run: wafer login") from e
110
+ raise RuntimeError("Not authenticated. Run: wafer auth login") from e
111
111
  raise RuntimeError(f"API error: {e.response.status_code} - {e.response.text}") from e
112
112
  except httpx.RequestError as e:
113
113
  raise RuntimeError(f"Could not reach API: {e}") from e
@@ -188,7 +188,7 @@ def list_workspaces(json_output: bool = False) -> str:
188
188
  workspaces = response.json()
189
189
  except httpx.HTTPStatusError as e:
190
190
  if e.response.status_code == 401:
191
- raise RuntimeError("Not authenticated. Run: wafer login") from e
191
+ raise RuntimeError("Not authenticated. Run: wafer auth login") from e
192
192
  raise RuntimeError(f"API error: {e.response.status_code} - {e.response.text}") from e
193
193
  except httpx.RequestError as e:
194
194
  raise RuntimeError(f"Could not reach API: {e}") from e
@@ -307,7 +307,7 @@ def create_workspace(
307
307
  workspace = response.json()
308
308
  except httpx.HTTPStatusError as e:
309
309
  if e.response.status_code == 401:
310
- raise RuntimeError("Not authenticated. Run: wafer login") from e
310
+ raise RuntimeError("Not authenticated. Run: wafer auth login") from e
311
311
  if e.response.status_code == 400:
312
312
  raise RuntimeError(f"Bad request: {e.response.text}") from e
313
313
  raise RuntimeError(f"API error: {e.response.status_code} - {e.response.text}") from e
@@ -413,7 +413,7 @@ def delete_workspace(workspace_id: str, json_output: bool = False) -> str:
413
413
  result = response.json()
414
414
  except httpx.HTTPStatusError as e:
415
415
  if e.response.status_code == 401:
416
- raise RuntimeError("Not authenticated. Run: wafer login") from e
416
+ raise RuntimeError("Not authenticated. Run: wafer auth login") from e
417
417
  if e.response.status_code == 404:
418
418
  raise RuntimeError(f"Workspace not found: {workspace_id}") from e
419
419
  raise RuntimeError(f"API error: {e.response.status_code} - {e.response.text}") from e
@@ -542,6 +542,102 @@ def sync_files(
542
542
  return file_count, warning
543
543
 
544
544
 
545
+ def pull_files(
546
+ workspace_id: str,
547
+ remote_path: str,
548
+ local_path: Path,
549
+ on_progress: Callable[[str], None] | None = None,
550
+ ) -> int:
551
+ """Pull files from workspace to local via rsync over SSH.
552
+
553
+ Args:
554
+ workspace_id: Workspace ID or name
555
+ remote_path: Remote path in workspace (relative to /workspace or absolute)
556
+ local_path: Local destination path
557
+ on_progress: Optional callback for progress messages
558
+
559
+ Returns:
560
+ Number of files transferred
561
+
562
+ Raises:
563
+ RuntimeError: If rsync fails or workspace not accessible
564
+ """
565
+ import subprocess
566
+
567
+ def emit(msg: str) -> None:
568
+ if on_progress:
569
+ on_progress(msg)
570
+
571
+ assert workspace_id, "Workspace ID must be non-empty"
572
+
573
+ ws = get_workspace_raw(workspace_id)
574
+ workspace_status = ws.get("status")
575
+ assert workspace_status in VALID_STATUSES, (
576
+ f"Workspace {workspace_id} has invalid status '{workspace_status}'. "
577
+ f"Valid statuses: {VALID_STATUSES}"
578
+ )
579
+ if workspace_status == "error":
580
+ raise RuntimeError(
581
+ f"Workspace provisioning failed. Delete and recreate:\n"
582
+ f" wafer workspaces delete {workspace_id}\n"
583
+ f" wafer workspaces create {ws.get('name', workspace_id)} --wait"
584
+ )
585
+ if workspace_status != "running":
586
+ raise RuntimeError(
587
+ f"Workspace is {workspace_status}. Wait for it to be running before pulling files."
588
+ )
589
+ ssh_host = ws.get("ssh_host")
590
+ ssh_port = ws.get("ssh_port")
591
+ ssh_user = ws.get("ssh_user")
592
+ if not ssh_host or not ssh_port or not ssh_user:
593
+ raise RuntimeError(
594
+ f"Workspace is running but SSH not ready.\n"
595
+ f" Delete and recreate: wafer workspaces delete {workspace_id}\n"
596
+ f" Then: wafer workspaces create {ws.get('name', workspace_id)} --wait"
597
+ )
598
+ assert isinstance(ssh_port, int) and ssh_port > 0, "Workspace missing valid ssh_port"
599
+
600
+ # Normalize remote path - if not absolute, assume relative to /workspace
601
+ if not remote_path.startswith("/"):
602
+ remote_path = f"/workspace/{remote_path}"
603
+
604
+ # Build SSH command for rsync
605
+ ssh_opts = f"-p {ssh_port} -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
606
+
607
+ # Build rsync command (reverse of sync - from remote to local)
608
+ rsync_cmd = [
609
+ "rsync",
610
+ "-avz",
611
+ "-e",
612
+ f"ssh {ssh_opts}",
613
+ f"{ssh_user}@{ssh_host}:{remote_path}",
614
+ str(local_path),
615
+ ]
616
+
617
+ emit(f"Pulling {remote_path} from workspace...")
618
+
619
+ try:
620
+ result = subprocess.run(rsync_cmd, capture_output=True, text=True)
621
+ if result.returncode != 0:
622
+ raise RuntimeError(f"rsync failed: {result.stderr}")
623
+
624
+ # Count files from rsync output
625
+ lines = result.stdout.strip().split("\n")
626
+ file_count = sum(
627
+ 1
628
+ for line in lines
629
+ if line and not line.startswith((" ", "sent", "total", "receiving", "building"))
630
+ )
631
+
632
+ except FileNotFoundError:
633
+ raise RuntimeError("rsync not found. Install rsync to use pull feature.") from None
634
+ except subprocess.SubprocessError as e:
635
+ raise RuntimeError(f"Pull failed: {e}") from e
636
+
637
+ emit(f"Pulled {file_count} files")
638
+ return file_count
639
+
640
+
545
641
  def _init_sync_state(workspace_id: str) -> str | None:
546
642
  """Tell API to sync files from bare metal to Modal volume.
547
643
 
@@ -595,7 +691,7 @@ def get_workspace_raw(workspace_id: str) -> dict:
595
691
  workspace = response.json()
596
692
  except httpx.HTTPStatusError as e:
597
693
  if e.response.status_code == 401:
598
- raise RuntimeError("Not authenticated. Run: wafer login") from e
694
+ raise RuntimeError("Not authenticated. Run: wafer auth login") from e
599
695
  if e.response.status_code == 404:
600
696
  raise RuntimeError(f"Workspace not found: {workspace_id}") from e
601
697
  raise RuntimeError(f"API error: {e.response.status_code} - {e.response.text}") from e
@@ -0,0 +1,107 @@
1
+ Metadata-Version: 2.4
2
+ Name: wafer-cli
3
+ Version: 0.2.25
4
+ Summary: CLI for running GPU workloads, managing remote workspaces, and evaluating/optimizing kernels
5
+ Requires-Python: >=3.11
6
+ Description-Content-Type: text/markdown
7
+ Requires-Dist: typer>=0.12.0
8
+ Requires-Dist: trio>=0.24.0
9
+ Requires-Dist: trio-asyncio>=0.15.0
10
+ Requires-Dist: wafer-core>=0.1.0
11
+ Requires-Dist: perfetto>=0.16.0
12
+ Requires-Dist: posthog>=3.0.0
13
+ Provides-Extra: dev
14
+ Requires-Dist: pytest>=8.0.0; extra == "dev"
15
+ Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
16
+ Requires-Dist: diff-cover>=8.0.0; extra == "dev"
17
+ Requires-Dist: ruff>=0.4.0; extra == "dev"
18
+
19
+ # Wafer CLI
20
+
21
+ Wafer CLI gives coding agents direct access to GPU docs, trace analysis, and remote kernel evaluation.
22
+ It helps you develop and optimize GPU kernels even when you are not working on a machine with a GPU.
23
+
24
+ ## Key features
25
+
26
+ - Query GPU documentation with citations
27
+ - Analyze GPU traces and profiles
28
+ - Evaluate kernels on remote GPUs for correctness and performance
29
+ - Run commands on GPU targets (remote or local)
30
+ - Manage persistent workspaces
31
+
32
+ ## Quick start
33
+
34
+ ```bash
35
+ uv tool install wafer-cli
36
+ wafer login
37
+ wafer remote-run -- nvidia-smi
38
+ ```
39
+
40
+ ## Common commands
41
+
42
+ ```bash
43
+ wafer workspaces list
44
+ wafer workspaces create my-workspace --wait
45
+ wafer agent -t ask-docs --corpus cuda "What causes shared memory bank conflicts?"
46
+ wafer agent -t trace-analyze --args trace=./profile.ncu-rep "Why is this kernel slow?"
47
+ wafer evaluate --impl kernel.py --reference ref.py --test-cases tests.json --benchmark
48
+ wafer nvidia ncu analyze profile.ncu-rep
49
+ wafer corpus list
50
+ ```
51
+
52
+ ## Typical workflows
53
+
54
+ ### Query GPU documentation
55
+
56
+ Download a documentation corpus and ask questions with citations.
57
+
58
+ ```bash
59
+ wafer corpus download cuda
60
+ wafer agent -t ask-docs --corpus cuda "What causes shared memory bank conflicts?"
61
+ ```
62
+
63
+ ### Analyze performance traces
64
+
65
+ Use the trace analysis template or query trace data directly.
66
+
67
+ ```bash
68
+ wafer agent -t trace-analyze --args trace=./profile.ncu-rep "Why is this kernel slow?"
69
+ wafer nvidia perfetto query trace.json \
70
+ "SELECT name, dur/1e6 as ms FROM slice WHERE cat='kernel' ORDER BY dur DESC LIMIT 10"
71
+ ```
72
+
73
+ ### Evaluate kernels on remote GPUs
74
+
75
+ Run correctness and performance checks on a remote target.
76
+
77
+ ```bash
78
+ wafer evaluate \
79
+ --impl ./kernel.py \
80
+ --reference ./reference.py \
81
+ --test-cases ./tests.json \
82
+ --benchmark
83
+ ```
84
+
85
+ ### Run commands on a remote GPU
86
+
87
+ ```bash
88
+ wafer remote-run -- nvidia-smi
89
+ wafer remote-run --upload-dir ./my_code -- python3 train.py
90
+ ```
91
+
92
+ ### Manage workspaces
93
+
94
+ ```bash
95
+ wafer workspaces list
96
+ wafer workspaces create my-workspace --wait
97
+ wafer workspaces ssh <workspace-id>
98
+ wafer workspaces delete <workspace-id>
99
+ ```
100
+
101
+ ## Install the CLI skill (optional)
102
+
103
+ ```bash
104
+ wafer skill install
105
+ # or
106
+ wafer skill install -t <claude/codex>
107
+ ```
@@ -0,0 +1,45 @@
1
+ wafer/GUIDE.md,sha256=aZMNTNHhSc5dmRskUnpgcGlHYgsbf5S6Q_Thn0xmN1A,3588
2
+ wafer/__init__.py,sha256=kBM_ONCpU6UUMBOH8Tmg4A88sNFnbaD59o61cJs-uYM,90
3
+ wafer/agent_defaults.py,sha256=qpJvVyY7jw2EqQo_IZ4M4aR2-kKNomyTmoOOah1FW6I,1179
4
+ wafer/analytics.py,sha256=qLY6Z16usVHFD8TCv7XBuz7l47vXVdXk-qhOzA-hW_8,8179
5
+ wafer/api_client.py,sha256=i_Az2b2llC3DSW8yOL-BKqa7LSKuxOr8hSN40s-oQXY,6313
6
+ wafer/auth.py,sha256=dwss_se5P-FFc9IN38q4kh_dBrA6k-CguDBkivgcdj0,14003
7
+ wafer/autotuner.py,sha256=41WYP41pTDvMijv2h42vm89bcHtDMJXObDlWmn6xpFU,44416
8
+ wafer/billing.py,sha256=hEEwtrtIsbPQ3lLJNcyTLMsapUbcuvcVW_e9_0SxzVo,7199
9
+ wafer/cli.py,sha256=vboIOEGLWrNUejSWfO0bcQ0IJOAR6Inva7r7PeYb6jI,277592
10
+ wafer/cli_instructions.py,sha256=bziUKDNDAXABVMvKPLEMXm-hFSD2TcFSh-FKRYa949k,4693
11
+ wafer/config.py,sha256=h5Eo9_yfWqWGoPNdVQikI9GoZVUeysunSYiixf1mKcw,3411
12
+ wafer/corpus.py,sha256=B7xHNP_ssGbkL0DpXeXisycm_SxrLv5s4oss735GRWI,22567
13
+ wafer/evaluate.py,sha256=HMFQD-uwC6Wky1t_0JxYZaoHWgLaTBkjxOxgpZVnGrc,190519
14
+ wafer/global_config.py,sha256=fhaR_RU3ufMksDmOohH1OLeQ0JT0SDW1hEip_zaP75k,11345
15
+ wafer/gpu_run.py,sha256=TwqXy72T7f2I7e6n5WWod3xgxCPnDhU0BgLsB4CUoQY,9716
16
+ wafer/inference.py,sha256=tZCO5i05FKY27ewis3CSBHFBeFbXY3xwj0DSjdoMY9s,4314
17
+ wafer/kernel_scope.py,sha256=hKCwCIVZWl5xFdoA5G9kPucdG9O0jw9Zgyso-mc6aZo,20801
18
+ wafer/ncu_analyze.py,sha256=f7yJayhmEjXn18g6MpxtQoN5_WW_kq4Qyxa1hd0tC74,24638
19
+ wafer/nsys_analyze.py,sha256=4BV6vSTZy7jLzeAxdKJp6QceYy6t9SWGSnjDV8RqkcI,36129
20
+ wafer/nsys_profile.py,sha256=QFBl8pkr8r4uRNdNUO9gY-obj9slqpOgVYFZ_sXu6Nw,15478
21
+ wafer/output.py,sha256=8jw5ifvIMK8ldyBMGW4NhrKvJPl66TV2Y2fJ5Tlhh1I,8293
22
+ wafer/problems.py,sha256=ce2sy10A1nnNUG3VGsseTS8jL7LZsku4dE8zVf9JHQ4,11296
23
+ wafer/rocprof_compute.py,sha256=n_yOGZaFbOXna_ghhmYWXeyUoSabgH4KkjlYq38DlHo,19888
24
+ wafer/rocprof_sdk.py,sha256=0Q7Ye6dUfa1anFZbqKc21rItgqva8V8VIZoSB7wqbmA,10085
25
+ wafer/rocprof_systems.py,sha256=4IWbMcbYk1x_8iS7P3FC_u5sgH6EXADCtR2lV9id80M,18629
26
+ wafer/ssh_keys.py,sha256=MxiHlSm6wuDUFzkOQtx5K7OIbx_a6bXxE-m8OpwLx98,8130
27
+ wafer/target_lock.py,sha256=SDKhNzv2N7gsphGflcNni9FE5YYuAMuEthngAJEo4Gs,7809
28
+ wafer/targets.py,sha256=9r-iRWoKSH5cQl1LcamaX-T7cNVOg99ngIm_hlRk-qU,26922
29
+ wafer/targets_ops.py,sha256=jN1oIBx0mutxRNE9xpIc7SaBxPkVmOyus2eqn0kEKNI,21475
30
+ wafer/trace_compare.py,sha256=IBVSGI8u5A10haDzL4eQ0R24fM1G_dd1F3-4iEkG1EQ,6349
31
+ wafer/tracelens.py,sha256=g9ZIeFyNojZn4uTd3skPqIrRiL7aMJOz_-GOd3aiyy4,7998
32
+ wafer/wevin_cli.py,sha256=eo1ETsXIsCftXSG5AxEYYZipNGcXayKyIevs5F6MjXg,26140
33
+ wafer/workspaces.py,sha256=J-TXGwHXSZlzRWCew63KNvk6HLJ-zTSELRgzjryTkMk,35710
34
+ wafer/skills/wafer-guide/SKILL.md,sha256=UDsXCD5Kb-lDParKCTf2WkE3kodVs-rja8XeumSBO5U,3934
35
+ wafer/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ wafer/templates/ask_docs.py,sha256=15t1Aa4WBMwMox8XmFdzyosOZfBLMdXyaxo3GDb7nTE,2254
37
+ wafer/templates/optimize_kernel.py,sha256=4-MaKm_C9BQHQEllrNLLYkcdhJpcj6D-8zbJ4FdLUEY,2444
38
+ wafer/templates/optimize_kernelbench.py,sha256=T3co9Y9eSLWDrZG66gwQVFMdnGVoyUQos-TxnMMBLL8,3747
39
+ wafer/templates/trace_analyze.py,sha256=B7CiRlsokERzBjLL-k49kGjpU2zlJZqzTE05xbRS1WI,2878
40
+ wafer/tests/test_eval_cli_parity.py,sha256=SGmaj2NGBZ7GdDF53bXsECvQbV21iHZw8YeL_MJOLk0,7206
41
+ wafer_cli-0.2.25.dist-info/METADATA,sha256=sJEMfe-FTEqIj_Ij9gYek8BMB3_MD1vbMvJ9VhK8Qow,2799
42
+ wafer_cli-0.2.25.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
43
+ wafer_cli-0.2.25.dist-info/entry_points.txt,sha256=WqB7hB__WhtPY8y1cO2sZiUz7fCq6Ik-usAigpeFvWE,41
44
+ wafer_cli-0.2.25.dist-info/top_level.txt,sha256=2MK1IVMWfpLL8BZCQ3E9aG6L6L666gSA_teYlwan4fs,6
45
+ wafer_cli-0.2.25.dist-info/RECORD,,
@@ -1,16 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: wafer-cli
3
- Version: 0.2.23
4
- Summary: CLI tool for running commands on remote GPUs and GPU kernel optimization agent
5
- Requires-Python: >=3.11
6
- Requires-Dist: typer>=0.12.0
7
- Requires-Dist: trio>=0.24.0
8
- Requires-Dist: trio-asyncio>=0.15.0
9
- Requires-Dist: wafer-core>=0.1.0
10
- Requires-Dist: perfetto>=0.16.0
11
- Requires-Dist: posthog>=3.0.0
12
- Provides-Extra: dev
13
- Requires-Dist: pytest>=8.0.0; extra == "dev"
14
- Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
15
- Requires-Dist: diff-cover>=8.0.0; extra == "dev"
16
- Requires-Dist: ruff>=0.4.0; extra == "dev"
@@ -1,41 +0,0 @@
1
- wafer/GUIDE.md,sha256=G6P4aFZslEXiHmVjtTB3_OIpGK5d1tSiqxtawASVUZg,3588
2
- wafer/__init__.py,sha256=kBM_ONCpU6UUMBOH8Tmg4A88sNFnbaD59o61cJs-uYM,90
3
- wafer/analytics.py,sha256=qLY6Z16usVHFD8TCv7XBuz7l47vXVdXk-qhOzA-hW_8,8179
4
- wafer/api_client.py,sha256=i_Az2b2llC3DSW8yOL-BKqa7LSKuxOr8hSN40s-oQXY,6313
5
- wafer/auth.py,sha256=dwss_se5P-FFc9IN38q4kh_dBrA6k-CguDBkivgcdj0,14003
6
- wafer/autotuner.py,sha256=41WYP41pTDvMijv2h42vm89bcHtDMJXObDlWmn6xpFU,44416
7
- wafer/billing.py,sha256=jbLB2lI4_9f2KD8uEFDi_ixLlowe5hasC0TIZJyIXRg,7163
8
- wafer/cli.py,sha256=j4ODOVT_r-kyc21YOI8Yl8bkiZMGuqDpXRs7CvpNaek,261443
9
- wafer/config.py,sha256=h5Eo9_yfWqWGoPNdVQikI9GoZVUeysunSYiixf1mKcw,3411
10
- wafer/corpus.py,sha256=oQegXA43MuyRvYxOsWhmqeP5vMb5IKFHOvM-1RcahPA,22301
11
- wafer/evaluate.py,sha256=SxxhiPkO6aDdfktRzJXpbWMVmIGn_gw-o5C6Zwj2zRc,190930
12
- wafer/global_config.py,sha256=fhaR_RU3ufMksDmOohH1OLeQ0JT0SDW1hEip_zaP75k,11345
13
- wafer/gpu_run.py,sha256=TwqXy72T7f2I7e6n5WWod3xgxCPnDhU0BgLsB4CUoQY,9716
14
- wafer/inference.py,sha256=tZCO5i05FKY27ewis3CSBHFBeFbXY3xwj0DSjdoMY9s,4314
15
- wafer/kernel_scope.py,sha256=YtnxknAChkJoeU_vIdxiqWsAITGBeabp9OGIK-X32i0,20796
16
- wafer/ncu_analyze.py,sha256=rAWzKQRZEY6E_CL3gAWUaW3uZ4kvQVZskVCPDpsFJuE,24633
17
- wafer/nsys_analyze.py,sha256=AhNcjPaapB0QCbqiHRXvyy-ccjevvVwEyxes84D28JU,36124
18
- wafer/nsys_profile.py,sha256=QFBl8pkr8r4uRNdNUO9gY-obj9slqpOgVYFZ_sXu6Nw,15478
19
- wafer/output.py,sha256=8jw5ifvIMK8ldyBMGW4NhrKvJPl66TV2Y2fJ5Tlhh1I,8293
20
- wafer/problems.py,sha256=ce2sy10A1nnNUG3VGsseTS8jL7LZsku4dE8zVf9JHQ4,11296
21
- wafer/rocprof_compute.py,sha256=n_yOGZaFbOXna_ghhmYWXeyUoSabgH4KkjlYq38DlHo,19888
22
- wafer/rocprof_sdk.py,sha256=0Q7Ye6dUfa1anFZbqKc21rItgqva8V8VIZoSB7wqbmA,10085
23
- wafer/rocprof_systems.py,sha256=4IWbMcbYk1x_8iS7P3FC_u5sgH6EXADCtR2lV9id80M,18629
24
- wafer/ssh_keys.py,sha256=9kSdhV_dg9T6pQu2JmNQptarkkwGtN9rLyRkI1bW4i4,8094
25
- wafer/target_lock.py,sha256=SDKhNzv2N7gsphGflcNni9FE5YYuAMuEthngAJEo4Gs,7809
26
- wafer/targets.py,sha256=9r-iRWoKSH5cQl1LcamaX-T7cNVOg99ngIm_hlRk-qU,26922
27
- wafer/targets_ops.py,sha256=jN1oIBx0mutxRNE9xpIc7SaBxPkVmOyus2eqn0kEKNI,21475
28
- wafer/tracelens.py,sha256=g9ZIeFyNojZn4uTd3skPqIrRiL7aMJOz_-GOd3aiyy4,7998
29
- wafer/wevin_cli.py,sha256=Nuk7zTCiJrnpmYtdg5Hu0NbzONCqs54xtON6K7AVB9U,23189
30
- wafer/workspaces.py,sha256=iUdioK7kA3z_gOTMNVDn9Q87c6qpkdXF4bOhJWkUPg8,32375
31
- wafer/skills/wafer-guide/SKILL.md,sha256=KWetJw2TVTbz11_nzqazqOJWWRlbHRFShs4sOoreiWo,3255
32
- wafer/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- wafer/templates/ask_docs.py,sha256=Lxs-faz9v5m4Qa4NjF2X_lE8KwM9ES9MNJkxo7ep56o,2256
34
- wafer/templates/optimize_kernel.py,sha256=OvZgN5tm_OymO3lK8Dr0VO48e-5PfNVIIoACrPxpmqk,2446
35
- wafer/templates/optimize_kernelbench.py,sha256=aoOA13zWEl89r6QW03xF9NKxQ7j4mWe9rwua6-mlr4Y,4780
36
- wafer/templates/trace_analyze.py,sha256=XE1VqzVkIUsZbXF8EzQdDYgg-AZEYAOFpr6B_vnRELc,2880
37
- wafer_cli-0.2.23.dist-info/METADATA,sha256=LS8QcHjtver7DSzO75TAfJWH2H7gNswXzAp7Av4_OCU,560
38
- wafer_cli-0.2.23.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
39
- wafer_cli-0.2.23.dist-info/entry_points.txt,sha256=WqB7hB__WhtPY8y1cO2sZiUz7fCq6Ik-usAigpeFvWE,41
40
- wafer_cli-0.2.23.dist-info/top_level.txt,sha256=2MK1IVMWfpLL8BZCQ3E9aG6L6L666gSA_teYlwan4fs,6
41
- wafer_cli-0.2.23.dist-info/RECORD,,