@hasna/instructions 0.5.6 → 0.6.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/README.md +89 -21
- package/dist/chunks/apply-sfzja1f3.js +22 -0
- package/dist/chunks/apply-ynfn1av7.js +23 -0
- package/dist/chunks/index-1hpwskwd.js +12702 -0
- package/dist/chunks/index-35z65jsa.js +198 -0
- package/dist/chunks/index-85n5wnd8.js +625 -0
- package/dist/chunks/index-9p9gn7gh.js +627 -0
- package/dist/chunks/index-axhwg61p.js +523 -0
- package/dist/chunks/index-bsan4c16.js +48 -0
- package/dist/chunks/index-e9epbsvs.js +521 -0
- package/dist/chunks/index-ma2xmp6c.js +14 -0
- package/dist/chunks/index-nnwp92tk.js +19 -0
- package/dist/chunks/index-pkscjnj5.js +118 -0
- package/dist/chunks/index-v7dkb384.js +7248 -0
- package/dist/chunks/local-0d8qrc92.js +693 -0
- package/dist/chunks/local-a9nen65z.js +694 -0
- package/dist/chunks/package-manager-guard-x70xrwk2.js +391 -0
- package/dist/chunks/redact-hnq4sc4r.js +16 -0
- package/dist/chunks/sync-m46fc257.js +33 -0
- package/dist/chunks/sync-vy1yjvs6.js +34 -0
- package/dist/chunks/template-02wjvv05.js +16 -0
- package/dist/chunks/template-ke972qqe.js +16 -0
- package/dist/cli/index.js +775 -14212
- package/dist/data/config-store.d.ts +63 -34
- package/dist/data/config-store.d.ts.map +1 -1
- package/dist/db/database.d.ts +3 -5
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/local.d.ts +38 -0
- package/dist/db/local.d.ts.map +1 -0
- package/dist/generated/storage-kit/backend.d.ts +4 -4
- package/dist/generated/storage-kit/backend.d.ts.map +1 -1
- package/dist/generated/storage-kit/index.d.ts +1 -1
- package/dist/generated/storage-kit/index.d.ts.map +1 -1
- package/dist/generated/storage-kit/migrations.d.ts +21 -0
- package/dist/generated/storage-kit/migrations.d.ts.map +1 -1
- package/dist/generated/storage-kit/pool.d.ts +2 -5
- package/dist/generated/storage-kit/pool.d.ts.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13030 -10744
- package/dist/lib/app-home.d.ts +9 -0
- package/dist/lib/app-home.d.ts.map +1 -1
- package/dist/lib/client-types.d.ts +130 -0
- package/dist/lib/client-types.d.ts.map +1 -0
- package/dist/lib/ids.d.ts +4 -0
- package/dist/lib/ids.d.ts.map +1 -0
- package/dist/lib/instruction-graph.d.ts.map +1 -1
- package/dist/lib/local-opt-in.d.ts +82 -0
- package/dist/lib/local-opt-in.d.ts.map +1 -0
- package/dist/lib/project-context.d.ts +14 -14
- package/dist/lib/project-context.d.ts.map +1 -1
- package/dist/lib/project-dashboard-standard.d.ts +1 -1
- package/dist/lib/project-dashboard-standard.d.ts.map +1 -1
- package/dist/lib/session-render-state.d.ts +9 -0
- package/dist/lib/session-render-state.d.ts.map +1 -1
- package/dist/lib/session-render.d.ts +3 -0
- package/dist/lib/session-render.d.ts.map +1 -1
- package/dist/lib/transport-resolver.d.ts +80 -0
- package/dist/lib/transport-resolver.d.ts.map +1 -0
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +76 -8232
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/sdk/index.d.ts +22 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +1042 -0
- package/dist/sdk/resolve.d.ts +82 -0
- package/dist/sdk/resolve.d.ts.map +1 -0
- package/dist/sdk/v1.generated.d.ts +288 -0
- package/dist/sdk/v1.generated.d.ts.map +1 -0
- package/dist/server/cloud.d.ts.map +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +7327 -7242
- package/dist/status.d.ts +12 -2
- package/dist/status.d.ts.map +1 -1
- package/package.json +20 -16
- package/dashboard/README.md +0 -37
- package/dist/cli/add-duplicate-target.test.d.ts +0 -2
- package/dist/cli/add-duplicate-target.test.d.ts.map +0 -1
- package/dist/cli/add-reference-update.test.d.ts +0 -2
- package/dist/cli/add-reference-update.test.d.ts.map +0 -1
- package/dist/cli/apply-unchanged-snapshot-bloat.test.d.ts +0 -2
- package/dist/cli/apply-unchanged-snapshot-bloat.test.d.ts.map +0 -1
- package/dist/cli/doctor-reference-duplicates.test.d.ts +0 -2
- package/dist/cli/doctor-reference-duplicates.test.d.ts.map +0 -1
- package/dist/cli/output.test.d.ts +0 -2
- package/dist/cli/output.test.d.ts.map +0 -1
- package/dist/cli/profile-binding.test.d.ts +0 -2
- package/dist/cli/profile-binding.test.d.ts.map +0 -1
- package/dist/cli/profile-reads.test.d.ts +0 -2
- package/dist/cli/profile-reads.test.d.ts.map +0 -1
- package/dist/cli/profile-update.test.d.ts +0 -2
- package/dist/cli/profile-update.test.d.ts.map +0 -1
- package/dist/cli/project-context.test.d.ts +0 -2
- package/dist/cli/project-context.test.d.ts.map +0 -1
- package/dist/cli/raw-store-root.test.d.ts +0 -2
- package/dist/cli/raw-store-root.test.d.ts.map +0 -1
- package/dist/cli/session-apply-managed-input-bound.test.d.ts +0 -2
- package/dist/cli/session-apply-managed-input-bound.test.d.ts.map +0 -1
- package/dist/cli/session.test.d.ts +0 -2
- package/dist/cli/session.test.d.ts.map +0 -1
- package/dist/cli/station-profile.test.d.ts +0 -2
- package/dist/cli/station-profile.test.d.ts.map +0 -1
- package/dist/data/config-store.test.d.ts +0 -2
- package/dist/data/config-store.test.d.ts.map +0 -1
- package/dist/db/configs.test.d.ts +0 -2
- package/dist/db/configs.test.d.ts.map +0 -1
- package/dist/db/database.test.d.ts +0 -2
- package/dist/db/database.test.d.ts.map +0 -1
- package/dist/db/machines.test.d.ts +0 -2
- package/dist/db/machines.test.d.ts.map +0 -1
- package/dist/db/profile-assets.test.d.ts +0 -2
- package/dist/db/profile-assets.test.d.ts.map +0 -1
- package/dist/db/profile-config-bindings.test.d.ts +0 -2
- package/dist/db/profile-config-bindings.test.d.ts.map +0 -1
- package/dist/db/profiles.test.d.ts +0 -2
- package/dist/db/profiles.test.d.ts.map +0 -1
- package/dist/db/snapshots.test.d.ts +0 -2
- package/dist/db/snapshots.test.d.ts.map +0 -1
- package/dist/lib/app-home.test.d.ts +0 -2
- package/dist/lib/app-home.test.d.ts.map +0 -1
- package/dist/lib/apply-batch.test.d.ts +0 -2
- package/dist/lib/apply-batch.test.d.ts.map +0 -1
- package/dist/lib/apply-dry-run-verdict.test.d.ts +0 -2
- package/dist/lib/apply-dry-run-verdict.test.d.ts.map +0 -1
- package/dist/lib/apply-secret-placeholder-guard.test.d.ts +0 -2
- package/dist/lib/apply-secret-placeholder-guard.test.d.ts.map +0 -1
- package/dist/lib/apply-text-format-credential-guard.test.d.ts +0 -2
- package/dist/lib/apply-text-format-credential-guard.test.d.ts.map +0 -1
- package/dist/lib/apply.test.d.ts +0 -2
- package/dist/lib/apply.test.d.ts.map +0 -1
- package/dist/lib/asset-plan.test.d.ts +0 -2
- package/dist/lib/asset-plan.test.d.ts.map +0 -1
- package/dist/lib/codewith-shared-todos-storage-standard.test.d.ts +0 -2
- package/dist/lib/codewith-shared-todos-storage-standard.test.d.ts.map +0 -1
- package/dist/lib/compact-output.test.d.ts +0 -2
- package/dist/lib/compact-output.test.d.ts.map +0 -1
- package/dist/lib/config-target-identity.test.d.ts +0 -2
- package/dist/lib/config-target-identity.test.d.ts.map +0 -1
- package/dist/lib/cursor-authority.test.d.ts +0 -2
- package/dist/lib/cursor-authority.test.d.ts.map +0 -1
- package/dist/lib/dangerous-operation-guard-standard.test.d.ts +0 -2
- package/dist/lib/dangerous-operation-guard-standard.test.d.ts.map +0 -1
- package/dist/lib/diff-redaction.test.d.ts +0 -2
- package/dist/lib/diff-redaction.test.d.ts.map +0 -1
- package/dist/lib/export-import.test.d.ts +0 -2
- package/dist/lib/export-import.test.d.ts.map +0 -1
- package/dist/lib/global-agent-rules-render-integration.test.d.ts +0 -2
- package/dist/lib/global-agent-rules-render-integration.test.d.ts.map +0 -1
- package/dist/lib/global-agent-rules-standard.test.d.ts +0 -2
- package/dist/lib/global-agent-rules-standard.test.d.ts.map +0 -1
- package/dist/lib/global-agent-rules-stored-content.test.d.ts +0 -2
- package/dist/lib/global-agent-rules-stored-content.test.d.ts.map +0 -1
- package/dist/lib/global-source-coverage.test.d.ts +0 -2
- package/dist/lib/global-source-coverage.test.d.ts.map +0 -1
- package/dist/lib/instruction-graph-apply.test.d.ts +0 -2
- package/dist/lib/instruction-graph-apply.test.d.ts.map +0 -1
- package/dist/lib/instruction-graph.test.d.ts +0 -2
- package/dist/lib/instruction-graph.test.d.ts.map +0 -1
- package/dist/lib/machine.test.d.ts +0 -2
- package/dist/lib/machine.test.d.ts.map +0 -1
- package/dist/lib/managed-skill-runtimes.test.d.ts +0 -2
- package/dist/lib/managed-skill-runtimes.test.d.ts.map +0 -1
- package/dist/lib/package-manager-guard.test.d.ts +0 -2
- package/dist/lib/package-manager-guard.test.d.ts.map +0 -1
- package/dist/lib/project-context-prepared-file.test.d.ts +0 -2
- package/dist/lib/project-context-prepared-file.test.d.ts.map +0 -1
- package/dist/lib/project-context.test.d.ts +0 -2
- package/dist/lib/project-context.test.d.ts.map +0 -1
- package/dist/lib/project-dashboard-standard.test.d.ts +0 -2
- package/dist/lib/project-dashboard-standard.test.d.ts.map +0 -1
- package/dist/lib/provider-assets-adapters.test.d.ts +0 -2
- package/dist/lib/provider-assets-adapters.test.d.ts.map +0 -1
- package/dist/lib/provider-context.test.d.ts +0 -2
- package/dist/lib/provider-context.test.d.ts.map +0 -1
- package/dist/lib/provider-version-adapters.test.d.ts +0 -2
- package/dist/lib/provider-version-adapters.test.d.ts.map +0 -1
- package/dist/lib/redact.test.d.ts +0 -2
- package/dist/lib/redact.test.d.ts.map +0 -1
- package/dist/lib/retired-storage-mode.d.ts +0 -8
- package/dist/lib/retired-storage-mode.d.ts.map +0 -1
- package/dist/lib/session-apply.test.d.ts +0 -2
- package/dist/lib/session-apply.test.d.ts.map +0 -1
- package/dist/lib/session-authority.test.d.ts +0 -2
- package/dist/lib/session-authority.test.d.ts.map +0 -1
- package/dist/lib/session-render-managed-output-bound.test.d.ts +0 -2
- package/dist/lib/session-render-managed-output-bound.test.d.ts.map +0 -1
- package/dist/lib/session-render-ownership.test.d.ts +0 -2
- package/dist/lib/session-render-ownership.test.d.ts.map +0 -1
- package/dist/lib/session-render-rule-currency-floor.test.d.ts +0 -2
- package/dist/lib/session-render-rule-currency-floor.test.d.ts.map +0 -1
- package/dist/lib/session-render-silent-source-drop.test.d.ts +0 -2
- package/dist/lib/session-render-silent-source-drop.test.d.ts.map +0 -1
- package/dist/lib/session-render-state.test.d.ts +0 -2
- package/dist/lib/session-render-state.test.d.ts.map +0 -1
- package/dist/lib/session-render.test.d.ts +0 -2
- package/dist/lib/session-render.test.d.ts.map +0 -1
- package/dist/lib/station-profile.test.d.ts +0 -2
- package/dist/lib/station-profile.test.d.ts.map +0 -1
- package/dist/lib/sync-dir.test.d.ts +0 -2
- package/dist/lib/sync-dir.test.d.ts.map +0 -1
- package/dist/lib/sync-dry-run-unchanged.test.d.ts +0 -2
- package/dist/lib/sync-dry-run-unchanged.test.d.ts.map +0 -1
- package/dist/lib/sync-known.test.d.ts +0 -2
- package/dist/lib/sync-known.test.d.ts.map +0 -1
- package/dist/lib/sync.test.d.ts +0 -2
- package/dist/lib/sync.test.d.ts.map +0 -1
- package/dist/lib/template.test.d.ts +0 -2
- package/dist/lib/template.test.d.ts.map +0 -1
- package/dist/lib/transforms.test.d.ts +0 -2
- package/dist/lib/transforms.test.d.ts.map +0 -1
- package/dist/mcp/create-config-target-guard.test.d.ts +0 -2
- package/dist/mcp/create-config-target-guard.test.d.ts.map +0 -1
- package/dist/mcp/early-args.test.d.ts +0 -2
- package/dist/mcp/early-args.test.d.ts.map +0 -1
- package/dist/mcp/http.test.d.ts +0 -2
- package/dist/mcp/http.test.d.ts.map +0 -1
- package/dist/mcp/mcp.test.d.ts +0 -2
- package/dist/mcp/mcp.test.d.ts.map +0 -1
- package/dist/server/cloud-auth.test.d.ts +0 -2
- package/dist/server/cloud-auth.test.d.ts.map +0 -1
- package/dist/server/cloud.test.d.ts +0 -2
- package/dist/server/cloud.test.d.ts.map +0 -1
- package/dist/server/early-args.test.d.ts +0 -2
- package/dist/server/early-args.test.d.ts.map +0 -1
- package/dist/server/profile-contract.test.d.ts +0 -2
- package/dist/server/profile-contract.test.d.ts.map +0 -1
- package/dist/status.test.d.ts +0 -2
- package/dist/status.test.d.ts.map +0 -1
- package/dist/storage/cloud-store.test.d.ts +0 -2
- package/dist/storage/cloud-store.test.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -124,7 +124,8 @@ Surfaces:
|
|
|
124
124
|
- `GET /openapi.json`, `GET /v1/openapi.json` → the OpenAPI 3.1 document the SDK
|
|
125
125
|
is generated from.
|
|
126
126
|
- `/v1/*` — versioned cloud API (configs, profiles, snapshots, stats).
|
|
127
|
-
- `/api/*` — the local
|
|
127
|
+
- No `/api/*` — the former local REST surface is not mounted (the removed
|
|
128
|
+
bundled dashboard was its only consumer).
|
|
128
129
|
|
|
129
130
|
### Server data backend (postgresql)
|
|
130
131
|
|
|
@@ -144,25 +145,72 @@ contracts issue-key --app instructions --scopes 'instructions:*'
|
|
|
144
145
|
|
|
145
146
|
Env: `HASNA_INSTRUCTIONS_DATABASE_URL` (DSN) and
|
|
146
147
|
`HASNA_INSTRUCTIONS_API_SIGNING_KEY` (HMAC signing secret; `HASNA_API_SIGNING_KEY`
|
|
147
|
-
and `API_KEY_SIGNING_SECRET` are also accepted). Client apps
|
|
148
|
-
|
|
148
|
+
and `API_KEY_SIGNING_SECRET` are also accepted). Client apps never carry a DSN —
|
|
149
|
+
they resolve `HASNA_INSTRUCTIONS_API_KEY` (or the Keychain / credentials-file
|
|
150
|
+
tiers) through the one `@hasna/contracts` client resolver, and the authority
|
|
151
|
+
defaults to the fleet gateway `https://api.hasna.com/instructions`.
|
|
149
152
|
|
|
150
153
|
## SDK
|
|
151
154
|
|
|
152
|
-
`@hasna/instructions
|
|
153
|
-
|
|
154
|
-
(`
|
|
155
|
+
The importable module ships INSIDE `@hasna/instructions` at the `./sdk` export
|
|
156
|
+
(one package per app — there is no split `@hasna/instructions-sdk`). It is a
|
|
157
|
+
self-contained bundle (node builtins only; the `@hasna/contracts` resolver is
|
|
158
|
+
inlined at build time). The versioned `InstructionsV1Client` is generated from
|
|
159
|
+
the serve OpenAPI document (`bun run generate:sdk` → `src/sdk/v1.generated.ts`).
|
|
155
160
|
|
|
156
|
-
|
|
161
|
+
```typescript
|
|
162
|
+
import { createInstructionsV1ClientFromEnv } from "@hasna/instructions/sdk";
|
|
163
|
+
|
|
164
|
+
const client = createInstructionsV1ClientFromEnv(); // Keychain -> disk -> HASNA_INSTRUCTIONS_API_KEY
|
|
165
|
+
const { configs = [] } = await client.listConfigs({ category: "rules" });
|
|
166
|
+
```
|
|
157
167
|
|
|
158
|
-
|
|
159
|
-
|
|
168
|
+
`createInstructionsV1ClientFromEnv` resolves the credential through the same
|
|
169
|
+
`@hasna/contracts` chain as the CLI and the MCP server — fresh on every
|
|
170
|
+
request, so a rotated key heals a long-lived client without rebuilding it.
|
|
171
|
+
`resolveInstructionsSdkTransport(options)` reports WHICH tier supplied the
|
|
172
|
+
credential (never the value). An explicit `baseUrl` requires an explicit
|
|
173
|
+
`apiKey` (hasna/apps#1794): the SDK never attaches the machine's fleet key to
|
|
174
|
+
an authority the caller chose itself. No credential anywhere throws; there is
|
|
175
|
+
no local mode and no unauthenticated client on this surface.
|
|
176
|
+
|
|
177
|
+
## Client transports
|
|
160
178
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
179
|
+
Every CLI command, MCP tool, and SDK method resolves its credential and service
|
|
180
|
+
authority through the ONE client resolver in `@hasna/contracts`
|
|
181
|
+
(`hasna/apps#1720`) — the package owns no second chain. The tiers, fresh per
|
|
182
|
+
call:
|
|
183
|
+
|
|
184
|
+
| Tier | Credential | Authority |
|
|
185
|
+
|---|---|---|
|
|
186
|
+
| 1 — argument | `--api-key` / `--profile` | explicit `baseUrl` (SDK only) |
|
|
187
|
+
| 2 — env pointer | `HASNA_INSTRUCTIONS_API_KEY_OVERRIDE`, `HASNA_PROFILE`, `HASNA_INSTRUCTIONS_API_KEY_REF` | — |
|
|
188
|
+
| 3 — macOS Keychain | `hasna.credentials.instructions.api-key` (account `HASNA_STATION` → `hostname -s` → `$USER`) | `hasna.credentials.instructions.api-url` |
|
|
189
|
+
| 4 — disk | `~/.hasna/instructions/config/credentials` (owner-only 0400/0600; `HASNA_HOME` / `HASNA_CONFIG_HOME` move the root) | same file's `HASNA_INSTRUCTIONS_API_URL` |
|
|
190
|
+
| 5 — env | `HASNA_INSTRUCTIONS_API_KEY` | `HASNA_INSTRUCTIONS_API_URL` |
|
|
191
|
+
|
|
192
|
+
With a credential resolved and nothing configuring the authority, the default is
|
|
193
|
+
the fleet gateway `https://api.hasna.com/instructions`. The unprefixed
|
|
194
|
+
`INSTRUCTIONS_API_URL` / `INSTRUCTIONS_API_KEY` names are accepted for one
|
|
195
|
+
release as silent aliases one rung below the canonical `HASNA_INSTRUCTIONS_*`
|
|
196
|
+
names.
|
|
197
|
+
|
|
198
|
+
The two transports behind `ConfigStore`:
|
|
199
|
+
|
|
200
|
+
- **api** — HTTP `/v1` through the shared authenticated transport
|
|
201
|
+
(`CloudConfigStore`). Runs fail loud with no credential: non-zero exit naming
|
|
202
|
+
the tiers consulted, no SQLite fallback, no local-fallback event.
|
|
203
|
+
- **local** — on-box SQLite (`LocalConfigStore`), **opt-in only**:
|
|
204
|
+
`HASNA_INSTRUCTIONS_LOCAL=1`, honoured only when the environment configures
|
|
205
|
+
no authority and no credential. Every local run says `local mode` once on
|
|
206
|
+
stderr. The SQLite half is loaded through a single dynamic import and is
|
|
207
|
+
bundled as a separate chunk, so `dist/cli/index.js` and `dist/mcp/index.js`
|
|
208
|
+
ship with zero `bun:sqlite` references and a hosted run never loads it.
|
|
209
|
+
|
|
210
|
+
Retired locations (`~/.hasna/fleet-env`, `~/.hasna/cloud`, `~/.config/hasna`,
|
|
211
|
+
`$XDG_CONFIG_HOME`, a `~/.instructions/config.json` key store) are inputs
|
|
212
|
+
nowhere, and no `*_MODE` / `*_STORAGE_MODE` switch selects anything — the
|
|
213
|
+
transport is decided by what resolves, never by a mode word.
|
|
166
214
|
|
|
167
215
|
Clients never hold a database DSN. The raw Postgres connection is a server-only
|
|
168
216
|
concern (`instructions-serve`), selected by `HASNA_INSTRUCTIONS_DATABASE_URL`.
|
|
@@ -170,7 +218,7 @@ concern (`instructions-serve`), selected by `HASNA_INSTRUCTIONS_DATABASE_URL`.
|
|
|
170
218
|
## Data Directory
|
|
171
219
|
|
|
172
220
|
Local data (the SQLite store and backups) lives under the configs store home,
|
|
173
|
-
resolved
|
|
221
|
+
resolved by the in-package resolver. The legacy `~/.hasna/instructions/` default
|
|
174
222
|
(with the `HASNA_CONFIGS_HOME` exact-app override) stays the effective store
|
|
175
223
|
home until the store has actually been migrated to the XDG config home
|
|
176
224
|
(`~/.config/hasna/configs` on Linux; `~/Library/Application
|
|
@@ -217,6 +265,28 @@ manifests for drift, refuses unmanaged file conflicts unless `--force` is
|
|
|
217
265
|
passed, removes stale managed mirrors only when safe, and writes local snapshots
|
|
218
266
|
before mutating managed files.
|
|
219
267
|
|
|
268
|
+
Grok Build and Devin CLI can render global instructions into an explicitly
|
|
269
|
+
selected native home. Pass Grok's `GROK_HOME` directory or Devin's resolved user
|
|
270
|
+
config directory as `--target-home`; the renderer writes a flattened `AGENTS.md`
|
|
271
|
+
and its ownership manifest there. Devin's target is the `devin` config directory,
|
|
272
|
+
not its parent `XDG_CONFIG_HOME` or its credential-data directory.
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
instructions session plan --tool grok --profile work \
|
|
276
|
+
--target-home "$GROK_HOME" --identity-export ./instructions.json --json
|
|
277
|
+
instructions session apply --tool devin --profile work \
|
|
278
|
+
--target-home /absolute/isolated/config/devin --identity-export ./instructions.json
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
An explicit `--project-root` keeps the project renderer: Grok writes repository
|
|
282
|
+
`AGENTS.md`; Devin writes `.devin/rules/*.md`. Without either explicit target,
|
|
283
|
+
these providers remain blocked. Compiled native profiles select the
|
|
284
|
+
`native-profile` capability (Grok 1.0.13+, Devin 3000.10.21+); conditional bindings
|
|
285
|
+
require an explicit supported fallback because global `AGENTS.md` is always on.
|
|
286
|
+
The existing conflict, drift, symlink and snapshot checks also apply to native homes.
|
|
287
|
+
See [Devin global rules](https://docs.devin.ai/cli/extensibility/rules) and
|
|
288
|
+
[Grok settings](https://docs.x.ai/build/settings) for native home configuration.
|
|
289
|
+
|
|
220
290
|
### Session renderer ownership
|
|
221
291
|
|
|
222
292
|
Anything the session renderer writes is off limits to `instructions apply` and
|
|
@@ -344,12 +414,9 @@ These profiles resolve machine variables like `{{WORKSPACE_ROOT}}`,
|
|
|
344
414
|
`{{BUN_BIN_DIR}}`, `{{BUN_PATH}}`, and `{{PATH_PREFIX}}`, so synced configs can be
|
|
345
415
|
portable across Linux and macOS arm64 machines.
|
|
346
416
|
|
|
347
|
-
They also include project
|
|
417
|
+
They also include the project channel variable used by agent-managed project
|
|
348
418
|
workflows:
|
|
349
419
|
|
|
350
|
-
- `{{PROJECT_DASHBOARD_DIR}}` -> `.hasna/project`
|
|
351
|
-
- `{{PROJECT_DASHBOARD_RENDER_MANIFEST}}` -> `.hasna/project/dashboard/render.json`
|
|
352
|
-
- `{{PROJECT_DASHBOARD_SNAPSHOTS_DIR}}` -> `.hasna/project/dashboard/snapshots`
|
|
353
420
|
- `{{PROJECT_CHANNEL_PREFIX}}` -> `""` (no prefix; the channel is the normalized project slug)
|
|
354
421
|
|
|
355
422
|
Existing profiles can be migrated in place without deleting or recreating them:
|
|
@@ -361,8 +428,9 @@ instructions profile update linux-arm64 \
|
|
|
361
428
|
```
|
|
362
429
|
|
|
363
430
|
`instructions init` and `bun run seed` seed the
|
|
364
|
-
`agent-managed-project-dashboard-standard` reference. It documents the
|
|
365
|
-
|
|
431
|
+
`agent-managed-project-dashboard-standard` reference. It documents the canonical
|
|
432
|
+
per-workspace store layout (`~/.hasna/projects/workspaces/<workspace_id>/` — the
|
|
433
|
+
only project-layout convention), `projects dashboard *` commands, provider panel
|
|
366
434
|
commands, normalized project-slug channel naming, durable todos/goal workflow,
|
|
367
435
|
and the rule that dashboards must show ids/statuses/evidence refs instead of raw
|
|
368
436
|
private documents or secrets.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
applyConfig,
|
|
4
|
+
applyConfigs,
|
|
5
|
+
applyConfigsWithReport,
|
|
6
|
+
expandPath,
|
|
7
|
+
getConfigHome,
|
|
8
|
+
normalizeTargetPath,
|
|
9
|
+
previewConfigs
|
|
10
|
+
} from "./index-e9epbsvs.js";
|
|
11
|
+
import"./index-1hpwskwd.js";
|
|
12
|
+
import"./index-pkscjnj5.js";
|
|
13
|
+
import"./index-bsan4c16.js";
|
|
14
|
+
export {
|
|
15
|
+
previewConfigs,
|
|
16
|
+
normalizeTargetPath,
|
|
17
|
+
getConfigHome,
|
|
18
|
+
expandPath,
|
|
19
|
+
applyConfigsWithReport,
|
|
20
|
+
applyConfigs,
|
|
21
|
+
applyConfig
|
|
22
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
applyConfig,
|
|
4
|
+
applyConfigs,
|
|
5
|
+
applyConfigsWithReport,
|
|
6
|
+
expandPath,
|
|
7
|
+
getConfigHome,
|
|
8
|
+
normalizeTargetPath,
|
|
9
|
+
previewConfigs
|
|
10
|
+
} from "./index-axhwg61p.js";
|
|
11
|
+
import"./index-v7dkb384.js";
|
|
12
|
+
import"./index-35z65jsa.js";
|
|
13
|
+
import"./index-pkscjnj5.js";
|
|
14
|
+
import"./index-nnwp92tk.js";
|
|
15
|
+
export {
|
|
16
|
+
previewConfigs,
|
|
17
|
+
normalizeTargetPath,
|
|
18
|
+
getConfigHome,
|
|
19
|
+
expandPath,
|
|
20
|
+
applyConfigsWithReport,
|
|
21
|
+
applyConfigs,
|
|
22
|
+
applyConfig
|
|
23
|
+
};
|