@shawnstack/quickforge 1.2.9 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +6 -6
  2. package/node_modules/@aws-sdk/client-bedrock-runtime/package.json +7 -7
  3. package/node_modules/@aws-sdk/core/package.json +2 -2
  4. package/node_modules/@aws-sdk/credential-provider-env/package.json +2 -2
  5. package/node_modules/@aws-sdk/credential-provider-http/package.json +2 -2
  6. package/node_modules/@aws-sdk/credential-provider-ini/package.json +9 -9
  7. package/node_modules/@aws-sdk/credential-provider-login/package.json +3 -3
  8. package/node_modules/@aws-sdk/credential-provider-node/package.json +7 -7
  9. package/node_modules/@aws-sdk/credential-provider-process/package.json +2 -2
  10. package/node_modules/@aws-sdk/credential-provider-sso/package.json +4 -4
  11. package/node_modules/@aws-sdk/credential-provider-web-identity/package.json +3 -3
  12. package/node_modules/@aws-sdk/middleware-user-agent/package.json +2 -2
  13. package/node_modules/@aws-sdk/middleware-websocket/package.json +2 -2
  14. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/cognito-identity/index.js +1 -1
  15. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/signin/index.js +1 -1
  16. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso/index.js +1 -1
  17. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sso-oidc/index.js +1 -1
  18. package/node_modules/@aws-sdk/nested-clients/dist-cjs/submodules/sts/index.js +1 -1
  19. package/node_modules/@aws-sdk/nested-clients/package.json +4 -4
  20. package/node_modules/@aws-sdk/token-providers/package.json +3 -3
  21. package/node_modules/@aws-sdk/util-user-agent-node/package.json +2 -2
  22. package/node_modules/@aws-sdk/xml-builder/package.json +2 -2
  23. package/node_modules/@types/node/README.md +1 -1
  24. package/node_modules/@types/node/package.json +3 -3
  25. package/node_modules/@types/node/sqlite.d.ts +54 -7
  26. package/node_modules/@types/node/test.d.ts +46 -4
  27. package/node_modules/@types/node/url.d.ts +4 -2
  28. package/node_modules/fast-xml-parser/CHANGELOG.md +7 -0
  29. package/node_modules/fast-xml-parser/README.md +0 -3
  30. package/node_modules/fast-xml-parser/lib/fxbuilder.min.js +1 -1
  31. package/node_modules/fast-xml-parser/lib/fxbuilder.min.js.map +1 -1
  32. package/node_modules/fast-xml-parser/lib/fxp.cjs +1 -1
  33. package/node_modules/fast-xml-parser/lib/fxp.d.cts +1 -0
  34. package/node_modules/fast-xml-parser/lib/fxp.min.js +1 -1
  35. package/node_modules/fast-xml-parser/lib/fxp.min.js.map +1 -1
  36. package/node_modules/fast-xml-parser/lib/fxparser.min.js +1 -1
  37. package/node_modules/fast-xml-parser/lib/fxparser.min.js.map +1 -1
  38. package/node_modules/fast-xml-parser/package.json +2 -4
  39. package/node_modules/fast-xml-parser/src/fxp.d.ts +1 -0
  40. package/node_modules/fast-xml-parser/src/xmlparser/OrderedObjParser.js +1 -1
  41. package/node_modules/fast-xml-parser/src/xmlparser/node2json.js +4 -0
  42. package/node_modules/undici-types/connector.d.ts +2 -0
  43. package/node_modules/undici-types/dispatcher.d.ts +7 -5
  44. package/node_modules/undici-types/errors.d.ts +17 -1
  45. package/node_modules/undici-types/index.d.ts +4 -1
  46. package/node_modules/undici-types/interceptors.d.ts +7 -0
  47. package/node_modules/undici-types/package.json +1 -1
  48. package/node_modules/undici-types/socks5-proxy-agent.d.ts +25 -0
  49. package/package.json +1 -1
  50. package/server/system-prompt.mjs +5 -0
  51. package/skills/ai-context-package/SKILL.md +0 -104
  52. package/skills/ai-context-package/skill.json +0 -9
  53. package/skills/code-review/SKILL.md +0 -23
  54. package/skills/code-review/skill.json +0 -9
  55. package/skills/frontend-react/SKILL.md +0 -22
  56. package/skills/frontend-react/skill.json +0 -9
  57. package/skills/quickforge-project/SKILL.md +0 -22
  58. package/skills/quickforge-project/skill.json +0 -9
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fast-xml-parser",
3
- "version": "5.7.2",
3
+ "version": "5.7.3",
4
4
  "description": "Validate XML, Parse XML, Build XML without C/C++ based libraries",
5
5
  "main": "./lib/fxp.cjs",
6
6
  "type": "module",
@@ -23,7 +23,6 @@
23
23
  "test": "c8 --reporter=lcov --reporter=text jasmine spec/*spec.js",
24
24
  "test-types": "tsc --noEmit spec/typings/typings-test.ts",
25
25
  "unit": "jasmine",
26
- "coverage": "nyc report --reporter html --reporter text -t .nyc_output --report-dir .nyc_output/summary",
27
26
  "perf": "node ./benchmark/perfTest3.js",
28
27
  "lint": "eslint src/**/*.js spec/**/*.js benchmark/**/*.js",
29
28
  "bundle": "webpack --config webpack.cjs.config.js",
@@ -72,7 +71,6 @@
72
71
  "babel-loader": "^8.2.2",
73
72
  "c8": "^10.1.3",
74
73
  "eslint": "^8.3.0",
75
- "he": "^1.2.0",
76
74
  "jasmine": "^5.6.0",
77
75
  "prettier": "^3.5.1",
78
76
  "publish-please": "^5.5.2",
@@ -88,7 +86,7 @@
88
86
  ],
89
87
  "dependencies": {
90
88
  "@nodable/entities": "^2.1.0",
91
- "fast-xml-builder": "^1.1.5",
89
+ "fast-xml-builder": "^1.1.7",
92
90
  "path-expression-matcher": "^1.5.0",
93
91
  "strnum": "^2.2.3"
94
92
  }
@@ -701,6 +701,7 @@ export class XMLParser {
701
701
  * Add Entity which is not by default supported by this library
702
702
  * @param entityIdentifier {string} Eg: 'ent' for &ent;
703
703
  * @param entityValue {string} Eg: '\r'
704
+ * @deprecated Use `entityDecoder` instead
704
705
  */
705
706
  addEntity(entityIdentifier: string, entityValue: string): void;
706
707
 
@@ -776,7 +776,7 @@ function readStopNodeData(xmlData, tagName, i) {
776
776
  const closeIndex = findClosingIndex(xmlData, "]]>", i, "StopNode is not closed.") - 2;
777
777
  i = closeIndex;
778
778
  } else {
779
- const tagData = readTagExp(xmlData, i, '>')
779
+ const tagData = readTagExp(xmlData, i, false)
780
780
 
781
781
  if (tagData) {
782
782
  const openTagName = tagData && tagData.tagName;
@@ -71,6 +71,10 @@ function compress(arr, options, matcher, readonlyMatcher) {
71
71
  let val = compress(tagObj[property], options, matcher, readonlyMatcher);
72
72
  const isLeaf = isLeafTag(val, options);
73
73
 
74
+ if (Object.keys(val).length === 0 && options.alwaysCreateTextNode) {
75
+ val[options.textNodeName] = "";
76
+ }
77
+
74
78
  if (tagObj[":@"]) {
75
79
  assignAttributes(val, tagObj[":@"], readonlyMatcher, options);
76
80
  } else if (Object.keys(val).length === 1 && val[options.textNodeName] !== undefined && !options.alwaysCreateTextNode) {
@@ -13,6 +13,7 @@ declare namespace buildConnector {
13
13
  port?: number;
14
14
  keepAlive?: boolean | null;
15
15
  keepAliveInitialDelay?: number | null;
16
+ typeOfService?: number | null;
16
17
  }
17
18
 
18
19
  export interface Options {
@@ -22,6 +23,7 @@ declare namespace buildConnector {
22
23
  port: string
23
24
  servername?: string
24
25
  localAddress?: string | null
26
+ socketPath?: string | null
25
27
  httpSocket?: Socket
26
28
  }
27
29
 
@@ -96,7 +96,7 @@ declare class Dispatcher extends EventEmitter {
96
96
  }
97
97
 
98
98
  declare namespace Dispatcher {
99
- export interface ComposedDispatcher extends Dispatcher {}
99
+ export interface ComposedDispatcher extends Dispatcher { }
100
100
  export type Dispatch = Dispatcher['dispatch']
101
101
  export type DispatcherComposeInterceptor = (dispatch: Dispatch) => Dispatch
102
102
  export interface DispatchOptions {
@@ -113,6 +113,8 @@ declare namespace Dispatcher {
113
113
  idempotent?: boolean;
114
114
  /** Whether the response is expected to take a long time and would end up blocking the pipeline. When this is set to `true` further pipelining will be avoided on the same connection until headers have been received. Defaults to `method !== 'HEAD'`. */
115
115
  blocking?: boolean;
116
+ /** The IP Type of Service (ToS) value for the request socket. Must be an integer between 0 and 255. Default: `0` */
117
+ typeOfService?: number | null;
116
118
  /** Upgrade the request. Should be used to specify the kind of upgrade i.e. `'Websocket'`. Default: `method === 'CONNECT' || null`. */
117
119
  upgrade?: boolean | string | null;
118
120
  /** The amount of time, in milliseconds, the parser will wait to receive the complete HTTP headers. Defaults to 300 seconds. */
@@ -213,10 +215,10 @@ declare namespace Dispatcher {
213
215
  export type StreamFactory<TOpaque = null> = (data: StreamFactoryData<TOpaque>) => Writable
214
216
 
215
217
  export interface DispatchController {
216
- get aborted () : boolean
217
- get paused () : boolean
218
- get reason () : Error | null
219
- abort (reason: Error): void
218
+ get aborted(): boolean
219
+ get paused(): boolean
220
+ get reason(): Error | null
221
+ abort(reason: Error): void
220
222
  pause(): void
221
223
  resume(): void
222
224
  }
@@ -154,8 +154,24 @@ declare namespace Errors {
154
154
  code: 'UND_ERR_PRX_TLS'
155
155
  }
156
156
 
157
- class MaxOriginsReachedError extends UndiciError {
157
+ export class MaxOriginsReachedError extends UndiciError {
158
158
  name: 'MaxOriginsReachedError'
159
159
  code: 'UND_ERR_MAX_ORIGINS_REACHED'
160
160
  }
161
+
162
+ /** SOCKS5 proxy related error. */
163
+ export class Socks5ProxyError extends UndiciError {
164
+ constructor (
165
+ message?: string,
166
+ code?: string
167
+ )
168
+ name: 'Socks5ProxyError'
169
+ code: string
170
+ }
171
+
172
+ /** WebSocket decompressed message exceeded maximum size. */
173
+ export class MessageSizeExceededError extends UndiciError {
174
+ name: 'MessageSizeExceededError'
175
+ code: 'UND_ERR_WS_MESSAGE_SIZE_EXCEEDED'
176
+ }
161
177
  }
@@ -18,6 +18,7 @@ import { SnapshotAgent } from './snapshot-agent'
18
18
  import { MockCallHistory, MockCallHistoryLog } from './mock-call-history'
19
19
  import mockErrors from './mock-errors'
20
20
  import ProxyAgent from './proxy-agent'
21
+ import Socks5ProxyAgent from './socks5-proxy-agent'
21
22
  import EnvHttpProxyAgent from './env-http-proxy-agent'
22
23
  import RetryHandler from './retry-handler'
23
24
  import RetryAgent from './retry-agent'
@@ -43,7 +44,7 @@ export { Interceptable } from './mock-interceptor'
43
44
 
44
45
  declare function globalThisInstall (): void
45
46
 
46
- export { Dispatcher, BalancedPool, RoundRobinPool, Pool, Client, buildConnector, errors, Agent, request, stream, pipeline, connect, upgrade, setGlobalDispatcher, getGlobalDispatcher, setGlobalOrigin, getGlobalOrigin, interceptors, cacheStores, MockClient, MockPool, MockAgent, SnapshotAgent, MockCallHistory, MockCallHistoryLog, mockErrors, ProxyAgent, EnvHttpProxyAgent, RedirectHandler, DecoratorHandler, RetryHandler, RetryAgent, H2CClient, globalThisInstall as install }
47
+ export { Dispatcher, BalancedPool, RoundRobinPool, Pool, Client, buildConnector, errors, Agent, request, stream, pipeline, connect, upgrade, setGlobalDispatcher, getGlobalDispatcher, setGlobalOrigin, getGlobalOrigin, interceptors, cacheStores, MockClient, MockPool, MockAgent, SnapshotAgent, MockCallHistory, MockCallHistoryLog, mockErrors, ProxyAgent, Socks5ProxyAgent, EnvHttpProxyAgent, RedirectHandler, DecoratorHandler, RetryHandler, RetryAgent, H2CClient, globalThisInstall as install }
47
48
  export default Undici
48
49
 
49
50
  declare namespace Undici {
@@ -73,6 +74,8 @@ declare namespace Undici {
73
74
  const MockCallHistory: typeof import('./mock-call-history').MockCallHistory
74
75
  const MockCallHistoryLog: typeof import('./mock-call-history').MockCallHistoryLog
75
76
  const mockErrors: typeof import('./mock-errors').default
77
+ const ProxyAgent: typeof import('./proxy-agent').default
78
+ const Socks5ProxyAgent: typeof import('./socks5-proxy-agent').default
76
79
  const fetch: typeof import('./fetch').fetch
77
80
  const Headers: typeof import('./fetch').Headers
78
81
  const Response: typeof import('./fetch').Response
@@ -60,6 +60,13 @@ declare namespace Interceptors {
60
60
  * @default []
61
61
  */
62
62
  excludeHeaderNames?: string[]
63
+ /**
64
+ * Maximum bytes buffered per paused waiting deduplicated handler.
65
+ * If a waiting handler remains paused and exceeds this threshold,
66
+ * it is failed with an abort error to prevent unbounded memory growth.
67
+ * @default 5 * 1024 * 1024
68
+ */
69
+ maxBufferSize?: number
63
70
  }
64
71
 
65
72
  export function dump (opts?: DumpInterceptorOpts): Dispatcher.DispatcherComposeInterceptor
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "undici-types",
3
- "version": "7.21.0",
3
+ "version": "7.24.6",
4
4
  "description": "A stand-alone types package for Undici",
5
5
  "homepage": "https://undici.nodejs.org",
6
6
  "bugs": {
@@ -0,0 +1,25 @@
1
+ import Dispatcher from './dispatcher'
2
+ import buildConnector from './connector'
3
+ import { IncomingHttpHeaders } from './header'
4
+ import Pool from './pool'
5
+
6
+ export default Socks5ProxyAgent
7
+
8
+ declare class Socks5ProxyAgent extends Dispatcher {
9
+ constructor (proxyUrl: string | URL, options?: Socks5ProxyAgent.Options)
10
+ }
11
+
12
+ declare namespace Socks5ProxyAgent {
13
+ export interface Options extends Pool.Options {
14
+ /** Additional headers to send with the proxy connection */
15
+ headers?: IncomingHttpHeaders;
16
+ /** SOCKS5 proxy username for authentication */
17
+ username?: string;
18
+ /** SOCKS5 proxy password for authentication */
19
+ password?: string;
20
+ /** Custom connector function for proxy connection */
21
+ connect?: buildConnector.connector;
22
+ /** TLS options for the proxy connection (for SOCKS5 over TLS) */
23
+ proxyTls?: buildConnector.BuildOptions;
24
+ }
25
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shawnstack/quickforge",
3
- "version": "1.2.9",
3
+ "version": "1.3.0",
4
4
  "description": "AI chat application with YOLO-mode local workspace tools. React + Vite + Tailwind CSS frontend, local Node.js storage server.",
5
5
  "keywords": [
6
6
  "ai",
@@ -1,6 +1,11 @@
1
1
  export const BASE_SYSTEM_PROMPT = `You are a pragmatic coding assistant.
2
2
 
3
3
  For project tasks:
4
+ - Do not assume requirements. If ambiguous, state assumptions or ask.
5
+ - Prefer the simplest solution that satisfies the request.
6
+ - Make surgical changes only. Do not refactor unrelated code.
7
+ - Match existing style.
8
+ - For multi-step work, use a brief plan.
4
9
  - Inspect the workspace before changing files.
5
10
  - Make minimal, focused changes.
6
11
  - Prefer dedicated workspace tools for reading, editing, and searching files.
@@ -1,104 +0,0 @@
1
- ---
2
- name: ai-context-package
3
- description: Use this skill when the user wants to prepare, fill, review, or enforce an AI task context package before coding, including task scope, constraints, validation commands, stop conditions, and expected output format.
4
- metadata:
5
- displayName: AI Context Package
6
- version: "1.0.0"
7
- tags: context, planning, template
8
- ---
9
- # AI Context Package Skill
10
-
11
- ## Purpose
12
-
13
- Produce a clear, bounded context package that helps an AI coding assistant understand the project, task goal, accepted scope, constraints, validation commands, and expected delivery format.
14
-
15
- ## Template
16
-
17
- ```md
18
- # AI 上下文包:{TASK_NAME}
19
-
20
- ## 1. 项目概况
21
- - 项目名称:{PROJECT_NAME}
22
- - 项目定位:{PROJECT_SUMMARY}
23
- - 技术栈:{TECH_STACK}
24
- - 当前环境:{ENV}
25
-
26
- ## 2. 相关文档
27
- - 项目知识地图:{PROJECT_KNOWLEDGE_DOC_PATH}
28
- - 技术栈学习地图:{TECH_STACK_DOC_PATH}
29
- - 模块设计文档:{MODULE_DOC_PATH}
30
- - 解决方案文档:{SOLUTION_DOC_PATH}
31
- - 接口文档/产品文档:{REQUIREMENT_DOC_PATH}
32
-
33
- ## 3. 任务目标
34
- {BUSINESS_GOAL}
35
-
36
- ## 4. 验收标准
37
- {ACCEPTANCE_CRITERIA}
38
-
39
- ## 5. 变更范围
40
- 允许修改:
41
- {ALLOWED_FILES_OR_MODULES}
42
-
43
- 禁止修改:
44
- {FORBIDDEN_FILES_OR_MODULES}
45
-
46
- ## 6. 相关代码入口
47
- | 类型 | 路径 | 说明 |
48
- |---|---|---|
49
- | 入口/API | | |
50
- | Service | | |
51
- | DAO/Repository | | |
52
- | 配置 | | |
53
- | 测试 | | |
54
-
55
- ## 7. 已确定方案
56
- {SOLUTION_SUMMARY}
57
-
58
- ## 8. 约束条件
59
- - 不做无关重构。
60
- - 不引入新依赖,除非明确说明。
61
- - 不改变公共接口契约,除非有兼容方案。
62
- - 不修改数据库结构,除非有迁移和回滚。
63
- - 不泄露密钥和敏感数据。
64
- - {OTHER_CONSTRAINTS}
65
-
66
- ## 9. 验证方式
67
- - 测试命令:{TEST_COMMAND}
68
- - 构建命令:{BUILD_COMMAND}
69
- - 手工验证步骤:{MANUAL_VALIDATION}
70
-
71
- ## 10. 停止条件
72
- 遇到以下情况先停止,不要继续改代码:
73
- - 代码事实与方案文档冲突。
74
- - 需要扩大修改范围。
75
- - 涉及数据库破坏性变更。
76
- - 涉及权限扩大或敏感数据。
77
- - 测试命令不可用且无法判断影响。
78
- - {OTHER_STOP_CONDITIONS}
79
-
80
- ## 11. 期望 AI 输出
81
- - 修改前理解。
82
- - 修改文件清单。
83
- - 每个文件变更说明。
84
- - 测试/构建结果。
85
- - 风险点。
86
- - 回滚方式。
87
- - 未完成项。
88
- ```
89
-
90
- ## Workflow
91
-
92
- 1. If the user provides only the template, treat it as a reusable task-context skill/template.
93
- 2. If fields are missing, ask only for the fields needed to proceed, or fill safe placeholders like `待补充` when the user wants a draft.
94
- 3. Before coding, restate the task understanding and explicitly list allowed and forbidden change scope.
95
- 4. Inspect the relevant docs/code entries before changing files.
96
- 5. Stop and ask for confirmation when any stop condition is met.
97
- 6. After changes, report using the expected AI output sections.
98
-
99
- ## Output Rules
100
-
101
- - Keep the context package structured and copyable as Markdown.
102
- - Do not invent requirements. Mark unknown values as `待补充`.
103
- - Prefer concrete file/module paths over broad descriptions.
104
- - Keep validation commands explicit.
@@ -1,9 +0,0 @@
1
- {
2
- "name": "ai-context-package",
3
- "displayName": "AI Context Package",
4
- "description": "Create a structured task context package for AI coding work, including goals, docs, scope, constraints, validation, and expected output.",
5
- "version": "1.0.0",
6
- "tags": ["context", "planning", "task", "requirements", "ai"],
7
- "triggers": ["上下文包", "AI 上下文", "context package", "任务上下文", "验收标准", "变更范围"],
8
- "entry": "SKILL.md"
9
- }
@@ -1,23 +0,0 @@
1
- ---
2
- name: code-review
3
- description: Use this skill when the user asks for code review, PR review, bug finding, quality checks, security/performance/maintainability review, or wants feedback on code changes.
4
- metadata:
5
- displayName: Code Review
6
- version: "1.0.0"
7
- tags: code, review, quality
8
- ---
9
- # Code Review Skill
10
-
11
- ## Workflow
12
-
13
- 1. Understand the requested change and inspect the relevant files before judging.
14
- 2. Focus on correctness, regressions, security, data loss, performance, and maintainability.
15
- 3. Prefer concrete findings over generic advice.
16
- 4. If proposing changes, keep them small and directly related to the review.
17
- 5. Verify with targeted tests, lint, typecheck, build, or a focused command when practical.
18
-
19
- ## Output
20
-
21
- - Start with the highest-risk findings.
22
- - For each finding include the file/location, risk, why it matters, and a concise fix.
23
- - If no major issues are found, say so clearly and mention any checks performed.
@@ -1,9 +0,0 @@
1
- {
2
- "name": "code-review",
3
- "displayName": "Code Review",
4
- "description": "Review code changes for correctness, bugs, security, performance, and maintainability.",
5
- "version": "1.0.0",
6
- "tags": ["code", "review", "quality"],
7
- "triggers": ["code review", "review code", "pr review", "代码审查", "检查代码"],
8
- "entry": "SKILL.md"
9
- }
@@ -1,22 +0,0 @@
1
- ---
2
- name: frontend-react
3
- description: Use this skill for React, TypeScript, frontend UI, layout, component work, accessibility, styling, or browser interaction changes.
4
- metadata:
5
- displayName: React Frontend
6
- version: "1.0.0"
7
- tags: react, frontend, typescript, ui
8
- ---
9
- # React Frontend Skill
10
-
11
- ## Guidelines
12
-
13
- - Match the existing component style and design language.
14
- - Prefer simple controlled state and small components over broad rewrites.
15
- - Keep accessibility in mind: labels, aria attributes, keyboard escape/submit behavior, and focus states.
16
- - Preserve existing behavior unless the user explicitly asks to change it.
17
- - Avoid adding new dependencies for basic UI interactions.
18
- - After changes, run typecheck/build or the smallest relevant verification command.
19
-
20
- ## Output
21
-
22
- Briefly summarize what changed and what verification was run.
@@ -1,9 +0,0 @@
1
- {
2
- "name": "frontend-react",
3
- "displayName": "React Frontend",
4
- "description": "Build and modify React UI with TypeScript, accessible interactions, and minimal focused changes.",
5
- "version": "1.0.0",
6
- "tags": ["react", "frontend", "typescript", "ui"],
7
- "triggers": ["react", "frontend", "ui", "组件", "前端", "界面"],
8
- "entry": "SKILL.md"
9
- }
@@ -1,22 +0,0 @@
1
- ---
2
- name: quickforge-project
3
- description: Use this skill when modifying the QuickForge application, including its React/Vite frontend, local Node.js backend, storage, project chats, workspace tools, skills, or local-only safety behavior.
4
- metadata:
5
- displayName: QuickForge Project
6
- version: "1.0.0"
7
- tags: quickforge, project, local-agent
8
- ---
9
- # QuickForge Project Skill
10
-
11
- ## Project Rules
12
-
13
- - Make surgical changes only; avoid broad refactors.
14
- - Keep server API changes small and local to `server/routes` or dedicated modules.
15
- - Keep frontend state changes explicit and close to the component/hook that owns them.
16
- - Preserve local-only safety assumptions for workspace access.
17
- - For project-scoped features, persist configuration in the project config where possible.
18
- - Verify with `npm run build` or a targeted command before finishing.
19
-
20
- ## Notes
21
-
22
- QuickForge has a React/Vite frontend and a local Node.js backend. Project chats can use workspace tools when YOLO mode is enabled.
@@ -1,9 +0,0 @@
1
- {
2
- "name": "quickforge-project",
3
- "displayName": "QuickForge Project",
4
- "description": "Work within QuickForge conventions: local server, project chats, YOLO workspace tools, and minimal surgical changes.",
5
- "version": "1.0.0",
6
- "tags": ["quickforge", "project", "workspace"],
7
- "triggers": ["quickforge", "项目", "本项目"],
8
- "entry": "SKILL.md"
9
- }