document360-engine 0.1.1 → 0.2.1

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/LICENSE +10 -16
  2. package/README.md +1 -1
  3. package/dist/config.d.ts +21 -0
  4. package/dist/d360/apiLog.d.ts +22 -0
  5. package/dist/d360/client.d.ts +16 -0
  6. package/dist/d360/environments.d.ts +2 -0
  7. package/dist/d360/tools.d.ts +15 -0
  8. package/dist/d360/wire.d.ts +32 -0
  9. package/dist/index.d.ts +4 -0
  10. package/dist/index.js +28 -16
  11. package/dist/lib/suggestGen.d.ts +7 -0
  12. package/dist/lib/writerMode.d.ts +18 -0
  13. package/dist/scope/inventory.d.ts +19 -0
  14. package/dist/session.d.ts +18 -0
  15. package/dist/sync/categoryMap.d.ts +39 -0
  16. package/dist/sync/docsRoot.d.ts +8 -0
  17. package/dist/sync/frontmatter.d.ts +10 -0
  18. package/dist/sync/hash.d.ts +7 -0
  19. package/dist/sync/index.d.ts +8 -0
  20. package/dist/sync/pull.d.ts +41 -0
  21. package/dist/sync/remote.d.ts +37 -0
  22. package/dist/sync/status.d.ts +27 -0
  23. package/dist/sync/types.d.ts +22 -0
  24. package/package.json +3 -3
  25. package/skills/CLAUDE.md +38 -2
  26. package/skills/analyze-codebase/SKILL.md +35 -17
  27. package/skills/d360-markdown/SKILL.md +99 -0
  28. package/skills/gap-analysis/SKILL.md +75 -0
  29. package/skills/publish-to-d360/SKILL.md +3 -2
  30. package/skills/write-article/SKILL.md +7 -0
  31. package/dist/config.js +0 -62
  32. package/dist/config.js.map +0 -1
  33. package/dist/d360/client.js +0 -136
  34. package/dist/d360/client.js.map +0 -1
  35. package/dist/d360/environments.js +0 -54
  36. package/dist/d360/environments.js.map +0 -1
  37. package/dist/d360/oauth.js +0 -162
  38. package/dist/d360/oauth.js.map +0 -1
  39. package/dist/d360/profile.js +0 -31
  40. package/dist/d360/profile.js.map +0 -1
  41. package/dist/d360/tokenStore.js +0 -50
  42. package/dist/d360/tokenStore.js.map +0 -1
  43. package/dist/d360/tools.js +0 -335
  44. package/dist/d360/tools.js.map +0 -1
  45. package/dist/index.js.map +0 -1
  46. package/dist/lib/auth.js +0 -25
  47. package/dist/lib/auth.js.map +0 -1
  48. package/dist/lib/messageQueue.js +0 -40
  49. package/dist/lib/messageQueue.js.map +0 -1
  50. package/dist/lib/paths.js +0 -35
  51. package/dist/lib/paths.js.map +0 -1
  52. package/dist/lib/sessionStore.js +0 -100
  53. package/dist/lib/sessionStore.js.map +0 -1
  54. package/dist/lib/titleGen.js +0 -64
  55. package/dist/lib/titleGen.js.map +0 -1
  56. package/dist/session.js +0 -190
  57. package/dist/session.js.map +0 -1
  58. package/skills/audit-docs/SKILL.md +0 -48
@@ -1 +0,0 @@
1
- {"version":3,"file":"titleGen.js","sourceRoot":"","sources":["../../src/lib/titleGen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAEvD,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB,EAAE,GAAW;IAClE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtE,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,WAAmB,EAAE,GAAW;IACjD,MAAM,CAAC,GAAG,KAAK,CAAC;QACd,MAAM,EAAE;YACN,oGAAoG;YACpG,EAAE;YACF,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YACzB,EAAE;YACF,yFAAyF;SAC1F,CAAC,IAAI,CAAC,IAAI,CAAC;QACZ,OAAO,EAAE;YACP,GAAG;YACH,KAAK,EAAE,OAAO;YACd,QAAQ,EAAE,CAAC;YACX,cAAc,EAAE,EAAE;YAClB,YAAY,EAAE,oFAAoF;YAClG,YAAY,EAAE,EAAE;SACjB;KACF,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,GAA2D,CAAC;QACtE,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC5D,OAAO,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,OAAO;IACd,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,KAAK,GAAG,GAAG;SACd,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;SAC5B,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,KAAK,CAAC,GAAG,CAAC;SACV,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,IAAI,CAAC,GAAG,CAAC;SACT,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC"}
package/dist/session.js DELETED
@@ -1,190 +0,0 @@
1
- import { readdirSync, readFileSync, existsSync, statSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import { query } from '@anthropic-ai/claude-agent-sdk';
4
- import { packageSkillsDir, projectSkillsDir } from './lib/paths.js';
5
- import { readMcpConfig, readProjectConfig } from './config.js';
6
- import { UserMessageQueue } from './lib/messageQueue.js';
7
- import { buildD360ToolServer } from './d360/tools.js';
8
- import { resolveActiveProfile } from './d360/profile.js';
9
- const MASTER_PROMPT_FILE = 'CLAUDE.md';
10
- function readSkillFiles(dir) {
11
- if (!existsSync(dir))
12
- return [];
13
- const out = [];
14
- for (const entry of readdirSync(dir)) {
15
- const sub = join(dir, entry);
16
- if (entry === MASTER_PROMPT_FILE)
17
- continue;
18
- if (!statSync(sub).isDirectory())
19
- continue;
20
- const skillFile = join(sub, 'SKILL.md');
21
- if (!existsSync(skillFile))
22
- continue;
23
- out.push({ name: entry, body: readFileSync(skillFile, 'utf8') });
24
- }
25
- return out;
26
- }
27
- function readMasterPrompt(dir) {
28
- const path = join(dir, MASTER_PROMPT_FILE);
29
- return existsSync(path) ? readFileSync(path, 'utf8') : null;
30
- }
31
- function buildSystemPrompt(cwd, cfg) {
32
- const packageDir = packageSkillsDir();
33
- const projectDir = projectSkillsDir(cwd);
34
- const masterPackage = readMasterPrompt(packageDir);
35
- const masterProject = readMasterPrompt(projectDir);
36
- const packageSkills = readSkillFiles(packageDir);
37
- const projectSkills = readSkillFiles(projectDir);
38
- const projectSkillNames = new Set(projectSkills.map(s => s.name));
39
- const merged = [...packageSkills.filter(s => !projectSkillNames.has(s.name)), ...projectSkills];
40
- const parts = [];
41
- if (masterPackage)
42
- parts.push(masterPackage);
43
- if (masterProject)
44
- parts.push(`# Project addendum\n\n${masterProject}`);
45
- if (cfg) {
46
- parts.push('# Project configuration');
47
- parts.push('```json');
48
- parts.push(JSON.stringify(cfg, null, 2));
49
- parts.push('```');
50
- }
51
- if (merged.length > 0) {
52
- parts.push('# Capabilities');
53
- parts.push('You have the following specialized documentation skills. Activate the one whose preconditions match the user request. If multiple match, run them in order.');
54
- for (const s of merged) {
55
- parts.push(`## Skill: ${s.name}`);
56
- parts.push(s.body);
57
- }
58
- }
59
- return parts.join('\n\n');
60
- }
61
- function toSdkMcpServers() {
62
- const mcp = readMcpConfig();
63
- const out = {};
64
- for (const [name, entry] of Object.entries(mcp.servers)) {
65
- if (entry.type === 'stdio') {
66
- out[name] = { type: 'stdio', command: entry.command, args: entry.args, env: entry.env };
67
- }
68
- else if (entry.type === 'http') {
69
- out[name] = { type: 'http', url: entry.url, headers: entry.headers };
70
- }
71
- else if (entry.type === 'sse') {
72
- out[name] = { type: 'sse', url: entry.url, headers: entry.headers };
73
- }
74
- }
75
- return out;
76
- }
77
- const AUTH_ERROR_PATTERN = /auth|api key|login|credential|401|forbidden/i;
78
- /**
79
- * A persistent conversation with the documentation agent. `send()` streams typed
80
- * EngineEvents for one user turn; the session stays open for further turns until close().
81
- */
82
- export class EngineSession {
83
- queue;
84
- iterator;
85
- /** The engine's own session UUID, once revealed (for resume/persistence). */
86
- sessionId = null;
87
- constructor(opts = {}) {
88
- const cwd = opts.cwd ?? process.cwd();
89
- const cfg = readProjectConfig(cwd);
90
- const systemPrompt = buildSystemPrompt(cwd, cfg);
91
- const mcpServers = toSdkMcpServers();
92
- // First-party Document360 tools, hosted in-process for the active profile. Tools
93
- // surface "run login" if the token is missing/expired. Skipped only when the config
94
- // is old-shape/invalid (resolveActiveProfile throws). Write tools are gated on
95
- // production profiles until authorized (allowProdWrites).
96
- try {
97
- const active = resolveActiveProfile(cwd, opts.profileName);
98
- const writesAllowed = !active.production || opts.allowProdWrites === true;
99
- mcpServers.document360 = buildD360ToolServer(active, { writesAllowed });
100
- }
101
- catch {
102
- /* no/invalid profile config — D360 tools unavailable until init/login */
103
- }
104
- this.queue = new UserMessageQueue();
105
- const options = {
106
- cwd,
107
- systemPrompt,
108
- mcpServers,
109
- permissionMode: 'bypassPermissions',
110
- allowDangerouslySkipPermissions: true,
111
- includePartialMessages: true,
112
- settingSources: [],
113
- model: cfg?.defaultModel,
114
- resume: opts.resume,
115
- };
116
- const q = query({ prompt: this.queue, options });
117
- this.iterator = q[Symbol.asyncIterator]();
118
- }
119
- /** Send one user turn; yields EngineEvents until the agent produces its result. */
120
- async *send(text) {
121
- this.queue.push(text);
122
- while (true) {
123
- let next;
124
- try {
125
- next = await this.iterator.next();
126
- }
127
- catch (err) {
128
- const message = err.message;
129
- yield { type: 'error', kind: AUTH_ERROR_PATTERN.test(message) ? 'auth' : 'agent', message };
130
- return;
131
- }
132
- if (next.done)
133
- return;
134
- const sessionId = next.value?.session_id;
135
- if (sessionId && !this.sessionId) {
136
- this.sessionId = sessionId;
137
- yield { type: 'session', sessionId };
138
- }
139
- const ev = translate(next.value);
140
- if (ev) {
141
- for (const e of ev)
142
- yield e;
143
- if (ev.some(e => e.type === 'result'))
144
- return;
145
- }
146
- }
147
- }
148
- close() {
149
- this.queue.close();
150
- }
151
- }
152
- export function createSession(opts = {}) {
153
- return new EngineSession(opts);
154
- }
155
- /** Translate one raw Agent-SDK message into zero or more EngineEvents. */
156
- function translate(raw) {
157
- if (!raw || typeof raw !== 'object')
158
- return null;
159
- const msg = raw;
160
- if (msg.type === 'stream_event') {
161
- const event = msg.event;
162
- if (event?.delta && typeof event.delta.text === 'string') {
163
- return [{ type: 'text', delta: event.delta.text }];
164
- }
165
- return null;
166
- }
167
- if (msg.type === 'assistant') {
168
- const message = msg.message;
169
- const out = [];
170
- for (const block of message?.content ?? []) {
171
- const b = block;
172
- if (b.type === 'tool_use')
173
- out.push({ type: 'tool', name: b.name ?? 'tool' });
174
- }
175
- return out.length > 0 ? out : null;
176
- }
177
- if (msg.type === 'result') {
178
- const r = msg;
179
- return [
180
- {
181
- type: 'result',
182
- inputTokens: r.usage?.input_tokens ?? 0,
183
- outputTokens: r.usage?.output_tokens ?? 0,
184
- ok: r.subtype === 'success',
185
- },
186
- ];
187
- }
188
- return null;
189
- }
190
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- # Skill: audit-docs
2
-
3
- **Activate when** the user runs `/audit` or asks "what's stale", "what's missing", "where are the gaps".
4
-
5
- **Goal:** produce a table of articles that need attention, with a concrete reason per row.
6
-
7
- ## What to do
8
-
9
- 1. Read `.d360-writer.json` for the `captureDir`, `outputDir`, and `authoritativeSourceFiles` list.
10
- 2. Read every existing article under the docs root (typically `user-docs/`).
11
- 3. Read recent git history: `git log --since="30 days ago" --name-only --pretty=format:"%h %s"`. If `d360-category-map.json` exists, prefer commits since its mtime.
12
- 4. For each commit, identify which articles describe the affected code paths. Cross-reference using the authoritative source files list and the article-to-code links you can infer.
13
- 5. For each existing article, check whether its claims still match the source code. Look for: renamed components, changed UI strings, removed features, added features.
14
-
15
- ## Output format
16
-
17
- A single markdown table. Nothing else.
18
-
19
- | Article path | Action | Reason | Scope |
20
- |---|---|---|---|
21
- | `03-foo/02-bar.md` | update | commit `abc123` renamed the "Bar" dialog to "Settings" | small |
22
- | `04-baz/06-new-feature.md` | create | commit `def456` shipped a feature with no doc | full article |
23
- | `02-spec/04-old-thing.md` | delete | commit `ghi789` removed the feature; no replacement | full deletion |
24
-
25
- ## Action values
26
-
27
- - `create` — article doesn't exist, but the feature it would describe is real and shipped.
28
- - `update` — article exists but disagrees with current code.
29
- - `delete` — article describes a removed feature.
30
- - `keep` — explicitly noted as up-to-date and intentional. Don't include `keep` rows unless the user asked for them.
31
-
32
- ## Scope values
33
-
34
- - `small` — a UI string, a step renumbering, a one-line clarification.
35
- - `medium` — a section rewrite or a new screenshot.
36
- - `full article` — net-new article or near-complete rewrite.
37
- - `full deletion` — remove from disk and from D360.
38
-
39
- ## Rules
40
-
41
- - Quote the commit hash for every claim. No vague "the code changed."
42
- - Do not start fixing anything. The audit is the deliverable.
43
- - If the codebase has zero existing articles, redirect the user to `propose-structure` instead and emit nothing.
44
- - If the audit has zero rows, say so plainly: "All articles are in sync with the codebase as of `<HEAD-sha>`."
45
-
46
- End your output with:
47
-
48
- > Want me to start working through these? Reply with `yes` or strike rows you want to defer.