@inharness-ai/claude4spec 1.0.4 → 1.0.6

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 (110) hide show
  1. package/.claude/skills/c4s-brief-implementer/SKILL.md +37 -3
  2. package/.claude/skills/c4s-spec-reader/SKILL.md +11 -0
  3. package/CHANGELOG.md +26 -0
  4. package/dist/bin/c4s/commands/ask.d.ts +15 -0
  5. package/dist/bin/c4s/commands/ask.js +73 -0
  6. package/dist/bin/c4s/commands/ask.js.map +1 -0
  7. package/dist/bin/c4s/errors.d.ts +1 -1
  8. package/dist/bin/c4s/errors.js.map +1 -1
  9. package/dist/bin/c4s/project.d.ts +6 -0
  10. package/dist/bin/c4s/project.js +25 -0
  11. package/dist/bin/c4s/project.js.map +1 -1
  12. package/dist/bin/c4s.js +12 -6
  13. package/dist/bin/c4s.js.map +1 -1
  14. package/dist/client/assets/{arc-grMo2vzL.js → arc-CqFoQdai.js} +1 -1
  15. package/dist/client/assets/{architectureDiagram-3BPJPVTR-Fp_VHONq.js → architectureDiagram-3BPJPVTR-CIEQ1CV_.js} +1 -1
  16. package/dist/client/assets/{blockDiagram-GPEHLZMM-CIwVG0sx.js → blockDiagram-GPEHLZMM-DwCCDYZs.js} +1 -1
  17. package/dist/client/assets/{c4Diagram-AAUBKEIU-tysuJyz0.js → c4Diagram-AAUBKEIU-DB988zZs.js} +1 -1
  18. package/dist/client/assets/channel-mXCQ_joU.js +1 -0
  19. package/dist/client/assets/{chunk-2J33WTMH-DZFNNwID.js → chunk-2J33WTMH-Bwc9B4Id.js} +1 -1
  20. package/dist/client/assets/{chunk-4BX2VUAB-CsnJG7Pv.js → chunk-4BX2VUAB-ClOw-zt3.js} +1 -1
  21. package/dist/client/assets/{chunk-55IACEB6-MhREYXzo.js → chunk-55IACEB6-B513D_Oz.js} +1 -1
  22. package/dist/client/assets/{chunk-727SXJPM-BjvyGtK3.js → chunk-727SXJPM-CvT-ppRD.js} +1 -1
  23. package/dist/client/assets/{chunk-AQP2D5EJ-zfcfKNbO.js → chunk-AQP2D5EJ-BDZ-uKjF.js} +1 -1
  24. package/dist/client/assets/{chunk-FMBD7UC4-Ckx-Hc8U.js → chunk-FMBD7UC4-DlnsCvyP.js} +1 -1
  25. package/dist/client/assets/{chunk-ND2GUHAM-DSIVVmYM.js → chunk-ND2GUHAM-Cv4kIfqi.js} +1 -1
  26. package/dist/client/assets/{chunk-QZHKN3VN-EcIM6ZdS.js → chunk-QZHKN3VN-Boyq-O-A.js} +1 -1
  27. package/dist/client/assets/classDiagram-4FO5ZUOK-CvLk0Sg1.js +1 -0
  28. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CvLk0Sg1.js +1 -0
  29. package/dist/client/assets/{cose-bilkent-S5V4N54A-DC8DVe0z.js → cose-bilkent-S5V4N54A-B4fXXqZV.js} +1 -1
  30. package/dist/client/assets/{dagre-BM42HDAG-BQjcdXnw.js → dagre-BM42HDAG-D7JvdAaj.js} +1 -1
  31. package/dist/client/assets/{diagram-2AECGRRQ-BUPeBMwt.js → diagram-2AECGRRQ-TqVC9_06.js} +1 -1
  32. package/dist/client/assets/{diagram-5GNKFQAL-I_Q-Pnp6.js → diagram-5GNKFQAL-BJE7Sfvp.js} +1 -1
  33. package/dist/client/assets/{diagram-KO2AKTUF-B8WbbWJu.js → diagram-KO2AKTUF-dDI3Q4Xy.js} +1 -1
  34. package/dist/client/assets/{diagram-LMA3HP47-CsACxgW7.js → diagram-LMA3HP47-zrNXdbAH.js} +1 -1
  35. package/dist/client/assets/{diagram-OG6HWLK6-lPuJxQED.js → diagram-OG6HWLK6-C9RoGREB.js} +1 -1
  36. package/dist/client/assets/{erDiagram-TEJ5UH35-cU5ZGREz.js → erDiagram-TEJ5UH35-BIOg0Mgx.js} +1 -1
  37. package/dist/client/assets/{flowDiagram-I6XJVG4X-Dr-vZTBV.js → flowDiagram-I6XJVG4X-C5olRPEY.js} +1 -1
  38. package/dist/client/assets/{ganttDiagram-6RSMTGT7-CXiWZ0R8.js → ganttDiagram-6RSMTGT7-Daqt3_2M.js} +1 -1
  39. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-PDvLBbvz.js → gitGraphDiagram-PVQCEYII-E09LH7cR.js} +1 -1
  40. package/dist/client/assets/{index-RMlMPKY7.js → index-BwbjYrNH.js} +1 -1
  41. package/dist/client/assets/{index-BQltseJ-.js → index-CMsZQS3t.js} +1 -1
  42. package/dist/client/assets/{index-YFPhJxE5.js → index-CUhhC6SY.js} +151 -146
  43. package/dist/client/assets/{infoDiagram-5YYISTIA-Re9fOUPS.js → infoDiagram-5YYISTIA-Cy_D0LmA.js} +1 -1
  44. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BTazB_7p.js → ishikawaDiagram-YF4QCWOH-B3cvnpaf.js} +1 -1
  45. package/dist/client/assets/{journeyDiagram-JHISSGLW-pGUoqxHl.js → journeyDiagram-JHISSGLW-IR8sEnrO.js} +1 -1
  46. package/dist/client/assets/{kanban-definition-UN3LZRKU-C2RzCJrM.js → kanban-definition-UN3LZRKU-DHaqk7jz.js} +1 -1
  47. package/dist/client/assets/{linear-Be3WPYKf.js → linear-BJO3kbAY.js} +1 -1
  48. package/dist/client/assets/{mermaid.core-GdPXct3q.js → mermaid.core-Dwygsmt4.js} +4 -4
  49. package/dist/client/assets/{mindmap-definition-RKZ34NQL-DvktVTUU.js → mindmap-definition-RKZ34NQL-C9XVPJV6.js} +1 -1
  50. package/dist/client/assets/{pieDiagram-4H26LBE5-DvC_m4m5.js → pieDiagram-4H26LBE5-CZldRk6l.js} +1 -1
  51. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-SWtidcZL.js → quadrantDiagram-W4KKPZXB-CY053ghg.js} +1 -1
  52. package/dist/client/assets/{requirementDiagram-4Y6WPE33-CQEHDx1W.js → requirementDiagram-4Y6WPE33-DQbMS7j1.js} +1 -1
  53. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-C0PTA3gP.js → sankeyDiagram-5OEKKPKP-C5w3huvN.js} +1 -1
  54. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-D-x7SXoo.js → sequenceDiagram-3UESZ5HK-nF1GikPI.js} +1 -1
  55. package/dist/client/assets/{stateDiagram-AJRCARHV-BhcGVfs1.js → stateDiagram-AJRCARHV-CxjKXGSz.js} +1 -1
  56. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-CLYCEwSk.js +1 -0
  57. package/dist/client/assets/{timeline-definition-PNZ67QCA-JYTlKPB-.js → timeline-definition-PNZ67QCA-q0ZvTC5H.js} +1 -1
  58. package/dist/client/assets/{vennDiagram-CIIHVFJN-KjNL1Qpz.js → vennDiagram-CIIHVFJN-CO7sztp2.js} +1 -1
  59. package/dist/client/assets/{wardley-L42UT6IY-DcljmmEY.js → wardley-L42UT6IY-JeTZFzC9.js} +1 -1
  60. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Pbq6ALgg.js → wardleyDiagram-YWT4CUSO-COpCQvmO.js} +1 -1
  61. package/dist/client/assets/{xychartDiagram-2RQKCTM6-G_r_2Cvk.js → xychartDiagram-2RQKCTM6-C78ptl5b.js} +1 -1
  62. package/dist/client/index.html +1 -1
  63. package/dist/core/ask/run-ask.d.ts +37 -0
  64. package/dist/core/ask/run-ask.js +171 -0
  65. package/dist/core/ask/run-ask.js.map +1 -0
  66. package/dist/server/core/plugin-host/host.js +8 -8
  67. package/dist/server/core/plugin-host/host.js.map +1 -1
  68. package/dist/server/core/plugin-host/types.d.ts +22 -7
  69. package/dist/server/entities/ac/plugin.js +1 -1
  70. package/dist/server/entities/ac/plugin.js.map +1 -1
  71. package/dist/server/entities/database-table/plugin.js +1 -1
  72. package/dist/server/entities/database-table/plugin.js.map +1 -1
  73. package/dist/server/entities/dto/plugin.js +1 -1
  74. package/dist/server/entities/dto/plugin.js.map +1 -1
  75. package/dist/server/entities/endpoint/plugin.js +1 -1
  76. package/dist/server/entities/endpoint/plugin.js.map +1 -1
  77. package/dist/server/entities/ui-view/plugin.js +1 -1
  78. package/dist/server/entities/ui-view/plugin.js.map +1 -1
  79. package/dist/server/external-skills/brief-implementer-template.d.ts +1 -1
  80. package/dist/server/external-skills/brief-implementer-template.js +19 -1
  81. package/dist/server/external-skills/brief-implementer-template.js.map +1 -1
  82. package/dist/server/external-skills/spec-reader-template.d.ts +1 -1
  83. package/dist/server/external-skills/spec-reader-template.js +12 -0
  84. package/dist/server/external-skills/spec-reader-template.js.map +1 -1
  85. package/dist/server/index.js +44 -39
  86. package/dist/server/index.js.map +1 -1
  87. package/dist/server/mcp/brief-tools.d.ts +2 -4
  88. package/dist/server/mcp/brief-tools.js +4 -25
  89. package/dist/server/mcp/brief-tools.js.map +1 -1
  90. package/dist/server/mcp/c4s-tools.d.ts +15 -0
  91. package/dist/server/mcp/c4s-tools.js +67 -0
  92. package/dist/server/mcp/c4s-tools.js.map +1 -0
  93. package/dist/server/routes/agent-turn.d.ts +92 -0
  94. package/dist/server/routes/agent-turn.js +386 -0
  95. package/dist/server/routes/agent-turn.js.map +1 -0
  96. package/dist/server/routes/chat.d.ts +2 -30
  97. package/dist/server/routes/chat.js +33 -396
  98. package/dist/server/routes/chat.js.map +1 -1
  99. package/dist/server/routes/threads.d.ts +2 -2
  100. package/dist/server/routes/threads.js +51 -1
  101. package/dist/server/routes/threads.js.map +1 -1
  102. package/dist/server/services/chat-context.d.ts +4 -0
  103. package/dist/server/services/chat-context.js +24 -6
  104. package/dist/server/services/chat-context.js.map +1 -1
  105. package/dist/server/skills/brief-author/SKILL.md +0 -1
  106. package/package.json +1 -1
  107. package/dist/client/assets/channel-B30S19wt.js +0 -1
  108. package/dist/client/assets/classDiagram-4FO5ZUOK-Bm4SZLsb.js +0 -1
  109. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-Bm4SZLsb.js +0 -1
  110. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-2vcyLY1V.js +0 -1
@@ -37,13 +37,31 @@ type: brief
37
37
  from_release: v0.1.16
38
38
  to_release: v0.1.17
39
39
  generator_version: brief-author@0.1
40
- archived: false
40
+ implemented: false
41
41
  ---
42
42
  ```
43
43
 
44
44
  The body contains everything you need — entity snapshots, section diffs, the
45
45
  narrative of what changes, and acceptance criteria. **Do not read the main
46
- specification.** If the brief omits something, that is drift (see step 4).
46
+ specification.**
47
+
48
+ If the brief is unclear — a missing detail, an ambiguous wording, a decision
49
+ you'd otherwise have to guess — you have two paths:
50
+
51
+ **Synchronous (preferred when available).** Ask the specification agent in the
52
+ same terminal and continue once you have an answer:
53
+
54
+ ```bash
55
+ c4s ask "Brief nie precyzuje X — czy chodzi o A czy B?" --ct brief --brief <brief-slug>.md
56
+ ```
57
+
58
+ Continue the same thread with `c4s ask "..." --thread <threadId>` (the
59
+ `threadId` is printed with the answer). This path requires `c4s` installed
60
+ *and* a running `npx claude4spec` server. When either is unavailable, skip it.
61
+
62
+ **Asynchronous (always available).** If you cannot ask synchronously, proceed
63
+ with your best judgement and file a patch afterwards (step 4) so the
64
+ spec-author can fold the clarification into the next brief.
47
65
 
48
66
  ### 3. Implement
49
67
 
@@ -93,7 +111,23 @@ Patch-kind values:
93
111
  The `.claude4spec/patches/` directory is created **lazily** — only when you
94
112
  file your first patch. The claude4spec server does NOT create it.
95
113
 
96
- ### 5. Hand-off
114
+ ### 5. Mark brief as implemented
115
+
116
+ When the implementation is genuinely finished — code committed, tests green,
117
+ merged to main / accepted by the user — flip the brief's frontmatter to
118
+ `implemented: true`:
119
+
120
+ ```bash
121
+ # Option A — Edit tool: change the line `implemented: false` → `implemented: true`.
122
+ # Option B — yq (idempotent; adds the field to legacy briefs that never had it):
123
+ yq -i '.implemented = true' .claude4spec/briefs/<brief-slug>.md
124
+ ```
125
+
126
+ `implemented: true` is a **declaration**, not a computed fact derived from git.
127
+ A revert on main does NOT roll the flag back. Set it ONLY when implementation
128
+ is realistically done — never proactively or "just in case".
129
+
130
+ ### 6. Hand-off
97
131
 
98
132
  The spec-author reads patches manually (`ls .claude4spec/patches/`, `cat`)
99
133
  and folds them into the next brief or entity edits. There is no UI listing in
@@ -44,3 +44,14 @@ an exit code > 0.
44
44
 
45
45
  The database is opened **read-only** — `c4s` never mutates the project.
46
46
 
47
+ ## Asking the spec agent
48
+
49
+ When a question goes beyond resolving entities or pages, `c4s ask` runs a
50
+ synchronous agent turn against the specification:
51
+
52
+ ```sh
53
+ c4s ask "<question>" --ct chat
54
+ ```
55
+
56
+ Unlike the read-only commands above, `c4s ask` requires a running
57
+ `npx claude4spec` server (it delegates the turn to the server's agent).
package/CHANGELOG.md CHANGED
@@ -5,6 +5,30 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [1.0.6] - 2026-05-21
9
+
10
+ ### Added
11
+ - `c4s-tools` MCP server — exposes the cross-spec `c4s ask` Q&A flow over MCP, so it works in plan mode where Bash tools are filtered out. The plugin host registers MCP server factories and builds a fresh instance per turn.
12
+ - Brief "implemented" workflow, with a status pill and collapsible patch view in the UI.
13
+
14
+ ### Changed
15
+ - Extracted the shared `ask` logic into `src/core/ask/run-ask.ts`; the `c4s ask` CLI is now a thin wrapper over it.
16
+
17
+ ### Removed
18
+ - `list_brief_versions` / `get_brief_version` tools from the brief-tools MCP surface.
19
+
20
+ ### Fixed
21
+ - Restored a green client typecheck (`tsconfig.client.json`): widened the sidebar-tab `icon` contract to accept lucide-react's `size?: number | string`, and guarded `Tag.counts[...]` lookups against `undefined` under `noUncheckedIndexedAccess`.
22
+
23
+ ## [1.0.5] - 2026-05-19
24
+
25
+ ### Added
26
+ - `c4s ask` — synchronous CLI Q&A against a running `npx claude4spec` server. Supports `--ct chat | brief | patch`, thread continuation via `--thread <id>`, and explicit server override via `--server <url>`. Skill templates (`c4s-spec-reader`, `c4s-brief-implementer`) document the escalation path as optional — only available when both `c4s` and the server are present.
27
+ - `POST /api/threads/:id/ask` — synchronous JSON sibling of `POST /api/chat` (SSE). Shares the same adapter pool, `pendingInputs` map, and tool whitelist via a new `routes/agent-turn.ts` module extracted from `chat.ts`.
28
+
29
+ ### Changed
30
+ - The server now binds to a single, deterministic port (the `port+1` fallback is gone). `EADDRINUSE` fails fast with a clear message so that `c4s ask` can reliably discover the server through `.claude4spec/config.json.port`.
31
+
8
32
  ## [1.0.4] - 2026-05-18
9
33
 
10
34
  ### Added
@@ -50,6 +74,8 @@ Initial public release.
50
74
  - Acceptance Criteria entity and tooling.
51
75
  - Briefs and patches workflow for spec-driven implementation.
52
76
 
77
+ [1.0.6]: https://github.com/InHarness/claude4spec/compare/v1.0.5...v1.0.6
78
+ [1.0.5]: https://github.com/InHarness/claude4spec/compare/v1.0.4...v1.0.5
53
79
  [1.0.4]: https://github.com/InHarness/claude4spec/compare/v1.0.3...v1.0.4
54
80
  [1.0.3]: https://github.com/InHarness/claude4spec/compare/v1.0.2...v1.0.3
55
81
  [1.0.2]: https://github.com/InHarness/claude4spec/compare/v1.0.1...v1.0.2
@@ -0,0 +1,15 @@
1
+ import type { ParsedArgs } from '../args.js';
2
+ /**
3
+ * `c4s ask` — synchroniczny kanal Q&A z agentem specyfikacji (M11).
4
+ *
5
+ * Cienki wrapper nad `runAsk(...)` z `core/ask/run-ask.ts`. Wspolne ciezary
6
+ * (resolve project, health-check, create-thread, run-turn) zyja w core'rze;
7
+ * tutaj zostala tylko warstwa CLI: parsowanie flag, mapowanie kodow bledow
8
+ * na `CliError`, formatowanie outputu (stdout/stderr split, --format json|text).
9
+ *
10
+ * c4s ask "<msg>" --ct chat
11
+ * c4s ask "<msg>" --ct brief --brief <path>
12
+ * c4s ask "<msg>" --thread <id>
13
+ */
14
+ export declare function runAsk_cli(args: ParsedArgs): Promise<void>;
15
+ export { runAsk_cli as runAsk };
@@ -0,0 +1,73 @@
1
+ import { optionalString } from '../args.js';
2
+ import { CliError } from '../errors.js';
3
+ import { AskError, runAsk } from '../../../core/ask/run-ask.js';
4
+ /**
5
+ * `c4s ask` — synchroniczny kanal Q&A z agentem specyfikacji (M11).
6
+ *
7
+ * Cienki wrapper nad `runAsk(...)` z `core/ask/run-ask.ts`. Wspolne ciezary
8
+ * (resolve project, health-check, create-thread, run-turn) zyja w core'rze;
9
+ * tutaj zostala tylko warstwa CLI: parsowanie flag, mapowanie kodow bledow
10
+ * na `CliError`, formatowanie outputu (stdout/stderr split, --format json|text).
11
+ *
12
+ * c4s ask "<msg>" --ct chat
13
+ * c4s ask "<msg>" --ct brief --brief <path>
14
+ * c4s ask "<msg>" --thread <id>
15
+ */
16
+ export async function runAsk_cli(args) {
17
+ const message = args.positional[0];
18
+ if (!message || !message.trim()) {
19
+ throw new CliError('INVALID_ARGS', 'message is required: c4s ask "<msg>" --ct chat');
20
+ }
21
+ const threadId = optionalString(args, 'thread');
22
+ const ct = optionalString(args, 'ct');
23
+ const briefPath = optionalString(args, 'brief');
24
+ const server = optionalString(args, 'server');
25
+ const project = args.project;
26
+ if (project && server) {
27
+ // Mutex `project` vs `server` — gdy oba podane, `server` wygrywa; CLI
28
+ // dopisuje warning na stderr (dla MCP analogicznie, ale przez tool_result).
29
+ process.stderr.write('warning: both --project and --server given; --server wins, --project ignored\n');
30
+ }
31
+ if (!threadId) {
32
+ // Wczesna walidacja flag CLI (drobne komunikaty user-facing); runAsk
33
+ // robi to samo na poziomie biblioteki, ale tutaj dajemy zywsze hinty.
34
+ if (ct !== 'chat' && ct !== 'brief' && ct !== 'patch') {
35
+ throw new CliError('INVALID_ARGS', '--ct must be chat|brief|patch (or pass --thread <id> to continue a thread)');
36
+ }
37
+ if (ct === 'patch') {
38
+ throw new CliError('INVALID_ARGS', 'c4s ask cannot create a patch thread; pass --thread <id> to continue one');
39
+ }
40
+ if (ct === 'brief' && !briefPath) {
41
+ throw new CliError('INVALID_ARGS', '--ct brief requires --brief <path>');
42
+ }
43
+ }
44
+ let result;
45
+ try {
46
+ result = await runAsk({
47
+ message,
48
+ project,
49
+ server,
50
+ contextType: ct,
51
+ threadId,
52
+ briefPath,
53
+ });
54
+ }
55
+ catch (err) {
56
+ if (err instanceof AskError) {
57
+ throw new CliError(err.code, err.message, err.hint);
58
+ }
59
+ throw err;
60
+ }
61
+ // --- output --------------------------------------------------------------
62
+ if (args.format === 'text') {
63
+ process.stdout.write(result.answer + '\n');
64
+ // threadId na stderr — hint do kontynuacji wątku.
65
+ process.stderr.write(`thread: ${result.threadId} (continue: c4s ask "..." --thread ${result.threadId})\n`);
66
+ }
67
+ else {
68
+ process.stdout.write(JSON.stringify({ threadId: result.threadId, answer: result.answer }, null, 2) + '\n');
69
+ }
70
+ }
71
+ // Eksport pod historyczna nazwa — `src/bin/c4s.ts` importuje `runAsk`.
72
+ export { runAsk_cli as runAsk };
73
+ //# sourceMappingURL=ask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../../../src/bin/c4s/commands/ask.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type CliErrorCode = 'PROJECT_NOT_FOUND' | 'ENTITY_NOT_FOUND' | 'SECTION_NOT_FOUND' | 'INVALID_TYPE' | 'INVALID_ARGS' | 'AMBIGUOUS_SLUGS' | 'SCHEMA_OUT_OF_DATE' | 'FILE_NOT_FOUND' | 'UNKNOWN_COMMAND';
1
+ export type CliErrorCode = 'PROJECT_NOT_FOUND' | 'ENTITY_NOT_FOUND' | 'SECTION_NOT_FOUND' | 'INVALID_TYPE' | 'INVALID_ARGS' | 'AMBIGUOUS_SLUGS' | 'SCHEMA_OUT_OF_DATE' | 'FILE_NOT_FOUND' | 'UNKNOWN_COMMAND' | 'SERVER_NOT_RUNNING' | 'SERVER_NOT_RECOGNIZED' | 'NOT_FOUND' | 'STREAM_IN_PROGRESS' | 'AGENT_UNAVAILABLE' | 'AGENT_ERROR' | 'TIMEOUT' | 'ABORTED';
2
2
  export declare class CliError extends Error {
3
3
  code: CliErrorCode;
4
4
  hint?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/bin/c4s/errors.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACd;IAA4C;IAA/D,YAAmB,IAAkB,EAAE,OAAe,EAAS,IAAa;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,SAAI,GAAJ,IAAI,CAAc;QAA0B,SAAI,GAAJ,IAAI,CAAS;QAE1E,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/bin/c4s/errors.ts"],"names":[],"mappings":"AAoBA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACd;IAA4C;IAA/D,YAAmB,IAAkB,EAAE,OAAe,EAAS,IAAa;QAC1E,KAAK,CAAC,OAAO,CAAC,CAAC;QADE,SAAI,GAAJ,IAAI,CAAc;QAA0B,SAAI,GAAJ,IAAI,CAAS;QAE1E,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -1 +1,7 @@
1
1
  export declare function resolveProject(override?: string): string;
2
+ /**
3
+ * Wariant `resolveProject` dla `c4s ask` — markerem waznosci projektu jest
4
+ * `.claude4spec/config.json` (nie `db.sqlite`). `ask` nie czyta encji, tylko
5
+ * potrzebuje `config.json.port` do discovery serwera.
6
+ */
7
+ export declare function resolveProjectByConfig(override?: string): string;
@@ -20,4 +20,29 @@ export function resolveProject(override) {
20
20
  dir = parent;
21
21
  }
22
22
  }
23
+ /**
24
+ * Wariant `resolveProject` dla `c4s ask` — markerem waznosci projektu jest
25
+ * `.claude4spec/config.json` (nie `db.sqlite`). `ask` nie czyta encji, tylko
26
+ * potrzebuje `config.json.port` do discovery serwera.
27
+ */
28
+ export function resolveProjectByConfig(override) {
29
+ const hasConfig = (dir) => fs.existsSync(path.join(dir, '.claude4spec', 'config.json'));
30
+ if (override) {
31
+ const abs = path.resolve(process.cwd(), override);
32
+ if (!hasConfig(abs)) {
33
+ throw new CliError('PROJECT_NOT_FOUND', `no claude4spec project at ${abs}`, 'check the path or run `npx claude4spec` there first');
34
+ }
35
+ return abs;
36
+ }
37
+ let dir = process.cwd();
38
+ while (true) {
39
+ if (hasConfig(dir))
40
+ return dir;
41
+ const parent = path.dirname(dir);
42
+ if (parent === dir) {
43
+ throw new CliError('PROJECT_NOT_FOUND', 'no claude4spec project found in current directory or any parent', 'run `npx claude4spec` first or pass `--project <path>`');
44
+ }
45
+ dir = parent;
46
+ }
47
+ }
23
48
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/bin/c4s/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,6BAA6B,GAAG,EAAE,EAClC,qDAAqD,CACtD,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,iEAAiE,EACjE,wDAAwD,CACzD,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/bin/c4s/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,6BAA6B,GAAG,EAAE,EAClC,qDAAqD,CACtD,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QAC3E,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,iEAAiE,EACjE,wDAAwD,CACzD,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAiB;IACtD,MAAM,SAAS,GAAG,CAAC,GAAW,EAAE,EAAE,CAChC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;IAC/D,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,6BAA6B,GAAG,EAAE,EAClC,qDAAqD,CACtD,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IACxB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,SAAS,CAAC,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,IAAI,QAAQ,CAChB,mBAAmB,EACnB,iEAAiE,EACjE,wDAAwD,CACzD,CAAC;QACJ,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
package/dist/bin/c4s.js CHANGED
@@ -15,6 +15,7 @@ import { runCatalog } from './c4s/commands/catalog.js';
15
15
  import { runListTags } from './c4s/commands/list-tags.js';
16
16
  import { runListSlugs } from './c4s/commands/list-slugs.js';
17
17
  import { runResolve } from './c4s/commands/resolve.js';
18
+ import { runAsk } from './c4s/commands/ask.js';
18
19
  const HELP = `Usage: c4s <command> [options]
19
20
 
20
21
  Tag commands (1:1 with XML tag names):
@@ -30,6 +31,12 @@ Detail view (no XML counterpart):
30
31
  Utility:
31
32
  resolve <file.md> [--format inline|json]
32
33
 
34
+ Agent Q&A (requires a running \`npx claude4spec\` server):
35
+ ask "<msg>" --ct chat
36
+ ask "<msg>" --ct brief --brief <path>
37
+ ask "<msg>" --thread <id>
38
+ --server <url> override server discovery (remote / one-off --port)
39
+
33
40
  Discovery:
34
41
  catalog
35
42
  list-tags
@@ -43,7 +50,7 @@ Global flags:
43
50
  --version print c4s version
44
51
  --help show this help
45
52
  `;
46
- function main() {
53
+ async function main() {
47
54
  const argv = process.argv.slice(2);
48
55
  if (argv.length === 0 || argv[0] === '--help' || argv[0] === '-h') {
49
56
  process.stdout.write(HELP);
@@ -78,6 +85,8 @@ function main() {
78
85
  return runListTags(args);
79
86
  case 'list-slugs':
80
87
  return runListSlugs(args);
88
+ case 'ask':
89
+ return runAsk(args);
81
90
  default:
82
91
  throw new CliError('UNKNOWN_COMMAND', `unknown command '${args.command}'`, 'run `c4s --help`');
83
92
  }
@@ -102,10 +111,7 @@ function readPackageVersion() {
102
111
  }
103
112
  return 'unknown';
104
113
  }
105
- try {
106
- main();
107
- }
108
- catch (err) {
114
+ main().catch((err) => {
109
115
  if (err instanceof CliError) {
110
116
  writeError(err);
111
117
  process.exit(codeToExit(err.code));
@@ -113,7 +119,7 @@ catch (err) {
113
119
  const message = err instanceof Error ? err.message : String(err);
114
120
  writeError(new CliError('UNKNOWN_COMMAND', message));
115
121
  process.exit(1);
116
- }
122
+ });
117
123
  function codeToExit(code) {
118
124
  switch (code) {
119
125
  case 'PROJECT_NOT_FOUND':
@@ -1 +1 @@
1
- {"version":3,"file":"c4s.js","sourceRoot":"","sources":["../../src/bin/c4s.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"c4s.js","sourceRoot":"","sources":["../../src/bin/c4s.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./mermaid.core-GdPXct3q.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./mermaid.core-Dwygsmt4.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};