pi-evalset-lab 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +59 -1
- package/examples/evalset-compare-sample-embedded.html +142 -0
- package/examples/evalset-compare-sample.png +0 -0
- package/package.json +38 -6
- package/scripts/export-evalset-report-html.mjs +356 -0
- package/.copier-answers.yml +0 -5
- package/.githooks/pre-commit +0 -12
- package/.github/CODEOWNERS +0 -12
- package/.github/ISSUE_TEMPLATE/bug-report.yml +0 -63
- package/.github/ISSUE_TEMPLATE/config.yml +0 -5
- package/.github/ISSUE_TEMPLATE/docs.yml +0 -39
- package/.github/ISSUE_TEMPLATE/feature-request.yml +0 -41
- package/.github/VOUCHED.td +0 -8
- package/.github/dependabot.yml +0 -13
- package/.github/pull_request_template.md +0 -34
- package/.github/workflows/ci.yml +0 -37
- package/.github/workflows/publish.yml +0 -60
- package/.github/workflows/release-please.yml +0 -25
- package/.github/workflows/vouch-check-pr.yml +0 -29
- package/.github/workflows/vouch-manage.yml +0 -34
- package/.pi/extensions/startup-intake-router.ts +0 -151
- package/.pi/prompts/init-project-docs.md +0 -32
- package/.release-please-config.json +0 -11
- package/.release-please-manifest.json +0 -3
- package/AGENTS.md +0 -39
- package/CODE_OF_CONDUCT.md +0 -50
- package/CONTRIBUTING.md +0 -28
- package/NEXT_SESSION_PROMPT.md +0 -14
- package/SECURITY.md +0 -34
- package/SUPPORT.md +0 -37
- package/docs/dev/CONTRIBUTING.md +0 -37
- package/docs/dev/EXTENSION_SOP.md +0 -43
- package/docs/dev/next_steps.md +0 -17
- package/docs/dev/plans/001-initial-plan.md +0 -24
- package/docs/dev/status.md +0 -21
- package/docs/org/operating_model.md +0 -39
- package/docs/org/project-docs-intake.questions.json +0 -60
- package/docs/project/foundation.md +0 -28
- package/docs/project/incentives.md +0 -17
- package/docs/project/resources.md +0 -26
- package/docs/project/skills.md +0 -17
- package/docs/project/strategic_goals.md +0 -18
- package/docs/project/tactical_goals.md +0 -39
- package/docs/project/vision.md +0 -21
- package/external/.gitkeep +0 -0
- package/ontology/.gitkeep +0 -0
- package/policy/security-policy.json +0 -10
- package/prek.toml +0 -15
- package/scripts/docs-list.sh +0 -50
- package/scripts/init-project-docs.sh +0 -56
- package/scripts/install-hooks.sh +0 -13
- package/scripts/sync-to-live.sh +0 -91
- package/scripts/validate-structure.sh +0 -325
- package/src/.gitkeep +0 -0
- package/tests/.gitkeep +0 -0
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
name: publish
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
release:
|
|
5
|
-
types:
|
|
6
|
-
- published
|
|
7
|
-
|
|
8
|
-
permissions:
|
|
9
|
-
contents: read
|
|
10
|
-
|
|
11
|
-
jobs:
|
|
12
|
-
publish-npm:
|
|
13
|
-
if: startsWith(github.event.release.tag_name, 'v')
|
|
14
|
-
runs-on: ubuntu-latest
|
|
15
|
-
environment: npm-publish
|
|
16
|
-
permissions:
|
|
17
|
-
contents: read
|
|
18
|
-
id-token: write
|
|
19
|
-
steps:
|
|
20
|
-
- name: Checkout
|
|
21
|
-
uses: actions/checkout@v6
|
|
22
|
-
|
|
23
|
-
- name: Setup Node.js
|
|
24
|
-
uses: actions/setup-node@v6
|
|
25
|
-
with:
|
|
26
|
-
node-version: "22"
|
|
27
|
-
registry-url: https://registry.npmjs.org
|
|
28
|
-
|
|
29
|
-
- name: Upgrade npm for trusted publishing
|
|
30
|
-
run: npm install --global npm@^11.5.1
|
|
31
|
-
|
|
32
|
-
- name: Validate release tag + package version
|
|
33
|
-
env:
|
|
34
|
-
TAG_NAME: ${{ github.event.release.tag_name }}
|
|
35
|
-
run: |
|
|
36
|
-
if [[ ! "$TAG_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+([-.][0-9A-Za-z.]+)?$ ]]; then
|
|
37
|
-
echo "Release tag must match vX.Y.Z (optional prerelease/build suffix)." >&2
|
|
38
|
-
exit 1
|
|
39
|
-
fi
|
|
40
|
-
|
|
41
|
-
PKG_VERSION="$(node -p "JSON.parse(require('node:fs').readFileSync('package.json', 'utf8')).version")"
|
|
42
|
-
if [[ "v${PKG_VERSION}" != "$TAG_NAME" ]]; then
|
|
43
|
-
echo "package.json version (${PKG_VERSION}) does not match release tag (${TAG_NAME})." >&2
|
|
44
|
-
exit 1
|
|
45
|
-
fi
|
|
46
|
-
|
|
47
|
-
- name: Install dependencies
|
|
48
|
-
run: |
|
|
49
|
-
if [[ -f package-lock.json ]]; then
|
|
50
|
-
npm ci
|
|
51
|
-
else
|
|
52
|
-
npm install --package-lock-only --ignore-scripts
|
|
53
|
-
npm ci
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
- name: Validate structure
|
|
57
|
-
run: npm run check
|
|
58
|
-
|
|
59
|
-
- name: Publish to npm (OIDC + provenance)
|
|
60
|
-
run: npm publish --provenance --access public
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
name: release-please
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- main
|
|
7
|
-
workflow_dispatch:
|
|
8
|
-
|
|
9
|
-
permissions:
|
|
10
|
-
contents: read
|
|
11
|
-
pull-requests: read
|
|
12
|
-
|
|
13
|
-
jobs:
|
|
14
|
-
release-please:
|
|
15
|
-
runs-on: ubuntu-latest
|
|
16
|
-
permissions:
|
|
17
|
-
contents: write
|
|
18
|
-
pull-requests: write
|
|
19
|
-
issues: write
|
|
20
|
-
steps:
|
|
21
|
-
- name: Run release-please
|
|
22
|
-
uses: googleapis/release-please-action@16a9c90856f42705d54a6fda1823352bdc62cf38 # v4.4.0
|
|
23
|
-
with:
|
|
24
|
-
config-file: .release-please-config.json
|
|
25
|
-
manifest-file: .release-please-manifest.json
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
name: vouch-check-pr
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request_target:
|
|
5
|
-
types:
|
|
6
|
-
- opened
|
|
7
|
-
- reopened
|
|
8
|
-
|
|
9
|
-
permissions:
|
|
10
|
-
contents: read
|
|
11
|
-
|
|
12
|
-
jobs:
|
|
13
|
-
check:
|
|
14
|
-
runs-on: ubuntu-latest
|
|
15
|
-
permissions:
|
|
16
|
-
contents: read
|
|
17
|
-
pull-requests: write
|
|
18
|
-
steps:
|
|
19
|
-
- name: Enforce vouch trust gate on PR author
|
|
20
|
-
# require-vouch=true: unvouched users are treated as blocked.
|
|
21
|
-
# auto-close=true: blocked PRs are automatically closed.
|
|
22
|
-
uses: mitchellh/vouch/action/check-pr@0e11a71bba23218a284d3ecca162e75a110fd7e3
|
|
23
|
-
with:
|
|
24
|
-
pr-number: ${{ github.event.pull_request.number }}
|
|
25
|
-
vouched-file: .github/VOUCHED.td
|
|
26
|
-
require-vouch: "true"
|
|
27
|
-
auto-close: "true"
|
|
28
|
-
env:
|
|
29
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
name: vouch-manage
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
issue_comment:
|
|
5
|
-
types:
|
|
6
|
-
- created
|
|
7
|
-
|
|
8
|
-
concurrency:
|
|
9
|
-
group: vouch-manage-${{ github.repository }}
|
|
10
|
-
cancel-in-progress: false
|
|
11
|
-
|
|
12
|
-
permissions:
|
|
13
|
-
contents: read
|
|
14
|
-
|
|
15
|
-
jobs:
|
|
16
|
-
manage:
|
|
17
|
-
runs-on: ubuntu-latest
|
|
18
|
-
permissions:
|
|
19
|
-
contents: write
|
|
20
|
-
issues: write
|
|
21
|
-
pull-requests: read
|
|
22
|
-
steps:
|
|
23
|
-
- name: Checkout repository
|
|
24
|
-
uses: actions/checkout@v6
|
|
25
|
-
|
|
26
|
-
- name: Apply vouch / denounce / unvouch from maintainer comments
|
|
27
|
-
uses: mitchellh/vouch/action/manage-by-issue@0e11a71bba23218a284d3ecca162e75a110fd7e3
|
|
28
|
-
with:
|
|
29
|
-
repo: ${{ github.repository }}
|
|
30
|
-
issue-id: ${{ github.event.issue.number }}
|
|
31
|
-
comment-id: ${{ github.event.comment.id }}
|
|
32
|
-
vouched-file: .github/VOUCHED.td
|
|
33
|
-
env:
|
|
34
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
2
|
-
|
|
3
|
-
const WORKFLOW_VERSION = "startup-intake-v1";
|
|
4
|
-
const STATE_ENTRY = "startup-intake-router-state";
|
|
5
|
-
|
|
6
|
-
type RouterPhase = "idle" | "intent_captured" | "command_proposed";
|
|
7
|
-
|
|
8
|
-
interface RouterState {
|
|
9
|
-
workflowVersion: string;
|
|
10
|
-
phase: RouterPhase;
|
|
11
|
-
firstMessageProcessed: boolean;
|
|
12
|
-
intent?: string;
|
|
13
|
-
command?: string;
|
|
14
|
-
updatedAt: number;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function newState(overrides: Partial<RouterState> = {}): RouterState {
|
|
18
|
-
return {
|
|
19
|
-
workflowVersion: WORKFLOW_VERSION,
|
|
20
|
-
phase: "idle",
|
|
21
|
-
firstMessageProcessed: false,
|
|
22
|
-
updatedAt: Date.now(),
|
|
23
|
-
...overrides,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function normalizeInline(value: string, maxLen = 1200): string {
|
|
28
|
-
const compact = value.replace(/\s+/g, " ").trim();
|
|
29
|
-
if (compact.length <= maxLen) return compact;
|
|
30
|
-
return compact.slice(0, maxLen - 1) + "…";
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
function quoteArg(value: string): string {
|
|
34
|
-
return JSON.stringify(value);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
function formatCommand(name: string, args: string[]): string {
|
|
38
|
-
return `/${name} ${args.map((arg) => quoteArg(arg)).join(" ")}`;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export default function startupIntakeRouter(pi: ExtensionAPI) {
|
|
42
|
-
let state = newState();
|
|
43
|
-
|
|
44
|
-
const persist = () => {
|
|
45
|
-
state.updatedAt = Date.now();
|
|
46
|
-
pi.appendEntry(STATE_ENTRY, state);
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
const setState = (patch: Partial<RouterState>, save = true) => {
|
|
50
|
-
state = { ...state, ...patch, workflowVersion: WORKFLOW_VERSION };
|
|
51
|
-
if (save) persist();
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
const restore = (ctx: any) => {
|
|
55
|
-
const branch = ctx.sessionManager.getBranch();
|
|
56
|
-
let restored: RouterState | undefined;
|
|
57
|
-
|
|
58
|
-
for (const entry of branch) {
|
|
59
|
-
if (entry.type === "custom" && entry.customType === STATE_ENTRY && entry.data && typeof entry.data === "object") {
|
|
60
|
-
restored = entry.data as RouterState;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
state = restored ? { ...newState(), ...restored, workflowVersion: WORKFLOW_VERSION } : newState();
|
|
65
|
-
setState({
|
|
66
|
-
firstMessageProcessed: false,
|
|
67
|
-
phase: "idle",
|
|
68
|
-
intent: undefined,
|
|
69
|
-
command: undefined,
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
const prefill = (ctx: any, command: string, notice: string) => {
|
|
74
|
-
if (!ctx.hasUI) return;
|
|
75
|
-
ctx.ui.setEditorText(command);
|
|
76
|
-
ctx.ui.notify(notice, "info");
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
pi.on("session_start", async (_event, ctx) => {
|
|
80
|
-
restore(ctx);
|
|
81
|
-
if (ctx.hasUI) {
|
|
82
|
-
ctx.ui.setStatus("startup-intake", "ready (first-message intake)");
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
pi.on("session_switch", async (_event, ctx) => {
|
|
87
|
-
restore(ctx);
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
pi.on("input", async (event, ctx) => {
|
|
91
|
-
if (event.source === "extension") return { action: "continue" as const };
|
|
92
|
-
if (!ctx.hasUI) return { action: "continue" as const };
|
|
93
|
-
if (state.firstMessageProcessed) return { action: "continue" as const };
|
|
94
|
-
|
|
95
|
-
const text = event.text.trim();
|
|
96
|
-
if (!text) return { action: "continue" as const };
|
|
97
|
-
|
|
98
|
-
if (text.startsWith("/")) {
|
|
99
|
-
// Utility commands should not consume first-message intake.
|
|
100
|
-
return { action: "continue" as const };
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
setState({ firstMessageProcessed: true, phase: "intent_captured" });
|
|
104
|
-
|
|
105
|
-
const intent = normalizeInline(text, 1200);
|
|
106
|
-
const command = formatCommand("init-project-docs", [intent]);
|
|
107
|
-
|
|
108
|
-
setState({
|
|
109
|
-
intent,
|
|
110
|
-
command,
|
|
111
|
-
phase: "command_proposed",
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
prefill(
|
|
115
|
-
ctx,
|
|
116
|
-
command,
|
|
117
|
-
"Startup intent captured. Review/edit and run the command to launch interview-first project doc setup.",
|
|
118
|
-
);
|
|
119
|
-
ctx.ui.setStatus("startup-intake", "init-project-docs command ready");
|
|
120
|
-
|
|
121
|
-
return { action: "handled" as const };
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
pi.registerCommand("startup-intake-router-status", {
|
|
125
|
-
description: "Show startup intake router state",
|
|
126
|
-
handler: async (_args, ctx) => {
|
|
127
|
-
if (!ctx.hasUI) return;
|
|
128
|
-
|
|
129
|
-
const summary = [
|
|
130
|
-
`phase: ${state.phase}`,
|
|
131
|
-
`first_message_processed: ${state.firstMessageProcessed ? "yes" : "no"}`,
|
|
132
|
-
`intent: ${state.intent ?? "<none>"}`,
|
|
133
|
-
`command: ${state.command ?? "<none>"}`,
|
|
134
|
-
`updated_at: ${new Date(state.updatedAt).toISOString()}`,
|
|
135
|
-
];
|
|
136
|
-
ctx.ui.notify(summary.join(" | "), "info");
|
|
137
|
-
},
|
|
138
|
-
});
|
|
139
|
-
|
|
140
|
-
pi.registerCommand("startup-intake-router-reset", {
|
|
141
|
-
description: "Reset startup intake router state for this session",
|
|
142
|
-
handler: async (_args, ctx) => {
|
|
143
|
-
state = newState();
|
|
144
|
-
persist();
|
|
145
|
-
if (ctx.hasUI) {
|
|
146
|
-
ctx.ui.setStatus("startup-intake", "ready (reset)");
|
|
147
|
-
ctx.ui.notify("Startup intake router reset. Next non-command message will propose /init-project-docs.", "info");
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
});
|
|
151
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
description: Run interview-first initialization for organization and project docs
|
|
3
|
-
system4d:
|
|
4
|
-
container: "Project-local prompt template for startup interview flow."
|
|
5
|
-
compass: "Route startup intent into interview-driven document setup."
|
|
6
|
-
engine: "Intent -> interview -> synthesize -> update docs -> verify."
|
|
7
|
-
fog: "If interview data is incomplete, docs may remain ambiguous."
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
Initialize organization and project docs from interactive intake.
|
|
11
|
-
|
|
12
|
-
Startup intent (if provided): $@
|
|
13
|
-
|
|
14
|
-
Steps:
|
|
15
|
-
1. Read `docs/org/project-docs-intake.questions.json`.
|
|
16
|
-
2. If startup intent is non-empty, create `docs/org/project-docs-intake.runtime.questions.json` with one prepended question:
|
|
17
|
-
- `id`: `startup_intent_confirmation`
|
|
18
|
-
- `type`: `text`
|
|
19
|
-
- `question`: `Startup intent captured: <startup intent>. Confirm or refine this intent before continuing.`
|
|
20
|
-
3. Run the `interview` tool:
|
|
21
|
-
- `questions`: runtime file from step 2 if created, otherwise `docs/org/project-docs-intake.questions.json`
|
|
22
|
-
- `timeout`: `900`
|
|
23
|
-
4. Use interview responses to update these files:
|
|
24
|
-
- `docs/org/operating_model.md`
|
|
25
|
-
- `docs/project/foundation.md`
|
|
26
|
-
- `docs/project/vision.md`
|
|
27
|
-
- `docs/project/strategic_goals.md`
|
|
28
|
-
- `docs/project/tactical_goals.md`
|
|
29
|
-
5. Keep wording fully in English.
|
|
30
|
-
6. Keep **organization purpose** separate from **project purpose**.
|
|
31
|
-
7. Keep output compact.
|
|
32
|
-
8. Run `bash ./scripts/validate-structure.sh`.
|
package/AGENTS.md
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Agent operating guardrails for this repository."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Before an agent edits code or docs in this repository."
|
|
5
|
-
system4d:
|
|
6
|
-
container: "Local repo rules for coding agents."
|
|
7
|
-
compass: "Small diffs, clear validation, no silent assumptions."
|
|
8
|
-
engine: "Read docs -> implement -> validate -> summarize."
|
|
9
|
-
fog: "Task ambiguity resolved by asking concise clarifying questions."
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# AGENTS.md
|
|
13
|
-
|
|
14
|
-
## Defaults
|
|
15
|
-
|
|
16
|
-
- Keep changes reviewable and scoped.
|
|
17
|
-
- Prefer `read` before edits.
|
|
18
|
-
- Prefer markdown links like `[text](path)`.
|
|
19
|
-
- Avoid destructive git/file ops unless explicitly requested.
|
|
20
|
-
|
|
21
|
-
## Docs workflow
|
|
22
|
-
|
|
23
|
-
- Run `npm run docs:list` at task start to surface docs and `read_when` hints.
|
|
24
|
-
- Use `npm run docs:list:workspace` for workspace/monorepo scans.
|
|
25
|
-
- If your docs-list script is not at `~/ai-society/core/agent-scripts/scripts/docs-list.mjs`, set `DOCS_LIST_SCRIPT`.
|
|
26
|
-
|
|
27
|
-
## Validation
|
|
28
|
-
|
|
29
|
-
- Run `npm run check` after structural/documentation changes.
|
|
30
|
-
|
|
31
|
-
## Copier policy
|
|
32
|
-
|
|
33
|
-
- Keep `.copier-answers.yml` tracked.
|
|
34
|
-
- Do not manually edit `.copier-answers.yml`.
|
|
35
|
-
- Run update/recopy from a clean destination repo (commit or stash pending changes first).
|
|
36
|
-
- Use `copier update --trust` when `.copier-answers.yml` includes `_commit` and update is supported.
|
|
37
|
-
- In non-interactive shells/CI, append `--defaults` to update/recopy.
|
|
38
|
-
- Use `copier recopy --trust` when update is unavailable (for example local non-VCS source) or cannot reconcile cleanly.
|
|
39
|
-
- After recopy, re-apply local deltas intentionally and run `npm run check`.
|
package/CODE_OF_CONDUCT.md
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Community behavior expectations and enforcement path."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Participating in issues, discussions, or pull requests."
|
|
5
|
-
- "Handling conduct incidents."
|
|
6
|
-
system4d:
|
|
7
|
-
container: "Shared standards for respectful collaboration."
|
|
8
|
-
compass: "Safety, respect, and clarity over conflict escalation."
|
|
9
|
-
engine: "Observe -> report -> review -> enforce -> document."
|
|
10
|
-
fog: "Context around incidents can be incomplete at first report."
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Code of Conduct
|
|
14
|
-
|
|
15
|
-
## Our commitment
|
|
16
|
-
|
|
17
|
-
We want this repository to be a respectful, harassment-free space for everyone,
|
|
18
|
-
regardless of background or identity.
|
|
19
|
-
|
|
20
|
-
## Expected behavior
|
|
21
|
-
|
|
22
|
-
- Be respectful and constructive.
|
|
23
|
-
- Assume good intent, ask clarifying questions, and stay technical.
|
|
24
|
-
- Accept feedback and correct mistakes quickly.
|
|
25
|
-
- Keep discussions focused on project outcomes.
|
|
26
|
-
|
|
27
|
-
## Unacceptable behavior
|
|
28
|
-
|
|
29
|
-
- Harassment, threats, hate speech, or intimidation.
|
|
30
|
-
- Personal attacks, repeated hostile behavior, or trolling.
|
|
31
|
-
- Sharing private information without consent.
|
|
32
|
-
- Sexualized language or unwanted attention.
|
|
33
|
-
|
|
34
|
-
## Reporting incidents
|
|
35
|
-
|
|
36
|
-
If you experience or witness unacceptable behavior:
|
|
37
|
-
|
|
38
|
-
1. Contact maintainers privately using the channels listed in [SUPPORT.md](SUPPORT.md).
|
|
39
|
-
2. Share relevant links/screenshots and timeline details.
|
|
40
|
-
3. Do not post sensitive personal data publicly.
|
|
41
|
-
|
|
42
|
-
## Enforcement
|
|
43
|
-
|
|
44
|
-
Maintainers may remove or edit comments, close threads, or block contributors for
|
|
45
|
-
behavior that violates this policy. Responses may include warning, temporary ban,
|
|
46
|
-
or permanent ban depending on severity and repetition.
|
|
47
|
-
|
|
48
|
-
## Attribution
|
|
49
|
-
|
|
50
|
-
Adapted from the [Contributor Covenant](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html).
|
package/CONTRIBUTING.md
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Top-level contribution entrypoint linking to the detailed contributor guide."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Preparing to submit code or docs changes."
|
|
5
|
-
- "Looking for contribution quality gates."
|
|
6
|
-
system4d:
|
|
7
|
-
container: "Contribution intake and quality policy."
|
|
8
|
-
compass: "Small, reviewable, verified changes."
|
|
9
|
-
engine: "Read guide -> implement -> validate -> open PR."
|
|
10
|
-
fog: "Project-specific constraints may evolve with release policy changes."
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Contributing
|
|
14
|
-
|
|
15
|
-
Primary contributor guide: [docs/dev/CONTRIBUTING.md](docs/dev/CONTRIBUTING.md)
|
|
16
|
-
|
|
17
|
-
## Minimum checklist
|
|
18
|
-
|
|
19
|
-
1. Read applicable docs (`npm run docs:list`).
|
|
20
|
-
2. Keep changes scoped.
|
|
21
|
-
3. Run `npm run check`.
|
|
22
|
-
4. Update docs/changelog when behavior changes.
|
|
23
|
-
5. Open a PR with validation output.
|
|
24
|
-
|
|
25
|
-
## Conduct + support
|
|
26
|
-
|
|
27
|
-
- [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
|
|
28
|
-
- [SUPPORT.md](SUPPORT.md)
|
package/NEXT_SESSION_PROMPT.md
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Session handoff prompt for pi-evalset-lab."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Starting the next focused development session."
|
|
5
|
-
system4d:
|
|
6
|
-
container: "Session handoff artifact."
|
|
7
|
-
compass: "Resume work quickly with explicit priorities."
|
|
8
|
-
engine: "Capture context, constraints, and next actions."
|
|
9
|
-
fog: "Staleness risk if not updated after major changes."
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Next session prompt for pi-evalset-lab
|
|
13
|
-
|
|
14
|
-
Use this file to capture exact follow-up tasks for the next coding session.
|
package/SECURITY.md
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Security reporting process and release hardening baseline."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Reporting a vulnerability."
|
|
5
|
-
- "Reviewing release and workflow security controls."
|
|
6
|
-
system4d:
|
|
7
|
-
container: "Security policy for maintainers and contributors."
|
|
8
|
-
compass: "Private reporting, least privilege, auditable releases."
|
|
9
|
-
engine: "Report privately -> triage -> patch -> verify -> disclose."
|
|
10
|
-
fog: "Dependency and ecosystem risk shifts over time."
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Security Policy
|
|
14
|
-
|
|
15
|
-
## Supported versions
|
|
16
|
-
|
|
17
|
-
Security fixes target the latest release and `main` branch.
|
|
18
|
-
|
|
19
|
-
## Reporting a vulnerability
|
|
20
|
-
|
|
21
|
-
Use **private reporting**.
|
|
22
|
-
|
|
23
|
-
1. Preferred: GitHub Security tab -> **Report a vulnerability**.
|
|
24
|
-
2. If private reporting is unavailable, open a minimal issue titled
|
|
25
|
-
`Security contact request` without exploit details and request a private channel.
|
|
26
|
-
3. Include impact, affected versions, and reproduction steps.
|
|
27
|
-
4. Avoid public disclosure until maintainers confirm a fix/release plan.
|
|
28
|
-
|
|
29
|
-
## Release and supply-chain baseline
|
|
30
|
-
|
|
31
|
-
- Release flow uses release-please PRs before tags/releases.
|
|
32
|
-
- Publish flow uses npm Trusted Publishing (OIDC) and `npm publish --provenance`.
|
|
33
|
-
- Workflow permissions default to read and elevate per job only.
|
|
34
|
-
- Third-party actions must stay explicit; high-risk paths should be SHA pinned.
|
package/SUPPORT.md
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "How users and contributors request help or report problems."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Needing help, troubleshooting, or reporting non-security issues."
|
|
5
|
-
- "Deciding where to file bug/feature/docs requests."
|
|
6
|
-
system4d:
|
|
7
|
-
container: "Support intake and routing guidance."
|
|
8
|
-
compass: "Route requests to the right channel with enough context."
|
|
9
|
-
engine: "Self-check -> search -> file focused issue -> iterate."
|
|
10
|
-
fog: "Reproduction context is often incomplete in first reports."
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Support
|
|
14
|
-
|
|
15
|
-
## Before opening an issue
|
|
16
|
-
|
|
17
|
-
1. Read [README.md](README.md) and relevant docs in `docs/`.
|
|
18
|
-
2. Search existing issues/PRs for duplicates.
|
|
19
|
-
3. Re-test on the latest release.
|
|
20
|
-
|
|
21
|
-
## Open the right issue type
|
|
22
|
-
|
|
23
|
-
Use the GitHub issue forms for:
|
|
24
|
-
|
|
25
|
-
- Bug reports
|
|
26
|
-
- Feature requests
|
|
27
|
-
- Documentation improvements
|
|
28
|
-
|
|
29
|
-
## Security reports
|
|
30
|
-
|
|
31
|
-
For vulnerabilities, follow [SECURITY.md](SECURITY.md) and use private reporting.
|
|
32
|
-
Do **not** post exploit details in public issues.
|
|
33
|
-
|
|
34
|
-
## Maintainer response expectations
|
|
35
|
-
|
|
36
|
-
This project may be maintained part-time. Triage and response times can vary,
|
|
37
|
-
but actionable reports with reproduction details are prioritized.
|
package/docs/dev/CONTRIBUTING.md
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Contribution workflow for this extension repository."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Before opening PRs or submitting local changes."
|
|
5
|
-
system4d:
|
|
6
|
-
container: "Contributor process and quality gates."
|
|
7
|
-
compass: "Small, validated, documented changes."
|
|
8
|
-
engine: "Branch -> implement -> check -> document -> review."
|
|
9
|
-
fog: "Process details may adjust with team scale."
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Contributing
|
|
13
|
-
|
|
14
|
-
## Workflow
|
|
15
|
-
|
|
16
|
-
1. Create a focused branch.
|
|
17
|
-
2. Run `npm run docs:list` and read matched docs before cross-cutting changes.
|
|
18
|
-
3. Implement one scoped change.
|
|
19
|
-
4. Run `npm run check`.
|
|
20
|
-
5. Update docs/changelog where relevant.
|
|
21
|
-
6. Open PR with concise rationale and validation output.
|
|
22
|
-
|
|
23
|
-
## Standards
|
|
24
|
-
|
|
25
|
-
- Keep diffs small and reviewable.
|
|
26
|
-
- Preserve markdown frontmatter in generated docs.
|
|
27
|
-
- Prefer explicit scripts over manual one-off commands.
|
|
28
|
-
|
|
29
|
-
## Copier policy
|
|
30
|
-
|
|
31
|
-
- Keep `.copier-answers.yml` in version control.
|
|
32
|
-
- Do not edit `.copier-answers.yml` manually.
|
|
33
|
-
- Run update/recopy from a clean destination repo (commit or stash pending changes first).
|
|
34
|
-
- Use `copier update --trust` when `.copier-answers.yml` includes `_commit` and update is supported.
|
|
35
|
-
- In non-interactive shells/CI, append `--defaults` to update/recopy.
|
|
36
|
-
- Use `copier recopy --trust` when update is unavailable (for example local non-VCS source) or cannot reconcile cleanly.
|
|
37
|
-
- After recopy, re-apply local deltas intentionally and run `npm run check`.
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Lifecycle SOP for extension delivery and maintenance."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Planning, implementing, verifying, releasing, or maintaining extension work."
|
|
5
|
-
system4d:
|
|
6
|
-
container: "End-to-end extension operating procedure."
|
|
7
|
-
compass: "Consistent quality from idea to maintenance."
|
|
8
|
-
engine: "plan -> implement -> verify -> release -> maintain."
|
|
9
|
-
fog: "Unknowns resolved through incremental validation loops."
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Extension SOP
|
|
13
|
-
|
|
14
|
-
## 1) Plan
|
|
15
|
-
|
|
16
|
-
- Define scope and acceptance criteria.
|
|
17
|
-
- Run `npm run docs:list` and read docs matching your task domain.
|
|
18
|
-
- Capture work in `docs/dev/plans/`.
|
|
19
|
-
- Confirm risks and dependencies.
|
|
20
|
-
|
|
21
|
-
## 2) Implement
|
|
22
|
-
|
|
23
|
-
- Build in small commits.
|
|
24
|
-
- Keep command/tool behavior explicit.
|
|
25
|
-
- Update docs as behavior changes.
|
|
26
|
-
|
|
27
|
-
## 3) Verify
|
|
28
|
-
|
|
29
|
-
- Run `npm run check`.
|
|
30
|
-
- Execute relevant extension tests.
|
|
31
|
-
- Validate prompt templates if changed.
|
|
32
|
-
|
|
33
|
-
## 4) Release
|
|
34
|
-
|
|
35
|
-
- Update `CHANGELOG.md`.
|
|
36
|
-
- Tag/version according to team policy.
|
|
37
|
-
- Sync extension to live pi when needed.
|
|
38
|
-
|
|
39
|
-
## 5) Maintain
|
|
40
|
-
|
|
41
|
-
- Monitor regressions and user feedback.
|
|
42
|
-
- Re-run validation after dependency/script changes.
|
|
43
|
-
- Keep `docs/dev/status.md` and `docs/dev/next_steps.md` current.
|
package/docs/dev/next_steps.md
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Prioritized next actions for active development."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Starting a coding session or grooming tasks."
|
|
5
|
-
system4d:
|
|
6
|
-
container: "Execution queue for maintainers."
|
|
7
|
-
compass: "Maintain momentum with clear, ordered tasks."
|
|
8
|
-
engine: "Do highest-leverage item first, then validate."
|
|
9
|
-
fog: "Task order may change after discovery."
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Next steps
|
|
13
|
-
|
|
14
|
-
1. Complete npm publish on npmjs (login, registry, publish, verify install).
|
|
15
|
-
2. Add at least one automated test for argument parsing and expectation scoring.
|
|
16
|
-
3. Add a small repeatable report-share helper (JSON -> static HTML export command/script).
|
|
17
|
-
4. Evaluate optional LLM-judge scoring mode (`expectJudgePrompt`) after parser/scoring tests exist.
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Initial implementation plan for first extension iteration."
|
|
3
|
-
read_when:
|
|
4
|
-
- "Executing the first feature slice from scaffold state."
|
|
5
|
-
system4d:
|
|
6
|
-
container: "Plan artifact for incremental delivery."
|
|
7
|
-
compass: "Move from scaffold to validated feature quickly."
|
|
8
|
-
engine: "Plan -> implement -> verify -> document."
|
|
9
|
-
fog: "Scope creep risk if tasks are not constrained."
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Plan 001: first feature slice
|
|
13
|
-
|
|
14
|
-
## Objective
|
|
15
|
-
|
|
16
|
-
Ship one useful command behavior end-to-end.
|
|
17
|
-
|
|
18
|
-
## Steps
|
|
19
|
-
|
|
20
|
-
1. Define expected command input/output.
|
|
21
|
-
2. Implement logic in `extensions/`.
|
|
22
|
-
3. Add tests in `tests/`.
|
|
23
|
-
4. Run `npm run check`.
|
|
24
|
-
5. Update `docs/dev/status.md` and `CHANGELOG.md`.
|