@noir-ai/create 1.13.0 → 1.14.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@noir-ai/create",
3
- "version": "1.13.0",
3
+ "version": "1.14.0-beta.1",
4
4
  "description": "Noir scaffold engine — the idempotent declarative writer, manifest, templates, stack-detect, and migrations that power `noir init`/`create`/`sync`.",
5
5
  "license": "MIT",
6
6
  "author": "agaaaptr",
@@ -46,8 +46,8 @@
46
46
  "templates"
47
47
  ],
48
48
  "dependencies": {
49
- "@noir-ai/core": "1.13.0",
50
- "@noir-ai/adapters": "1.13.0"
49
+ "@noir-ai/adapters": "1.14.0-beta.1",
50
+ "@noir-ai/core": "1.14.0-beta.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "^22.17.0"
@@ -0,0 +1,75 @@
1
+ # .noir/.env — project-scoped configuration for this repo.
2
+ #
3
+ # This file is the recommended home for project-scoped configuration and
4
+ # secrets. Precedence:
5
+ # 1. run profile env run.profiles.<n>.env (per-invocation; merges OVER)
6
+ # 2. .noir/.env <- recommended home for project-scoped configuration
7
+ # 3. real environment CI / container / launchd / shell rc
8
+ # 4. built-in default
9
+ #
10
+ # A real environment variable is a FALLBACK: it applies only to keys this file
11
+ # leaves unset. A machine-global export therefore cannot shadow a value here.
12
+ # Run `noir env` to see which source is winning for each key.
13
+ #
14
+ # Keep this file private: chmod 600 .noir/.env
15
+ # It is gitignored by Noir's managed .gitignore block, and Noir REFUSES to load
16
+ # it if it is tracked by git (a cloned repo could redirect credentials).
17
+ # Never commit it.
18
+ #
19
+ # EVERY LINE BELOW IS COMMENTED OUT. `noir init` created this file at mode 0600
20
+ # with no active value, so it parses to an empty overlay and changes no
21
+ # behaviour. Uncomment only what you enable, and fill in a real value.
22
+ # `.noir/.env.example` carries the same set and stays committable.
23
+ #
24
+ # Full reference: docs/reference/environment.md
25
+
26
+ # --- Integrations -----------------------------------------------------------
27
+ # ClickUp — only if the noir-clickup integration is enabled.
28
+ # CLICKUP_API_TOKEN=pk_00000000000000000000000000000000
29
+ #
30
+ # CLICKUP_TEAM_ID is NOT an env var — Noir never reads it. Workspace binding
31
+ # (team/list/space ids) is config.yml instead:
32
+ # integrations:
33
+ # clickup:
34
+ # teamId: "ABC123" # optional — only for custom task IDs (#ABC-123)
35
+
36
+ # --- Remote embedders (context.embedder.kind: remote) -----------------------
37
+ # The default local embedder (kind: local) needs no key.
38
+ # OPENAI_API_KEY=sk-000000000000000000000000000000000000000000000000
39
+ # VOYAGE_API_KEY=pa-0000000000000000000000000000000000000000000000
40
+ # COHERE_API_KEY=0000000000000000000000000000000000000000
41
+ #
42
+ # Ollama (kind: ollama) reads its base URL from config.yml
43
+ # (context.embedder.baseURL); this variable is the fallback:
44
+ # OLLAMA_BASE_URL=http://localhost:11434
45
+
46
+ # --- Model provider key -----------------------------------------------------
47
+ # There is NO fixed "model key" variable, and setting one is not enough on its
48
+ # own. `apiKeyEnv` is a NAME, not an interpolation: the config stores the
49
+ # variable NAME and Noir reads process.env[<that name>] at call time. Write the
50
+ # bare name — never `${...}` — in .noir/config.yml:
51
+ #
52
+ # model:
53
+ # providers:
54
+ # anthropic:
55
+ # apiKeyEnv: ANTHROPIC_API_KEY # -> reads $ANTHROPIC_API_KEY
56
+ # tiers:
57
+ # default:
58
+ # provider: anthropic
59
+ #
60
+ # Only `run.profiles.<name>.env` interpolates `${VAR}`. With no provider
61
+ # configured the model layer degrades to templates — Noir never makes a silent
62
+ # paid call. `ANTHROPIC_API_KEY` is the conventional example, not a variable
63
+ # Noir looks up on its own:
64
+ # ANTHROPIC_API_KEY=sk-ant-0000000000000000000000000000000000000000000000
65
+
66
+ # --- Run profile selection --------------------------------------------------
67
+ # Selects a `run.profiles.<name>` entry for `noir run`.
68
+ # Precedence: --profile flag > NOIR_PROFILE > run.defaultProfile > host default.
69
+ # NOIR_PROFILE=work
70
+
71
+ # --- Update kill-switches ---------------------------------------------------
72
+ # NOIR_DISABLE_UPDATE_CHECK=1 # suppress the background startup check only
73
+ # NOIR_DISABLE_UPDATES=1 # make `noir update` refuse (exit 2)
74
+
75
+ # See docs/reference/environment.md for every variable Noir reads.
@@ -1,2 +1,8 @@
1
1
  host: {{host}}
2
2
  mode: full
3
+
4
+ # noir:env-pointer
5
+ # This file is safe to commit: it holds no secrets.
6
+ # Project-scoped values and secrets belong in .noir/.env (gitignored, mode
7
+ # 0600). .noir/.env.example documents the full variable set; `noir env`
8
+ # reports which source wins for each key.
@@ -1,11 +1,79 @@
1
- # .noir/.env.example — copy to `.noir/.env` and fill in real values.
2
- # `.noir/.env` is gitignored — NEVER commit real tokens. Real environment
3
- # variables always win over this file (it fills only unset keys).
1
+ # .noir/.env.example — committable documentation of the format.
4
2
  #
5
- # noir-clickup integration (only if you use the noir-clickup skill):
3
+ # This file is a TEMPLATE and is never loaded. Noir reads `.noir/.env`, which
4
+ # `noir init` already created for you at mode 0600 — edit that file and
5
+ # uncomment the entries you need. Keep this example in git so the variable set
6
+ # stays discoverable.
7
+ #
8
+ # ---------------------------------------------------------------------------
9
+ # The block below is the same header `.noir/.env` carries (spec 12.1).
10
+ # ---------------------------------------------------------------------------
11
+ #
12
+ # .noir/.env — project-scoped configuration for this repo.
13
+ #
14
+ # This file is the recommended home for project-scoped configuration and
15
+ # secrets. Precedence:
16
+ # 1. run profile env run.profiles.<n>.env (per-invocation; merges OVER)
17
+ # 2. .noir/.env <- recommended home for project-scoped configuration
18
+ # 3. real environment CI / container / launchd / shell rc
19
+ # 4. built-in default
20
+ #
21
+ # A real environment variable is a FALLBACK: it applies only to keys this file
22
+ # leaves unset. A machine-global export therefore cannot shadow a value here.
23
+ # Run `noir env` to see which source is winning for each key.
24
+ #
25
+ # Keep this file private: chmod 600 .noir/.env
26
+ # It is gitignored by Noir's managed .gitignore block, and Noir REFUSES to load
27
+ # it if it is tracked by git (a cloned repo could redirect credentials).
28
+ # Never commit `.noir/.env`. (THIS file is the committable one.)
29
+
30
+ # --- Integrations -----------------------------------------------------------
31
+ # ClickUp — only if the noir-clickup integration is enabled.
6
32
  # CLICKUP_API_TOKEN=pk_00000000000000000000000000000000
7
33
  #
8
- # CLICKUP_TEAM_ID is NOT an env var — set it as a config.yml key instead:
34
+ # CLICKUP_TEAM_ID is NOT an env var — Noir never reads it. Workspace binding
35
+ # (team/list/space ids) is config.yml instead:
9
36
  # integrations:
10
37
  # clickup:
11
38
  # teamId: "ABC123" # optional — only for custom task IDs (#ABC-123)
39
+
40
+ # --- Remote embedders (context.embedder.kind: remote) -----------------------
41
+ # The default local embedder (kind: local) needs no key.
42
+ # OPENAI_API_KEY=sk-000000000000000000000000000000000000000000000000
43
+ # VOYAGE_API_KEY=pa-0000000000000000000000000000000000000000000000
44
+ # COHERE_API_KEY=0000000000000000000000000000000000000000
45
+ #
46
+ # Ollama (kind: ollama) reads its base URL from config.yml
47
+ # (context.embedder.baseURL); this variable is the fallback:
48
+ # OLLAMA_BASE_URL=http://localhost:11434
49
+
50
+ # --- Model provider key -----------------------------------------------------
51
+ # There is NO fixed "model key" variable, and setting one is not enough on its
52
+ # own. `apiKeyEnv` is a NAME, not an interpolation: the config stores the
53
+ # variable NAME and Noir reads process.env[<that name>] at call time. Write the
54
+ # bare name — never `${...}` — in .noir/config.yml:
55
+ #
56
+ # model:
57
+ # providers:
58
+ # anthropic:
59
+ # apiKeyEnv: ANTHROPIC_API_KEY # -> reads $ANTHROPIC_API_KEY
60
+ # tiers:
61
+ # default:
62
+ # provider: anthropic
63
+ #
64
+ # Only `run.profiles.<name>.env` interpolates `${VAR}`. With no provider
65
+ # configured the model layer degrades to templates — Noir never makes a silent
66
+ # paid call. `ANTHROPIC_API_KEY` is the conventional example, not a variable
67
+ # Noir looks up on its own:
68
+ # ANTHROPIC_API_KEY=sk-ant-0000000000000000000000000000000000000000000000
69
+
70
+ # --- Run profile selection --------------------------------------------------
71
+ # Selects a `run.profiles.<name>` entry for `noir run`.
72
+ # Precedence: --profile flag > NOIR_PROFILE > run.defaultProfile > host default.
73
+ # NOIR_PROFILE=work
74
+
75
+ # --- Update kill-switches ---------------------------------------------------
76
+ # NOIR_DISABLE_UPDATE_CHECK=1 # suppress the background startup check only
77
+ # NOIR_DISABLE_UPDATES=1 # make `noir update` refuse (exit 2)
78
+
79
+ # See docs/reference/environment.md for every variable Noir reads.
@@ -1,8 +1,5 @@
1
1
  /.noir/store/
2
2
  /.noir/handoff/
3
- /.noir/*.sock
4
- /.noir/daemon.pid
5
- /.noir/state/
6
3
  /.noir/.env
7
4
  /.noir/.env.*
8
5
  !/.noir/.env.example
@@ -0,0 +1,57 @@
1
+ # `.noir/` — the Noir project store
2
+
3
+ This directory is the canonical project state — not the host's own files.
4
+ Everything here is either emitted by `noir init` / `noir sync` or written by
5
+ the feature named beside it.
6
+
7
+ ## What exists now
8
+
9
+ | Path | What it is |
10
+ | --- | --- |
11
+ | `project.id` | Canonical project id. It names the store database (`store/<project.id>.db`) — don't regenerate it by hand. |
12
+ | `config.yml` | Your config seed: host, mode, integrations, context / memory / model settings. Yours to edit. |
13
+ | `NOIR.md` | The context brief the host context file `@`-imports. Noir-managed region. |
14
+ | `rules/RULES.md` | The AI working contract the host `@`-imports. Yours to edit. |
15
+ | `.env` | Project-scoped configuration and secrets (mode 0600, gitignored). |
16
+ | `.env.example` | Committable documentation of the same variable set. Never loaded. |
17
+ | `scaffold-version` | Which scaffold version produced this tree — drives `noir init --upgrade`. |
18
+ | `ancestors.json` | Merge base for Noir's managed regions (leave it alone). |
19
+ | `README.md` | This map. |
20
+
21
+ Host-side pointers sit at the repository root, not here: `CLAUDE.md` (claude),
22
+ `AGENTS.md` (agents-md / cursor / opencode) or `GEMINI.md` (gemini), plus that
23
+ host's MCP config (`.mcp.json`, `.gemini/mcp.json`, `.cursor/mcp.json`,
24
+ `opencode.json`). With `--host claude`, `router.md` and `hooks/` (the
25
+ SessionStart contract and its runner) live here too.
26
+
27
+ ## What appears later
28
+
29
+ Nothing below is created eagerly — each directory shows up the first time the
30
+ feature that owns it runs, so an empty project stays empty. `store/`, `handoff/`
31
+ and `transcripts/` hold runtime data and are gitignored; everything else is
32
+ committed.
33
+
34
+ | Directory | Written by | Triggered by |
35
+ | --- | --- | --- |
36
+ | `store/` | The daemon — single-writer SQLite + FTS5 + vectors | the first command that touches the store (`store/<project.id>.db`) |
37
+ | `intake/`, `specs/`, `plans/`, `tasks/`, `clarifications/` | The SDD workflow phases | `noir task new` → `noir task advance` |
38
+ | `decisions/` | The ADR stub written in the document phase | a task landing at `done` |
39
+ | `audit/` | Task gate results, plus integration call logs | `noir task verify`, and the first integration call |
40
+ | `transcripts/` | Raw host output (best effort) | `noir run <prompt>` |
41
+ | `handoff/` | Session handoff prompts | `noir handoff --write` |
42
+
43
+ ## Where to go next
44
+
45
+ - **Configuration** — `.noir/config.yml` holds host, mode, integrations and the
46
+ context / memory / model settings. `noir doctor` reports what is drifted and
47
+ what a re-emit would change.
48
+ - **Environment variables** — put project-scoped values (and secrets) in
49
+ `.noir/.env`; `.noir/.env.example` documents the full set and is the file to
50
+ commit. The file **wins for every key it defines** — a real environment
51
+ variable is only the fallback for keys it leaves unset. There is no
52
+ `VAR=value noir ...` prefix level; for a genuine per-invocation value add a
53
+ `run.profiles.<name>.env` entry and select it with `noir run --profile <name>`.
54
+ `noir env` shows which source wins per key.
55
+ - **The workflow** — `noir task new` starts the spec → plan → implement →
56
+ verify → document lifecycle, `noir status` shows where every task stands, and
57
+ `noir skills list` lists the on-demand skills your host can load.