@c4a/context-cli 0.7.10-alpha.2 → 0.7.11

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 (68) hide show
  1. package/README.md +2 -2
  2. package/README.zh-CN.md +3 -3
  3. package/cli.js +2034 -925
  4. package/indexers/bundles/context-code-indexer/references/indexer.md +25 -1
  5. package/indexers/bundles/context-code-indexer/templates/adapter-integration.md +1 -1
  6. package/indexers/bundles/context-code-indexer/templates/api-service.md +1 -1
  7. package/indexers/bundles/context-code-indexer/templates/background-runtime.md +1 -1
  8. package/indexers/bundles/context-code-indexer/templates/cli-tool.md +1 -1
  9. package/indexers/bundles/context-code-indexer/templates/component-library.md +4 -4
  10. package/indexers/bundles/context-code-indexer/templates/contract-source.md +1 -1
  11. package/indexers/bundles/context-code-indexer/templates/data-sync-reconciliation.md +6 -8
  12. package/indexers/bundles/context-code-indexer/templates/domain-service.md +1 -1
  13. package/indexers/bundles/context-code-indexer/templates/monorepo-container.md +1 -1
  14. package/indexers/bundles/context-code-indexer/templates/sdk-library.md +1 -2
  15. package/indexers/bundles/context-code-indexer/templates/web-application.md +1 -1
  16. package/indexers/bundles/context-markdown-indexer/references/indexer.md +7 -2
  17. package/indexers/bundles/context-markdown-indexer/references/semantic-planning.md +9 -6
  18. package/indexers/contracts/profile-contract.json +245 -245
  19. package/indexers/release-manifest.json +17 -17
  20. package/package.json +12 -12
  21. package/parserEntryWorker.js +43 -10
  22. package/plugins/README.md +1 -1
  23. package/plugins/README_CN.md +1 -1
  24. package/plugins/VERSION +1 -1
  25. package/plugins/claude/.claude-plugin/plugin.json +1 -1
  26. package/plugins/claude/commands/context.md +37 -73
  27. package/plugins/codex/.codex-plugin/plugin.json +2 -2
  28. package/plugins/codex/skills/context/SKILL.md +37 -73
  29. package/plugins/cursor/.cursor-plugin/plugin.json +1 -1
  30. package/plugins/cursor/commands/c4a-context.md +37 -73
  31. package/plugins/skills/context/SKILL.md +37 -73
  32. package/plugins/skills/context-code-indexer/references/indexer.md +25 -1
  33. package/plugins/skills/context-code-indexer/templates/adapter-integration.md +1 -1
  34. package/plugins/skills/context-code-indexer/templates/api-service.md +1 -1
  35. package/plugins/skills/context-code-indexer/templates/background-runtime.md +1 -1
  36. package/plugins/skills/context-code-indexer/templates/cli-tool.md +1 -1
  37. package/plugins/skills/context-code-indexer/templates/component-library.md +4 -4
  38. package/plugins/skills/context-code-indexer/templates/contract-source.md +1 -1
  39. package/plugins/skills/context-code-indexer/templates/data-sync-reconciliation.md +6 -8
  40. package/plugins/skills/context-code-indexer/templates/domain-service.md +1 -1
  41. package/plugins/skills/context-code-indexer/templates/monorepo-container.md +1 -1
  42. package/plugins/skills/context-code-indexer/templates/sdk-library.md +1 -2
  43. package/plugins/skills/context-code-indexer/templates/web-application.md +1 -1
  44. package/plugins/skills/context-markdown-indexer/references/indexer.md +7 -2
  45. package/plugins/skills/context-markdown-indexer/references/semantic-planning.md +9 -6
  46. package/providers/context/graphs/workspace.yaml +1 -22
  47. package/providers/context/manifest.json +34 -70
  48. package/providers/context/provider.yaml +1 -1
  49. package/providers/context/resources/manuals/guides/indexer-provider-and-customization.md +0 -2
  50. package/providers/context/resources/manuals/guides/knowledge-updates.md +108 -5
  51. package/providers/context/resources/manuals/guides/package-outputs.md +39 -1
  52. package/providers/context/resources/manuals/guides/workspace-prepare.md +17 -0
  53. package/providers/context/resources/manuals/reference/project-api.md +58 -19
  54. package/providers/context/resources/procedures/close-and-build.md +21 -0
  55. package/providers/context/resources/procedures/knowledge-review.md +18 -2
  56. package/providers/context/resources/procedures/knowledge-updates.md +108 -5
  57. package/providers/context/resources/procedures/package-output.md +18 -0
  58. package/providers/context/resources/procedures/production-stage-files.md +35 -0
  59. package/providers/context/resources/procedures/repository-source-recovery.md +5 -3
  60. package/providers/context/resources/procedures/source-capture-detailed.md +16 -2
  61. package/providers/context/resources/procedures/task-recovery.md +6 -0
  62. package/providers/context/resources/procedures/work-start-report.md +24 -11
  63. package/providers/context/resources/procedures/workspace-prepare.md +17 -0
  64. package/providers/context/resources/templates/work-start-report.md +11 -6
  65. package/providers/context/actions/inspect-repository-recovery.yaml +0 -6
  66. package/providers/context/actions/restore-repository-sources.yaml +0 -7
  67. package/providers/context/resources/dialogue/repository-source-recovery.md +0 -23
  68. package/providers/context/schemas/repository-source-recovery.schema.json +0 -40
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "protocol": "context.indexer.cli-release-manifest/v1",
3
3
  "package": "@c4a/context-cli",
4
- "version": "0.7.10-alpha.2",
4
+ "version": "0.7.11",
5
5
  "issuer": "context4ai/context",
6
6
  "bundles": [
7
7
  {
@@ -11,7 +11,7 @@
11
11
  "kind": "cli-bundled",
12
12
  "locator": "cli-bundled://context/context-code-indexer"
13
13
  },
14
- "integrity": "sha256:0774f0507464b2c9d9220b22355bd399c08dd855567eadcd26b59c6fdd2119cf",
14
+ "integrity": "sha256:25b1e6765a8a4ebb274de4388a560f821749da10d84ef2b26351ab1dc905b571",
15
15
  "manifest_digest": "sha256:1bb49c2cfaaf1cc847dccd90c5f2bb6465941217a0e0d6053c0a5aeff467a013",
16
16
  "files": [
17
17
  {
@@ -124,7 +124,7 @@
124
124
  },
125
125
  {
126
126
  "path": "references/indexer.md",
127
- "digest": "sha256:cb5828b5f63e765785413793e702cc78606db858d54dc69dd2883b8b770f38b7"
127
+ "digest": "sha256:2eb158e3bbaa38213225dacfe64de93b238cf81d9a851a017c17dd08ddfc6f18"
128
128
  },
129
129
  {
130
130
  "path": "references/metrics.md",
@@ -148,7 +148,7 @@
148
148
  },
149
149
  {
150
150
  "path": "templates/adapter-integration.md",
151
- "digest": "sha256:be6aa650aad7f70f4bf924c64f4bc73fa28314d512245d61d159ffde6c29a91d"
151
+ "digest": "sha256:daf8cab4d9d833e2c6ad1fa2284394450b6bbdcc6c09602696b7b5ea05b204af"
152
152
  },
153
153
  {
154
154
  "path": "templates/api-service-maintenance-guide.md",
@@ -160,7 +160,7 @@
160
160
  },
161
161
  {
162
162
  "path": "templates/api-service.md",
163
- "digest": "sha256:55b1f42541a001d3a86b815e14b03ac6e5dfab8480e5e133c8425c946e7e96dc"
163
+ "digest": "sha256:d45aa05476537beffda0b67a459f05a364b4597cc952c57c683191596f68c5b5"
164
164
  },
165
165
  {
166
166
  "path": "templates/articles/c01.md",
@@ -320,7 +320,7 @@
320
320
  },
321
321
  {
322
322
  "path": "templates/background-runtime.md",
323
- "digest": "sha256:ab79645c0e32921a69dc1e82cc98da030958579ce3b525c162077d040fd7a40d"
323
+ "digest": "sha256:4c4aa491c75fcf9ca0188251c17e41ccbc1cdbe50a2608fbb4b9bb9c21728a5b"
324
324
  },
325
325
  {
326
326
  "path": "templates/cli-tool-maintenance-guide.md",
@@ -336,7 +336,7 @@
336
336
  },
337
337
  {
338
338
  "path": "templates/cli-tool.md",
339
- "digest": "sha256:4de15964d515a28c8f6e56786f1b287a5132159a29f5f0fae1022aaaa84c0313"
339
+ "digest": "sha256:7ebcc0b7d77f5c0847fe251259ccc79c0c2a73bb73512439a1cdf3e4fefd7181"
340
340
  },
341
341
  {
342
342
  "path": "templates/component-library-maintenance-guide.md",
@@ -352,7 +352,7 @@
352
352
  },
353
353
  {
354
354
  "path": "templates/component-library.md",
355
- "digest": "sha256:bbea3dc04ea8841a5185d3f51779bd5bae3fe8288912abf1f1cb0dfeecf99065"
355
+ "digest": "sha256:12b202bd0acb407c934b9b15acfcc429d8bdaa539dd242f4409093736291be88"
356
356
  },
357
357
  {
358
358
  "path": "templates/contract-source-public-api-reference.md",
@@ -364,7 +364,7 @@
364
364
  },
365
365
  {
366
366
  "path": "templates/contract-source.md",
367
- "digest": "sha256:c4eec319e3b5b7e178f8dfd4d28fe8b497ae0d85fd2bb4e2588a08e50a6e0746"
367
+ "digest": "sha256:bb13c7b536ef518ed74bbccbb02d795d32c37ecbda6b0f0b8e5ee588f4625ff3"
368
368
  },
369
369
  {
370
370
  "path": "templates/data-sync-reconciliation-maintenance-guide.md",
@@ -376,7 +376,7 @@
376
376
  },
377
377
  {
378
378
  "path": "templates/data-sync-reconciliation.md",
379
- "digest": "sha256:87d168f49f1a695e01c231a3853c29bd2f6c878df4e9ef8d201e7c18c72f2cb8"
379
+ "digest": "sha256:505f3f07c14b3f4dffc2ba301a9b307a707d83e0af055be751935e00114ffc00"
380
380
  },
381
381
  {
382
382
  "path": "templates/derived-generated-source-public-api-reference.md",
@@ -400,7 +400,7 @@
400
400
  },
401
401
  {
402
402
  "path": "templates/domain-service.md",
403
- "digest": "sha256:a249498adf6b6a3a88997946964c7ff11448e18a3efaba2f6feccbb7bac314d5"
403
+ "digest": "sha256:08a3d725369be798801cc6bed50c7145d1075b961efd26a5ec7422e8bb1eb884"
404
404
  },
405
405
  {
406
406
  "path": "templates/event-consumer-maintenance-guide.md",
@@ -440,7 +440,7 @@
440
440
  },
441
441
  {
442
442
  "path": "templates/monorepo-container.md",
443
- "digest": "sha256:35052bf151fdcad39c056580c3b02e26f2612c7d9fb0d485add15fc0b1de9950"
443
+ "digest": "sha256:1c53d2f7037cfa65ec65804810eeaa65d2d97542382add387ce4a0ac06aab201"
444
444
  },
445
445
  {
446
446
  "path": "templates/plugin-extension-maintenance-guide.md",
@@ -472,7 +472,7 @@
472
472
  },
473
473
  {
474
474
  "path": "templates/sdk-library.md",
475
- "digest": "sha256:a46a8d057ba422dfb0265b9942a96fda8fa2ffe735952e545bae6480901270d7"
475
+ "digest": "sha256:d84865c19c2473e0a6431ddd2123a025c50fdc32362ab05ad082149c51107c9b"
476
476
  },
477
477
  {
478
478
  "path": "templates/storage-repository-maintenance-guide.md",
@@ -500,7 +500,7 @@
500
500
  },
501
501
  {
502
502
  "path": "templates/web-application.md",
503
- "digest": "sha256:c8d734caec97b1a42f12fcf4cc029a4dc49cc1ba7edfbb5b7fdb9293cf40aa26"
503
+ "digest": "sha256:2e47c70380bbd254a988bc97578f986c6f602c5e5d2d7d73ffbcb335dd7d9a92"
504
504
  },
505
505
  {
506
506
  "path": "tests/fixtures/chapters.json",
@@ -527,7 +527,7 @@
527
527
  "kind": "cli-bundled",
528
528
  "locator": "cli-bundled://context/context-markdown-indexer"
529
529
  },
530
- "integrity": "sha256:75e5cac1ed2af83f1fdb92fc2056be32564a5fcdc246b507f72c0dbff5675242",
530
+ "integrity": "sha256:66e0104e612b4922e189a16be6c3841d1bbdd9ba8be480a122dfc61203e6e83a",
531
531
  "manifest_digest": "sha256:4b6ea2307077abd4899515d32f72941ab8e6bceaa89f2b7662d732bbf817bce5",
532
532
  "files": [
533
533
  {
@@ -604,11 +604,11 @@
604
604
  },
605
605
  {
606
606
  "path": "references/indexer.md",
607
- "digest": "sha256:0d7bc7105439b6d488d3ebe5afbc5caf754a5322c930344b47419a02d5084417"
607
+ "digest": "sha256:3edcc5bb1d824951e414856f7bae107bb0a0cafc3f733725485d776e9b934845"
608
608
  },
609
609
  {
610
610
  "path": "references/semantic-planning.md",
611
- "digest": "sha256:88256776b7348e0db993842ec49d9dc99bc22c68370e5f480e1a4744e43acb44"
611
+ "digest": "sha256:5f0d36ea31e0c75a417bf30702ffecb95b82d34a2e866e5f5d4e5693a9028333"
612
612
  },
613
613
  {
614
614
  "path": "references/structure-and-artifacts.md",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@c4a/context-cli",
3
- "version": "0.7.10-alpha.2",
3
+ "version": "0.7.11",
4
4
  "type": "module",
5
5
  "description": "Local runtime and Agent integration for traceable knowledge production",
6
6
  "license": "MIT",
@@ -24,17 +24,17 @@
24
24
  },
25
25
  "dependencies": {
26
26
  "@c4a/agent-graph": "0.3.0",
27
- "@c4a/context": "0.7.10-alpha.2",
28
- "@c4a/extract": "0.7.10-alpha.2",
29
- "@c4a/extract-contract": "0.7.10-alpha.2",
30
- "@c4a/extract-go": "0.7.10-alpha.2",
31
- "@c4a/extract-mdx": "0.7.10-alpha.2",
32
- "@c4a/extract-proto": "0.7.10-alpha.2",
33
- "@c4a/extract-rush": "0.7.10-alpha.2",
34
- "@c4a/extract-sql": "0.7.10-alpha.2",
35
- "@c4a/extract-style": "0.7.10-alpha.2",
36
- "@c4a/extract-thrift": "0.7.10-alpha.2",
37
- "@c4a/extract-ts": "0.7.10-alpha.2",
27
+ "@c4a/context": "0.7.11",
28
+ "@c4a/extract": "0.7.11",
29
+ "@c4a/extract-contract": "0.7.11",
30
+ "@c4a/extract-go": "0.7.11",
31
+ "@c4a/extract-mdx": "0.7.11",
32
+ "@c4a/extract-proto": "0.7.11",
33
+ "@c4a/extract-rush": "0.7.11",
34
+ "@c4a/extract-sql": "0.7.11",
35
+ "@c4a/extract-style": "0.7.11",
36
+ "@c4a/extract-thrift": "0.7.11",
37
+ "@c4a/extract-ts": "0.7.11",
38
38
  "commander": "^11.0.0",
39
39
  "fast-xml-parser": "^5.10.1",
40
40
  "handlebars": "^4.7.8",
@@ -474,8 +474,16 @@ var init_debugTrace = __esm(() => {
474
474
 
475
475
  // src/project/commandReadCache.ts
476
476
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
477
- import { stat } from "node:fs/promises";
477
+ import { readdir, stat } from "node:fs/promises";
478
478
  import { resolve as resolve2 } from "node:path";
479
+ async function readCommandDirectory(path) {
480
+ const entries = await reuseCommandFileRead({
481
+ key: "directory-entries",
482
+ paths: [path],
483
+ read: () => readdir(path, { withFileTypes: true })
484
+ });
485
+ return [...entries];
486
+ }
479
487
  function withCommandReadCache(action) {
480
488
  return commandReads.getStore() === undefined ? commandReads.run(new Map, action) : action();
481
489
  }
@@ -4506,14 +4514,38 @@ var init_zod = __esm(() => {
4506
4514
  });
4507
4515
 
4508
4516
  // ../context/src/packageSite.ts
4509
- var packageSiteSchema;
4517
+ var siteHrefSchema, packageSiteHomeActionSchema, packageSiteHomeResourceSchema, packageSiteHomeSchema, packageSiteSchema;
4510
4518
  var init_packageSite = __esm(() => {
4511
4519
  init_zod();
4520
+ siteHrefSchema = exports_external.string().trim().min(1).refine((value) => /^(?:https?:\/\/|mailto:|\/(?!\/)|#)/u.test(value), "Use an https URL, mailto URL, root-relative path, or page anchor");
4521
+ packageSiteHomeActionSchema = exports_external.object({
4522
+ text: exports_external.string().trim().min(1),
4523
+ link: siteHrefSchema,
4524
+ theme: exports_external.enum(["brand", "alt"]).optional()
4525
+ }).strict();
4526
+ packageSiteHomeResourceSchema = exports_external.object({
4527
+ title: exports_external.string().trim().min(1),
4528
+ description: exports_external.string().trim().min(1).optional(),
4529
+ href: siteHrefSchema.optional(),
4530
+ action: exports_external.string().trim().min(1).optional(),
4531
+ command: exports_external.string().trim().min(1).optional(),
4532
+ featured: exports_external.boolean().optional()
4533
+ }).strict().refine((value) => value.href !== undefined || value.command !== undefined, {
4534
+ message: "A homepage resource requires href or command"
4535
+ });
4536
+ packageSiteHomeSchema = exports_external.object({
4537
+ title: exports_external.string().trim().min(1).optional(),
4538
+ slogan: exports_external.string().trim().min(1).optional(),
4539
+ description: exports_external.string().trim().min(1).optional(),
4540
+ actions: exports_external.array(packageSiteHomeActionSchema).optional(),
4541
+ resources: exports_external.array(packageSiteHomeResourceSchema).optional()
4542
+ }).strict();
4512
4543
  packageSiteSchema = exports_external.object({
4513
4544
  title: exports_external.string().trim().min(1).optional(),
4514
4545
  description: exports_external.string().optional(),
4515
4546
  lang: exports_external.string().min(1).default("en-US"),
4516
- base: exports_external.string().regex(/^\/(?:[a-zA-Z0-9_-]+\/)*$/, "Use / or a slash-delimited deployment path, such as /docs/").default("/")
4547
+ base: exports_external.string().regex(/^\/(?:[a-zA-Z0-9_-]+\/)*$/, "Use / or a slash-delimited deployment path, such as /docs/").default("/"),
4548
+ home: packageSiteHomeSchema.optional()
4517
4549
  }).strict();
4518
4550
  });
4519
4551
 
@@ -19987,7 +20019,7 @@ var init_sessionMetadata = __esm(() => {
19987
20019
  });
19988
20020
 
19989
20021
  // ../context/src/managedSources.ts
19990
- import { readdir, lstat, realpath, readFile as readFile2 } from "node:fs/promises";
20022
+ import { readdir as readdir2, lstat, realpath, readFile as readFile2 } from "node:fs/promises";
19991
20023
  import { join as join2, relative as relative2, isAbsolute as isAbsolute3 } from "node:path";
19992
20024
  function assertManagedDocumentName(name) {
19993
20025
  if (!/^\d{8}\/[^/\\\x00-\x1f\s:#?]+\.md$/u.test(name) || name.includes("/..")) {
@@ -20024,7 +20056,7 @@ async function discoverManagedDocuments(rootDir, type) {
20024
20056
  await assertManagedDocumentPath(rootDir, type, "20000101/discovery.md");
20025
20057
  let dates;
20026
20058
  try {
20027
- dates = await readdir(base, { withFileTypes: true });
20059
+ dates = await readdir2(base, { withFileTypes: true });
20028
20060
  } catch (error) {
20029
20061
  if (error && typeof error === "object" && "code" in error && error.code === "ENOENT")
20030
20062
  return [];
@@ -20034,7 +20066,7 @@ async function discoverManagedDocuments(rootDir, type) {
20034
20066
  for (const date of dates.sort((a, b) => a.name.localeCompare(b.name))) {
20035
20067
  if (!date.isDirectory() || !/^\d{8}$/u.test(date.name))
20036
20068
  continue;
20037
- for (const file of (await readdir(join2(base, date.name), { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {
20069
+ for (const file of (await readdir2(join2(base, date.name), { withFileTypes: true })).sort((a, b) => a.name.localeCompare(b.name))) {
20038
20070
  if (!file.isFile() || !file.name.endsWith(".md"))
20039
20071
  continue;
20040
20072
  const name = `${date.name}/${file.name}`;
@@ -20559,6 +20591,7 @@ function normalizedVirtualPath(path) {
20559
20591
  }
20560
20592
  function sourceFileSystem(root, tracked, texts, readSource) {
20561
20593
  const files = new Set(tracked.map(normalizedVirtualPath));
20594
+ const contents = new Map(Object.entries(texts).map(([path, text2]) => [normalizedVirtualPath(path), text2]));
20562
20595
  const directories = new Map([[".", new Set]]);
20563
20596
  for (const file of files) {
20564
20597
  const parts = file.split("/");
@@ -20585,7 +20618,7 @@ function sourceFileSystem(root, tracked, texts, readSource) {
20585
20618
  return {
20586
20619
  readFile: async (path) => {
20587
20620
  const normalized = assertTrackedFile(path);
20588
- return Object.hasOwn(texts, normalized) ? texts[normalized] : readSource ? readSource(normalized) : readFile5(safeCodeSourcePath(root, normalized), "utf8");
20621
+ return contents.has(normalized) ? contents.get(normalized) : readSource ? readSource(normalized) : readFile5(safeCodeSourcePath(root, normalized), "utf8");
20589
20622
  },
20590
20623
  async readdir(path) {
20591
20624
  const normalized = normalizedVirtualPath(path);
@@ -20616,7 +20649,7 @@ async function prepareCodeAnalysisInput(input) {
20616
20649
  path: manifestPath,
20617
20650
  content: await fs.readJson(manifestPath)
20618
20651
  }, fs) : { entries: [] };
20619
- return plugin.extractSymbolsInScope(detected.entries, input.scopedPaths, fs);
20652
+ return plugin.extractSymbolsInScope(detected.entries, input.scopedPaths.map(normalizedVirtualPath), fs);
20620
20653
  }
20621
20654
  if (input.capability === "parser.go") {
20622
20655
  const Plugin = input.loadedModule.GoPlugin;
@@ -20632,8 +20665,8 @@ async function prepareCodeAnalysisInput(input) {
20632
20665
  content: { raw: manifestContent }
20633
20666
  };
20634
20667
  const detected = await plugin.detectEntries(manifest, fs);
20635
- const allowed = new Set(input.scopedPaths);
20636
- return plugin.extractSymbols(detected.entries.filter((entry) => allowed.has(entry.path)), fs);
20668
+ const allowed = new Set(input.scopedPaths.map(normalizedVirtualPath));
20669
+ return plugin.extractSymbols(detected.entries.filter((entry) => allowed.has(normalizedVirtualPath(entry.path))), fs);
20637
20670
  }
20638
20671
  if (input.capability === "parser.rush") {
20639
20672
  const indexRushWorkspace = input.loadedModule.indexRushWorkspace;
package/plugins/README.md CHANGED
@@ -13,7 +13,7 @@ projection and the committed `plugins/context/repo-install/` tree. Do not edit g
13
13
  under `plugins/context/repo-install/` or `packages/context-cli/dist/plugins/`.
14
14
 
15
15
  `plugins/context/repo-install/{claude,codex,cursor}/` contains host-specific plugin roots with
16
- the two public entries; `plugins/context/repo-install/skills/` is the portable Skill
16
+ production, explicit query and Indexer creation entries; `plugins/context/repo-install/skills/` is the portable Skill
17
17
  projection. In the same install, `context plugin install` projects Providers
18
18
  to the Codex/Cursor shared `~/.agents/skills` directory and Claude's
19
19
  `~/.claude/skills`, so Provider names do not inherit a plugin namespace.
@@ -11,7 +11,7 @@ Code/Markdown/Note/Sessions Indexer Provider Skills、各宿主 manifest 模板
11
11
  仓库的 `plugins/context/repo-install/`。不要直接编辑 `plugins/context/repo-install/` 或
12
12
  `packages/context-cli/dist/plugins/` 下的生成文件。
13
13
 
14
- `plugins/context/repo-install/{claude,codex,cursor}/` 分别是只包含 Context 主入口的宿主插件根;
14
+ `plugins/context/repo-install/{claude,codex,cursor}/` 包含生产、显式查询及 Indexer 创建入口;
15
15
  `plugins/context/repo-install/skills/` 是可移植 Skill 投影。`context plugin install` 在同一次安装中
16
16
  把 Provider 投影到 Codex/Cursor 共用的 `~/.agents/skills` 与 Claude 的
17
17
  `~/.claude/skills`,因此 Provider 不获得插件命名空间。
package/plugins/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.10-alpha.2
1
+ 0.7.11
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "c4a",
3
3
  "description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
4
- "version": "0.7.10-alpha.2",
4
+ "version": "0.7.11",
5
5
  "author": {
6
6
  "name": "c4a"
7
7
  },
@@ -93,7 +93,7 @@ present an unresolved draft as the report that authorizes production. The report
93
93
  or checklist is task guidance, not a source unless the user explicitly asks to
94
94
  ingest it. Before the complete report has been presented, do not write a
95
95
  source-registration payload, start capture or extraction, configure Indexers,
96
- or enter Partition/Author work. A
96
+ or begin knowledge writing. A
97
97
  managed-mode choice does not waive this first reading opportunity. After feedback,
98
98
  use the exact current Route and include its work-start report reference in the
99
99
  source batch payload. Existing workspace updates follow their current update Route
@@ -119,9 +119,16 @@ Once the activation condition is met, run:
119
119
  context entry [project-dir] --language <language> --format json
120
120
  ```
121
121
 
122
- Use the requested language, otherwise `zh-CN` for Chinese or `en` for English.
123
- Pass `project-dir`, `--name`, `--dev` and `--debug` only when requested. Add
124
- `--managed` only with explicit fully managed authorization in this conversation.
122
+ Use the requested output language, otherwise `zh-CN` for Chinese or `en` for
123
+ English; explain actions in the conversation language from the first reply.
124
+ Preserve the user's requested project directory, name and initialization flags
125
+ in the first entry command. Normalize conversational `-dev` to `--dev` (not a
126
+ CLI alias). `--dev` selects the local SDK instead of a registry version;
127
+ `--debug` enables diagnostics independently. Neither implies the other.
128
+ Pass these flags only when requested; add `--managed` only with explicit fully
129
+ managed authorization. For a Chinese request for local SDK, debug and managed
130
+ initialization, use `context entry context/ --dev --debug --language zh-CN
131
+ --managed --format json` as one command, then preserve its returned init flags.
125
132
 
126
133
  Follow the returned `next_action.command`:
127
134
 
@@ -280,9 +287,8 @@ none was returned. A phase-local `next_action` is not a workspace Route.
280
287
  If `next_preparation` fails after committed outcomes, execute its recovery
281
288
  without resubmitting accepted work. Stage completion is not workspace completion:
282
289
  Changed delivery content must finish Review, close and build through their Routes.
283
- An empty Composer result is a decision not to add derived content, not an API
284
- regeneration or proof that existing pages meet a later revision request. Do not
285
- infer maintenance targets from Composer task names or count.
290
+ An empty result does not prove that existing pages meet a later revision request.
291
+ Register the actual maintenance targets rather than inferring them from task names.
286
292
 
287
293
  When the Graph reports complete, compare the user's original and subsequent
288
294
  requests with actual delivered results and registered maintenance targets.
@@ -292,7 +298,7 @@ conversational requests. Continue already authorized outstanding work through th
292
298
  normal Context revision/update entry and its fresh Route, respecting existing
293
299
  Gates. Do not ask for another "continue" solely because production finished.
294
300
  Report a blocker only when a required input, permission or actual entry failure
295
- prevents progress; do not invent a missing Review/build after an empty Composer.
301
+ prevents progress; do not invent missing work solely because a result is empty.
296
302
 
297
303
  For an authorized end-to-end task, continue while the current Route is actionable
298
304
  within that authority. Report batch progress during execution, without ending
@@ -310,74 +316,32 @@ and when the user declined it. Use the commit guide if the user chooses it.
310
316
  ## When selecting or customizing Indexers
311
317
 
312
318
  Read `context.indexer.provider-guide` at the path supplied by the Route and the
313
- selected Action's instructions. They own the selection schema, layer rules,
314
- customization ladder, program authorization and upgrade recovery.
315
-
316
- Use the supplied requirements and CLI-bundled catalog. Discover relevant
317
- external Providers only among Host-visible `context-…-indexer…` Skills and read
318
- their exposed manifest. Host switches and installation channels determine
319
- availability; the catalog does not override a disabled Skill or a chosen
320
- business replacement. Do not scan caches, run a discovery preflight, or create
321
- a second enabled-Skill registry.
322
-
323
- Copy bundled Provider identities from the catalog, even if the same version
324
- is Host-visible. Read only selected Provider guidance. Keep one primary for an
325
- existing page; supporting note/session material belongs in its evidence/read
326
- scope, with compatible extension guidance when needed. Source type alone does
327
- not require a new page. Submit the selection through the Route's
328
- `complete-current` contract; the CLI validates, resolves and applies it. Follow
329
- returned Host-resolution and program Gates without calling low-level commands
330
- as a parallel workflow. Provider finalization consumes its existing input and
331
- must not resolve or install the Provider again.
319
+ selected Action's instructions. Select relevant available Skills for the actual
320
+ materials and reader task, respecting disabled Skills and explicit business
321
+ replacements. Record usage through the current planning schema; do not reconstruct
322
+ a separate Provider selection, primary-owner or finalization workflow. Read only
323
+ selected guidance; do not scan plugin caches or create another Skill registry.
324
+ Supporting notes or sessions can enrich an existing article; a different source
325
+ type alone does not require another page.
332
326
 
333
327
  ## Progress reporting format
334
328
 
335
- For production progress updates, use two bold lines in this order. Describe
336
- the actual stage when counters are unavailable; include counts only when supplied:
337
-
338
- **[总体进展:已交付 33/125 ]**
339
- **[当前进展:已规划 3/8 项]**
340
-
341
- Use CLI `progress.scopes` (or `indexerProgress.scopes` in status) as the
342
- single source for progress in conversation and reports. It separates:
343
- - `overall`: delivered pages and cumulative planning for the current Indexer run;
344
- - `wave`: writing tasks, observed pages and composition for the current wave;
345
- - `slice`: tasks in the currently active Route slice.
346
-
347
- Planning completed counts currently valid accepted tasks, not lifetime effort.
348
- When overall.planning.needs_recheck is nonzero, report “规划当前有效 X/Y 项;Z 项因任务绑定变化待复核”.
349
- Do not describe a lower valid count as lost pages or silently restarting from zero.
350
- The CLI reason identifies binding changes, not proof that source code changed;
351
- do not invent a more specific cause.
352
-
353
- Keep these scopes separate. A wave or pause target never replaces the overall
354
- scope. Preserve overall planning across Author, Composer and Review transitions.
355
- Use each counter's `unit`: task means 项/任务, page means 页. A writing task is
356
- not automatically one page. A null total means 总数待确定, not zero or the
357
- number of currently prepared tasks. Revisions can overlap delivered pages;
358
- do not add wave tasks to delivered pages to invent a page total.
359
-
360
- Use two bold progress lines. The first combines `overall` and a clearly labelled
361
- `wave` supplement; the second describes the current action, using `slice` counts
362
- when available. Internal wave/slice names need not appear in user-facing text. For example, with matching CLI values:
363
- **[总体进展:已交付 33 页,总页数待确定;规划完成 50/122 项;本轮写作完成 30/30 项]**
364
- **[当前进展:补充内容检查 0/8 项]**
365
-
366
- A completion receipt's `submitted_slice` describes the slice just submitted;
367
- `progress.scopes.slice` can already describe the next Route. Use the former when
368
- reporting submission success and the latter when announcing the next slice.
369
- Never combine their numerators and denominators. A null slice means no active
370
- Agent task slice, not that the workflow is complete. During Review/build, state
371
- the returned Route action briefly rather than inventing a slice ratio.
372
- Before counters exist or after task cleanup, describe the known stage and current
373
- action instead of repeatedly saying counters are unavailable. For example:
374
- **[总体进展:正在准备知识工作区]**
375
- **[当前进展:已读取启动清单,正在整理仓库与文档范围]**
376
- During review or packaging, name that action rather than a nonexistent slice.
377
- Do not turn the last wave into the overall scope or report delivery as zero.
378
- Continue authorized work after an update; only the agreed delivery stop or an
379
- actual unresolved blocker permits stopping. This format governs progress, not
380
- answers, review findings or necessary questions.
329
+ For production updates, use two bold lines: overall progress, then the current
330
+ action. Use the conversation language. For example, when supported by the receipt:
331
+
332
+ **[总体进展:已交付 10 页;本轮写作已接收 3/5 ]**
333
+ **[当前进展:正在审核本轮文章]**
334
+
335
+ Use counts and their meanings from the current CLI result. Distinguish accepted
336
+ drafts from delivered pages, and the just-submitted subset from remaining work.
337
+ Do not require older overall/wave/slice fields or reconstruct missing totals.
338
+ Tasks and pages are not interchangeable; revisions do not automatically add pages.
339
+ Before counts exist or after cleanup, describe the actual stage without invented
340
+ ratios or reporting previously delivered pages as zero.
341
+
342
+ Continue authorized work after a progress update. End only at the agreed scope,
343
+ a user pause or an actual unresolved blocker. This format applies to production
344
+ progress, not answers, review findings or necessary questions.
381
345
 
382
346
  ## Report the actual outcome
383
347
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "c4a",
3
- "version": "0.7.10-alpha.2",
3
+ "version": "0.7.11",
4
4
  "description": "Start or continue a project-local knowledge workspace through one graph-routed entry.",
5
5
  "author": { "name": "c4a" },
6
6
  "homepage": "https://github.com/context4ai/c4a",
@@ -10,7 +10,7 @@
10
10
  "skills": "./skills/",
11
11
  "interface": {
12
12
  "displayName": "C4A Context",
13
- "shortDescription": "Initialize and advance a local, source-linked project knowledge workspace.\nv0.7.10-alpha.2",
13
+ "shortDescription": "Initialize and advance a local, source-linked project knowledge workspace.\nv0.7.11",
14
14
  "longDescription": "Create a Context workspace and use agent-guided next steps to register sources, run extraction, review candidates, build package outputs, and verify health without silently mutating source repositories.",
15
15
  "developerName": "c4a",
16
16
  "category": "Productivity",