Skip to content

Commit 3d127f0

Browse files
authored
Fix Markdown linter errors (#1237)
1 parent 08f3af8 commit 3d127f0

File tree

13 files changed

+111
-65
lines changed

13 files changed

+111
-65
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ cd ./toolshed
2323
deno task dev
2424
```
2525

26-
By default the backend will run at http://localhost:8000
26+
By default the backend will run at <http://localhost:8000>
2727

2828
## Running the frontend
2929

@@ -34,8 +34,8 @@ cd ./jumble
3434
deno task dev
3535
```
3636

37-
By default, the frontend will run at http://localhost:5173, and it will point to
38-
a local backend running at http://localhost:8000.
37+
By default, the frontend will run at <http://localhost:5173>, and it will point
38+
to a local backend running at <http://localhost:8000>.
3939

4040
If you are not actively making updates to the backend, you can also point to the
4141
backend running in the cloud, by running the following command:

docs/future-tasks/code-quality-tasks/module-graph-import-issues-report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ import { isOpaqueRef, OpaqueRef } from "./spell.js";
102102

103103
The codebase correctly follows the guideline for module-specific dependencies:
104104

105-
### Good Examples:
105+
### Good Examples
106106

107107
- `packages/llm/deno.json` - Correctly declares `json5` dependency
108108
- `packages/ui/deno.json` - Correctly declares `@shoelace-style/shoelace`

packages/background-charm-service/CLAUDE.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@
1818

1919
### Adding a New Integration
2020

21-
1. Create a new file in `src/integrations/` named after your integration (e.g.,
22-
`myservice.ts`)
23-
2. Implement the `Integration` interface:
21+
- Create a new file in `src/integrations/` named after your integration (e.g.,
22+
`myservice.ts`)
23+
- Implement the `Integration` interface:
2424

2525
```typescript
2626
import { Charm } from "@commontools/charm";
@@ -66,9 +66,9 @@ export class MyServiceIntegration implements Integration {
6666
export default new MyServiceIntegration();
6767
```
6868

69-
3. The integration will be automatically discovered and registered
70-
4. Update deno.json to add shortcut task:
71-
`"myservice": "deno run -A src/cli.ts --integration=myservice"`
69+
- The integration will be automatically discovered and registered
70+
- Update deno.json to add shortcut task:
71+
`"myservice": "deno run -A src/cli.ts --integration=myservice"`
7272

7373
## Code Style Guidelines
7474

packages/background-charm-service/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ This model enables:
8181

8282
Start the service:
8383

84-
```
84+
```sh
8585
TOOLSHED_API_URL=http://localhost:8000 OPERATOR_PASS=your-passphrase deno task start
8686
```
8787

packages/identity/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ Deriving a `PersonaKey` from a `RootKey` performs the following algorithm:
4646
- `i` = SHA-256 hash `i`
4747
- Use `i` as raw ed25519 private key material
4848

49-
```
50-
hash(sign(encode(name)))
49+
```ts
50+
hash(sign(encode(name)));
5151
```
5252

5353
## Browser Support

packages/iframe-sandbox/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ product decisisons during experimentation.
7575
other vector of exfiltration could occur.
7676
- Exposing iframe status to outer content could be considered leaky, though all
7777
content is inlined, not HTTP URLs.
78-
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#error_and_load_event_behavior
78+
<https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#error_and_load_event_behavior>
7979

8080
[Lit]: https://lit.dev/
8181
[CSP]: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP

packages/jumble/integration/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# integration tests:
1+
# integration tests
22

33
1. run toolshed on 8000 (default) - in toolshed: `deno task dev`
44
2. run jumble on 5173 (with toolshed pointing to 8000) - in jumble:
55
`deno task dev-local`
66

7-
# Notes on AI iteration
7+
## Notes on AI iteration
88

99
- we store cached llm responses in these integration tests
1010
- this allows running them with an expected response - assuming the request

packages/seeder/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
"42 charms" project runs a collection of workflows/prompts to create and verify
44
charms.
55

6-
## Setup requirements:
6+
## Setup requirements
77

8-
1. get an openai api key from https://platform.openai.com/api-keys
8+
1. get an openai api key from <https://platform.openai.com/api-keys>
99
2. set it in your environment / toolshed
1010

1111
export OPENAI_API_KEY=sk-proj-...
@@ -47,5 +47,5 @@ You can add new flows to `scenarios.ts`.
4747

4848
## Reading the report
4949

50-
A report will be generated in the `results` directory named `results/blue42.html`.
51-
You can open this in your browser to see the results.
50+
A report will be generated in the `results` directory named
51+
`results/blue42.html`. You can open this in your browser to see the results.

packages/toolshed/README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ to run our system.
99

1010
For a detailed list of endpoints, their documentation, and an interactive API
1111
playground, take a look at the Toolshed API reference playground:
12-
https://toolshed.commontools.dev/reference
12+
<https://toolshed.commontools.dev/reference>
1313

1414
### Philosophy and Structure
1515

@@ -26,7 +26,7 @@ Toolshed is built as a single monolithic [Deno2](https://deno.com/blog/v2.0)
2626

2727
The project follows a structured layout:
2828

29-
```
29+
```sh
3030
toolshed/
3131
├── lib/ # Shared utilities and configuration
3232
├── middlewares/ # Global hono middleware
@@ -50,7 +50,7 @@ dependencies, and set up your environment variables.
5050

5151
To clone the repository, you can run the following command:
5252

53-
```
53+
```sh
5454
git clone git@github.com:commontoolsinc/labs.git
5555
cd labs/toolshed
5656
```
@@ -60,8 +60,8 @@ cd labs/toolshed
6060
#### Deno
6161

6262
Toolshed is build using Deno, so you'll need to install Deno if you want to run
63-
the code locally. Deno has a detailed installation guide
64-
[here](https://deno.land/manual/getting_started/installation).
63+
the code locally. Deno has a
64+
[detailed installation guide](https://deno.land/manual/getting_started/installation).
6565

6666
The fastest path to install on MacOS and Linux is to run the following command:
6767

Lines changed: 71 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,34 @@
11
# Toolshed
22

3-
The Toolshed is a collection of individial HTTP APIs that each perform tasks in specific domains and areas of interest. The spirit of Toolshed is to make space for us to quickly design, build, test, and iterate on discrete functionality within our system.
3+
The Toolshed is a collection of individial HTTP APIs that each perform tasks in
4+
specific domains and areas of interest. The spirit of Toolshed is to make space
5+
for us to quickly design, build, test, and iterate on discrete functionality
6+
within our system.
47

5-
Practically speaking, Toolshed is a monolith Deno2 Hono HTTP API scaffolding where we can quickly prototype new backend HTTP services that power and support user-facing workflows. Additionally we will utilize Deno KV and Deno Queue to build a task queue for running background tasks.
8+
Practically speaking, Toolshed is a monolith Deno 2 Hono HTTP API scaffolding
9+
where we can quickly prototype new backend HTTP services that power and support
10+
user-facing workflows. Additionally we will utilize Deno KV and Deno Queue to
11+
build a task queue for running background tasks.
612

713
The reason we use a monolith is to centralize around a single CI flow, which produces a single binary artifact, which we can sign and distribute for running in several places. For example, this would be able to run locally, in the cloud, in private cloud enclave, or a raspberry pi.
814

915
This provides an easy path for building a feature complete API that's easy to distribute, sign, and run in our confidential compute environments.
1016

11-
# Philosophy
17+
## Philosophy
1218

1319
We are a tiny crew. We don't have the luxury of time and resources, we need to quickly stub out new functionality in the service of creating a product that people love.
1420

1521
Due to our constraints of needing to run inside of a secure private cloud enclave, and our need for remote attestation, we should lean-in to a few clarifying principals.
1622

17-
### Personal computing, not webscale computing.
23+
### Personal computing, not webscale computing
1824

1925
Each user will have their own instance of Toolshed.
2026

2127
That means we don't need to worry about web-scale tradeoffs. (ie scaling a task queue to >100k messages per second)
2228

2329
Instead, we can optimize for individual-user-scale. (ie scaling a task queue to < 100 messages per second)
2430

25-
### Minimize complexity.
31+
### Minimize complexity
2632

2733
**Essential complexity** is inevitable, it is the essence of the problem you're trying to solve. **Accidental complexity** is what creeps in from all of the tech debt and decisions we make.
2834

@@ -34,46 +40,58 @@ Don't be afraid to duplicate code, especially if it frees you from tracking yet-
3440

3541
Practically speaking, I think this mostly means that shared code should be general purpose utility code (reading cookies, dealing with auth, accessing a data store, etc); but avoid importing code from other endpoints/services. Instead, just use HTTP to use the other services.
3642

37-
### Product before protocol.
43+
### Product before protocol
3844

39-
At our stage, the most important thing is that we build a product that people love.
45+
At our stage, the most important thing is that we build a product that people
46+
love.
4047

41-
Stay flexible with how things interact and talk to eachother, but don't make rigid permanent decisions that are difficult to change. We aren't ready to commit to set-in-stone protocols while we're still exploring the product-fit.
48+
Stay flexible with how things interact and talk to eachother, but don't make
49+
rigid permanent decisions that are difficult to change. We aren't ready to
50+
commit to set-in-stone protocols while we're still exploring the product-fit.
4251

43-
Focus on delivering discrete functionality that that helps us unsderstand or support a user-facing usecase.
52+
Focus on delivering discrete functionality that that helps us unsderstand or
53+
support a user-facing usecase.
4454

45-
### Ship first, optimize later.
55+
### Ship first, optimize later
4656

47-
Because we are optimizing for personal computing scale, and focused on the product look/feel, focus on SHIPPING.
57+
Because we are optimizing for personal computing scale, and focused on the
58+
product look/feel, focus on SHIPPING.
4859

49-
Don't be clever. Use boring off-the-shelf technology. Don't worry about optimizing for performance.
60+
Don't be clever. Use boring off-the-shelf technology. Don't worry about
61+
optimizing for performance.
5062

5163
Just ship it.
5264

53-
# Design
65+
## Design
5466

55-
The idea here is that we have a single root API, which only handles ROUTING and LOGGING. Then each individual API will register and mount itself and a distinct URL endpoint.
67+
The idea here is that we have a single root API, which only handles ROUTING and
68+
LOGGING. Then each individual API will register and mount itself and a distinct
69+
URL endpoint.
5670

5771
The URL root prefix is `/api`
5872

5973
For example, here are some potential endpoints we may want:
6074

61-
- /api/profile (queryable user profile knowledge graph)
62-
- /api/ai/llm (planning server)
63-
- /api/ai/img (flux)
64-
- /api/ai/url2text (jina reader)
65-
- /api/ai/transcribe (incredibly fast whisper)
66-
- /api/data (synopsys db proxy)
75+
- `/api/profile` (queryable user profile knowledge graph)
76+
- `/api/ai/llm` (planning server)
77+
- `/api/ai/img` (flux)
78+
- `/api/ai/url2text` (jina reader)
79+
- `/api/ai/transcribe` (incredibly fast whisper)
80+
- `/api/data` (synopsys db proxy)
6781

68-
In the future, it's possible we will want to refactor or completely rewrite an individual endpoint, for example, the `/ai/llm` endpoint could require breaking changes to improve. During such a rewrite, if you are breaking the interface, you should add an additional version path to the URL.
82+
In the future, it's possible we will want to refactor or completely rewrite an
83+
individual endpoint, for example, the `/ai/llm` endpoint could require breaking
84+
changes to improve. During such a rewrite, if you are breaking the interface,
85+
you should add an additional version path to the URL.
6986

7087
`/api/profile/v2/`
7188

72-
This allows us to aggressively pursue new breaking ideas, while also supporting old still-functional API endpoints.
89+
This allows us to aggressively pursue new breaking ideas, while also supporting
90+
old still-functional API endpoints.
7391

74-
# Structure
92+
## Structure
7593

76-
```
94+
```sh
7795
toolshed/
7896
├── lib/
7997
│ ├── configure-open-api.ts # OpenAPI configuration
@@ -106,14 +124,34 @@ toolshed/
106124
└── index.ts # Entry point
107125
```
108126

109-
# Deployment
110-
111-
We still have some unknowns around how, exactly, we want to deploy things into secure enclaves. This is a very handwavy collection of thoughts.
112-
113-
One such option that's been talked about a lot is using kubernetes in conjunction with [Constellation from Edgeless](https://docs.edgeless.systems/constellation). The big downside with Constellation, is that we need to actually run our own kubernetes controlplane, we can't rely on AKS/EKS/GKE. This makes it significantly less attractive to me from a daily operations perspective, as it adds a large amount of complextiy and operational upkeep.
114-
115-
Instead, I think we would be more well suited if we had some sort of custom controlplane that manages quickly spinning up, and monitoring instances of Toolshed. What I mean by this is we can build Toolshed, sign it, then create a bare cloud VM image that contains little more than the toolshed binary. When a new user signs up, and we need to spin up their sandbox/vm, we can schedule the creation of a cloud instance using the latest VM image. When the vm image comes online, it will have everything it needs to support and expose remote attestation. This setup also gives us a straightforward path to exposing metrics from a VM to the cloud orchestrator. Since we can't see inside the vm, we will want to expose some metrics export capability so the orchestrator understands "is the toolshed running?", "is the toolshed performing?", all without ever having to peek inside or see user data.
116-
117-
This is sort of an unclear brain dump as I rush to get this out of my brain, but it's clear to me that this general direction will give us operational clarity and the ability to quickly iterate and improve our infrastructure.
127+
## Deployment
128+
129+
We still have some unknowns around how, exactly, we want to deploy things into
130+
secure enclaves. This is a very handwavy collection of thoughts.
131+
132+
One such option that's been talked about a lot is using kubernetes in
133+
conjunction with [Constellation from
134+
Edgeless](https://docs.edgeless.systems/constellation). The big downside with
135+
Constellation, is that we need to actually run our own kubernetes controlplane,
136+
we can't rely on AKS/EKS/GKE. This makes it significantly less attractive to me
137+
from a daily operations perspective, as it adds a large amount of complextiy and
138+
operational upkeep.
139+
140+
Instead, I think we would be more well suited if we had some sort of custom
141+
controlplane that manages quickly spinning up, and monitoring instances of
142+
Toolshed. What I mean by this is we can build Toolshed, sign it, then create a
143+
bare cloud VM image that contains little more than the toolshed binary. When a
144+
new user signs up, and we need to spin up their sandbox/vm, we can schedule the
145+
creation of a cloud instance using the latest VM image. When the vm image comes
146+
online, it will have everything it needs to support and expose remote
147+
attestation. This setup also gives us a straightforward path to exposing metrics
148+
from a VM to the cloud orchestrator. Since we can't see inside the vm, we will
149+
want to expose some metrics export capability so the orchestrator understands
150+
"is the toolshed running?", "is the toolshed performing?", all without ever
151+
having to peek inside or see user data.
152+
153+
This is sort of an unclear brain dump as I rush to get this out of my brain, but
154+
it's clear to me that this general direction will give us operational clarity
155+
and the ability to quickly iterate and improve our infrastructure.
118156

119157
Kubernetes is a charismatic trap.

0 commit comments

Comments
 (0)