@team-ai/teamai-cli 0.22.3 → 0.22.5
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/dist/cli.js +71 -42
- package/package.json +1 -1
- package/skill-data/core/references/commands.md +1 -1
package/dist/cli.js
CHANGED
|
@@ -61237,12 +61237,35 @@ function isBindPromptEnabled() {
|
|
|
61237
61237
|
const normalized = flag.toLowerCase();
|
|
61238
61238
|
return normalized !== "0" && normalized !== "false";
|
|
61239
61239
|
}
|
|
61240
|
-
function
|
|
61241
|
-
if (config.
|
|
61242
|
-
return config.
|
|
61240
|
+
function resolveProjectAssociationMode(config) {
|
|
61241
|
+
if (config.projectAssociationMode === "auto" || config.projectAssociationMode === "manual") {
|
|
61242
|
+
return config.projectAssociationMode;
|
|
61243
61243
|
}
|
|
61244
61244
|
return "unset";
|
|
61245
61245
|
}
|
|
61246
|
+
function bindingHintText(projects) {
|
|
61247
|
+
const skipNum = projects.length + 1;
|
|
61248
|
+
const choices = projects.map((p2, i2) => `${i2 + 1}. \u7ED1\u5B9A\u5230\u300C${p2.name}\u300D\u9879\u76EE`);
|
|
61249
|
+
const actions = projects.map((p2, i2) => `- \u7528\u6237\u56DE\u590D ${i2 + 1} \u2192 \u6267\u884C \`teamai bind-project --project-id ${p2.id}\`\uFF0C\u5B8C\u6210\u540E\u56DE\u590D"\u7ED1\u5B9A\u5B8C\u6210\uFF0C\u8BF7\u5F00\u65B0\u4F1A\u8BDD\u751F\u6548"`);
|
|
61250
|
+
return [
|
|
61251
|
+
BINDING_HINT_HEADER,
|
|
61252
|
+
"\u4E0B\u9762\u662F\u7ED9\u52A9\u624B\u7684\u8BF4\u660E\uFF0C\u4E0D\u8981\u5C55\u793A\u7ED9\u7528\u6237\u3002",
|
|
61253
|
+
"\u8BF7\u7528\u4EA4\u4E92\u5F0F\u5355\u9009\u5411\u7528\u6237\u63D0\u95EE\uFF0C\u548C\u300C\u9879\u76EE\u5173\u8054\u65B9\u5F0F\u300D\u7528\u540C\u4E00\u79CD\u9009\u62E9\u5361\u7247\u3002",
|
|
61254
|
+
"\u6807\u9898\u7528\u300C\u9879\u76EE\u7ED1\u5B9A\u300D\u3002\u5361\u7247\u91CC\u53EA\u653E\u300C\u5C55\u793A\u7ED9\u7528\u6237\u300D\u7684\u8BF4\u660E\u548C\u9009\u9879\uFF0C\u9009\u9879\u6587\u5B57\u4FDD\u6301\u4E0D\u53D8\u3002",
|
|
61255
|
+
"\u4E0D\u8981\u628A\u672C\u6BB5\u8BF4\u660E\u3001\u65B9\u62EC\u53F7\u6807\u8BB0\u6216\u6267\u884C\u89C4\u5219\u5C55\u793A\u51FA\u6765\u3002\u7528\u6237\u9009\u5B9A\u540E\uFF0C\u6309\u6267\u884C\u89C4\u5219\u8FD0\u884C\u5BF9\u5E94\u547D\u4EE4\u3002",
|
|
61256
|
+
"",
|
|
61257
|
+
"\u5C55\u793A\u7ED9\u7528\u6237\uFF1A",
|
|
61258
|
+
"\u6807\u9898\uFF1A\u9879\u76EE\u7ED1\u5B9A",
|
|
61259
|
+
"\u8BF4\u660E\uFF1A\u5F53\u524D\u5DE5\u4F5C\u533A\u8FD8\u6CA1\u7ED1\u5B9A ClawPro \u9879\u76EE\u3002\u7ED1\u5B9A\u540E\u53EF\u4EE5\u540C\u6B65\u56E2\u961F\u7684 skills \u548C rules\u3002",
|
|
61260
|
+
"\u9009\u9879\uFF1A",
|
|
61261
|
+
...choices,
|
|
61262
|
+
`${skipNum}. \u4E0D\u7ED1\u5B9A\uFF0C\u4EE5\u540E\u4E5F\u4E0D\u518D\u63D0\u793A`,
|
|
61263
|
+
"",
|
|
61264
|
+
"\u6267\u884C\u89C4\u5219\uFF08\u4E0D\u8981\u5C55\u793A\u7ED9\u7528\u6237\uFF09\uFF1A",
|
|
61265
|
+
...actions,
|
|
61266
|
+
`- \u7528\u6237\u56DE\u590D ${skipNum} \u2192 \u6267\u884C \`teamai bind-project --skip\`\uFF0C\u5B8C\u6210\u540E\u56DE\u590D"\u5DF2\u8DF3\u8FC7\uFF0C\u4EE5\u540E\u4E0D\u518D\u63D0\u793A"`
|
|
61267
|
+
].join("\n");
|
|
61268
|
+
}
|
|
61246
61269
|
async function emitPromptModeChooser(config, workspacePath, sessionId, cwd) {
|
|
61247
61270
|
if (config.workspaceBindings[workspacePath]) return;
|
|
61248
61271
|
if (await inheritWorktreeBinding(config, cwd, workspacePath)) return;
|
|
@@ -61254,18 +61277,21 @@ async function emitPromptModeChooser(config, workspacePath, sessionId, cwd) {
|
|
|
61254
61277
|
} catch {
|
|
61255
61278
|
}
|
|
61256
61279
|
const context = [
|
|
61257
|
-
"[ClawPro\u9879\u76EE \u5173\u8054\u65B9\u5F0F]
|
|
61258
|
-
"",
|
|
61259
|
-
"
|
|
61260
|
-
"\
|
|
61280
|
+
"[ClawPro\u9879\u76EE \u5173\u8054\u65B9\u5F0F]",
|
|
61281
|
+
"\u4E0B\u9762\u662F\u7ED9\u52A9\u624B\u7684\u8BF4\u660E\uFF0C\u4E0D\u8981\u5C55\u793A\u7ED9\u7528\u6237\u3002",
|
|
61282
|
+
"\u8BF7\u7528\u4EA4\u4E92\u5F0F\u5355\u9009\u5411\u7528\u6237\u63D0\u95EE\u3002\u6807\u9898\u7528\u300C\u9879\u76EE\u5173\u8054\u65B9\u5F0F\u300D\u3002\u5361\u7247\u91CC\u53EA\u653E\u4E0B\u9762\u7684\u8BF4\u660E\u548C\u9009\u9879\uFF0C\u9009\u9879\u6587\u5B57\u4FDD\u6301\u4E0D\u53D8\u3002",
|
|
61283
|
+
"\u4E0D\u8981\u628A\u672C\u6BB5\u8BF4\u660E\u6216\u6267\u884C\u89C4\u5219\u5C55\u793A\u51FA\u6765\u3002\u7528\u6237\u9009\u5B9A\u540E\uFF0C\u6309\u6267\u884C\u89C4\u5219\u8FD0\u884C\u5BF9\u5E94\u547D\u4EE4\u3002",
|
|
61261
61284
|
"",
|
|
61262
|
-
"
|
|
61263
|
-
"
|
|
61264
|
-
"
|
|
61285
|
+
"\u5C55\u793A\u7ED9\u7528\u6237\uFF1A",
|
|
61286
|
+
"\u6807\u9898\uFF1A\u9879\u76EE\u5173\u8054\u65B9\u5F0F",
|
|
61287
|
+
"\u8BF4\u660E\uFF1A\u5F53\u524D\u8BBE\u5907\u5C1A\u672A\u9009\u62E9 ClawPro \u9879\u76EE\u5173\u8054\u65B9\u5F0F\u3002",
|
|
61288
|
+
"\u9009\u9879\uFF1A",
|
|
61289
|
+
"1. \u4E3B\u52A8\u63D0\u9192\uFF1A\u6BCF\u4E2A\u672A\u7ED1\u5B9A\u5DE5\u4F5C\u533A\u90FD\u63D0\u9192\u7ED1\u5B9A\u9879\u76EE\uFF08\u6709\u53EF\u7ED1\u5B9A\u9879\u76EE\u65F6\uFF09",
|
|
61290
|
+
"2. \u624B\u52A8\u5173\u8054\uFF1A\u4E4B\u540E\u81EA\u5DF1\u5173\u8054\u9879\u76EE\uFF0C\u4E0D\u518D\u4E3B\u52A8\u63D0\u9192",
|
|
61265
61291
|
"",
|
|
61266
61292
|
"\u6267\u884C\u89C4\u5219\uFF08\u4E0D\u8981\u5C55\u793A\u7ED9\u7528\u6237\uFF09\uFF1A",
|
|
61267
|
-
|
|
61268
|
-
"- \u7528\u6237\u56DE\u590D 2 \u2192 \u6267\u884C `teamai bind-project --
|
|
61293
|
+
`- \u7528\u6237\u56DE\u590D 1 \u2192 \u6267\u884C \`teamai bind-project --project-association-mode auto\`\u3002\u82E5\u8F93\u51FA\u5305\u542B\u300C${BINDING_HINT_HEADER}\u300D\uFF0C\u7528\u540C\u6837\u7684\u4EA4\u4E92\u5F0F\u5355\u9009\u5411\u7528\u6237\u63D0\u95EE\uFF0C\u6807\u9898\u7528\u300C\u9879\u76EE\u7ED1\u5B9A\u300D\uFF0C\u53EA\u5C55\u793A\u5176\u4E2D\u300C\u5C55\u793A\u7ED9\u7528\u6237\u300D\u7684\u8BF4\u660E\u548C\u9009\u9879\uFF0C\u518D\u6309\u5176\u4E2D\u7684\u6267\u884C\u89C4\u5219\u7EE7\u7EED\u3002\u82E5\u6CA1\u6709\u8BE5\u63D0\u793A\uFF0C\u56DE\u590D"\u5DF2\u5F00\u542F\u4E3B\u52A8\u63D0\u9192\u3002\u4E4B\u540E\u6BCF\u4E2A\u672A\u7ED1\u5B9A\u5DE5\u4F5C\u533A\uFF0C\u53EA\u8981\u6709\u53EF\u7ED1\u5B9A\u9879\u76EE\uFF0C\u90FD\u4F1A\u63D0\u9192\u7ED1\u5B9A\u3002"`,
|
|
61294
|
+
"- \u7528\u6237\u56DE\u590D 2 \u2192 \u6267\u884C `teamai bind-project --project-association-mode manual`\uFF0C\u5B8C\u6210\u540E\u628A\u4E0B\u9762\u8FD9\u6BB5\u5C55\u793A\u7ED9\u7528\u6237\uFF1A",
|
|
61269
61295
|
MANUAL_ASSOCIATION_COMMANDS
|
|
61270
61296
|
].join("\n");
|
|
61271
61297
|
const hookOutput = JSON.stringify({
|
|
@@ -61317,23 +61343,7 @@ async function emitBindingHint(config, workspacePath, sessionId, cwd) {
|
|
|
61317
61343
|
fs32.writeFileSync(statePath, JSON.stringify({ empty: false, workspaces: [...reminded] }));
|
|
61318
61344
|
} catch {
|
|
61319
61345
|
}
|
|
61320
|
-
const
|
|
61321
|
-
const choices = projects.map((p2, i2) => `${i2 + 1}. \u7ED1\u5B9A\u5230\u300C${p2.name}\u300D\u9879\u76EE`);
|
|
61322
|
-
const actions = projects.map((p2, i2) => `- \u7528\u6237\u56DE\u590D ${i2 + 1} \u2192 \u6267\u884C \`teamai bind-project --project-id ${p2.id}\`\uFF0C\u5B8C\u6210\u540E\u56DE\u590D"\u7ED1\u5B9A\u5B8C\u6210\uFF0C\u8BF7\u5F00\u65B0\u4F1A\u8BDD\u751F\u6548"`);
|
|
61323
|
-
const context = [
|
|
61324
|
-
"[ClawPro\u9879\u76EE \u7ED1\u5B9A\u63D0\u793A] \u4F60\u5FC5\u987B\u539F\u6837\u5C55\u793A\u4E0B\u9762\u7684\u9009\u9879\u5217\u8868\uFF0C\u4E0D\u5F97\u4FEE\u6539\u7F16\u53F7\u6216\u5185\u5BB9\u3002\u7B49\u7528\u6237\u56DE\u590D\u6570\u5B57\u540E\u6267\u884C\u5BF9\u5E94\u547D\u4EE4\u3002",
|
|
61325
|
-
"",
|
|
61326
|
-
"---",
|
|
61327
|
-
"\u5F53\u524D\u5DE5\u4F5C\u533A\u672A\u7ED1\u5B9AClawPro\u9879\u76EE\u3002\u7ED1\u5B9A\u540E\u53EF\u540C\u6B65\u56E2\u961F skills/rules\u3002\u8BF7\u56DE\u590D\u6570\u5B57\u9009\u62E9\uFF1A",
|
|
61328
|
-
"",
|
|
61329
|
-
...choices,
|
|
61330
|
-
`${skipNum}. \u4E0D\u7ED1\u5B9A\uFF0C\u4EE5\u540E\u4E5F\u4E0D\u518D\u63D0\u793A`,
|
|
61331
|
-
"---",
|
|
61332
|
-
"",
|
|
61333
|
-
"\u6267\u884C\u89C4\u5219\uFF08\u4E0D\u8981\u5C55\u793A\u7ED9\u7528\u6237\uFF09\uFF1A",
|
|
61334
|
-
...actions,
|
|
61335
|
-
`- \u7528\u6237\u56DE\u590D ${skipNum} \u2192 \u6267\u884C \`teamai bind-project --skip\`\uFF0C\u5B8C\u6210\u540E\u56DE\u590D"\u5DF2\u8DF3\u8FC7\uFF0C\u4EE5\u540E\u4E0D\u518D\u63D0\u793A"`
|
|
61336
|
-
].join("\n");
|
|
61346
|
+
const context = bindingHintText(projects);
|
|
61337
61347
|
const hookOutput = JSON.stringify({
|
|
61338
61348
|
hookSpecificOutput: {
|
|
61339
61349
|
hookEventName: "UserPromptSubmit",
|
|
@@ -63299,7 +63309,7 @@ async function syncLocalAgent(context) {
|
|
|
63299
63309
|
const workspacePath = await resolveWorkspacePath(context.cwd);
|
|
63300
63310
|
if (workspacePath) {
|
|
63301
63311
|
const sid = context.event?.sessionId;
|
|
63302
|
-
const mode =
|
|
63312
|
+
const mode = resolveProjectAssociationMode(config);
|
|
63303
63313
|
if (mode === "unset" && context.event?.type === "prompt_submit") {
|
|
63304
63314
|
await emitPromptModeChooser(config, workspacePath, sid, context.cwd);
|
|
63305
63315
|
} else if (mode === "auto" && context.event?.type === "prompt_submit") {
|
|
@@ -63505,7 +63515,7 @@ async function initLocalAgentHttp(options2) {
|
|
|
63505
63515
|
userGroupName: existing2?.userGroupName,
|
|
63506
63516
|
// A re-init keeps auto/manual. A first install, and an older config that
|
|
63507
63517
|
// never recorded a choice, both ask once.
|
|
63508
|
-
|
|
63518
|
+
projectAssociationMode: existing2?.projectAssociationMode === "auto" || existing2?.projectAssociationMode === "manual" ? existing2.projectAssociationMode : "unset"
|
|
63509
63519
|
};
|
|
63510
63520
|
await ensureDir(getLocalAgentHome());
|
|
63511
63521
|
await saveLocalAgentConfig(config);
|
|
@@ -63737,27 +63747,45 @@ async function finishAgentHookTeardown(retry, left = { models: [], caches: [] })
|
|
|
63737
63747
|
log.success("HTTP source removed (resources uninstalled, config cleared).");
|
|
63738
63748
|
return "removed";
|
|
63739
63749
|
}
|
|
63750
|
+
async function offerBindingForCurrentWorkspace(config, cwd) {
|
|
63751
|
+
const dir = cwd ?? process.cwd();
|
|
63752
|
+
const workspacePath = await resolveWorkspacePath(dir);
|
|
63753
|
+
if (!workspacePath) return;
|
|
63754
|
+
if (config.workspaceBindings[workspacePath]) return;
|
|
63755
|
+
if (await inheritWorktreeBinding(config, dir, workspacePath)) return;
|
|
63756
|
+
let projects;
|
|
63757
|
+
try {
|
|
63758
|
+
projects = await fetchUserProjects(config);
|
|
63759
|
+
} catch {
|
|
63760
|
+
return;
|
|
63761
|
+
}
|
|
63762
|
+
if (projects.length === 0) return;
|
|
63763
|
+
process.stdout.write(bindingHintText(projects) + "\n");
|
|
63764
|
+
}
|
|
63740
63765
|
async function bindCurrentProject(options2) {
|
|
63741
|
-
const wantsReminder = options2?.
|
|
63766
|
+
const wantsReminder = options2?.projectAssociationMode !== void 0 || !!options2?.settings;
|
|
63742
63767
|
if (wantsReminder) {
|
|
63743
63768
|
const config = await loadLocalAgentConfig();
|
|
63744
63769
|
if (!config) {
|
|
63745
63770
|
throw new Error("Local agent not initialized. Run `teamai init --http` first.");
|
|
63746
63771
|
}
|
|
63747
|
-
if (options2?.
|
|
63748
|
-
if (options2.
|
|
63749
|
-
throw new Error("Invalid --
|
|
63772
|
+
if (options2?.projectAssociationMode !== void 0) {
|
|
63773
|
+
if (options2.projectAssociationMode !== "auto" && options2.projectAssociationMode !== "manual") {
|
|
63774
|
+
throw new Error("Invalid --project-association-mode. Expected auto or manual.");
|
|
63750
63775
|
}
|
|
63751
|
-
config.
|
|
63776
|
+
config.projectAssociationMode = options2.projectAssociationMode;
|
|
63752
63777
|
await saveLocalAgentConfig(config);
|
|
63753
63778
|
}
|
|
63754
63779
|
if (options2?.settings) {
|
|
63755
|
-
log.info(`Project association reminder: ${
|
|
63780
|
+
log.info(`Project association reminder: ${resolveProjectAssociationMode(config)}.`);
|
|
63756
63781
|
}
|
|
63757
|
-
if (options2?.settings || options2?.
|
|
63782
|
+
if (options2?.settings || options2?.projectAssociationMode === "manual") {
|
|
63758
63783
|
process.stdout.write(MANUAL_ASSOCIATION_COMMANDS + "\n");
|
|
63759
|
-
} else if (options2?.
|
|
63784
|
+
} else if (options2?.projectAssociationMode === "auto") {
|
|
63760
63785
|
log.info("Project association reminders are on. Each unbound workspace is reminded to bind when projects are available.");
|
|
63786
|
+
if (!options2.skip && options2.projectId === void 0) {
|
|
63787
|
+
await offerBindingForCurrentWorkspace(config, options2.cwd);
|
|
63788
|
+
}
|
|
63761
63789
|
}
|
|
63762
63790
|
}
|
|
63763
63791
|
const bindRequested = !!options2?.skip || options2?.projectId !== void 0 || !wantsReminder;
|
|
@@ -63780,7 +63808,7 @@ async function bindCurrentProject(options2) {
|
|
|
63780
63808
|
log.info("\u672A\u7ED1\u5B9A\u9879\u76EE\u3002");
|
|
63781
63809
|
}
|
|
63782
63810
|
}
|
|
63783
|
-
var import_fs_extra9, execFileAsync2, LOCAL_AGENT_DIR, CONFIG_FILE, MANIFEST_FILE, MODEL_MANIFEST_FILE, REPORTER_ERROR_LOG, LOCAL_AGENT_FETCH_TIMEOUT_MS, LOCAL_AGENT_HOOK_FETCH_TIMEOUT_MS, activeFetchTimeoutMs, UNIMPLEMENTED_COMMAND_TYPES, IMPLEMENTED_HOOK_COMMAND_TYPES, DEFAULT_ROUTES, LOCK_HOLDER_ENV, WORKSPACE_CACHE_GITIGNORE, PLUGIN_PULL_INTERVAL_MS, PLUGIN_FAIL_BACKOFF_MS, MANUAL_ASSOCIATION_COMMANDS, ZIP_MAGIC, DEFAULT_MAX_TOKENS, MODEL_KEY_RERUN, TEAMAI_MODEL_GITIGNORE, VALID_MCP_TRANSPORTS;
|
|
63811
|
+
var import_fs_extra9, execFileAsync2, LOCAL_AGENT_DIR, CONFIG_FILE, MANIFEST_FILE, MODEL_MANIFEST_FILE, REPORTER_ERROR_LOG, LOCAL_AGENT_FETCH_TIMEOUT_MS, LOCAL_AGENT_HOOK_FETCH_TIMEOUT_MS, activeFetchTimeoutMs, UNIMPLEMENTED_COMMAND_TYPES, IMPLEMENTED_HOOK_COMMAND_TYPES, DEFAULT_ROUTES, LOCK_HOLDER_ENV, WORKSPACE_CACHE_GITIGNORE, PLUGIN_PULL_INTERVAL_MS, PLUGIN_FAIL_BACKOFF_MS, MANUAL_ASSOCIATION_COMMANDS, BINDING_HINT_HEADER, ZIP_MAGIC, DEFAULT_MAX_TOKENS, MODEL_KEY_RERUN, TEAMAI_MODEL_GITIGNORE, VALID_MCP_TRANSPORTS;
|
|
63784
63812
|
var init_local_agent = __esm({
|
|
63785
63813
|
"src/local-agent.ts"() {
|
|
63786
63814
|
"use strict";
|
|
@@ -63845,6 +63873,7 @@ var init_local_agent = __esm({
|
|
|
63845
63873
|
"- clawpro \u9879\u76EE\u8BBE\u7F6E: \u67E5\u770B\u6216\u4FEE\u6539\u9879\u76EE\u5173\u8054\u63D0\u9192\u65B9\u5F0F",
|
|
63846
63874
|
" teamai bind-project --settings"
|
|
63847
63875
|
].join("\n");
|
|
63876
|
+
BINDING_HINT_HEADER = "[ClawPro\u9879\u76EE \u7ED1\u5B9A\u63D0\u793A]";
|
|
63848
63877
|
ZIP_MAGIC = Buffer.from([80, 75, 3, 4]);
|
|
63849
63878
|
DEFAULT_MAX_TOKENS = 4096;
|
|
63850
63879
|
MODEL_KEY_RERUN = "apply the model config again";
|
|
@@ -136008,12 +136037,12 @@ program2.command("hook-dispatch <event> [hookArgs...]", { hidden: true }).descri
|
|
|
136008
136037
|
process.exit(0);
|
|
136009
136038
|
}
|
|
136010
136039
|
});
|
|
136011
|
-
program2.command("bind-project").description("Bind the current workspace to a ClawPro project for HTTP local-agent sync").option("--project-id <id>", "Project ID from /projects/mine").option("--skip", "Mark current workspace as skipped (never prompt again)").option("--
|
|
136040
|
+
program2.command("bind-project").description("Bind the current workspace to a ClawPro project for HTTP local-agent sync").option("--project-id <id>", "Project ID from /projects/mine").option("--skip", "Mark current workspace as skipped (never prompt again)").option("--project-association-mode <mode>", "Project association reminder: auto (remind each unbound workspace to bind when projects exist) or manual (no automatic reminder)").option("--settings", "Show the project association reminder mode and how to change it").action(async (cmdOpts) => {
|
|
136012
136041
|
const { bindCurrentProject: bindCurrentProject2 } = await Promise.resolve().then(() => (init_local_agent(), local_agent_exports));
|
|
136013
136042
|
await bindCurrentProject2({
|
|
136014
136043
|
projectId: cmdOpts.projectId ? Number.parseInt(cmdOpts.projectId, 10) : void 0,
|
|
136015
136044
|
skip: !!cmdOpts.skip,
|
|
136016
|
-
|
|
136045
|
+
projectAssociationMode: cmdOpts.projectAssociationMode,
|
|
136017
136046
|
settings: !!cmdOpts.settings
|
|
136018
136047
|
});
|
|
136019
136048
|
});
|
package/package.json
CHANGED
|
@@ -364,7 +364,7 @@ Generated: do not edit by hand. Regenerate with
|
|
|
364
364
|
- `teamai bind-project` — Bind the current workspace to a ClawPro project for HTTP local-agent sync
|
|
365
365
|
- `--project-id <id>` — Project ID from /projects/mine
|
|
366
366
|
- `--skip` — Mark current workspace as skipped (never prompt again)
|
|
367
|
-
- `--
|
|
367
|
+
- `--project-association-mode <mode>` — Project association reminder: auto (remind each unbound workspace to bind when projects exist) or manual (no automatic reminder)
|
|
368
368
|
- `--settings` — Show the project association reminder mode and how to change it
|
|
369
369
|
|
|
370
370
|
## contribute
|