namel3ss 0.1.0a0__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 (157) hide show
  1. namel3ss/__init__.py +4 -0
  2. namel3ss/ast/__init__.py +5 -0
  3. namel3ss/ast/agents.py +13 -0
  4. namel3ss/ast/ai.py +23 -0
  5. namel3ss/ast/base.py +10 -0
  6. namel3ss/ast/expressions.py +55 -0
  7. namel3ss/ast/nodes.py +86 -0
  8. namel3ss/ast/pages.py +43 -0
  9. namel3ss/ast/program.py +22 -0
  10. namel3ss/ast/records.py +27 -0
  11. namel3ss/ast/statements.py +107 -0
  12. namel3ss/ast/tool.py +11 -0
  13. namel3ss/cli/__init__.py +2 -0
  14. namel3ss/cli/actions_mode.py +39 -0
  15. namel3ss/cli/app_loader.py +22 -0
  16. namel3ss/cli/commands/action.py +27 -0
  17. namel3ss/cli/commands/run.py +43 -0
  18. namel3ss/cli/commands/ui.py +26 -0
  19. namel3ss/cli/commands/validate.py +23 -0
  20. namel3ss/cli/format_mode.py +30 -0
  21. namel3ss/cli/io/json_io.py +19 -0
  22. namel3ss/cli/io/read_source.py +16 -0
  23. namel3ss/cli/json_io.py +21 -0
  24. namel3ss/cli/lint_mode.py +29 -0
  25. namel3ss/cli/main.py +135 -0
  26. namel3ss/cli/new_mode.py +146 -0
  27. namel3ss/cli/runner.py +28 -0
  28. namel3ss/cli/studio_mode.py +22 -0
  29. namel3ss/cli/ui_mode.py +14 -0
  30. namel3ss/config/__init__.py +4 -0
  31. namel3ss/config/dotenv.py +33 -0
  32. namel3ss/config/loader.py +83 -0
  33. namel3ss/config/model.py +49 -0
  34. namel3ss/errors/__init__.py +2 -0
  35. namel3ss/errors/base.py +34 -0
  36. namel3ss/errors/render.py +22 -0
  37. namel3ss/format/__init__.py +3 -0
  38. namel3ss/format/formatter.py +18 -0
  39. namel3ss/format/rules.py +97 -0
  40. namel3ss/ir/__init__.py +3 -0
  41. namel3ss/ir/lowering/__init__.py +4 -0
  42. namel3ss/ir/lowering/agents.py +42 -0
  43. namel3ss/ir/lowering/ai.py +45 -0
  44. namel3ss/ir/lowering/expressions.py +49 -0
  45. namel3ss/ir/lowering/flow.py +21 -0
  46. namel3ss/ir/lowering/pages.py +48 -0
  47. namel3ss/ir/lowering/program.py +34 -0
  48. namel3ss/ir/lowering/records.py +25 -0
  49. namel3ss/ir/lowering/statements.py +122 -0
  50. namel3ss/ir/lowering/tools.py +16 -0
  51. namel3ss/ir/model/__init__.py +50 -0
  52. namel3ss/ir/model/agents.py +33 -0
  53. namel3ss/ir/model/ai.py +31 -0
  54. namel3ss/ir/model/base.py +20 -0
  55. namel3ss/ir/model/expressions.py +50 -0
  56. namel3ss/ir/model/pages.py +43 -0
  57. namel3ss/ir/model/program.py +28 -0
  58. namel3ss/ir/model/statements.py +76 -0
  59. namel3ss/ir/model/tools.py +11 -0
  60. namel3ss/ir/nodes.py +88 -0
  61. namel3ss/lexer/__init__.py +2 -0
  62. namel3ss/lexer/lexer.py +152 -0
  63. namel3ss/lexer/tokens.py +98 -0
  64. namel3ss/lint/__init__.py +4 -0
  65. namel3ss/lint/engine.py +125 -0
  66. namel3ss/lint/semantic.py +45 -0
  67. namel3ss/lint/text_scan.py +70 -0
  68. namel3ss/lint/types.py +22 -0
  69. namel3ss/parser/__init__.py +3 -0
  70. namel3ss/parser/agent.py +78 -0
  71. namel3ss/parser/ai.py +113 -0
  72. namel3ss/parser/constraints.py +37 -0
  73. namel3ss/parser/core.py +166 -0
  74. namel3ss/parser/expressions.py +105 -0
  75. namel3ss/parser/flow.py +37 -0
  76. namel3ss/parser/pages.py +76 -0
  77. namel3ss/parser/program.py +45 -0
  78. namel3ss/parser/records.py +66 -0
  79. namel3ss/parser/statements/__init__.py +27 -0
  80. namel3ss/parser/statements/control_flow.py +116 -0
  81. namel3ss/parser/statements/core.py +66 -0
  82. namel3ss/parser/statements/data.py +17 -0
  83. namel3ss/parser/statements/letset.py +22 -0
  84. namel3ss/parser/statements.py +1 -0
  85. namel3ss/parser/tokens.py +35 -0
  86. namel3ss/parser/tool.py +29 -0
  87. namel3ss/runtime/__init__.py +3 -0
  88. namel3ss/runtime/ai/http/client.py +24 -0
  89. namel3ss/runtime/ai/mock_provider.py +5 -0
  90. namel3ss/runtime/ai/provider.py +29 -0
  91. namel3ss/runtime/ai/providers/__init__.py +18 -0
  92. namel3ss/runtime/ai/providers/_shared/errors.py +20 -0
  93. namel3ss/runtime/ai/providers/_shared/parse.py +18 -0
  94. namel3ss/runtime/ai/providers/anthropic.py +55 -0
  95. namel3ss/runtime/ai/providers/gemini.py +50 -0
  96. namel3ss/runtime/ai/providers/mistral.py +51 -0
  97. namel3ss/runtime/ai/providers/mock.py +23 -0
  98. namel3ss/runtime/ai/providers/ollama.py +39 -0
  99. namel3ss/runtime/ai/providers/openai.py +55 -0
  100. namel3ss/runtime/ai/providers/registry.py +38 -0
  101. namel3ss/runtime/ai/trace.py +18 -0
  102. namel3ss/runtime/executor/__init__.py +3 -0
  103. namel3ss/runtime/executor/agents.py +91 -0
  104. namel3ss/runtime/executor/ai_runner.py +90 -0
  105. namel3ss/runtime/executor/api.py +54 -0
  106. namel3ss/runtime/executor/assign.py +40 -0
  107. namel3ss/runtime/executor/context.py +31 -0
  108. namel3ss/runtime/executor/executor.py +77 -0
  109. namel3ss/runtime/executor/expr_eval.py +110 -0
  110. namel3ss/runtime/executor/records_ops.py +64 -0
  111. namel3ss/runtime/executor/result.py +13 -0
  112. namel3ss/runtime/executor/signals.py +6 -0
  113. namel3ss/runtime/executor/statements.py +99 -0
  114. namel3ss/runtime/memory/manager.py +52 -0
  115. namel3ss/runtime/memory/profile.py +17 -0
  116. namel3ss/runtime/memory/semantic.py +20 -0
  117. namel3ss/runtime/memory/short_term.py +18 -0
  118. namel3ss/runtime/records/service.py +105 -0
  119. namel3ss/runtime/store/__init__.py +2 -0
  120. namel3ss/runtime/store/memory_store.py +62 -0
  121. namel3ss/runtime/tools/registry.py +13 -0
  122. namel3ss/runtime/ui/__init__.py +2 -0
  123. namel3ss/runtime/ui/actions.py +124 -0
  124. namel3ss/runtime/validators/__init__.py +2 -0
  125. namel3ss/runtime/validators/constraints.py +126 -0
  126. namel3ss/schema/__init__.py +2 -0
  127. namel3ss/schema/records.py +52 -0
  128. namel3ss/studio/__init__.py +4 -0
  129. namel3ss/studio/api.py +115 -0
  130. namel3ss/studio/edit/__init__.py +3 -0
  131. namel3ss/studio/edit/ops.py +80 -0
  132. namel3ss/studio/edit/selectors.py +74 -0
  133. namel3ss/studio/edit/transform.py +39 -0
  134. namel3ss/studio/server.py +175 -0
  135. namel3ss/studio/session.py +11 -0
  136. namel3ss/studio/web/app.js +248 -0
  137. namel3ss/studio/web/index.html +44 -0
  138. namel3ss/studio/web/styles.css +42 -0
  139. namel3ss/templates/__init__.py +3 -0
  140. namel3ss/templates/__pycache__/__init__.cpython-312.pyc +0 -0
  141. namel3ss/templates/ai_assistant/.gitignore +1 -0
  142. namel3ss/templates/ai_assistant/README.md +10 -0
  143. namel3ss/templates/ai_assistant/app.ai +30 -0
  144. namel3ss/templates/crud/.gitignore +1 -0
  145. namel3ss/templates/crud/README.md +10 -0
  146. namel3ss/templates/crud/app.ai +26 -0
  147. namel3ss/templates/multi_agent/.gitignore +1 -0
  148. namel3ss/templates/multi_agent/README.md +10 -0
  149. namel3ss/templates/multi_agent/app.ai +43 -0
  150. namel3ss/ui/__init__.py +2 -0
  151. namel3ss/ui/manifest.py +220 -0
  152. namel3ss/utils/__init__.py +2 -0
  153. namel3ss-0.1.0a0.dist-info/METADATA +123 -0
  154. namel3ss-0.1.0a0.dist-info/RECORD +157 -0
  155. namel3ss-0.1.0a0.dist-info/WHEEL +5 -0
  156. namel3ss-0.1.0a0.dist-info/entry_points.txt +2 -0
  157. namel3ss-0.1.0a0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,220 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Dict, List, Optional
4
+
5
+ from namel3ss.errors.base import Namel3ssError
6
+ from namel3ss.ir import nodes as ir
7
+ from namel3ss.runtime.store.memory_store import MemoryStore
8
+ from namel3ss.schema import records as schema
9
+
10
+
11
+ def build_manifest(program: ir.Program, *, state: dict | None = None, store: MemoryStore | None = None) -> dict:
12
+ record_map: Dict[str, schema.RecordSchema] = {rec.name: rec for rec in program.records}
13
+ pages = []
14
+ actions: Dict[str, dict] = {}
15
+ state = state or {}
16
+ for page in program.pages:
17
+ page_slug = _slugify(page.name)
18
+ elements = []
19
+ for idx, item in enumerate(page.items):
20
+ element, action_entry = _page_item_to_manifest(item, record_map, page.name, page_slug, idx, store)
21
+ elements.append(element)
22
+ if action_entry:
23
+ actions[action_entry["id"]] = action_entry
24
+ pages.append(
25
+ {
26
+ "name": page.name,
27
+ "slug": page_slug,
28
+ "elements": elements,
29
+ }
30
+ )
31
+ return {"pages": pages, "actions": actions}
32
+
33
+
34
+ def _page_item_to_manifest(
35
+ item: ir.PageItem,
36
+ record_map: Dict[str, schema.RecordSchema],
37
+ page_name: str,
38
+ page_slug: str,
39
+ index: int,
40
+ store: MemoryStore | None,
41
+ ) -> tuple[dict, dict | None]:
42
+ if isinstance(item, ir.TitleItem):
43
+ element_id = _title_element_id(page_slug, index)
44
+ return (
45
+ {
46
+ "type": "title",
47
+ "value": item.value,
48
+ "element_id": element_id,
49
+ "page": page_name,
50
+ "page_slug": page_slug,
51
+ "index": index,
52
+ "line": item.line,
53
+ "column": item.column,
54
+ },
55
+ None,
56
+ )
57
+ if isinstance(item, ir.TextItem):
58
+ element_id = _text_element_id(page_slug, index)
59
+ return (
60
+ {
61
+ "type": "text",
62
+ "value": item.value,
63
+ "element_id": element_id,
64
+ "page": page_name,
65
+ "page_slug": page_slug,
66
+ "index": index,
67
+ "line": item.line,
68
+ "column": item.column,
69
+ },
70
+ None,
71
+ )
72
+ if isinstance(item, ir.FormItem):
73
+ record = _require_record(item.record_name, record_map, item)
74
+ action_id = _form_action_id(page_name, item.record_name)
75
+ return (
76
+ {
77
+ "type": "form",
78
+ "element_id": _form_element_id(page_slug, index),
79
+ "id": action_id,
80
+ "action_id": action_id,
81
+ "record": record.name,
82
+ "fields": [_field_to_manifest(f) for f in record.fields],
83
+ "page": page_name,
84
+ "page_slug": page_slug,
85
+ "index": index,
86
+ "line": item.line,
87
+ "column": item.column,
88
+ },
89
+ {"id": action_id, "type": "submit_form", "record": record.name},
90
+ )
91
+ if isinstance(item, ir.TableItem):
92
+ record = _require_record(item.record_name, record_map, item)
93
+ table_id = _table_id(page_name, item.record_name)
94
+ rows = []
95
+ if store is not None:
96
+ rows = store.list_records(record)[:20]
97
+ return (
98
+ {
99
+ "type": "table",
100
+ "id": table_id,
101
+ "record": record.name,
102
+ "columns": [{"name": f.name, "type": f.type_name} for f in record.fields],
103
+ "rows": rows,
104
+ "element_id": _table_element_id(page_slug, index),
105
+ "page": page_name,
106
+ "page_slug": page_slug,
107
+ "index": index,
108
+ "line": item.line,
109
+ "column": item.column,
110
+ },
111
+ None,
112
+ )
113
+ if isinstance(item, ir.ButtonItem):
114
+ action_id = _button_action_id(page_name, item.label)
115
+ action_entry = {"id": action_id, "type": "call_flow", "flow": item.flow_name}
116
+ element_id = _button_element_id(page_slug, index)
117
+ element = {
118
+ "type": "button",
119
+ "label": item.label,
120
+ "id": action_id,
121
+ "action_id": action_id,
122
+ "action": {"type": "call_flow", "flow": item.flow_name},
123
+ "element_id": element_id,
124
+ "page": page_name,
125
+ "page_slug": page_slug,
126
+ "index": index,
127
+ "line": item.line,
128
+ "column": item.column,
129
+ }
130
+ return element, action_entry
131
+ raise Namel3ssError(f"Unsupported page item '{type(item)}'")
132
+
133
+
134
+ def _field_to_manifest(field: schema.FieldSchema) -> dict:
135
+ return {
136
+ "name": field.name,
137
+ "type": field.type_name,
138
+ "constraints": _constraints_to_manifest(field.constraint),
139
+ }
140
+
141
+
142
+ def _constraints_to_manifest(constraint: Optional[schema.FieldConstraint]) -> List[dict]:
143
+ if constraint is None:
144
+ return []
145
+ kind = constraint.kind
146
+ if kind == "present":
147
+ return [{"kind": "present"}]
148
+ if kind == "unique":
149
+ return [{"kind": "unique"}]
150
+ if kind == "pattern":
151
+ return [{"kind": "pattern", "value": constraint.pattern}]
152
+ if kind == "gt":
153
+ return [{"kind": "greater_than", "value": _literal_value(constraint.expression)}]
154
+ if kind == "lt":
155
+ return [{"kind": "less_than", "value": _literal_value(constraint.expression)}]
156
+ if kind == "len_min":
157
+ return [{"kind": "length_min", "value": _literal_value(constraint.expression)}]
158
+ if kind == "len_max":
159
+ return [{"kind": "length_max", "value": _literal_value(constraint.expression)}]
160
+ return []
161
+
162
+
163
+ def _literal_value(expr: ir.Expression | None) -> object:
164
+ if isinstance(expr, ir.Literal):
165
+ return expr.value
166
+ if expr is None:
167
+ return None
168
+ raise Namel3ssError("Manifest requires literal constraint values")
169
+
170
+
171
+ def _require_record(name: str, record_map: Dict[str, schema.RecordSchema], item: ir.PageItem) -> schema.RecordSchema:
172
+ if name not in record_map:
173
+ raise Namel3ssError(
174
+ f"Page references unknown record '{name}'",
175
+ line=item.line,
176
+ column=item.column,
177
+ )
178
+ return record_map[name]
179
+
180
+
181
+ def _button_action_id(page_name: str, label: str) -> str:
182
+ return f"page.{_slugify(page_name)}.button.{_slugify(label)}"
183
+
184
+
185
+ def _form_action_id(page_name: str, record_name: str) -> str:
186
+ return f"page.{_slugify(page_name)}.form.{_slugify(record_name)}"
187
+
188
+
189
+ def _table_id(page_name: str, record_name: str) -> str:
190
+ return f"page.{_slugify(page_name)}.table.{_slugify(record_name)}"
191
+
192
+
193
+ def _title_element_id(page_slug: str, index: int) -> str:
194
+ return f"page.{page_slug}.title.{index}"
195
+
196
+
197
+ def _text_element_id(page_slug: str, index: int) -> str:
198
+ return f"page.{page_slug}.text.{index}"
199
+
200
+
201
+ def _button_element_id(page_slug: str, index: int) -> str:
202
+ return f"page.{page_slug}.button_item.{index}"
203
+
204
+
205
+ def _form_element_id(page_slug: str, index: int) -> str:
206
+ return f"page.{page_slug}.form_item.{index}"
207
+
208
+
209
+ def _table_element_id(page_slug: str, index: int) -> str:
210
+ return f"page.{page_slug}.table.{index}"
211
+
212
+
213
+ def _slugify(text: str) -> str:
214
+ import re
215
+
216
+ lowered = text.lower()
217
+ normalized = re.sub(r"[\s_-]+", "_", lowered)
218
+ cleaned = re.sub(r"[^a-z0-9_]", "", normalized)
219
+ collapsed = re.sub(r"_+", "_", cleaned).strip("_")
220
+ return collapsed
@@ -0,0 +1,2 @@
1
+ """Shared utilities for Namel3ss."""
2
+
@@ -0,0 +1,123 @@
1
+ Metadata-Version: 2.4
2
+ Name: namel3ss
3
+ Version: 0.1.0a0
4
+ Summary: Namel3ss is an English-first, AI-native programming language for full-stack apps with inspectable AI.
5
+ Classifier: Programming Language :: Python :: 3
6
+ Classifier: Programming Language :: Python :: 3 :: Only
7
+ Classifier: Intended Audience :: Developers
8
+ Classifier: Development Status :: 3 - Alpha
9
+ Requires-Python: >=3.10
10
+ Description-Content-Type: text/markdown
11
+ Provides-Extra: dev
12
+ Requires-Dist: pytest>=7; extra == "dev"
13
+
14
+ # Namel3ss
15
+
16
+ Namel3ss is an English-first, AI-native programming language for building full-stack applications with deterministic behavior and inspectable AI.
17
+
18
+ ```
19
+ pip install namel3ss
20
+ n3 new crud
21
+ n3 crud/app.ai studio
22
+ ```
23
+
24
+ - [Quickstart](docs/quickstart.md)
25
+ - [Examples](examples/)
26
+ - [Changelog](CHANGELOG.md)
27
+
28
+ ## Installation
29
+ - Requires Python 3.10+
30
+ - `pip install namel3ss`
31
+ - `n3 --help` to confirm the CLI entrypoint after installation.
32
+
33
+ ## Run with Ollama (local)
34
+ - Ensure Ollama is running locally.
35
+ - In your `.ai`, set `provider is "ollama"` and a local model (e.g., `model is "llama3.1"`). If omitted, the provider defaults to `mock`.
36
+ - Optional env overrides: `NAMEL3SS_OLLAMA_HOST`, `NAMEL3SS_OLLAMA_TIMEOUT_SECONDS`.
37
+
38
+ ## Run with Tier-1 providers (cloud)
39
+ - Env-first config (config file optional).
40
+ - OpenAI: export `NAMEL3SS_OPENAI_API_KEY` (optional `NAMEL3SS_OPENAI_BASE_URL`, defaults to `https://api.openai.com`).
41
+ - Anthropic (Claude): export `NAMEL3SS_ANTHROPIC_API_KEY`.
42
+ - Gemini: export `NAMEL3SS_GEMINI_API_KEY`.
43
+ - Mistral: export `NAMEL3SS_MISTRAL_API_KEY`.
44
+
45
+ ### Provider selection example (.ai)
46
+ ```
47
+ ai "assistant":
48
+ provider is "openai"
49
+ model is "gpt-4.1"
50
+ system_prompt is "You are helpful."
51
+
52
+ flow "demo":
53
+ ask ai "assistant" with input: "Hello!" as reply
54
+ return reply
55
+ ```
56
+ Swap `provider`/`model` to `anthropic`+`claude-3`, `gemini`+`gemini-1.5-flash`, `mistral`+`mistral-medium`, or `ollama`+`llama3.1`.
57
+
58
+ ## Now / Next / Later
59
+ - Now: Phase 0 skeleton with docs, CI guardrails, and package scaffolding.
60
+ - Now: Core language contract captured for stable keywords and boundaries.
61
+ - Now: Editable install flow for local development and automation.
62
+ - Next: Lexer tokens, parser entrypoints, and AST node contracts.
63
+ - Next: Deterministic runtime shell with hooks for AI-augmented paths.
64
+ - Next: CLI stub for compile/run loops and ergonomic feedback.
65
+ - Later: IR lowering, optimizer passes, and reproducible execution traces.
66
+ - Later: Deterministic stdlib surface with sandboxed IO and tracing.
67
+ - Later: AI-augmented behaviors (prompted blocks, planners) gated and logged.
68
+ - Later: Performance profiling, caching, and correctness hardening toward v3.
69
+
70
+ ## Getting Started
71
+ - Install editable package: `pip install -e .`
72
+ - Run tests: `python -m pytest -q`
73
+ - Compile check: `python -m compileall src -q`
74
+ - Enforce line limit: `python tools/line_limit_check.py`
75
+
76
+ ## Start a New App
77
+ - Scaffold: `n3 new <template> [project_name]` (templates: `crud`, `ai-assistant`, `multi-agent`)
78
+ - Names default to the template; hyphens become underscores on disk.
79
+ - After scaffolding: `cd <project>` then `n3 app.ai studio` or `n3 app.ai actions`.
80
+
81
+ ## Repository Layout
82
+ - `src/namel3ss/`: language packages (lexer, parser, ast, ir, runtime, cli, errors, utils)
83
+ - `tests/`: pytest suite (add coverage for every feature)
84
+ - `docs/`: roadmap and language contracts
85
+ - `tools/`: repo-level utilities (line-limit enforcement)
86
+ - `.github/workflows/`: CI automation
87
+
88
+ ## Architecture at a Glance
89
+ - Lexer → Parser → AST → IR → Runtime executor pipeline with deterministic defaults and explicit AI boundaries.
90
+ - CLI is file-first (`n3 app.ai ...`) with modes for run, check, lint, format, actions, and studio UI.
91
+ - Runtime supports providers via registry (mock, ollama, openai, anthropic, gemini, mistral) with env-first config and standardized errors.
92
+ - Memory manager handles short-term, semantic, and profile contexts passed into AI calls.
93
+ - Templates (`n3 new ...`) ship starter apps plus `.env`-safe `.gitignore` for secrets.
94
+
95
+ ## Development Notes
96
+ - Each source file must stay under 500 lines.
97
+ - One responsibility per file; if it grows, split into a folder with smaller modules.
98
+ - Prefer folder-first naming (e.g., `parser/core.py`, not `parser_core.py`).
99
+
100
+ ### Migration note (buttons)
101
+ - Buttons are block-only (to avoid grammar chaos):
102
+ ```
103
+ button "Run":
104
+ calls flow "demo"
105
+ ```
106
+ - Old one-line form is rejected:
107
+ ```
108
+ button "Run" calls flow "demo"
109
+ ```
110
+
111
+ ## Docs
112
+ - [IR Reference](docs/ir.md)
113
+ - [Runtime Model](docs/runtime.md)
114
+ - [Error Reference](docs/errors.md)
115
+ - [Quickstart](docs/quickstart.md)
116
+ - [Providers](docs/providers.md)
117
+ - [Roadmap](docs/roadmap.md)
118
+
119
+ ## Troubleshooting (providers)
120
+ - `Provider '<name>' requires <ENV_VAR>` → set the env var for that provider.
121
+ - `Provider '<name>' authentication failed` → check API key/permissions.
122
+ - `Provider '<name>' unreachable` → check network/DNS/firewall or ensure Ollama is running for local.
123
+ - `Provider '<name>' returned an invalid response` → verify model name, upstream status, and try again.
@@ -0,0 +1,157 @@
1
+ namel3ss/__init__.py,sha256=abLg0vEX1huvRlaVqY0eKit9D2BelIXvrvOYaFd9NEE,96
2
+ namel3ss/ast/__init__.py,sha256=rXStujIk6S1n7wjcnhC5WtRyWzifGxQ4s0cOxjGL8ms,120
3
+ namel3ss/ast/agents.py,sha256=Pny-svUZmNQv3gde8NuoDx1R74MWSJNWVnyywHj9z_w,234
4
+ namel3ss/ast/ai.py,sha256=wvqvZWJ1vxssVM0u4xinw3dNy_cJ4dWjlIgSmYT9lyk,422
5
+ namel3ss/ast/base.py,sha256=pHmMv9opzz4HDpTanEfpqNNnfORKW_dSejEHQ6sU_pM,173
6
+ namel3ss/ast/expressions.py,sha256=6DnBa_RUKllDtnkhnNPsobZGhXvrXqVc1CP4CeY8iYg,797
7
+ namel3ss/ast/nodes.py,sha256=Hs3VxG1TTiE5yfutsTUSfBqPjfqalY6cJRLzVgzLl1E,1636
8
+ namel3ss/ast/pages.py,sha256=ly8qrFpUMo3Pjn2Yy9-LJ1TSkauszSpXMAR-6Scq2Ss,554
9
+ namel3ss/ast/program.py,sha256=L3sj80rg7G9mVrOlHxqGFK_yvrRxhk4sM4o9au5a7Fw,401
10
+ namel3ss/ast/records.py,sha256=6HKu-bI9PApxyCmkxk3PExDaGHGItUqTi66kf5mzhR4,566
11
+ namel3ss/ast/statements.py,sha256=cMTzx1V7WorfTNpZ8rNSE_EtvsM3yxO3x1rQwuThFkA,1696
12
+ namel3ss/ast/tool.py,sha256=vXMtnsfSe-V6P2ZU8nalpMQm3izL0eOSCUTQqJKkNWA,169
13
+ namel3ss/cli/__init__.py,sha256=Nv6n4QQvEYzMwHU_lab7OALo0V5Fv-xEP6fZbxeOjuE,44
14
+ namel3ss/cli/actions_mode.py,sha256=LSsKcxVmvUm8QxpEYAHuN0OkdRQhcsnT1LVYSkFUze0,1501
15
+ namel3ss/cli/app_loader.py,sha256=ITySp_Tjqi1xYWDMor6EohfXMfMqxzswBnoL9gsh5iY,756
16
+ namel3ss/cli/format_mode.py,sha256=D8is3ep5etSjXRolyHjJyTRolLpa4zGB_Fw8sG3G7Nk,898
17
+ namel3ss/cli/json_io.py,sha256=GfyEnWi3FX7lGQXseN4zZfUxebfRoqamX3uIpn6ePjk,559
18
+ namel3ss/cli/lint_mode.py,sha256=x6rOI1oPzt-gcclFUDha6qoXV-wALBsdh6L40mAWni8,853
19
+ namel3ss/cli/main.py,sha256=Ti7I1LDtnxT2Z7hbI4keSe3XHs17xbAZWHWjsgDxak8,4878
20
+ namel3ss/cli/new_mode.py,sha256=ihyKvnG_UsmO9ruyOg-ZBHcdoEL0P68kyLwjQj7a4AE,4936
21
+ namel3ss/cli/runner.py,sha256=1wdPmCouXnZxoJOLMYbZcvD14Y64pTiI-BvfMKwsG1Q,1009
22
+ namel3ss/cli/studio_mode.py,sha256=TYVg8lDLT--jl14UVeST-vyyjsljAw--1MHwcbvtEv0,621
23
+ namel3ss/cli/ui_mode.py,sha256=3TCAuSEZLJnNfTL7SZ0XTG9yRAy3e_h_lJMxKHGOefg,532
24
+ namel3ss/cli/commands/action.py,sha256=o6w5ylgyVacNRelVmuy60GggtCRtSbcNVEEzQ_sdnv4,955
25
+ namel3ss/cli/commands/run.py,sha256=iP-dHqvsGjWMgXdYzRvj-RZ23o4NyRetV_Ba1JlHH2I,1516
26
+ namel3ss/cli/commands/ui.py,sha256=AHGVQ7Dxd_6b-Spj3Zu6pgD8a4YmPBcqLTGmLbJgEzA,851
27
+ namel3ss/cli/commands/validate.py,sha256=pKm4-HzGiOt7hTWNFj7ZJLaACW-JMnnD25dh6qdtMiA,614
28
+ namel3ss/cli/io/json_io.py,sha256=aGsNRwAzdCUNM-e9Tl73Rccqx77ELMJ0W-BZVYa7yFs,513
29
+ namel3ss/cli/io/read_source.py,sha256=a3QKPVwc1uq04FXxMdCBOPRpbPWJH2celkkuZl5gJQk,468
30
+ namel3ss/config/__init__.py,sha256=FxyMyOOtu0aSi8RYG5wdCff0KaljzU08qM8Svtz8Hyg,161
31
+ namel3ss/config/dotenv.py,sha256=vH6QNmj2cvNnBwzHLv8N98E1ogBIZk9qr7q9-e3thr4,917
32
+ namel3ss/config/loader.py,sha256=ld7yy8qK6vs-eVa16KJ-Pqe5OeyN1RC4qno4PrYJnh8,3136
33
+ namel3ss/config/model.py,sha256=Jm3p08nqK2EnjZZGPUqG0OLPl4R985mJcebSes1gJgA,980
34
+ namel3ss/errors/__init__.py,sha256=s3xDK-hqlhDDxm33OQ5-u9pCAWokZXT66e6tG41_Wdg,39
35
+ namel3ss/errors/base.py,sha256=ZRFXx1gFBXnAYinLam3lcR-hnCidGfqJJgn9PXyCExE,906
36
+ namel3ss/errors/render.py,sha256=dvcOojRmhjGIbDOEyCqyhKv1GFQC2lHbobhYwqR7Wvk,647
37
+ namel3ss/format/__init__.py,sha256=Ske2YabUJ0NsOULTSTu6mdsxbg-3AsBO50oLUXQr80o,81
38
+ namel3ss/format/formatter.py,sha256=BtB6ds_rmWjKoyVs5TCqKMVcBHDQue97g53mY6dAUME,645
39
+ namel3ss/format/rules.py,sha256=KVIFpsGSXhTXDT-xEQaApCUm1U5upgBkr9Oto5BDnW8,2884
40
+ namel3ss/ir/__init__.py,sha256=nwbGZILcOZWZeR8UZa4XTfDWOKgOvmLSqtPIuNS0oQs,100
41
+ namel3ss/ir/nodes.py,sha256=XZZopi-NZiFN_7AaEUl8JWFEYlNTXqEnz2s0Ra88MD4,1365
42
+ namel3ss/ir/lowering/__init__.py,sha256=EjHko9xnqhZfpbGTtRpjGufittNaB7N_-k9cUtt3bgQ,147
43
+ namel3ss/ir/lowering/agents.py,sha256=aTUl9yBbr2p09ARx8WZ2bQgZfaybKx5GA7BSBiU5n8Y,1842
44
+ namel3ss/ir/lowering/ai.py,sha256=yjEsm_VwH17OVW1EC0NGoMjcvRJBXi38QgnkwxY7RGY,1883
45
+ namel3ss/ir/lowering/expressions.py,sha256=ZF8Ttry6Uk3XnFpXJtz1J_qLDxg0lrFyEW5cbvzs18s,1963
46
+ namel3ss/ir/lowering/flow.py,sha256=kXleFwJufP26XeT19c1hwvJzD29Ia8yFO9F1MB6iLGI,658
47
+ namel3ss/ir/lowering/pages.py,sha256=iEV3qwA8fOgAPtH3Y7CS0ax5m6eWeltx3mbHwutBZhA,2162
48
+ namel3ss/ir/lowering/program.py,sha256=ybP5hS4FA2K1niiBQkZbGCns_DraY_NdH2W6mL0Hm20,1331
49
+ namel3ss/ir/lowering/records.py,sha256=s0QjohQIQ70wr-0JPUxcee14HKHW9yaD_KDKsy-S94o,885
50
+ namel3ss/ir/lowering/statements.py,sha256=4_zj68DyjLTA1nYf8Tv1gTFkj4LiaHQbByeRVnLCtDA,4371
51
+ namel3ss/ir/lowering/tools.py,sha256=muaMJBmbZvtG85o_--8zLtBJ7vsoWR5kiAqLY8WTuq8,603
52
+ namel3ss/ir/model/__init__.py,sha256=z66_jYkXT2M4QROpo3xbAsbMquqyh0SlnxrW9lCEfmg,1317
53
+ namel3ss/ir/model/agents.py,sha256=Yn5vyZHPPAvXghf1KtdplTZK2qKtDB81_bIfwQjqVt4,615
54
+ namel3ss/ir/model/ai.py,sha256=I0OvWf7meRE9WDgVw0dqLIW1JqQYvNO4dPwBZw7Cxfc,585
55
+ namel3ss/ir/model/base.py,sha256=A4fD_9f4KgZLOxBCKzY1EAQF13Zy4CqQZRgbZuc_ZsE,264
56
+ namel3ss/ir/model/expressions.py,sha256=Uo7au9bH4n-jgmDgatsmIYU8QVNABLFbBfeM9xQtNHI,738
57
+ namel3ss/ir/model/pages.py,sha256=JbLJc0Jf0n3P3G7x5r-dUyeoZt7Zw7QMfdVGIGmnASM,557
58
+ namel3ss/ir/model/program.py,sha256=OtsH0K_1PO6Yms_WoFkxNELSZFf_HS8yliw55AAujaY,690
59
+ namel3ss/ir/model/statements.py,sha256=4Gya1WYGo_BurWEep_vDzSgwf0X8kwNj12Y1HXyIRWE,1244
60
+ namel3ss/ir/model/tools.py,sha256=72GWEQyeBniS88U4t9G7agpG8_boSH9eozJWA6JqKSk,174
61
+ namel3ss/lexer/__init__.py,sha256=8rTDx7lGH5lGSq6qxEYLQxWi6EWMza2KFLkYTdoOQ2Y,48
62
+ namel3ss/lexer/lexer.py,sha256=yC_ObjmS_szMKaOvKmOeSO2TOi6G_4SDqAdFGpz5dDM,5064
63
+ namel3ss/lexer/tokens.py,sha256=zps8HZGsD8RaNlr7dVjQnU7Ej5IZgi5E30uXlnqZC1g,2317
64
+ namel3ss/lint/__init__.py,sha256=alx9nPtqMqK3O2cYBEYbDb6CA4468_imBrUa9PlqINk,123
65
+ namel3ss/lint/engine.py,sha256=NgYSGpEh0S7QCCOZn6CwgVGSrrNAS2qV0Sz6ZAAy2co,4607
66
+ namel3ss/lint/semantic.py,sha256=u_n3bdLRYRuPD0i7Oj5C52mSIk6no9mtLIObLI1n32g,1846
67
+ namel3ss/lint/text_scan.py,sha256=E5vT2Gi4XUPgnkFsC5FryRExEIrEfv0OHJ9XFaC33-s,2165
68
+ namel3ss/lint/types.py,sha256=oaSbySIs6H0bQXqYu400pRaGarvFx7cb37-bZ6_KBLY,467
69
+ namel3ss/parser/__init__.py,sha256=xzfvzvrLHJ0psi_5Rs6xqZHbOloMBQ3w2BfOmd34NG0,99
70
+ namel3ss/parser/agent.py,sha256=_0pgUsPL3hizf4rAc5TnLALFWdzLllI3EQc5NBSwWEY,4160
71
+ namel3ss/parser/ai.py,sha256=UFeXOvKBse7xBA6gFBUkb7Cmk-3s4Ylw0bVgZyQcsro,5764
72
+ namel3ss/parser/constraints.py,sha256=AZ50KDK5RJrDTTrMAHhvVp1Sxk1eCabeFkzdG95f-yg,1983
73
+ namel3ss/parser/core.py,sha256=7oEpvMn-4I8ixev-gLgZh0tJSb086wlKLITOyuCvE00,4540
74
+ namel3ss/parser/expressions.py,sha256=9VaXHCqmo2mq0tg-OyL-9-mU7bnUQuetAqWikApKDHk,4086
75
+ namel3ss/parser/flow.py,sha256=UEjkzO9acHaa8358m6CFkkxXRdkcSoqEizmapq0FyYE,1365
76
+ namel3ss/parser/pages.py,sha256=IFiBd0xQx3_cCRtsMOu_T_T6dl4Qr1ZmSvBR2WcVY3E,3506
77
+ namel3ss/parser/program.py,sha256=DYM3_N646ZGtuihpWeKQQVTrDXJBRfsqdaquIm350q8,1707
78
+ namel3ss/parser/records.py,sha256=7BvbA2Z6sC5zbG0Q8UwtsjQVRFCtImQSEUWKtByx1DU,2413
79
+ namel3ss/parser/statements.py,sha256=_-4i76tAEtYjZbqzRJaHD-HvxfQAxYJ9l-3JV1MuGqo,60
80
+ namel3ss/parser/tokens.py,sha256=-J3JQqblxbWl27oXmBDW23iI9dehaSjUoklMrYnkHEA,813
81
+ namel3ss/parser/tool.py,sha256=eAYIi-xHu-3IhQLUVF6WordXPS_4NMweieyJ18aBGRk,1286
82
+ namel3ss/parser/statements/__init__.py,sha256=T_sMd3HTPnJqkD8wRpA9JcTCf8L8aNu0F81JfZS3BWE,662
83
+ namel3ss/parser/statements/control_flow.py,sha256=Y6OV2Uz22sL4qUY8mBVzlb00u9ZZCcdYTSgsgzWrRNw,5365
84
+ namel3ss/parser/statements/core.py,sha256=XLIxZ_qytbFTlOsjOuCUZx4tuVV0rFSmHmqWswhVLrM,2427
85
+ namel3ss/parser/statements/data.py,sha256=b7hM3oPYzvCzQ6zxBswhKoqmIVs0-TGkOTwD83wq0bY,652
86
+ namel3ss/parser/statements/letset.py,sha256=grnwN9eNGbGQJKJ2oNoErwJrGVb95tr9YsAMV7Kp1rY,799
87
+ namel3ss/runtime/__init__.py,sha256=qBZSPz5u6Yt04jSTJcjYGzu4gQeikzxDRzR_3_Gd-zk,173
88
+ namel3ss/runtime/ai/mock_provider.py,sha256=o1jKUTX9tBIRtLSEiLu7-Xf_Zta2jJIOzC2H5Ay69Pk,124
89
+ namel3ss/runtime/ai/provider.py,sha256=7DR1geRj6zjWPJFPqsfU2p6ndbxvc8aEeRfi3tKgXaw,612
90
+ namel3ss/runtime/ai/trace.py,sha256=a3ffjqbO-lnRfoY7f8tXwU0E__YhEhWgdrQ6QC4l-9E,348
91
+ namel3ss/runtime/ai/http/client.py,sha256=vMZfBLN_h3eaEqtaYaIUnaDORBKhkJAluRu-T60O00U,1030
92
+ namel3ss/runtime/ai/providers/__init__.py,sha256=EatsX-MdubHzYE4djVNsDElBsCuy2ReaS_kryBPkOb8,673
93
+ namel3ss/runtime/ai/providers/anthropic.py,sha256=ullEsJckhQAvYjK2MaeOUbobqlCH57a6HPYcP02JrmI,2055
94
+ namel3ss/runtime/ai/providers/gemini.py,sha256=NzVPnscZjOHXynt9bl_OROJhF--9GR-h0NEkIgmYeN4,2206
95
+ namel3ss/runtime/ai/providers/mistral.py,sha256=amWBXY__to8EWyRKSACz0Cz5lGMnDJqdFdg84yBERjI,2096
96
+ namel3ss/runtime/ai/providers/mock.py,sha256=yjwAkB0UPpbhoVS_va_WsoD0km9vmJTHR7NmwHYt92s,986
97
+ namel3ss/runtime/ai/providers/ollama.py,sha256=M1XntvSbVJqnugTgvbHPgSimmF7-xvq8yePef0BsI7E,1730
98
+ namel3ss/runtime/ai/providers/openai.py,sha256=LOJ3_tjAIYRGh-Gxe1JLKHpDDwff9_2BLKIuGoAIiiM,2305
99
+ namel3ss/runtime/ai/providers/registry.py,sha256=t6syKjJ7b9kA_Gp2RautGQ-9Dxx7jLmHVgTKJko1uD8,1548
100
+ namel3ss/runtime/ai/providers/_shared/errors.py,sha256=bDYXWtmfCwy_loyWDgZiRxMK83B4ZLKrX9Z9IPAWb8E,874
101
+ namel3ss/runtime/ai/providers/_shared/parse.py,sha256=JwIYsg1QNaIlOzQtZ0MSJ6HjBMRgtVSSSD5fORkRHhQ,609
102
+ namel3ss/runtime/executor/__init__.py,sha256=Ld_pzwWXd5k7-YdqlGThDEJKa1Ezysd2VwTzZerF-ys,187
103
+ namel3ss/runtime/executor/agents.py,sha256=ERH-6-wjFiTcdAQXIozLiHc5nEZGpT32HGXzmYp1074,4019
104
+ namel3ss/runtime/executor/ai_runner.py,sha256=wP8mt83TxrOiocIg0WEm3QlBLla_Mtp7QxJLs9UO9bY,3866
105
+ namel3ss/runtime/executor/api.py,sha256=jfz9WQtfGSW5-HleTMkWA1j7E2X1SfPFmvM1R8BhRDE,1710
106
+ namel3ss/runtime/executor/assign.py,sha256=IJAgA716kKIOB_edIVL8EFoTen4kjDX4dEopFwuUDbE,1455
107
+ namel3ss/runtime/executor/context.py,sha256=N5UM1BjSovJ5j4RQuipCrcHDHeVQN5k-B5mQayzi-os,928
108
+ namel3ss/runtime/executor/executor.py,sha256=XdHWCAT1I2msJgE-AgDYiZDq5d7hOcSEEDroVwy4cj4,3147
109
+ namel3ss/runtime/executor/expr_eval.py,sha256=hhOhl8CI9iGyrDbgpg1dZ4-KIHvR3soWa3JGtcPEF20,4705
110
+ namel3ss/runtime/executor/records_ops.py,sha256=W-FpC4dIaVKGqmBMMuxSkemE9ng8Z6v7RpDRhSg7dT8,2096
111
+ namel3ss/runtime/executor/result.py,sha256=sySbs4lP7GK2psCYU13BX9KwUDTFX8xrtHLlnmGs6ak,275
112
+ namel3ss/runtime/executor/signals.py,sha256=iGuJDYLjf7jCkQ2_BCTJSldbKu6r7M3V3QZ2lUWhUUE,186
113
+ namel3ss/runtime/executor/statements.py,sha256=c3x1fUh0dhJVPqbTpWnQEURfRVPHL_o7apH1X2iOJE4,4068
114
+ namel3ss/runtime/memory/manager.py,sha256=lwtWH1iUu2y0nOet4zvKBKaafzT8P_SjsyTrYZF9r_w,1926
115
+ namel3ss/runtime/memory/profile.py,sha256=oWzNqDbh6PWm8Ogy5ohNw52FHFvL9UPfjZiHg4z9NNU,536
116
+ namel3ss/runtime/memory/semantic.py,sha256=7czQbZAlBtO-2Ao0PJWX0j_Yiabj8Ll3rZPLCkFwmvE,698
117
+ namel3ss/runtime/memory/short_term.py,sha256=nTUdjUHZRiqcPk_sg1Ig8mJyB7-VjsDN7w7rFZDgoXc,517
118
+ namel3ss/runtime/records/service.py,sha256=4Am-jCQWyqVR-so2wesWgzg_ZTbRDL1D7p1yYBP0Kso,3553
119
+ namel3ss/runtime/store/__init__.py,sha256=R6LrY5IpSIdRvNCFO4Xd1zyiQNxtJaj07Re3J0sehiI,38
120
+ namel3ss/runtime/store/memory_store.py,sha256=9btyuVqYXcPNljXaI1DNB5XxisZjZDPG5xTcb0iWctw,2322
121
+ namel3ss/runtime/tools/registry.py,sha256=hoEiGKm1tNP67JTFYj3iAEMeHpEsvLXYUFsMetQf2fg,393
122
+ namel3ss/runtime/ui/__init__.py,sha256=AVw1mBBkQyz1UHnFErw4_XSueZKTV9bO25eFNCub0yQ,29
123
+ namel3ss/runtime/ui/actions.py,sha256=jpfASVhzUTJAW1ZvgbYDj4WHUptW1KXDZAnJD2AnS3w,4057
124
+ namel3ss/runtime/validators/__init__.py,sha256=5Bhe53S1lqFaXF1xFTKcDSMLAIXwxxPZoIwKWlz3U6Q,38
125
+ namel3ss/runtime/validators/constraints.py,sha256=zVyqi3PwuBYhSA8COKwD5ILsgwPIlJMw_e1EjrKbnOA,4827
126
+ namel3ss/schema/__init__.py,sha256=hz6bWwdvIEd2UXs6zXTxfBm-2vU6ooDeD70YsrbBJ2U,48
127
+ namel3ss/schema/records.py,sha256=sdK4BTDa10JSRxpPfVWffqYOKBFFd6tDRI_szABKeuA,1899
128
+ namel3ss/studio/__init__.py,sha256=jogufPm4Ml1ow5Kh6UBRFTAhBRwFNgnEjaemwKp5OZM,267
129
+ namel3ss/studio/api.py,sha256=Cab6Lb-BLKZcHgVGJX8vv4Idw09isV_BMcLfm2xDaNY,4095
130
+ namel3ss/studio/server.py,sha256=2WUvWU8BTrWseNUt6FGcqdSYr_SleoybeqSs7mXa34I,7082
131
+ namel3ss/studio/session.py,sha256=9cfB_-oZRhGC7s1t0f2CVuelJCfYXE0-jrMFGzPLR7Y,277
132
+ namel3ss/studio/edit/__init__.py,sha256=pIMvXkqkuwGT8iJZXmk91CbN-zZQgJJydgZiCUE9sSU,94
133
+ namel3ss/studio/edit/ops.py,sha256=oXE-tJj-rami7oQ5Njm0oiOtOz3d3Iug1B884MhIkp4,3010
134
+ namel3ss/studio/edit/selectors.py,sha256=egWRWB_-bI2X0QwmKMFQQxXjk1L9xdUDcCuMX1FR4GU,2541
135
+ namel3ss/studio/edit/transform.py,sha256=Xb-HR1hA0an7W1kHVZv5xfqX0XbJ3K_ak4viwgFeZxU,1263
136
+ namel3ss/studio/web/app.js,sha256=5jxSarZDJNTHW0WOX44eqVv1BF6yjVmCWQFe-qiBp_c,7700
137
+ namel3ss/studio/web/index.html,sha256=jlIH3oU3_5HQA3KNI4DqDrKSsZaYvt78BonLs3sY-q8,965
138
+ namel3ss/studio/web/styles.css,sha256=qXZBdmVMY4Yu8iY-mcpXfHtXFfQhzbY7JgscbyTa9p4,555
139
+ namel3ss/templates/__init__.py,sha256=h_CzeuQnN4wCyfaZGVoiCTEj31hnK99zJxiSNo1lSJg,52
140
+ namel3ss/templates/__pycache__/__init__.cpython-312.pyc,sha256=FWLMb-SyqHaT00ae0MM6OlpckABriaJd9QEvZo_amHQ,195
141
+ namel3ss/templates/ai_assistant/.gitignore,sha256=aapzz1vDN3p9l_Lo0rt3MZWBXv4iWvfxvm9bkwa74U8,5
142
+ namel3ss/templates/ai_assistant/README.md,sha256=j9nlocZgLxQg9hO9qTEurRNmJyK5o2H5iWNC_l4rWB8,288
143
+ namel3ss/templates/ai_assistant/app.ai,sha256=jCVCd1C7pGy6D_thQTtfTixTFByilF4Tta4zsBeUylA,685
144
+ namel3ss/templates/crud/.gitignore,sha256=aapzz1vDN3p9l_Lo0rt3MZWBXv4iWvfxvm9bkwa74U8,5
145
+ namel3ss/templates/crud/README.md,sha256=v5wojeirosputgg2Rc0Qg8fLs4ZLnUZDw5yHuZ4aucA,247
146
+ namel3ss/templates/crud/app.ai,sha256=QB-U3dqi_3doaT9ETXqunMO9HWcQU10_OK77qaS1H1E,688
147
+ namel3ss/templates/multi_agent/.gitignore,sha256=aapzz1vDN3p9l_Lo0rt3MZWBXv4iWvfxvm9bkwa74U8,5
148
+ namel3ss/templates/multi_agent/README.md,sha256=71vr2ayp89mJa4FdwOu9OCXpVPkDn4oU14hm3OwJgtU,268
149
+ namel3ss/templates/multi_agent/app.ai,sha256=vBFoY6s5lEwOzpzRWbGfy-A6qxDzuzK3kyoDLyuYDoo,1067
150
+ namel3ss/ui/__init__.py,sha256=JERYoO9HOk06fAKiapxFmr532UumnDYYftVAba2t2H8,34
151
+ namel3ss/ui/manifest.py,sha256=fbWFrbt_0OPnL9RF5B4ewQ2eqhdpV1xLBioU05j0NvI,7430
152
+ namel3ss/utils/__init__.py,sha256=dzf-guxQaeOENGb5HaqnU9XqrqF9f6rDPmicYyaNrkA,38
153
+ namel3ss-0.1.0a0.dist-info/METADATA,sha256=MZAMjJEZWawnaKSoQDwpdUi183hGEtq7UDqNn0ixvgU,5055
154
+ namel3ss-0.1.0a0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
155
+ namel3ss-0.1.0a0.dist-info/entry_points.txt,sha256=vSc9Uw5SZ2h7aNB7F3G_TpUAsKzyBwwgAShkrgxO3iQ,46
156
+ namel3ss-0.1.0a0.dist-info/top_level.txt,sha256=Y5iP_vDEi6vy3f2ynprROdBZeIwYUmBDfDjLpT_ik0M,9
157
+ namel3ss-0.1.0a0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (80.9.0)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ n3 = namel3ss.cli.main:main
@@ -0,0 +1 @@
1
+ namel3ss