@hasna/instructions 0.4.6 → 0.4.7
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 +15 -1
- package/dist/cli/index.js +144 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +143 -3
- package/dist/lib/dangerous-operation-guard-standard.d.ts +6 -0
- package/dist/lib/dangerous-operation-guard-standard.d.ts.map +1 -0
- package/dist/lib/dangerous-operation-guard-standard.test.d.ts +2 -0
- package/dist/lib/dangerous-operation-guard-standard.test.d.ts.map +1 -0
- package/dist/lib/session-render.d.ts +1 -1
- package/dist/lib/session-render.d.ts.map +1 -1
- package/dist/lib/sync.d.ts.map +1 -1
- package/dist/mcp/index.js +12 -4
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -157,13 +157,19 @@ Local data is stored in `~/.hasna/configs/` (unchanged, for fleet continuity).
|
|
|
157
157
|
|
|
158
158
|
`instructions session plan` and `instructions session apply` render
|
|
159
159
|
OpenIdentities and instruction sources into provider-native files for Claude,
|
|
160
|
-
Codex, Cursor, OpenCode, Codewith, aicopilot, and Google Antigravity.
|
|
160
|
+
Codex, Cursor, OpenCode, Codewith, Qwen, aicopilot, and Google Antigravity.
|
|
161
161
|
The old Google agent target is removed; Antigravity is the only Google coding
|
|
162
162
|
agent render target. Antigravity workspace rules are rendered to
|
|
163
163
|
`.agents/rules/*.md`; its current global rules and MCP files use Google's
|
|
164
164
|
legacy-named `~/.gemini/GEMINI.md` and `~/.gemini/config/mcp_config.json`
|
|
165
165
|
paths but remain owned by the `antigravity` target.
|
|
166
166
|
|
|
167
|
+
Qwen Code session rendering writes `QWEN.md` instructional context with
|
|
168
|
+
`QWEN_HOME` pointing at the rendered profile home. Known config sync also
|
|
169
|
+
tracks Qwen Code `QWEN.md` and `settings.json` files at `~/.qwen/...` and
|
|
170
|
+
project `QWEN.md` / `.qwen/settings.json`, so native hook settings can be
|
|
171
|
+
managed without claiming session-rendered context is hard enforcement.
|
|
172
|
+
|
|
167
173
|
```bash
|
|
168
174
|
instructions session plan \
|
|
169
175
|
--tool codewith \
|
|
@@ -193,6 +199,14 @@ push safety, no brittle hardcoding when source-of-truth or reusable abstractions
|
|
|
193
199
|
exist, autonomous repair, Hasna CLI source-of-truth usage, conversation surface
|
|
194
200
|
routing, and unbudgeted Codewith goals unless a user asks for budgets.
|
|
195
201
|
|
|
202
|
+
They also seed `dangerous-operation-guard-standard`, the managed station01 guard
|
|
203
|
+
source for risky shell commands, edits, git operations, package installs, and
|
|
204
|
+
secret-adjacent access. The guard excludes Gemini CLI, requires Codewith/Codex
|
|
205
|
+
`PreToolUse` to hard-deny or inject context rather than ask for approval, uses
|
|
206
|
+
`PermissionRequest` for Codewith/Codex approvals, records that Qwen `QWEN.md`
|
|
207
|
+
is policy context only, and records native hook or wrapper/plugin fallback
|
|
208
|
+
expectations for Claude, Qwen, OpenCode, Cursor, and Antigravity.
|
|
209
|
+
|
|
196
210
|
## Machine-aware Profiles
|
|
197
211
|
|
|
198
212
|
`instructions init` seeds two platform profiles:
|
package/dist/cli/index.js
CHANGED
|
@@ -2092,6 +2092,7 @@ var init_types = __esm(() => {
|
|
|
2092
2092
|
"codewith",
|
|
2093
2093
|
"aicopilot",
|
|
2094
2094
|
"antigravity",
|
|
2095
|
+
"qwen",
|
|
2095
2096
|
"zsh",
|
|
2096
2097
|
"git",
|
|
2097
2098
|
"npm",
|
|
@@ -4022,6 +4023,7 @@ var init_session_render = __esm(() => {
|
|
|
4022
4023
|
"cursor",
|
|
4023
4024
|
"opencode",
|
|
4024
4025
|
"codewith",
|
|
4026
|
+
"qwen",
|
|
4025
4027
|
"aicopilot",
|
|
4026
4028
|
"antigravity"
|
|
4027
4029
|
];
|
|
@@ -4101,6 +4103,15 @@ var init_session_render = __esm(() => {
|
|
|
4101
4103
|
nativeImports: false,
|
|
4102
4104
|
description: "AI Copilot AICOPILOT.md flattened instruction file."
|
|
4103
4105
|
},
|
|
4106
|
+
qwen: {
|
|
4107
|
+
tool: "qwen",
|
|
4108
|
+
mode: "flattened-markdown",
|
|
4109
|
+
indexFile: "QWEN.md",
|
|
4110
|
+
managedDir: ".qwen/instructions",
|
|
4111
|
+
envVar: "QWEN_HOME",
|
|
4112
|
+
nativeImports: false,
|
|
4113
|
+
description: "Qwen Code QWEN.md hierarchical instructional context file."
|
|
4114
|
+
},
|
|
4104
4115
|
antigravity: {
|
|
4105
4116
|
tool: "antigravity",
|
|
4106
4117
|
mode: "antigravity-rules",
|
|
@@ -4992,7 +5003,7 @@ function detectCategory(filePath) {
|
|
|
4992
5003
|
return "rules";
|
|
4993
5004
|
if (p.includes(".mcp.json") || p.includes("mcp"))
|
|
4994
5005
|
return "mcp";
|
|
4995
|
-
if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.antigravity/") || p.includes("/.agents/") || p.includes("/.cursor/") || p.includes("/.config/opencode/") || p.includes("/.codewith/") || p.includes("/.config/aicopilot/"))
|
|
5006
|
+
if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.antigravity/") || p.includes("/.agents/") || p.includes("/.cursor/") || p.includes("/.config/opencode/") || p.includes("/.codewith/") || p.includes("/.config/aicopilot/") || p.includes("/.qwen/"))
|
|
4996
5007
|
return "agent";
|
|
4997
5008
|
if (p.includes(".zshrc") || p.includes(".zprofile") || p.includes(".bashrc") || p.includes(".bash_profile"))
|
|
4998
5009
|
return "shell";
|
|
@@ -5020,6 +5031,8 @@ function detectAgent(filePath) {
|
|
|
5020
5031
|
return "codewith";
|
|
5021
5032
|
if (p.includes("/.config/aicopilot/"))
|
|
5022
5033
|
return "aicopilot";
|
|
5034
|
+
if (p.includes("/.qwen/"))
|
|
5035
|
+
return "qwen";
|
|
5023
5036
|
if (p.includes("/.antigravity/"))
|
|
5024
5037
|
return "antigravity";
|
|
5025
5038
|
if (p.includes("/.codex/") || p.endsWith("agents.md"))
|
|
@@ -5061,7 +5074,8 @@ var init_sync = __esm(() => {
|
|
|
5061
5074
|
{ agent: "opencode", target_path: "~/.config/opencode/AGENTS.md", transform: "opencode-flat" },
|
|
5062
5075
|
{ agent: "aicopilot", target_path: "~/.config/aicopilot/AICOPILOT.md", transform: "codex-flat" },
|
|
5063
5076
|
{ agent: "antigravity", target_path: "~/.gemini/GEMINI.md", transform: "codex-flat" },
|
|
5064
|
-
{ agent: "cursor", target_path: "~/.cursor/rules/claude.mdc", transform: "cursor-mdc" }
|
|
5077
|
+
{ agent: "cursor", target_path: "~/.cursor/rules/claude.mdc", transform: "cursor-mdc" },
|
|
5078
|
+
{ agent: "qwen", target_path: "~/.qwen/QWEN.md", transform: "codex-flat" }
|
|
5065
5079
|
];
|
|
5066
5080
|
KNOWN_CONFIGS = [
|
|
5067
5081
|
{ path: "~/.claude/CLAUDE.md", name: "claude-claude-md", category: "rules", agent: "claude", format: "markdown", outputs: CLAUDE_PROMPT_OUTPUTS },
|
|
@@ -5081,6 +5095,8 @@ var init_sync = __esm(() => {
|
|
|
5081
5095
|
{ path: "~/.config/aicopilot/aicopilot.json", name: "aicopilot-config", category: "mcp", agent: "aicopilot", format: "json", optional: true, description: "AI Copilot config (includes instructions and MCP server entries)" },
|
|
5082
5096
|
{ path: "~/.gemini/GEMINI.md", name: "antigravity-global-rules", category: "rules", agent: "antigravity", format: "markdown", optional: true, description: "Google Antigravity global rules file" },
|
|
5083
5097
|
{ path: "~/.gemini/config/mcp_config.json", name: "antigravity-global-mcp", category: "mcp", agent: "antigravity", format: "json", optional: true, description: "Google Antigravity global MCP server entries" },
|
|
5098
|
+
{ path: "~/.qwen/QWEN.md", name: "qwen-qwen-md", category: "rules", agent: "qwen", format: "markdown", optional: true, description: "Qwen Code global instructional context" },
|
|
5099
|
+
{ path: "~/.qwen/settings.json", name: "qwen-settings", category: "agent", agent: "qwen", format: "json", optional: true, description: "Qwen Code settings.json, including native hooks" },
|
|
5084
5100
|
{ path: "~/.claude.json", name: "claude-json", category: "mcp", agent: "claude", format: "json", description: "Claude Code global config (includes MCP server entries)" },
|
|
5085
5101
|
{ path: "~/.zshrc", name: "zshrc", category: "shell", agent: "zsh" },
|
|
5086
5102
|
{ path: "~/.zprofile", name: "zprofile", category: "shell", agent: "zsh", optional: true },
|
|
@@ -5103,7 +5119,9 @@ var init_sync = __esm(() => {
|
|
|
5103
5119
|
{ file: ".aicopilot/AICOPILOT.md", category: "rules", agent: "aicopilot", format: "markdown" },
|
|
5104
5120
|
{ file: "AICOPILOT.md", category: "rules", agent: "aicopilot", format: "markdown" },
|
|
5105
5121
|
{ file: ".cursor/mcp.json", category: "mcp", agent: "cursor", format: "json" },
|
|
5106
|
-
{ file: ".
|
|
5122
|
+
{ file: "QWEN.md", category: "rules", agent: "qwen", format: "markdown" },
|
|
5123
|
+
{ file: ".agents/mcp_config.json", category: "mcp", agent: "antigravity", format: "json" },
|
|
5124
|
+
{ file: ".qwen/settings.json", category: "agent", agent: "qwen", format: "json" }
|
|
5107
5125
|
];
|
|
5108
5126
|
});
|
|
5109
5127
|
|
|
@@ -6935,6 +6953,127 @@ async function ensureGlobalAgentRulesStandardConfig(store = resolveConfigStore()
|
|
|
6935
6953
|
}
|
|
6936
6954
|
}
|
|
6937
6955
|
|
|
6956
|
+
// src/lib/dangerous-operation-guard-standard.ts
|
|
6957
|
+
init_config_store();
|
|
6958
|
+
var DANGEROUS_OPERATION_GUARD_STANDARD_SLUG = "dangerous-operation-guard-standard";
|
|
6959
|
+
var DANGEROUS_OPERATION_GUARD_STANDARD_CONTENT = `# Dangerous Operation Guard Standard
|
|
6960
|
+
|
|
6961
|
+
This standard is the managed instruction/config source for sustained Hasna
|
|
6962
|
+
coding agents on station01 and compatible fleet machines. Its purpose is to
|
|
6963
|
+
route risky shell commands, file edits, git operations, package installs, and
|
|
6964
|
+
secret-adjacent access through native guard surfaces where the runtime supports
|
|
6965
|
+
them, or through a documented wrapper/plugin fallback where it does not.
|
|
6966
|
+
|
|
6967
|
+
## Scope
|
|
6968
|
+
|
|
6969
|
+
- Apply this guard to sustained Codewith, Codex, Claude Code, Qwen Code,
|
|
6970
|
+
OpenCode, Cursor, and Google Antigravity agents on station01.
|
|
6971
|
+
- Do not target Gemini CLI. Gemini is retired for Hasna coding-agent rollout
|
|
6972
|
+
purposes; Antigravity is the active Google agent target.
|
|
6973
|
+
- Keep guard policy in managed instructions/config. Do not repair rollout gaps
|
|
6974
|
+
by hand-editing generated agent files outside the managed renderer.
|
|
6975
|
+
|
|
6976
|
+
## Codewith and Codex
|
|
6977
|
+
|
|
6978
|
+
- Use managed Codewith/Codex config and requirements where supported.
|
|
6979
|
+
- A managed requirements policy should set \`allow_managed_hooks_only = true\`
|
|
6980
|
+
so unmanaged local/project hooks cannot bypass the managed guard set.
|
|
6981
|
+
- \`PreToolUse\` is a hard-deny and context-injection surface. It may block a
|
|
6982
|
+
dangerous operation or allow a safe rewrite supported by the runtime, but it
|
|
6983
|
+
must not try to ask the user for approval.
|
|
6984
|
+
- Approval decisions belong in \`PermissionRequest\` hooks. If a dangerous
|
|
6985
|
+
operation needs human approval, let the runtime raise a permission request
|
|
6986
|
+
and decide there; do not return \`permissionDecision: "ask"\` from
|
|
6987
|
+
\`PreToolUse\`.
|
|
6988
|
+
- The current managed hook set should cover shell commands, file writes,
|
|
6989
|
+
patch/edit tools, MCP file-modifying tools, branch/worktree safety,
|
|
6990
|
+
secret-adjacent paths, package installs, staged secret scans before commit or
|
|
6991
|
+
push, and fleet freeze/blocker gates.
|
|
6992
|
+
|
|
6993
|
+
## Claude Code
|
|
6994
|
+
|
|
6995
|
+
- Use Claude Code native hooks in managed \`settings.json\` where available.
|
|
6996
|
+
- Claude \`PreToolUse\` can use its native approval/defer semantics, but the
|
|
6997
|
+
shared classifier must keep runtime-specific adapters so Claude behavior is
|
|
6998
|
+
not collapsed into Codewith/Codex semantics.
|
|
6999
|
+
- When native hooks are unavailable, use the managed wrapper that launches
|
|
7000
|
+
Claude with the guarded hook profile rather than copying one-off rules into a
|
|
7001
|
+
local prompt file.
|
|
7002
|
+
|
|
7003
|
+
## Qwen Code
|
|
7004
|
+
|
|
7005
|
+
- Session rendering writes Qwen Code \`QWEN.md\` instructional context. This is
|
|
7006
|
+
policy context only; hard enforcement still requires native hooks or a
|
|
7007
|
+
managed wrapper/plugin.
|
|
7008
|
+
- Use Qwen Code native \`settings.json\` hooks for hard enforcement. User-level
|
|
7009
|
+
settings live at \`~/.qwen/settings.json\`; project-level settings live at
|
|
7010
|
+
\`.qwen/settings.json\`.
|
|
7011
|
+
- Qwen hooks are configured under the \`hooks\` object with event arrays such
|
|
7012
|
+
as \`PreToolUse\`; each hook entry should be a managed command or HTTP hook
|
|
7013
|
+
with an explicit name, description, matcher, timeout, and shell where needed.
|
|
7014
|
+
- If the installed Qwen hook payload is not compatible with the shared
|
|
7015
|
+
classifier yet, use a managed extension or wrapper fallback that preserves
|
|
7016
|
+
the same deny-before-execute behavior.
|
|
7017
|
+
|
|
7018
|
+
## OpenCode
|
|
7019
|
+
|
|
7020
|
+
- Use native \`opencode.json\` instructions and the OpenCode plugin surface
|
|
7021
|
+
where a plugin is available.
|
|
7022
|
+
- If no native plugin is installed, launch through the managed wrapper that
|
|
7023
|
+
runs the shared guard before auto-approved operations.
|
|
7024
|
+
|
|
7025
|
+
## Cursor
|
|
7026
|
+
|
|
7027
|
+
- Use project-owned \`.cursor/rules/*.mdc\` for policy rendering.
|
|
7028
|
+
- Because Cursor rule files are advisory prompt context rather than a verified
|
|
7029
|
+
pre-tool hard gate, require a managed wrapper/plugin fallback for enforcement
|
|
7030
|
+
before claiming the dangerous-operation guard is active.
|
|
7031
|
+
|
|
7032
|
+
## Antigravity
|
|
7033
|
+
|
|
7034
|
+
- Use project-owned \`.agents/rules/*.md\` and Antigravity-owned MCP/config
|
|
7035
|
+
paths where available.
|
|
7036
|
+
- Antigravity may still use legacy-named \`~/.gemini/...\` global paths for
|
|
7037
|
+
Antigravity-owned files, but this must never reintroduce an active
|
|
7038
|
+
\`gemini\` target.
|
|
7039
|
+
- If no native pre-tool hook is verified, use a managed wrapper/plugin
|
|
7040
|
+
fallback before claiming hard enforcement.
|
|
7041
|
+
|
|
7042
|
+
## Verification
|
|
7043
|
+
|
|
7044
|
+
Before rollout is marked complete:
|
|
7045
|
+
|
|
7046
|
+
1. Render managed instructions for every render-supported station01 agent and
|
|
7047
|
+
sync managed settings/config for hook-only surfaces.
|
|
7048
|
+
2. Verify Gemini is absent from active target lists and generated outputs.
|
|
7049
|
+
3. Verify Codewith/Codex \`PreToolUse\` rejects ask-style approvals and
|
|
7050
|
+
\`PermissionRequest\` is the approval path.
|
|
7051
|
+
4. Verify each non-Codewith runtime either has a native hook/config proof or is
|
|
7052
|
+
explicitly listed as wrapper/plugin fallback.
|
|
7053
|
+
5. Run the staged secrets scan before every commit or push.
|
|
7054
|
+
`;
|
|
7055
|
+
async function ensureDangerousOperationGuardStandardConfig(store = resolveConfigStore()) {
|
|
7056
|
+
const input = {
|
|
7057
|
+
name: "Dangerous Operation Guard Standard",
|
|
7058
|
+
category: "rules",
|
|
7059
|
+
agent: "global",
|
|
7060
|
+
format: "markdown",
|
|
7061
|
+
content: DANGEROUS_OPERATION_GUARD_STANDARD_CONTENT,
|
|
7062
|
+
kind: "reference",
|
|
7063
|
+
description: "Managed dangerous-operation guard policy for sustained Hasna coding agents",
|
|
7064
|
+
tags: ["dangerous-operation-guard", "hooks", "coding-agent-rules", "station01"]
|
|
7065
|
+
};
|
|
7066
|
+
try {
|
|
7067
|
+
const existing = await store.getConfig(DANGEROUS_OPERATION_GUARD_STANDARD_SLUG);
|
|
7068
|
+
if (existing.content !== input.content || existing.description !== input.description || existing.category !== input.category || existing.agent !== input.agent || existing.format !== input.format || existing.kind !== input.kind || JSON.stringify(existing.tags) !== JSON.stringify(input.tags)) {
|
|
7069
|
+
return await store.updateConfig(existing.id, input);
|
|
7070
|
+
}
|
|
7071
|
+
return existing;
|
|
7072
|
+
} catch {
|
|
7073
|
+
return await store.createConfig(input);
|
|
7074
|
+
}
|
|
7075
|
+
}
|
|
7076
|
+
|
|
6938
7077
|
// src/status.ts
|
|
6939
7078
|
init_config_store();
|
|
6940
7079
|
init_apply();
|
|
@@ -7485,7 +7624,7 @@ program.command("diff [id]").description("Show diff between stored config and di
|
|
|
7485
7624
|
process.exit(1);
|
|
7486
7625
|
}
|
|
7487
7626
|
});
|
|
7488
|
-
program.command("sync").description("Sync known AI coding configs from disk into DB (claude, codex, opencode, cursor, codewith, aicopilot, antigravity, zsh, git, npm)").option("-a, --agent <agent>", "only sync configs for this agent (claude|codex|opencode|cursor|codewith|aicopilot|antigravity|zsh|git|npm)").option("-c, --category <cat>", "only sync configs in this category").option("-p, --project [dir]", "sync project-scoped configs (CLAUDE.md, .mcp.json, etc.) from a project dir").option("--all", "with --project: scan all subdirs for projects to sync").option("--to-disk", "apply DB configs back to disk instead").option("--dry-run", "preview without writing").option("--list", "show which files would be synced without doing anything").option("--limit <n>", `with --list, max rows (default ${DEFAULT_LIST_LIMIT})`).option("--cursor <n>", "with --list, zero-based pagination cursor").action(async (opts) => {
|
|
7627
|
+
program.command("sync").description("Sync known AI coding configs from disk into DB (claude, codex, opencode, cursor, codewith, aicopilot, antigravity, qwen, zsh, git, npm)").option("-a, --agent <agent>", "only sync configs for this agent (claude|codex|opencode|cursor|codewith|aicopilot|antigravity|qwen|zsh|git|npm)").option("-c, --category <cat>", "only sync configs in this category").option("-p, --project [dir]", "sync project-scoped configs (CLAUDE.md, .mcp.json, etc.) from a project dir").option("--all", "with --project: scan all subdirs for projects to sync").option("--to-disk", "apply DB configs back to disk instead").option("--dry-run", "preview without writing").option("--list", "show which files would be synced without doing anything").option("--limit <n>", `with --list, max rows (default ${DEFAULT_LIST_LIMIT})`).option("--cursor <n>", "with --list, zero-based pagination cursor").action(async (opts) => {
|
|
7489
7628
|
const store = resolveConfigStore();
|
|
7490
7629
|
if (opts.list) {
|
|
7491
7630
|
const targets = KNOWN_CONFIGS.filter((k) => {
|
|
@@ -8146,6 +8285,7 @@ Keys: ANTHROPIC_API_KEY, OPENAI_API_KEY, EXA_API_KEY, NPM_TOKEN, GITHUB_TOKEN`,
|
|
|
8146
8285
|
}
|
|
8147
8286
|
}
|
|
8148
8287
|
await ensureGlobalAgentRulesStandardConfig(store);
|
|
8288
|
+
await ensureDangerousOperationGuardStandardConfig(store);
|
|
8149
8289
|
await ensureProjectDashboardStandardConfig(store);
|
|
8150
8290
|
try {
|
|
8151
8291
|
await store.getProfile("my-setup");
|
package/dist/index.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export type { MachineContextOverrides } from "./lib/machine.js";
|
|
|
19
19
|
export { PLATFORM_PROFILE_PRESETS, ensurePlatformProfiles } from "./lib/platform-profiles.js";
|
|
20
20
|
export { PROJECT_DASHBOARD_PROFILE_VARIABLES, PROJECT_DASHBOARD_STANDARD_CONTENT, PROJECT_DASHBOARD_STANDARD_SLUG, ensureProjectDashboardStandardConfig, } from "./lib/project-dashboard-standard.js";
|
|
21
21
|
export { GLOBAL_AGENT_RULES_STANDARD_CONTENT, GLOBAL_AGENT_RULES_STANDARD_SLUG, ensureGlobalAgentRulesStandardConfig, } from "./lib/global-agent-rules-standard.js";
|
|
22
|
+
export { DANGEROUS_OPERATION_GUARD_STANDARD_CONTENT, DANGEROUS_OPERATION_GUARD_STANDARD_SLUG, ensureDangerousOperationGuardStandardConfig, } from "./lib/dangerous-operation-guard-standard.js";
|
|
22
23
|
export { syncKnown, syncToDisk, syncProject, diffConfig, detectCategory, detectAgent, detectFormat, KNOWN_CONFIGS, PROJECT_CONFIG_FILES } from "./lib/sync.js";
|
|
23
24
|
export { syncFromDir, syncToDir } from "./lib/sync-dir.js";
|
|
24
25
|
export type { SyncKnownOptions, SyncToDiskOptions, SyncProjectOptions, KnownConfig } from "./lib/sync.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,kBAAkB,CAAC;AAIjC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,0BAA0B,EAC1B,kBAAkB,EAClB,6BAA6B,EAC7B,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,6BAA6B,EAC7B,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,cAAc,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAChK,YAAY,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AACrL,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EACL,mCAAmC,EACnC,kCAAkC,EAClC,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,mCAAmC,EACnC,gCAAgC,EAChC,oCAAoC,GACrC,MAAM,sCAAsC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ var CONFIG_AGENTS = [
|
|
|
19
19
|
"codewith",
|
|
20
20
|
"aicopilot",
|
|
21
21
|
"antigravity",
|
|
22
|
+
"qwen",
|
|
22
23
|
"zsh",
|
|
23
24
|
"git",
|
|
24
25
|
"npm",
|
|
@@ -1109,6 +1110,7 @@ var SESSION_RENDER_TOOLS = [
|
|
|
1109
1110
|
"cursor",
|
|
1110
1111
|
"opencode",
|
|
1111
1112
|
"codewith",
|
|
1113
|
+
"qwen",
|
|
1112
1114
|
"aicopilot",
|
|
1113
1115
|
"antigravity"
|
|
1114
1116
|
];
|
|
@@ -1188,6 +1190,15 @@ var SESSION_TOOL_ADAPTERS = {
|
|
|
1188
1190
|
nativeImports: false,
|
|
1189
1191
|
description: "AI Copilot AICOPILOT.md flattened instruction file."
|
|
1190
1192
|
},
|
|
1193
|
+
qwen: {
|
|
1194
|
+
tool: "qwen",
|
|
1195
|
+
mode: "flattened-markdown",
|
|
1196
|
+
indexFile: "QWEN.md",
|
|
1197
|
+
managedDir: ".qwen/instructions",
|
|
1198
|
+
envVar: "QWEN_HOME",
|
|
1199
|
+
nativeImports: false,
|
|
1200
|
+
description: "Qwen Code QWEN.md hierarchical instructional context file."
|
|
1201
|
+
},
|
|
1191
1202
|
antigravity: {
|
|
1192
1203
|
tool: "antigravity",
|
|
1193
1204
|
mode: "antigravity-rules",
|
|
@@ -3286,6 +3297,125 @@ async function ensureGlobalAgentRulesStandardConfig(store = resolveConfigStore()
|
|
|
3286
3297
|
return await store.createConfig(input);
|
|
3287
3298
|
}
|
|
3288
3299
|
}
|
|
3300
|
+
// src/lib/dangerous-operation-guard-standard.ts
|
|
3301
|
+
var DANGEROUS_OPERATION_GUARD_STANDARD_SLUG = "dangerous-operation-guard-standard";
|
|
3302
|
+
var DANGEROUS_OPERATION_GUARD_STANDARD_CONTENT = `# Dangerous Operation Guard Standard
|
|
3303
|
+
|
|
3304
|
+
This standard is the managed instruction/config source for sustained Hasna
|
|
3305
|
+
coding agents on station01 and compatible fleet machines. Its purpose is to
|
|
3306
|
+
route risky shell commands, file edits, git operations, package installs, and
|
|
3307
|
+
secret-adjacent access through native guard surfaces where the runtime supports
|
|
3308
|
+
them, or through a documented wrapper/plugin fallback where it does not.
|
|
3309
|
+
|
|
3310
|
+
## Scope
|
|
3311
|
+
|
|
3312
|
+
- Apply this guard to sustained Codewith, Codex, Claude Code, Qwen Code,
|
|
3313
|
+
OpenCode, Cursor, and Google Antigravity agents on station01.
|
|
3314
|
+
- Do not target Gemini CLI. Gemini is retired for Hasna coding-agent rollout
|
|
3315
|
+
purposes; Antigravity is the active Google agent target.
|
|
3316
|
+
- Keep guard policy in managed instructions/config. Do not repair rollout gaps
|
|
3317
|
+
by hand-editing generated agent files outside the managed renderer.
|
|
3318
|
+
|
|
3319
|
+
## Codewith and Codex
|
|
3320
|
+
|
|
3321
|
+
- Use managed Codewith/Codex config and requirements where supported.
|
|
3322
|
+
- A managed requirements policy should set \`allow_managed_hooks_only = true\`
|
|
3323
|
+
so unmanaged local/project hooks cannot bypass the managed guard set.
|
|
3324
|
+
- \`PreToolUse\` is a hard-deny and context-injection surface. It may block a
|
|
3325
|
+
dangerous operation or allow a safe rewrite supported by the runtime, but it
|
|
3326
|
+
must not try to ask the user for approval.
|
|
3327
|
+
- Approval decisions belong in \`PermissionRequest\` hooks. If a dangerous
|
|
3328
|
+
operation needs human approval, let the runtime raise a permission request
|
|
3329
|
+
and decide there; do not return \`permissionDecision: "ask"\` from
|
|
3330
|
+
\`PreToolUse\`.
|
|
3331
|
+
- The current managed hook set should cover shell commands, file writes,
|
|
3332
|
+
patch/edit tools, MCP file-modifying tools, branch/worktree safety,
|
|
3333
|
+
secret-adjacent paths, package installs, staged secret scans before commit or
|
|
3334
|
+
push, and fleet freeze/blocker gates.
|
|
3335
|
+
|
|
3336
|
+
## Claude Code
|
|
3337
|
+
|
|
3338
|
+
- Use Claude Code native hooks in managed \`settings.json\` where available.
|
|
3339
|
+
- Claude \`PreToolUse\` can use its native approval/defer semantics, but the
|
|
3340
|
+
shared classifier must keep runtime-specific adapters so Claude behavior is
|
|
3341
|
+
not collapsed into Codewith/Codex semantics.
|
|
3342
|
+
- When native hooks are unavailable, use the managed wrapper that launches
|
|
3343
|
+
Claude with the guarded hook profile rather than copying one-off rules into a
|
|
3344
|
+
local prompt file.
|
|
3345
|
+
|
|
3346
|
+
## Qwen Code
|
|
3347
|
+
|
|
3348
|
+
- Session rendering writes Qwen Code \`QWEN.md\` instructional context. This is
|
|
3349
|
+
policy context only; hard enforcement still requires native hooks or a
|
|
3350
|
+
managed wrapper/plugin.
|
|
3351
|
+
- Use Qwen Code native \`settings.json\` hooks for hard enforcement. User-level
|
|
3352
|
+
settings live at \`~/.qwen/settings.json\`; project-level settings live at
|
|
3353
|
+
\`.qwen/settings.json\`.
|
|
3354
|
+
- Qwen hooks are configured under the \`hooks\` object with event arrays such
|
|
3355
|
+
as \`PreToolUse\`; each hook entry should be a managed command or HTTP hook
|
|
3356
|
+
with an explicit name, description, matcher, timeout, and shell where needed.
|
|
3357
|
+
- If the installed Qwen hook payload is not compatible with the shared
|
|
3358
|
+
classifier yet, use a managed extension or wrapper fallback that preserves
|
|
3359
|
+
the same deny-before-execute behavior.
|
|
3360
|
+
|
|
3361
|
+
## OpenCode
|
|
3362
|
+
|
|
3363
|
+
- Use native \`opencode.json\` instructions and the OpenCode plugin surface
|
|
3364
|
+
where a plugin is available.
|
|
3365
|
+
- If no native plugin is installed, launch through the managed wrapper that
|
|
3366
|
+
runs the shared guard before auto-approved operations.
|
|
3367
|
+
|
|
3368
|
+
## Cursor
|
|
3369
|
+
|
|
3370
|
+
- Use project-owned \`.cursor/rules/*.mdc\` for policy rendering.
|
|
3371
|
+
- Because Cursor rule files are advisory prompt context rather than a verified
|
|
3372
|
+
pre-tool hard gate, require a managed wrapper/plugin fallback for enforcement
|
|
3373
|
+
before claiming the dangerous-operation guard is active.
|
|
3374
|
+
|
|
3375
|
+
## Antigravity
|
|
3376
|
+
|
|
3377
|
+
- Use project-owned \`.agents/rules/*.md\` and Antigravity-owned MCP/config
|
|
3378
|
+
paths where available.
|
|
3379
|
+
- Antigravity may still use legacy-named \`~/.gemini/...\` global paths for
|
|
3380
|
+
Antigravity-owned files, but this must never reintroduce an active
|
|
3381
|
+
\`gemini\` target.
|
|
3382
|
+
- If no native pre-tool hook is verified, use a managed wrapper/plugin
|
|
3383
|
+
fallback before claiming hard enforcement.
|
|
3384
|
+
|
|
3385
|
+
## Verification
|
|
3386
|
+
|
|
3387
|
+
Before rollout is marked complete:
|
|
3388
|
+
|
|
3389
|
+
1. Render managed instructions for every render-supported station01 agent and
|
|
3390
|
+
sync managed settings/config for hook-only surfaces.
|
|
3391
|
+
2. Verify Gemini is absent from active target lists and generated outputs.
|
|
3392
|
+
3. Verify Codewith/Codex \`PreToolUse\` rejects ask-style approvals and
|
|
3393
|
+
\`PermissionRequest\` is the approval path.
|
|
3394
|
+
4. Verify each non-Codewith runtime either has a native hook/config proof or is
|
|
3395
|
+
explicitly listed as wrapper/plugin fallback.
|
|
3396
|
+
5. Run the staged secrets scan before every commit or push.
|
|
3397
|
+
`;
|
|
3398
|
+
async function ensureDangerousOperationGuardStandardConfig(store = resolveConfigStore()) {
|
|
3399
|
+
const input = {
|
|
3400
|
+
name: "Dangerous Operation Guard Standard",
|
|
3401
|
+
category: "rules",
|
|
3402
|
+
agent: "global",
|
|
3403
|
+
format: "markdown",
|
|
3404
|
+
content: DANGEROUS_OPERATION_GUARD_STANDARD_CONTENT,
|
|
3405
|
+
kind: "reference",
|
|
3406
|
+
description: "Managed dangerous-operation guard policy for sustained Hasna coding agents",
|
|
3407
|
+
tags: ["dangerous-operation-guard", "hooks", "coding-agent-rules", "station01"]
|
|
3408
|
+
};
|
|
3409
|
+
try {
|
|
3410
|
+
const existing = await store.getConfig(DANGEROUS_OPERATION_GUARD_STANDARD_SLUG);
|
|
3411
|
+
if (existing.content !== input.content || existing.description !== input.description || existing.category !== input.category || existing.agent !== input.agent || existing.format !== input.format || existing.kind !== input.kind || JSON.stringify(existing.tags) !== JSON.stringify(input.tags)) {
|
|
3412
|
+
return await store.updateConfig(existing.id, input);
|
|
3413
|
+
}
|
|
3414
|
+
return existing;
|
|
3415
|
+
} catch {
|
|
3416
|
+
return await store.createConfig(input);
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3289
3419
|
// src/lib/sync.ts
|
|
3290
3420
|
import { existsSync as existsSync9, readdirSync as readdirSync2, readFileSync as readFileSync7 } from "fs";
|
|
3291
3421
|
import { basename as basename4, extname as extname3, join as join7 } from "path";
|
|
@@ -3376,7 +3506,8 @@ var CLAUDE_PROMPT_OUTPUTS = [
|
|
|
3376
3506
|
{ agent: "opencode", target_path: "~/.config/opencode/AGENTS.md", transform: "opencode-flat" },
|
|
3377
3507
|
{ agent: "aicopilot", target_path: "~/.config/aicopilot/AICOPILOT.md", transform: "codex-flat" },
|
|
3378
3508
|
{ agent: "antigravity", target_path: "~/.gemini/GEMINI.md", transform: "codex-flat" },
|
|
3379
|
-
{ agent: "cursor", target_path: "~/.cursor/rules/claude.mdc", transform: "cursor-mdc" }
|
|
3509
|
+
{ agent: "cursor", target_path: "~/.cursor/rules/claude.mdc", transform: "cursor-mdc" },
|
|
3510
|
+
{ agent: "qwen", target_path: "~/.qwen/QWEN.md", transform: "codex-flat" }
|
|
3380
3511
|
];
|
|
3381
3512
|
function claudeRuleOutputs(fileName) {
|
|
3382
3513
|
const stem = basename4(fileName, extname3(fileName));
|
|
@@ -3444,6 +3575,8 @@ var KNOWN_CONFIGS = [
|
|
|
3444
3575
|
{ path: "~/.config/aicopilot/aicopilot.json", name: "aicopilot-config", category: "mcp", agent: "aicopilot", format: "json", optional: true, description: "AI Copilot config (includes instructions and MCP server entries)" },
|
|
3445
3576
|
{ path: "~/.gemini/GEMINI.md", name: "antigravity-global-rules", category: "rules", agent: "antigravity", format: "markdown", optional: true, description: "Google Antigravity global rules file" },
|
|
3446
3577
|
{ path: "~/.gemini/config/mcp_config.json", name: "antigravity-global-mcp", category: "mcp", agent: "antigravity", format: "json", optional: true, description: "Google Antigravity global MCP server entries" },
|
|
3578
|
+
{ path: "~/.qwen/QWEN.md", name: "qwen-qwen-md", category: "rules", agent: "qwen", format: "markdown", optional: true, description: "Qwen Code global instructional context" },
|
|
3579
|
+
{ path: "~/.qwen/settings.json", name: "qwen-settings", category: "agent", agent: "qwen", format: "json", optional: true, description: "Qwen Code settings.json, including native hooks" },
|
|
3447
3580
|
{ path: "~/.claude.json", name: "claude-json", category: "mcp", agent: "claude", format: "json", description: "Claude Code global config (includes MCP server entries)" },
|
|
3448
3581
|
{ path: "~/.zshrc", name: "zshrc", category: "shell", agent: "zsh" },
|
|
3449
3582
|
{ path: "~/.zprofile", name: "zprofile", category: "shell", agent: "zsh", optional: true },
|
|
@@ -3466,7 +3599,9 @@ var PROJECT_CONFIG_FILES = [
|
|
|
3466
3599
|
{ file: ".aicopilot/AICOPILOT.md", category: "rules", agent: "aicopilot", format: "markdown" },
|
|
3467
3600
|
{ file: "AICOPILOT.md", category: "rules", agent: "aicopilot", format: "markdown" },
|
|
3468
3601
|
{ file: ".cursor/mcp.json", category: "mcp", agent: "cursor", format: "json" },
|
|
3469
|
-
{ file: ".
|
|
3602
|
+
{ file: "QWEN.md", category: "rules", agent: "qwen", format: "markdown" },
|
|
3603
|
+
{ file: ".agents/mcp_config.json", category: "mcp", agent: "antigravity", format: "json" },
|
|
3604
|
+
{ file: ".qwen/settings.json", category: "agent", agent: "qwen", format: "json" }
|
|
3470
3605
|
];
|
|
3471
3606
|
async function syncProject(opts) {
|
|
3472
3607
|
const store = opts.store ?? resolveConfigStore();
|
|
@@ -3740,7 +3875,7 @@ function detectCategory(filePath) {
|
|
|
3740
3875
|
return "rules";
|
|
3741
3876
|
if (p.includes(".mcp.json") || p.includes("mcp"))
|
|
3742
3877
|
return "mcp";
|
|
3743
|
-
if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.antigravity/") || p.includes("/.agents/") || p.includes("/.cursor/") || p.includes("/.config/opencode/") || p.includes("/.codewith/") || p.includes("/.config/aicopilot/"))
|
|
3878
|
+
if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.antigravity/") || p.includes("/.agents/") || p.includes("/.cursor/") || p.includes("/.config/opencode/") || p.includes("/.codewith/") || p.includes("/.config/aicopilot/") || p.includes("/.qwen/"))
|
|
3744
3879
|
return "agent";
|
|
3745
3880
|
if (p.includes(".zshrc") || p.includes(".zprofile") || p.includes(".bashrc") || p.includes(".bash_profile"))
|
|
3746
3881
|
return "shell";
|
|
@@ -3768,6 +3903,8 @@ function detectAgent(filePath) {
|
|
|
3768
3903
|
return "codewith";
|
|
3769
3904
|
if (p.includes("/.config/aicopilot/"))
|
|
3770
3905
|
return "aicopilot";
|
|
3906
|
+
if (p.includes("/.qwen/"))
|
|
3907
|
+
return "qwen";
|
|
3771
3908
|
if (p.includes("/.antigravity/"))
|
|
3772
3909
|
return "antigravity";
|
|
3773
3910
|
if (p.includes("/.codex/") || p.endsWith("agents.md"))
|
|
@@ -4325,6 +4462,7 @@ export {
|
|
|
4325
4462
|
ensureProjectDashboardStandardConfig,
|
|
4326
4463
|
ensurePlatformProfiles,
|
|
4327
4464
|
ensureGlobalAgentRulesStandardConfig,
|
|
4465
|
+
ensureDangerousOperationGuardStandardConfig,
|
|
4328
4466
|
diffConfig,
|
|
4329
4467
|
detectMachineContext,
|
|
4330
4468
|
detectFormat,
|
|
@@ -4362,6 +4500,8 @@ export {
|
|
|
4362
4500
|
KNOWN_CONFIGS,
|
|
4363
4501
|
GLOBAL_AGENT_RULES_STANDARD_SLUG,
|
|
4364
4502
|
GLOBAL_AGENT_RULES_STANDARD_CONTENT,
|
|
4503
|
+
DANGEROUS_OPERATION_GUARD_STANDARD_SLUG,
|
|
4504
|
+
DANGEROUS_OPERATION_GUARD_STANDARD_CONTENT,
|
|
4365
4505
|
ConfigNotFoundError,
|
|
4366
4506
|
ConfigApplyError,
|
|
4367
4507
|
CloudHttpError,
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Config } from "../types/index.js";
|
|
2
|
+
import { type ConfigStore } from "../data/config-store.js";
|
|
3
|
+
export declare const DANGEROUS_OPERATION_GUARD_STANDARD_SLUG = "dangerous-operation-guard-standard";
|
|
4
|
+
export declare const DANGEROUS_OPERATION_GUARD_STANDARD_CONTENT = "# Dangerous Operation Guard Standard\n\nThis standard is the managed instruction/config source for sustained Hasna\ncoding agents on station01 and compatible fleet machines. Its purpose is to\nroute risky shell commands, file edits, git operations, package installs, and\nsecret-adjacent access through native guard surfaces where the runtime supports\nthem, or through a documented wrapper/plugin fallback where it does not.\n\n## Scope\n\n- Apply this guard to sustained Codewith, Codex, Claude Code, Qwen Code,\n OpenCode, Cursor, and Google Antigravity agents on station01.\n- Do not target Gemini CLI. Gemini is retired for Hasna coding-agent rollout\n purposes; Antigravity is the active Google agent target.\n- Keep guard policy in managed instructions/config. Do not repair rollout gaps\n by hand-editing generated agent files outside the managed renderer.\n\n## Codewith and Codex\n\n- Use managed Codewith/Codex config and requirements where supported.\n- A managed requirements policy should set `allow_managed_hooks_only = true`\n so unmanaged local/project hooks cannot bypass the managed guard set.\n- `PreToolUse` is a hard-deny and context-injection surface. It may block a\n dangerous operation or allow a safe rewrite supported by the runtime, but it\n must not try to ask the user for approval.\n- Approval decisions belong in `PermissionRequest` hooks. If a dangerous\n operation needs human approval, let the runtime raise a permission request\n and decide there; do not return `permissionDecision: \"ask\"` from\n `PreToolUse`.\n- The current managed hook set should cover shell commands, file writes,\n patch/edit tools, MCP file-modifying tools, branch/worktree safety,\n secret-adjacent paths, package installs, staged secret scans before commit or\n push, and fleet freeze/blocker gates.\n\n## Claude Code\n\n- Use Claude Code native hooks in managed `settings.json` where available.\n- Claude `PreToolUse` can use its native approval/defer semantics, but the\n shared classifier must keep runtime-specific adapters so Claude behavior is\n not collapsed into Codewith/Codex semantics.\n- When native hooks are unavailable, use the managed wrapper that launches\n Claude with the guarded hook profile rather than copying one-off rules into a\n local prompt file.\n\n## Qwen Code\n\n- Session rendering writes Qwen Code `QWEN.md` instructional context. This is\n policy context only; hard enforcement still requires native hooks or a\n managed wrapper/plugin.\n- Use Qwen Code native `settings.json` hooks for hard enforcement. User-level\n settings live at `~/.qwen/settings.json`; project-level settings live at\n `.qwen/settings.json`.\n- Qwen hooks are configured under the `hooks` object with event arrays such\n as `PreToolUse`; each hook entry should be a managed command or HTTP hook\n with an explicit name, description, matcher, timeout, and shell where needed.\n- If the installed Qwen hook payload is not compatible with the shared\n classifier yet, use a managed extension or wrapper fallback that preserves\n the same deny-before-execute behavior.\n\n## OpenCode\n\n- Use native `opencode.json` instructions and the OpenCode plugin surface\n where a plugin is available.\n- If no native plugin is installed, launch through the managed wrapper that\n runs the shared guard before auto-approved operations.\n\n## Cursor\n\n- Use project-owned `.cursor/rules/*.mdc` for policy rendering.\n- Because Cursor rule files are advisory prompt context rather than a verified\n pre-tool hard gate, require a managed wrapper/plugin fallback for enforcement\n before claiming the dangerous-operation guard is active.\n\n## Antigravity\n\n- Use project-owned `.agents/rules/*.md` and Antigravity-owned MCP/config\n paths where available.\n- Antigravity may still use legacy-named `~/.gemini/...` global paths for\n Antigravity-owned files, but this must never reintroduce an active\n `gemini` target.\n- If no native pre-tool hook is verified, use a managed wrapper/plugin\n fallback before claiming hard enforcement.\n\n## Verification\n\nBefore rollout is marked complete:\n\n1. Render managed instructions for every render-supported station01 agent and\n sync managed settings/config for hook-only surfaces.\n2. Verify Gemini is absent from active target lists and generated outputs.\n3. Verify Codewith/Codex `PreToolUse` rejects ask-style approvals and\n `PermissionRequest` is the approval path.\n4. Verify each non-Codewith runtime either has a native hook/config proof or is\n explicitly listed as wrapper/plugin fallback.\n5. Run the staged secrets scan before every commit or push.\n";
|
|
5
|
+
export declare function ensureDangerousOperationGuardStandardConfig(store?: ConfigStore): Promise<Config>;
|
|
6
|
+
//# sourceMappingURL=dangerous-operation-guard-standard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dangerous-operation-guard-standard.d.ts","sourceRoot":"","sources":["../../src/lib/dangerous-operation-guard-standard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE/E,eAAO,MAAM,uCAAuC,uCAAuC,CAAC;AAE5F,eAAO,MAAM,0CAA0C,ojJA+FtD,CAAC;AAEF,wBAAsB,2CAA2C,CAAC,KAAK,GAAE,WAAkC,GAAG,OAAO,CAAC,MAAM,CAAC,CA6B5H"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dangerous-operation-guard-standard.test.d.ts","sourceRoot":"","sources":["../../src/lib/dangerous-operation-guard-standard.test.ts"],"names":[],"mappings":""}
|
|
@@ -4,7 +4,7 @@ export declare const SESSION_RENDER_MANAGED_MARKER = "Managed by @hasna/configs
|
|
|
4
4
|
export declare const SESSION_RENDER_SCHEMA = "hasna.configs.session-render/v1";
|
|
5
5
|
export declare const RAW_STORE_ROOT_ENV = "HASNA_CONFIGS_HOME";
|
|
6
6
|
export declare const ANTIGRAVITY_RULE_FILE_CHAR_LIMIT = 12000;
|
|
7
|
-
export declare const SESSION_RENDER_TOOLS: readonly ["claude", "codex", "cursor", "opencode", "codewith", "aicopilot", "antigravity"];
|
|
7
|
+
export declare const SESSION_RENDER_TOOLS: readonly ["claude", "codex", "cursor", "opencode", "codewith", "qwen", "aicopilot", "antigravity"];
|
|
8
8
|
export type SessionRenderTool = (typeof SESSION_RENDER_TOOLS)[number];
|
|
9
9
|
export type SessionRenderMode = "native-imports" | "flattened-markdown" | "cursor-mdc" | "opencode-instructions" | "antigravity-rules";
|
|
10
10
|
export declare const SESSION_INSTRUCTION_LAYERS: readonly ["global", "tool", "account", "machine", "division", "workspace", "repo", "path", "agent", "session", "local"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-render.d.ts","sourceRoot":"","sources":["../../src/lib/session-render.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,eAAO,MAAM,2BAA2B,0CAA0C,CAAC;AACnF,eAAO,MAAM,6BAA6B,6CAA6C,CAAC;AACxF,eAAO,MAAM,qBAAqB,oCAAoC,CAAC;AACvE,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAEvD,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"session-render.d.ts","sourceRoot":"","sources":["../../src/lib/session-render.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/sync.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAW/E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,qBAAqB,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/lib/sync.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAW/E,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,qBAAqB,EAAE,YAAY,EAQ/C,CAAC;AAwDF,eAAO,MAAM,aAAa,EAAE,WAAW,EAwDtC,CAAC;AAIF,eAAO,MAAM,oBAAoB;;cAC2B,cAAc;WAAsB,WAAW;YAAwB,YAAY;GAc9I,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgE/E;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,wBAAsB,SAAS,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,UAAU,CAAC,CAqGhF;AAGD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,wBAAsB,UAAU,CAAC,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2BlF;AAGD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAwBD,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CA2B9F;AAGD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAU/D;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAgBzD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAQ3D;AAGD,OAAO,EAAE,MAAM,EAAE,CAAC;AAClB,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -29,6 +29,7 @@ var init_types = __esm(() => {
|
|
|
29
29
|
"codewith",
|
|
30
30
|
"aicopilot",
|
|
31
31
|
"antigravity",
|
|
32
|
+
"qwen",
|
|
32
33
|
"zsh",
|
|
33
34
|
"git",
|
|
34
35
|
"npm",
|
|
@@ -1909,7 +1910,7 @@ function detectCategory(filePath) {
|
|
|
1909
1910
|
return "rules";
|
|
1910
1911
|
if (p.includes(".mcp.json") || p.includes("mcp"))
|
|
1911
1912
|
return "mcp";
|
|
1912
|
-
if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.antigravity/") || p.includes("/.agents/") || p.includes("/.cursor/") || p.includes("/.config/opencode/") || p.includes("/.codewith/") || p.includes("/.config/aicopilot/"))
|
|
1913
|
+
if (p.includes("/.claude/") || p.includes("/.codex/") || p.includes("/.antigravity/") || p.includes("/.agents/") || p.includes("/.cursor/") || p.includes("/.config/opencode/") || p.includes("/.codewith/") || p.includes("/.config/aicopilot/") || p.includes("/.qwen/"))
|
|
1913
1914
|
return "agent";
|
|
1914
1915
|
if (p.includes(".zshrc") || p.includes(".zprofile") || p.includes(".bashrc") || p.includes(".bash_profile"))
|
|
1915
1916
|
return "shell";
|
|
@@ -1937,6 +1938,8 @@ function detectAgent(filePath) {
|
|
|
1937
1938
|
return "codewith";
|
|
1938
1939
|
if (p.includes("/.config/aicopilot/"))
|
|
1939
1940
|
return "aicopilot";
|
|
1941
|
+
if (p.includes("/.qwen/"))
|
|
1942
|
+
return "qwen";
|
|
1940
1943
|
if (p.includes("/.antigravity/"))
|
|
1941
1944
|
return "antigravity";
|
|
1942
1945
|
if (p.includes("/.codex/") || p.endsWith("agents.md"))
|
|
@@ -1978,7 +1981,8 @@ var init_sync = __esm(() => {
|
|
|
1978
1981
|
{ agent: "opencode", target_path: "~/.config/opencode/AGENTS.md", transform: "opencode-flat" },
|
|
1979
1982
|
{ agent: "aicopilot", target_path: "~/.config/aicopilot/AICOPILOT.md", transform: "codex-flat" },
|
|
1980
1983
|
{ agent: "antigravity", target_path: "~/.gemini/GEMINI.md", transform: "codex-flat" },
|
|
1981
|
-
{ agent: "cursor", target_path: "~/.cursor/rules/claude.mdc", transform: "cursor-mdc" }
|
|
1984
|
+
{ agent: "cursor", target_path: "~/.cursor/rules/claude.mdc", transform: "cursor-mdc" },
|
|
1985
|
+
{ agent: "qwen", target_path: "~/.qwen/QWEN.md", transform: "codex-flat" }
|
|
1982
1986
|
];
|
|
1983
1987
|
KNOWN_CONFIGS = [
|
|
1984
1988
|
{ path: "~/.claude/CLAUDE.md", name: "claude-claude-md", category: "rules", agent: "claude", format: "markdown", outputs: CLAUDE_PROMPT_OUTPUTS },
|
|
@@ -1998,6 +2002,8 @@ var init_sync = __esm(() => {
|
|
|
1998
2002
|
{ path: "~/.config/aicopilot/aicopilot.json", name: "aicopilot-config", category: "mcp", agent: "aicopilot", format: "json", optional: true, description: "AI Copilot config (includes instructions and MCP server entries)" },
|
|
1999
2003
|
{ path: "~/.gemini/GEMINI.md", name: "antigravity-global-rules", category: "rules", agent: "antigravity", format: "markdown", optional: true, description: "Google Antigravity global rules file" },
|
|
2000
2004
|
{ path: "~/.gemini/config/mcp_config.json", name: "antigravity-global-mcp", category: "mcp", agent: "antigravity", format: "json", optional: true, description: "Google Antigravity global MCP server entries" },
|
|
2005
|
+
{ path: "~/.qwen/QWEN.md", name: "qwen-qwen-md", category: "rules", agent: "qwen", format: "markdown", optional: true, description: "Qwen Code global instructional context" },
|
|
2006
|
+
{ path: "~/.qwen/settings.json", name: "qwen-settings", category: "agent", agent: "qwen", format: "json", optional: true, description: "Qwen Code settings.json, including native hooks" },
|
|
2001
2007
|
{ path: "~/.claude.json", name: "claude-json", category: "mcp", agent: "claude", format: "json", description: "Claude Code global config (includes MCP server entries)" },
|
|
2002
2008
|
{ path: "~/.zshrc", name: "zshrc", category: "shell", agent: "zsh" },
|
|
2003
2009
|
{ path: "~/.zprofile", name: "zprofile", category: "shell", agent: "zsh", optional: true },
|
|
@@ -2020,7 +2026,9 @@ var init_sync = __esm(() => {
|
|
|
2020
2026
|
{ file: ".aicopilot/AICOPILOT.md", category: "rules", agent: "aicopilot", format: "markdown" },
|
|
2021
2027
|
{ file: "AICOPILOT.md", category: "rules", agent: "aicopilot", format: "markdown" },
|
|
2022
2028
|
{ file: ".cursor/mcp.json", category: "mcp", agent: "cursor", format: "json" },
|
|
2023
|
-
{ file: ".
|
|
2029
|
+
{ file: "QWEN.md", category: "rules", agent: "qwen", format: "markdown" },
|
|
2030
|
+
{ file: ".agents/mcp_config.json", category: "mcp", agent: "antigravity", format: "json" },
|
|
2031
|
+
{ file: ".qwen/settings.json", category: "agent", agent: "qwen", format: "json" }
|
|
2024
2032
|
];
|
|
2025
2033
|
});
|
|
2026
2034
|
|
|
@@ -2113,7 +2121,7 @@ var init_sync_dir = __esm(() => {
|
|
|
2113
2121
|
var require_package = __commonJS((exports, module) => {
|
|
2114
2122
|
module.exports = {
|
|
2115
2123
|
name: "@hasna/instructions",
|
|
2116
|
-
version: "0.4.
|
|
2124
|
+
version: "0.4.7",
|
|
2117
2125
|
description: "AI coding agent instruction & configuration manager \u2014 store, version, apply, and share all your AI coding configs. CLI + MCP + HTTP API (instructions-serve) + generated SDK + Dashboard.",
|
|
2118
2126
|
type: "module",
|
|
2119
2127
|
main: "dist/index.js",
|
package/dist/types/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export declare const CONFIG_KINDS: readonly ["file", "reference"];
|
|
|
2
2
|
export type ConfigKind = (typeof CONFIG_KINDS)[number];
|
|
3
3
|
export declare const CONFIG_CATEGORIES: readonly ["agent", "rules", "mcp", "shell", "secrets_schema", "workspace", "git", "tools"];
|
|
4
4
|
export type ConfigCategory = (typeof CONFIG_CATEGORIES)[number];
|
|
5
|
-
export declare const CONFIG_AGENTS: readonly ["claude", "codex", "opencode", "cursor", "codewith", "aicopilot", "antigravity", "zsh", "git", "npm", "global"];
|
|
5
|
+
export declare const CONFIG_AGENTS: readonly ["claude", "codex", "opencode", "cursor", "codewith", "aicopilot", "antigravity", "qwen", "zsh", "git", "npm", "global"];
|
|
6
6
|
export type ConfigAgent = (typeof CONFIG_AGENTS)[number];
|
|
7
7
|
export declare const CONFIG_TRANSFORMS: readonly ["passthrough", "claude-passthrough", "codex-flat", "opencode-flat", "cursor-mdc", "skill-neutral"];
|
|
8
8
|
export type ConfigTransform = (typeof CONFIG_TRANSFORMS)[number];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,gCAAiC,CAAC;AAC3D,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAGvD,eAAO,MAAM,iBAAiB,4FASpB,CAAC;AACX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGhE,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/instructions",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.7",
|
|
4
4
|
"description": "AI coding agent instruction & configuration manager — store, version, apply, and share all your AI coding configs. CLI + MCP + HTTP API (instructions-serve) + generated SDK + Dashboard.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|